Subversion Repositories Scribus

Rev

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

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