Subversion Repositories Scribus

Rev

Rev 3768 | Rev 4008 | 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>");
3760 cbradney 32
}
33
 
3770 cbradney 34
void DocSections::setup(const DocumentSectionMap docSections, int maxPageIndex)
3760 cbradney 35
{
3770 cbradney 36
        localSections=docSections;
37
        m_maxpageindex=maxPageIndex;
3760 cbradney 38
 
39
        styles << tr("1, 2, 3, ...") << tr("i, ii, iii, ...") << tr("I, II, III, ...") << tr("a, b, c, ...") << tr("A, B, C, ...");
40
 
41
        updateTable();
42
}
43
 
44
void DocSections::updateTable()
45
{
46
        sectionsTable->setNumRows(localSections.count());
47
        int row=0;
48
        for(DocumentSectionMap::Iterator it = localSections.begin(); it!= localSections.end(); ++it)
49
        {
50
                uint i=0;
51
                //Name
52
                QTableItem *item1 = new QTableItem(sectionsTable, QTableItem::WhenCurrent, (*it).name);
53
                sectionsTable->setItem(row, i++, item1);
3762 cbradney 54
                //Active
55
                QCheckTableItem *item2 = new QCheckTableItem(sectionsTable,"");
56
                item2->setChecked((*it).active);
57
                sectionsTable->setItem(row, i++, item2);
3760 cbradney 58
                //FromIndex
3762 cbradney 59
                QTableItem *item3 = new QTableItem(sectionsTable, QTableItem::WhenCurrent, QString::number((*it).fromindex));
60
                sectionsTable->setItem(row, i++, item3);
3760 cbradney 61
                //ToIndex
3762 cbradney 62
                QTableItem *item4 = new QTableItem(sectionsTable, QTableItem::WhenCurrent, QString::number((*it).toindex));
63
                sectionsTable->setItem(row, i++, item4);
3760 cbradney 64
                //Style
3762 cbradney 65
                QComboTableItem *item5 = new QComboTableItem(sectionsTable, styles);
66
                sectionsTable->setItem(row, i++, item5);
67
                item5->setCurrentItem((*it).type);
3760 cbradney 68
                //Start Page Number
3762 cbradney 69
                QTableItem *item6 = new QTableItem(sectionsTable, QTableItem::WhenCurrent, QString::number((*it).sectionstartindex));
70
                sectionsTable->setItem(row, i++, item6);
3760 cbradney 71
                //End Page Number
3766 cbradney 72
                QTableItem *item7 = new QTableItem(sectionsTable, QTableItem::WhenCurrent, QString::number((*it).sectionstartindex + (*it).toindex - (*it).fromindex));
73
                item7->setEnabled(false);
3762 cbradney 74
                sectionsTable->setItem(row, i++, item7);
3760 cbradney 75
 
76
                sectionsTable->verticalHeader()->setLabel(row, QString("%1").arg(row));
77
                row++;
78
        }
79
        deleteButton->setEnabled(localSections.count()>1);
80
}
81
 
82
void DocSections::tableItemChanged( int row, int col )
83
{
84
        switch (col)
85
        {
86
        case 0:
87
                localSections[row].name=sectionsTable->text(row, col);
88
                break;
89
        case 1:
3762 cbradney 90
                localSections[row].active=static_cast<QCheckTableItem*>(sectionsTable->item(row, col))->isChecked();
91
                break;
92
        case 2:
3760 cbradney 93
                localSections[row].fromindex=sectionsTable->text(row, col).toUInt();
94
                break;
3762 cbradney 95
        case 3:
3760 cbradney 96
                localSections[row].toindex=sectionsTable->text(row, col).toUInt();
97
                break;
3762 cbradney 98
        case 4:
3760 cbradney 99
                {
100
                        QComboTableItem* qcti=dynamic_cast<QComboTableItem*>(sectionsTable->item(row,col));
101
                        if (qcti!=NULL)
102
                        {
103
                                uint index=qcti->currentItem();
104
                                if (index<styles.count())
105
                                        localSections[row].type=(DocumentSectionType)index;
106
                        }
107
                }
108
                break;
3762 cbradney 109
        case 5:
3760 cbradney 110
                localSections[row].sectionstartindex=sectionsTable->text(row, col).toUInt();
111
                break;
112
        default:
113
                break;
114
        }
115
}
116
 
117
void DocSections::addEntry()
118
{
3768 cbradney 119
        int currRow=sectionsTable->currentRow();
120
        bool found=false;
121
        DocumentSectionMap::Iterator it = localSections.begin();
122
        int count=0;
123
        for(; it!= localSections.end(); ++it)
124
        {
125
                if(count==currRow)
126
                {
127
                        found=true;
128
                        break;
129
                }
130
                ++count;
131
        }
132
        if (!found) //End of map, just append
133
        {
134
                struct DocumentSection blank;
135
                uint count=localSections.count();
136
                blank.number=count;
137
                blank.name=QString::number(count);
3770 cbradney 138
                blank.fromindex=m_maxpageindex;
139
                blank.toindex=m_maxpageindex;
3768 cbradney 140
                blank.type=Type_1_2_3;
141
                blank.sectionstartindex=1;
142
                blank.reversed=false;
143
                blank.active=true;
144
                localSections.insert(count, blank);
145
        }
146
        else
147
        {
148
                //Now, copy to a temp map
149
                DocumentSectionMap tempSections(localSections);
150
                localSections.clear();
151
                //Copy the temp map entries over. When we find the number of the current row, also insert a new entry.
152
                uint i=0;
153
                for(DocumentSectionMap::Iterator it2 = tempSections.begin(); it2!= tempSections.end(); ++it2)
154
                {
155
                        it2.data().number=i;
156
                        localSections.insert(i, it2.data());
157
 
158
                        if ((*it).number==i)
159
                        {
160
                                struct DocumentSection blank;
161
                                blank.number=++i;
162
                                blank.name=QString::number(i);
163
                                blank.fromindex=(*it).toindex+1;
164
                                blank.toindex=(*it).toindex+2;
165
                                blank.type=Type_1_2_3;
166
                                blank.sectionstartindex=1;
167
                                blank.reversed=false;
168
                                blank.active=true;
169
                                localSections.insert(i, blank);
170
                        }
171
                        ++i;
172
                }
173
        }
3760 cbradney 174
        updateTable();
175
}
176
 
177
void DocSections::deleteEntry()
178
{
179
        int currRow=sectionsTable->currentRow();
3765 cbradney 180
        if (currRow==0 && localSections.count()==1)
181
                return;
3760 cbradney 182
        bool found=false;
183
        DocumentSectionMap::Iterator it = localSections.begin();
184
        int count=0;
185
        for(; it!= localSections.end(); ++it)
186
        {
187
                if(count==currRow)
188
                {
189
                        found=true;
190
                        break;
191
                }
192
                ++count;
193
        }
194
        if (found)
195
        {
3766 cbradney 196
                //If we arent at the start, copy the toindex of the current item
197
                //to the toindex of the previous item
198
                if (it!=localSections.begin())
199
                {
200
                        DocumentSectionMap::Iterator it2(it);
201
                        (*--it2).toindex=(*it).toindex;
202
                }
203
                //Delete the currently selected entry
3765 cbradney 204
                localSections.remove(it);
3766 cbradney 205
                //Now, copy to a temp map and reinsert with consecutive keys again
3765 cbradney 206
                DocumentSectionMap tempSections(localSections);
207
                localSections.clear();
208
                uint i=0;
209
                it = tempSections.begin();
210
                for(; it!= tempSections.end(); ++it)
211
                {
212
                        it.data().number=i;
213
                        localSections.insert(i++, it.data());
214
                }
215
                int newCount=localSections.count();
216
                //int preIndex=QMAX(currentIndex-1, 0);
217
                localSections[0].fromindex=0;
3770 cbradney 218
                localSections[newCount-1].toindex=m_maxpageindex;
3760 cbradney 219
                updateTable();
220
        }
221
}
222
 
223
const DocumentSectionMap& DocSections::getNewSections()
224
{
225
        return localSections;
226
}