Subversion Repositories Scribus

Rev

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