Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
199 Franz 1
#include "pageselector.h"
2
#include "pageselector.moc"
3
 
4
#include <qvariant.h>
5
#include <qcombobox.h>
3053 avox 6
#include <qlineedit.h>
7
#include <qpopupmenu.h>
8
#if OPTION_USE_QTOOLBUTTON
9
    #include <qtoolbutton.h>
10
#else
11
    #include <qpushbutton.h>
12
#endif
199 Franz 13
#include <qlayout.h>
3053 avox 14
#include <qtoolbutton.h>
199 Franz 15
#include <qtooltip.h>
16
#include <qwhatsthis.h>
17
#include <qimage.h>
18
#include <qpixmap.h>
19
 
20
extern QPixmap loadIcon(QString nam);
21
 
3238 avox 22
class PageValidator : public QValidator {
3053 avox 23
public:
24
        PageValidator(int min, int max, QObject * parent);
3238 avox 25
        void fixup(QString & input) const;
26
        State validate(QString & input, int & pos) const;
3053 avox 27
private:
3238 avox 28
        QRegExp rx;
29
        QRegExp rx2;
3053 avox 30
        PageSelector * pageSelector;
31
};
32
 
3238 avox 33
PageValidator::PageValidator(int min, int max, QObject * parent) : QValidator
3289 avox 34
(parent), rx("^([0-9]+).*"), rx2("^[0-9]+$")
3053 avox 35
{
36
        pageSelector = static_cast<PageSelector*>(parent);
37
}
38
 
3238 avox 39
QValidator::State PageValidator::validate(QString & input, int & pos) const
3053 avox 40
{
3238 avox 41
        if (rx2.search(input) == 0 && pageSelector->PageCombo->text(input.toInt()-1) == input)
42
                return Acceptable;
43
        else
3053 avox 44
                return Intermediate;
45
}
46
 
3238 avox 47
void PageValidator::fixup(QString & input) const
3053 avox 48
{
3238 avox 49
        if (rx.search(input) == 0)
50
                input = const_cast<QRegExp &>(rx).cap(1);
3053 avox 51
}
52
 
53
 
199 Franz 54
PageSelector::PageSelector( QWidget* parent, int maxPg ) : QWidget( parent, "pgsel", 0 )
55
{
56
        LastPG = maxPg;
57
        APage = 1;
58
        PageSelectorLayout = new QHBoxLayout( this, 0, 1, "PageSelectorLayout");
59
 
3053 avox 60
#if OPTION_USE_QTOOLBUTTON
61
        Start = new QToolButton( this, "Start" );
62
        Start->setAutoRaise(OPTION_FLAT_BUTTON);
63
        Back = new QToolButton( this, "Back" );
64
        Back->setAutoRaise(OPTION_FLAT_BUTTON);
65
        Forward = new QToolButton( this, "Forward" );
66
        Forward->setAutoRaise(OPTION_FLAT_BUTTON);
67
        Last = new QToolButton( this, "Last" );
68
        Last->setAutoRaise(OPTION_FLAT_BUTTON);
69
#else
199 Franz 70
        Start = new QPushButton( this, "Start" );
71
        Start->setDefault( false );
72
        Start->setAutoDefault( false );
3053 avox 73
        Start->setFlat(OPTION_FLAT_BUTTON);
74
        Back = new QPushButton( this, "Back" );
75
        Back->setDefault( false );
76
        Back->setAutoDefault( false );
77
        Back->setFlat(OPTION_FLAT_BUTTON);
78
        Forward = new QPushButton( this, "Forward" );
79
        Forward->setDefault( false );
80
        Forward->setAutoDefault( false );
81
        Forward->setFlat(OPTION_FLAT_BUTTON);
82
        Last = new QPushButton( this, "Last" );
83
        Last->setDefault( false );
84
        Last->setAutoDefault( false );
85
        Last->setFlat(OPTION_FLAT_BUTTON);
86
#endif
199 Franz 87
        Start->setPixmap( loadIcon("start.png") );
240 Franz 88
        Start->setFocusPolicy(QWidget::NoFocus);
199 Franz 89
        PageSelectorLayout->addWidget( Start );
90
 
91
        Back->setPixmap( loadIcon("back.png") );
240 Franz 92
        Back->setFocusPolicy(QWidget::NoFocus);
3238 avox 93
        Back->setAutoRepeat(true);
199 Franz 94
        PageSelectorLayout->addWidget( Back );
95
 
3238 avox 96
        v = new PageValidator(1, LastPG, this);
199 Franz 97
        PageCombo = new QComboBox( true, this, "PageCombo" );
98
        PageCombo->setEditable( true );
99
        PageCombo->setDuplicatesEnabled( false );
3238 avox 100
        PageCombo->lineEdit()->setAlignment(Qt::AlignHCenter);
199 Franz 101
        QString tmp;
102
        for (int a = 0; a < LastPG; ++a)
103
                PageCombo->insertItem(tmp.setNum(a+1));
104
        PageCombo->setValidator(v);
3238 avox 105
        PageCombo->setMinimumSize(fontMetrics().width( "999 of 999" )+20, 20);
240 Franz 106
        PageCombo->setFocusPolicy(QWidget::ClickFocus);
199 Franz 107
        PageSelectorLayout->addWidget( PageCombo );
3053 avox 108
 
199 Franz 109
        Forward->setPixmap( loadIcon("forward.png") );
240 Franz 110
        Forward->setFocusPolicy(QWidget::NoFocus);
3238 avox 111
        Forward->setAutoRepeat(true);
199 Franz 112
        PageSelectorLayout->addWidget( Forward );
113
 
114
        Last->setPixmap( loadIcon("finish.png") );
240 Franz 115
        Last->setFocusPolicy(QWidget::NoFocus);
199 Franz 116
        PageSelectorLayout->addWidget( Last );
117
        Forward->setEnabled(true);
118
        Last->setEnabled(true);
119
        Back->setEnabled(false);
120
        Start->setEnabled(false);
121
        if (APage == LastPG)
122
        {
123
                Forward->setEnabled(false);
124
                Last->setEnabled(false);
125
        }
126
 
2199 cbradney 127
        languageChange();
199 Franz 128
        // signals and slots connections
129
        connect( PageCombo, SIGNAL( activated(int) ), this, SLOT( GotoPgE(int) ) );
130
        connect( Back, SIGNAL( clicked() ), this, SLOT( goBk() ) );
131
        connect( Start, SIGNAL( clicked() ), this, SLOT( ToStart() ) );
132
        connect( Forward, SIGNAL( clicked() ), this, SLOT( goFw() ) );
133
        connect( Last, SIGNAL( clicked() ), this, SLOT( ToEnd() ) );
134
}
135
 
3053 avox 136
bool PageSelector::focused()
137
{
138
        return PageCombo->hasFocus();
139
}
140
 
141
 
142
void PageSelector::focusPolicy(QWidget::FocusPolicy policy)
143
{
144
        PageCombo->setFocusPolicy(policy);
145
}
146
 
147
 
199 Franz 148
void PageSelector::GotoPgE(int a)
149
{
150
        GotoPg(a);
151
        emit GotoPage(a+1);
152
}
153
 
3053 avox 154
 
155
void PageSelector::GotoPage()
156
{
157
        static QRegExp rx("^([0-9])+.*");
158
        int p = rx.cap(1).toInt();
159
        if (p < 1)
160
                p=1;
161
        if (p > LastPG)
162
                p = LastPG;
163
        GotoPg(p-1);
164
        emit GotoPage(p);
165
}
166
 
167
 
199 Franz 168
void PageSelector::GotoPg(int a)
169
{
170
        disconnect( PageCombo, SIGNAL( activated(int) ), this, SLOT( GotoPgE(int) ) );
171
        PageCombo->setCurrentItem(a);
3238 avox 172
        PageCombo->setEditText( tr( "%1 of %1" ).arg(a+1).arg(LastPG) );
199 Franz 173
        APage = a+1;
174
        Back->setEnabled(true);
175
        Start->setEnabled(true);
176
        Forward->setEnabled(true);
177
        Last->setEnabled(true);
178
        if (a == 0)
179
        {
180
                Back->setEnabled(false);
181
                Start->setEnabled(false);
182
        }
183
        if (a == LastPG-1)
184
        {
185
                Forward->setEnabled(false);
186
                Last->setEnabled(false);
187
        }
188
        connect( PageCombo, SIGNAL( activated(int) ), this, SLOT( GotoPgE(int) ) );
189
}
190
 
191
void PageSelector::setMaxValue(int a)
192
{
193
        disconnect( PageCombo, SIGNAL( activated(int) ), this, SLOT( GotoPgE(int) ) );
3053 avox 194
        PageCombo->clear();
199 Franz 195
        LastPG = a;
196
        QString tmp;
3238 avox 197
//      v->setTop(LastPG);
199 Franz 198
        for (int b = 0; b < LastPG; ++b)
199
        {
200
                PageCombo->insertItem(tmp.setNum(b+1));
201
        }
3238 avox 202
        PageCombo->setEditText( tr( "%1 of %1" ).arg(APage).arg(LastPG) );
199 Franz 203
        connect( PageCombo, SIGNAL( activated(int) ), this, SLOT( GotoPgE(int) ) );
204
}
205
 
206
void PageSelector::ToStart()
207
{
208
        if (APage == 1)
209
                return;
210
        GotoPgE(0);
211
}
212
 
213
void PageSelector::ToEnd()
214
{
215
        if (APage == LastPG-1)
216
                return;
217
        GotoPgE(LastPG-1);
218
}
219
 
220
void PageSelector::goBk()
221
{
222
        APage--;
223
        if (APage < 1)
224
                APage = 1;
225
        GotoPgE(APage-1);
226
}
227
 
228
void PageSelector::goFw()
229
{
230
        APage++;
231
        if (APage > LastPG)
232
                APage = LastPG;
233
        GotoPgE(APage-1);
234
}
2199 cbradney 235
 
236
void PageSelector::languageChange()
237
{
3238 avox 238
        PageCombo->setEditText( tr( "%1 of %2").arg(APage).arg(LastPG) );
2199 cbradney 239
}