Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
6658 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
7
#include "createrange.h"
8
#include "createrange.moc"
9
 
10
#include <qbuttongroup.h>
11
#include <qlabel.h>
12
#include <qlistbox.h>
13
#include <qpushbutton.h>
14
#include <qradiobutton.h>
15
#include <qspinbox.h>
16
#include <qstring.h>
17
#include <qtabwidget.h>
18
 
6775 cbradney 19
CreateRange::CreateRange(QString currText, int pageCount, QWidget* parent, const char* name, WFlags fl )
6658 cbradney 20
        : CreateRangeBase(parent, name, fl),
21
        m_PageCount(pageCount),
22
        m_RangeType(0),
23
        m_BasicRangeType(0)
24
{
25
        pageCountValueLabel->setText(QString("%1").arg(pageCount));
26
        basicConsecutiveFromSpinBox->setMinValue(1);
27
        basicConsecutiveToSpinBox->setMinValue(1);
28
        basicConsecutiveFromSpinBox->setMaxValue(pageCount);
29
        basicConsecutiveToSpinBox->setMaxValue(pageCount);
30
        basicSelectRangeType(m_BasicRangeType);
31
        advPageGroupSizeSpinBox->setMaxValue(pageCount);
6775 cbradney 32
        if (m_PageCount==1)
33
           basicEvenRadioButton->setShown(false);
34
        if (currText.length()>0)
35
                basicRangeListBox->insertItem(currText);
6658 cbradney 36
        // signals and slots connections
37
        connect(tabWidget, SIGNAL(currentChanged(QWidget*)), this, SLOT(selectRangeType(QWidget*)));
38
        connect(basicRangeAddButton, SIGNAL(clicked()), this, SLOT(basicAddToRange()));
39
        connect(basicRangeDelButton, SIGNAL(clicked()), this, SLOT(basicDelFromRange()));
40
        connect(basicConsecutiveRadioButton, SIGNAL(clicked()), this, SLOT(basicSelectRangeTypeConsec()));
41
        connect(basicCommaSepRadioButton, SIGNAL(clicked()), this, SLOT(basicSelectRangeTypeComma()));
6667 cbradney 42
        connect(basicEvenRadioButton, SIGNAL(clicked()), this, SLOT(basicSelectRangeTypeEven()));
43
        connect(basicOddRadioButton, SIGNAL(clicked()), this, SLOT(basicSelectRangeTypeOdd()));
6658 cbradney 44
        connect(basicRangeUpButton, SIGNAL(clicked()), this, SLOT(basicMoveUp()));
45
        connect(basicRangeDownButton, SIGNAL(clicked()), this, SLOT(basicMoveDown()));
46
        connect(advPageGroupSizeSpinBox, SIGNAL(valueChanged(int)), this, SLOT(advSpinChange(int)));
47
        connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
48
        connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
49
        advPageGroupSizeSpinBox->setValue(4);
50
}
51
 
52
CreateRange::~CreateRange()
53
{
54
}
55
 
56
void CreateRange::getCreateRangeData(CreateRangeData& crData)
57
{
58
        crData.pageRange="";
59
        if (m_RangeType==0)
60
        {
61
                for (uint i=0;i<basicRangeListBox->count();++i)
62
                {
63
                        if (i!=0 && i<basicRangeListBox->count())
64
                                crData.pageRange+=",";
65
                        crData.pageRange+=basicRangeListBox->text(i);
66
                }
67
        }
68
        else
69
                crData.pageRange=m_PageString;
70
}
71
 
72
void CreateRange::basicAddToRange( )
73
{
6775 cbradney 74
        QString newEntry;
6667 cbradney 75
        switch (m_BasicRangeType)
76
        {
77
                case 0:
78
                        {
79
                                int from=basicConsecutiveFromSpinBox->value();
80
                                int to=basicConsecutiveToSpinBox->value();
81
                                if (from==to)
6775 cbradney 82
                                        newEntry=QString("%1").arg(from);
6667 cbradney 83
                                else
6775 cbradney 84
                                        newEntry=QString("%1-%2").arg(from).arg(to);
6667 cbradney 85
                        }
86
                        break;
87
                case 1:
6775 cbradney 88
                        newEntry=basicCommaSepLineEdit->text();
6667 cbradney 89
                        break;
90
                case 2:
91
                        {
92
                                QString numbers;
93
                                for (int i=2; i<=m_PageCount; i+=2)
94
                                {
95
                                        if (i!=2)
96
                                                numbers+=",";
97
                                        numbers+=QString("%1").arg(i);
98
                                }
6775 cbradney 99
                                newEntry=numbers;
6667 cbradney 100
                        }
101
                        break;
102
                case 3:
103
                        {
104
                                QString numbers;
105
                                for (int i=1; i<=m_PageCount; i+=2)
106
                                {
107
                                        if (i!=1)
108
                                                numbers+=",";
109
                                        numbers+=QString("%1").arg(i);
110
                                }
6775 cbradney 111
                                newEntry=numbers;
6667 cbradney 112
                        }
113
                        break;
114
        }
6775 cbradney 115
        if (newEntry.length()!=0)
116
                basicRangeListBox->insertItem(newEntry);
6658 cbradney 117
}
118
 
119
void CreateRange::basicDelFromRange()
120
{
121
        basicRangeListBox->removeItem(basicRangeListBox->currentItem());
122
}
123
 
124
void CreateRange::basicSelectRangeTypeConsec()
125
{
126
        basicSelectRangeType(0);
127
}
128
 
129
void CreateRange::basicSelectRangeTypeComma()
130
{
131
        basicSelectRangeType(1);
132
}
133
 
6667 cbradney 134
void CreateRange::basicSelectRangeTypeEven()
135
{
136
        basicSelectRangeType(2);
137
}
138
 
139
void CreateRange::basicSelectRangeTypeOdd()
140
{
141
        basicSelectRangeType(3);
142
}
143
 
6658 cbradney 144
void CreateRange::basicSelectRangeType(int i)
145
{
146
        m_BasicRangeType=i;
147
        bool basicRangeTypeIsConsecutive=(i==0);
148
        basicConsecutiveFromLabel->setEnabled(basicRangeTypeIsConsecutive);
149
        basicConsecutiveFromSpinBox->setEnabled(basicRangeTypeIsConsecutive);
150
        basicConsecutiveToLabel->setEnabled(basicRangeTypeIsConsecutive);
151
        basicConsecutiveToSpinBox->setEnabled(basicRangeTypeIsConsecutive);
152
        basicCommaSepLineEdit->setEnabled(!basicRangeTypeIsConsecutive);
153
}
154
 
155
void CreateRange::selectRangeType(QWidget *)
156
{
157
        m_RangeType=tabWidget->currentPageIndex();
158
}
159
 
160
 
161
void CreateRange::basicMoveUp()
162
{
163
        int index=basicRangeListBox->currentItem();
164
        if (index==0)
165
                return;
166
        basicRangeListBox->clearSelection();
167
        QListBoxItem* clbi=basicRangeListBox->item(index);
168
        basicRangeListBox->takeItem(clbi);
169
        basicRangeListBox->insertItem(clbi, QMAX(0, index-1));
170
        basicRangeListBox->setCurrentItem(clbi);
171
}
172
 
173
void CreateRange::basicMoveDown()
174
{
175
        int index=basicRangeListBox->currentItem();
176
        if (index==static_cast<int>(basicRangeListBox->count())-1)
177
                return;
178
        basicRangeListBox->clearSelection();
179
        QListBoxItem* clbi=basicRangeListBox->item(index);
180
        basicRangeListBox->takeItem(clbi);
181
        basicRangeListBox->insertItem(clbi, index+1);
182
        basicRangeListBox->setCurrentItem(clbi);
183
}
184
 
185
 
186
void CreateRange::advSpinChange(int /*v*/)
187
{
188
        m_PageString="";
189
        int mp1=m_PageCount+1;
190
        //locked at 4 for now.
191
        if (m_PageCount % 4 == 0)
192
        {
193
        //28,1,2,27, 26,3,4,25
194
                for (int i=m_PageCount;i>m_PageCount/2;i-=2)
195
                {
196
                        if (i!=m_PageCount)
197
                                m_PageString+=",";
198
                        m_PageString+=QString("%1").arg(i);
199
                        m_PageString+=QString(",%1").arg(mp1-i);
200
                        m_PageString+=QString(",%1").arg(mp1-i+1);
201
                        m_PageString+=QString(",%1").arg(i-1);
202
                }
203
        }
204
        QString tmp(m_PageString);
205
        tmp.truncate(20);
206
        advSampleOrderExampleLabel->setText(tmp+"...");
207
}