Subversion Repositories Scribus

Rev

Rev 4010 | Rev 4430 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4028 cbradney 1
/***************************************************************************
2
*   Copyright (C) 2005 by Craig Bradney                                   *
3
*   cbradney@zip.com.au                                                   *
4
*                                                                         *
5
*   This program is free software; you can redistribute it and/or modify  *
6
*   it under the terms of the GNU General Public License as published by  *
7
*   the Free Software Foundation; either version 2 of the License, or     *
8
*   (at your option) any later version.                                   *
9
*                                                                         *
10
*   This program is distributed in the hope that it will be useful,       *
11
*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13
*   GNU General Public License for more details.                          *
14
*                                                                         *
15
*   You should have received a copy of the GNU General Public License     *
16
*   along with this program; if not, write to the                         *
17
*   Free Software Foundation, Inc.,                                       *
18
*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19
***************************************************************************/
20
 
3760 cbradney 21
#include "docsections.h"
22
#include "docsections.moc"
23
 
24
// This class implements only the non-GUI parts of the
25
// Document Sections dialog. Please use Qt Designer on
26
// ui/docsectionsbase.ui if you need to modify the layout,
27
// widget properties, etc.
28
 
29
#include <qtable.h>
30
#include <qpushbutton.h>
3770 cbradney 31
#include <qtooltip.h>
3760 cbradney 32
 
33
#include "pagestructs.h"
34
 
35
DocSections::DocSections( QWidget* parent )
36
        : DocSectionsBase( parent, "DocSections" )
37
{
38
        languageChange();
39
        connect( sectionsTable, SIGNAL(valueChanged(int, int)), this, SLOT(tableItemChanged(int, int)));
40
        connect( addButton, SIGNAL(clicked()), this, SLOT(addEntry()));
41
        connect( deleteButton, SIGNAL(clicked()), this, SLOT(deleteEntry()));
42
}
43
 
44
DocSections::~DocSections()
45
{
46
}
47
 
48
void DocSections::languageChange()
49
{
3770 cbradney 50
        QToolTip::add(addButton, "<qt>"+ tr("Add a page numbering section to the document. The new section will be added after the currently selected section.") + "</qt>");
51
        QToolTip::add(deleteButton, "<qt>"+ tr("Delete the currently selected section.") + "</qt>");
4008 cbradney 52
        QToolTip::add(sectionsTable, "<qt>"+ tr("Name: Optional name for section eg. Index<br/>"
53
                                                                                        "Shown: Select to show the page numbers in this section if there is one or more text frames setup to do so.<br/>"
54
                                                                                        "From: The page index for this section to start at.<br/>"
55
                                                                                        "To: The page index for this section to stop at.<br/>"
56
                                                                                        "Style: Select the page number style to be used.<br/>"
4010 cbradney 57
                                                                                        "Start: The index within the Style's range to star at. Eg. If Start=2 and Style=a,b,c, ..., the numbers will begin at b.") +"</qt>");
3760 cbradney 58
}
59
 
3770 cbradney 60
void DocSections::setup(const DocumentSectionMap docSections, int maxPageIndex)
3760 cbradney 61
{
3770 cbradney 62
        localSections=docSections;
63
        m_maxpageindex=maxPageIndex;
3760 cbradney 64
 
65
        styles << tr("1, 2, 3, ...") << tr("i, ii, iii, ...") << tr("I, II, III, ...") << tr("a, b, c, ...") << tr("A, B, C, ...");
66
 
67
        updateTable();
68
}
69
 
70
void DocSections::updateTable()
71
{
72
        sectionsTable->setNumRows(localSections.count());
73
        int row=0;
74
        for(DocumentSectionMap::Iterator it = localSections.begin(); it!= localSections.end(); ++it)
75
        {
76
                uint i=0;
77
                //Name
78
                QTableItem *item1 = new QTableItem(sectionsTable, QTableItem::WhenCurrent, (*it).name);
79
                sectionsTable->setItem(row, i++, item1);
3762 cbradney 80
                //Active
81
                QCheckTableItem *item2 = new QCheckTableItem(sectionsTable,"");
82
                item2->setChecked((*it).active);
83
                sectionsTable->setItem(row, i++, item2);
3760 cbradney 84
                //FromIndex
3762 cbradney 85
                QTableItem *item3 = new QTableItem(sectionsTable, QTableItem::WhenCurrent, QString::number((*it).fromindex));
86
                sectionsTable->setItem(row, i++, item3);
3760 cbradney 87
                //ToIndex
3762 cbradney 88
                QTableItem *item4 = new QTableItem(sectionsTable, QTableItem::WhenCurrent, QString::number((*it).toindex));
89
                sectionsTable->setItem(row, i++, item4);
3760 cbradney 90
                //Style
3762 cbradney 91
                QComboTableItem *item5 = new QComboTableItem(sectionsTable, styles);
92
                sectionsTable->setItem(row, i++, item5);
93
                item5->setCurrentItem((*it).type);
3760 cbradney 94
                //Start Page Number
3762 cbradney 95
                QTableItem *item6 = new QTableItem(sectionsTable, QTableItem::WhenCurrent, QString::number((*it).sectionstartindex));
96
                sectionsTable->setItem(row, i++, item6);
3760 cbradney 97
                //End Page Number
4008 cbradney 98
                /*
3766 cbradney 99
                QTableItem *item7 = new QTableItem(sectionsTable, QTableItem::WhenCurrent, QString::number((*it).sectionstartindex + (*it).toindex - (*it).fromindex));
100
                item7->setEnabled(false);
3762 cbradney 101
                sectionsTable->setItem(row, i++, item7);
4008 cbradney 102
                */
3760 cbradney 103
                sectionsTable->verticalHeader()->setLabel(row, QString("%1").arg(row));
104
                row++;
105
        }
106
        deleteButton->setEnabled(localSections.count()>1);
107
}
108
 
109
void DocSections::tableItemChanged( int row, int col )
110
{
111
        switch (col)
112
        {
113
        case 0:
114
                localSections[row].name=sectionsTable->text(row, col);
115
                break;
116
        case 1:
3762 cbradney 117
                localSections[row].active=static_cast<QCheckTableItem*>(sectionsTable->item(row, col))->isChecked();
118
                break;
119
        case 2:
3760 cbradney 120
                localSections[row].fromindex=sectionsTable->text(row, col).toUInt();
121
                break;
3762 cbradney 122
        case 3:
3760 cbradney 123
                localSections[row].toindex=sectionsTable->text(row, col).toUInt();
124
                break;
3762 cbradney 125
        case 4:
3760 cbradney 126
                {
127
                        QComboTableItem* qcti=dynamic_cast<QComboTableItem*>(sectionsTable->item(row,col));
128
                        if (qcti!=NULL)
129
                        {
130
                                uint index=qcti->currentItem();
131
                                if (index<styles.count())
132
                                        localSections[row].type=(DocumentSectionType)index;
133
                        }
134
                }
135
                break;
3762 cbradney 136
        case 5:
3760 cbradney 137
                localSections[row].sectionstartindex=sectionsTable->text(row, col).toUInt();
138
                break;
139
        default:
140
                break;
141
        }
142
}
143
 
144
void DocSections::addEntry()
145
{
3768 cbradney 146
        int currRow=sectionsTable->currentRow();
147
        bool found=false;
148
        DocumentSectionMap::Iterator it = localSections.begin();
149
        int count=0;
150
        for(; it!= localSections.end(); ++it)
151
        {
152
                if(count==currRow)
153
                {
154
                        found=true;
155
                        break;
156
                }
157
                ++count;
158
        }
159
        if (!found) //End of map, just append
160
        {
161
                struct DocumentSection blank;
162
                uint count=localSections.count();
163
                blank.number=count;
164
                blank.name=QString::number(count);
3770 cbradney 165
                blank.fromindex=m_maxpageindex;
166
                blank.toindex=m_maxpageindex;
3768 cbradney 167
                blank.type=Type_1_2_3;
168
                blank.sectionstartindex=1;
169
                blank.reversed=false;
170
                blank.active=true;
171
                localSections.insert(count, blank);
172
        }
173
        else
174
        {
175
                //Now, copy to a temp map
176
                DocumentSectionMap tempSections(localSections);
177
                localSections.clear();
178
                //Copy the temp map entries over. When we find the number of the current row, also insert a new entry.
179
                uint i=0;
180
                for(DocumentSectionMap::Iterator it2 = tempSections.begin(); it2!= tempSections.end(); ++it2)
181
                {
182
                        it2.data().number=i;
183
                        localSections.insert(i, it2.data());
184
 
185
                        if ((*it).number==i)
186
                        {
187
                                struct DocumentSection blank;
188
                                blank.number=++i;
189
                                blank.name=QString::number(i);
190
                                blank.fromindex=(*it).toindex+1;
191
                                blank.toindex=(*it).toindex+2;
192
                                blank.type=Type_1_2_3;
193
                                blank.sectionstartindex=1;
194
                                blank.reversed=false;
195
                                blank.active=true;
196
                                localSections.insert(i, blank);
197
                        }
198
                        ++i;
199
                }
200
        }
3760 cbradney 201
        updateTable();
202
}
203
 
204
void DocSections::deleteEntry()
205
{
206
        int currRow=sectionsTable->currentRow();
3765 cbradney 207
        if (currRow==0 && localSections.count()==1)
208
                return;
3760 cbradney 209
        bool found=false;
210
        DocumentSectionMap::Iterator it = localSections.begin();
211
        int count=0;
212
        for(; it!= localSections.end(); ++it)
213
        {
214
                if(count==currRow)
215
                {
216
                        found=true;
217
                        break;
218
                }
219
                ++count;
220
        }
221
        if (found)
222
        {
3766 cbradney 223
                //If we arent at the start, copy the toindex of the current item
224
                //to the toindex of the previous item
225
                if (it!=localSections.begin())
226
                {
227
                        DocumentSectionMap::Iterator it2(it);
228
                        (*--it2).toindex=(*it).toindex;
229
                }
230
                //Delete the currently selected entry
3765 cbradney 231
                localSections.remove(it);
3766 cbradney 232
                //Now, copy to a temp map and reinsert with consecutive keys again
3765 cbradney 233
                DocumentSectionMap tempSections(localSections);
234
                localSections.clear();
235
                uint i=0;
236
                it = tempSections.begin();
237
                for(; it!= tempSections.end(); ++it)
238
                {
239
                        it.data().number=i;
240
                        localSections.insert(i++, it.data());
241
                }
242
                int newCount=localSections.count();
243
                //int preIndex=QMAX(currentIndex-1, 0);
244
                localSections[0].fromindex=0;
3770 cbradney 245
                localSections[newCount-1].toindex=m_maxpageindex;
3760 cbradney 246
                updateTable();
247
        }
248
}
249
 
250
const DocumentSectionMap& DocSections::getNewSections()
251
{
252
        return localSections;
253
}