Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
4430 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
*/
1525 cbradney 7
/***************************************************************************
8
 *   Copyright (C) 2005 by Craig Bradney                                   *
9
 *   cbradney@scribus.info                                                 *
10
 *                                                                         *
11
 *   This program is free software; you can redistribute it and/or modify  *
12
 *   it under the terms of the GNU General Public License as published by  *
13
 *   the Free Software Foundation; either version 2 of the License, or     *
14
 *   (at your option) any later version.                                   *
15
 *                                                                         *
16
 *   This program is distributed in the hope that it will be useful,       *
17
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
18
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
19
 *   GNU General Public License for more details.                          *
20
 *                                                                         *
21
 *   You should have received a copy of the GNU General Public License     *
22
 *   along with this program; if not, write to the                         *
23
 *   Free Software Foundation, Inc.,                                       *
24
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
25
 ***************************************************************************/
26
 
8572 jghali 27
#include <QApplication>
10223 cbradney 28
#include <QCloseEvent>
8572 jghali 29
#include <QDesktopWidget>
8501 cbradney 30
#include <QHideEvent>
10223 cbradney 31
#include <QPoint>
1525 cbradney 32
 
10223 cbradney 33
#include "prefscontext.h"
34
#include "prefsfile.h"
35
#include "prefsmanager.h"
36
#include "scribus.h"
1525 cbradney 37
#include "scrpalettebase.h"
7666 subik 38
#include "util.h"
10200 cbradney 39
#include "util_icon.h"
1525 cbradney 40
 
3940 tsoots 41
 
10581 cbradney 42
ScrPaletteBase::ScrPaletteBase(  QWidget * parent, const QString& prefsContext, bool modal, Qt::WFlags f)
12963 subik 43
#if QT_VERSION >= 0x040500
44
        : QDialog ( parent, f | Qt::Tool | Qt::CustomizeWindowHint
45
                        | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint
46
                        | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint ),
47
#else
48
        : QDialog ( parent, f | Qt::Tool | Qt::CustomizeWindowHint
49
                        | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint
13441 jghali 50
                        | Qt::WindowSystemMenuHint | Qt::WindowType(0x08000000)),
12963 subik 51
#endif
52
        palettePrefs(0),
53
        prefsContextName(QString::null),
54
        visibleOnStartup(false)
1525 cbradney 55
{
10225 subik 56
        if (PrefsManager::instance()->appPrefs.useSmallWidgets)
57
        {
58
                setStyleSheet(" QToolButton { margin: 0px; padding: 0px; font-size: 10px; } \
59
                                                QToolButton:pressed { padding-top: 2px; padding-left: 2px } \
60
                                                QPushButton { margin: 0px; padding: 0px; font-size: 10px; } \
61
                                                QPushButton:pressed { padding-top: 2px; padding-left: 2px } \
12542 subik 62
                                                QRadioButton, QComboBox, QLineEdit \
63
                                                        QListView, QLabel { margin:0px; padding: 0px; font-size: 10px; } \
64
                                                QCheckBox, QSpinBox, QDoubleSpinBox \
65
                                                        { margin:0px; padding: 0px; font-size: 10px; } \
66
                                                QTabWidget, QTabBar, QTableView, QGroupBox, QTreeView \
67
                                                        { font-size: 10px ; } \
68
                                                QToolBox::tab { font-size: 10px; padding: 0px; margin: 0px; } \
10225 subik 69
                                        ");
70
        }
8428 cbradney 71
        originalParent=parent;
72
        tempParent=0;
10571 fschmid 73
        setWindowIcon(loadIcon("AppIcon.png"));
10581 cbradney 74
        setPrefsContext(prefsContext);
10571 fschmid 75
        setModal(modal);
5257 cbradney 76
        connect(PrefsManager::instance(), SIGNAL(prefsChanged()), this, SLOT(setFontSize()));
1525 cbradney 77
}
78
 
79
void ScrPaletteBase::setPrefsContext(QString context)
80
{
2877 cbradney 81
        if (prefsContextName.isEmpty())
1525 cbradney 82
        {
83
                prefsContextName=context;
2877 cbradney 84
                if (!prefsContextName.isEmpty())
1525 cbradney 85
                {
2856 cbradney 86
                        palettePrefs = PrefsManager::instance()->prefsFile->getContext(prefsContextName);
1525 cbradney 87
                        if (palettePrefs)
88
                                visibleOnStartup = palettePrefs->getBool("visible");
89
                }
90
                else
91
                        palettePrefs = NULL;
92
        }
93
}
94
 
95
void ScrPaletteBase::startup()
96
{
5257 cbradney 97
        setFontSize();
9378 fschmid 98
//      setShown(visibleOnStartup);
99
        if (visibleOnStartup)
100
                show();
101
        else
102
                hide();
1525 cbradney 103
        emit paletteShown(visibleOnStartup);
3928 tsoots 104
}
1525 cbradney 105
 
106
void ScrPaletteBase::setPaletteShown(bool visible)
107
{
108
        storeVisibility(visible);
9378 fschmid 109
//      setShown(visible);
11158 avox 110
        if (!visible)
111
                hide();
112
        else if (!isVisible())
113
        {
9378 fschmid 114
                show();
11158 avox 115
                activateWindow();
116
        }
1525 cbradney 117
}
3940 tsoots 118
 
5257 cbradney 119
void ScrPaletteBase::setFontSize()
120
{
7644 cbradney 121
        QFont newfont(font());
122
        newfont.setPointSize(PrefsManager::instance()->appPrefs.PaletteFontSize);
123
        setFont(newfont);
3940 tsoots 124
}
125
 
1525 cbradney 126
/*
127
void ScrPaletteBase::keyPressEvent(QKeyEvent *keyEvent)
128
{
129
        // Sample code to use in overriding classes
130
        int keyMod;
10390 cbradney 131
        switch (keyEvent->modifiers())
1525 cbradney 132
        {
10390 cbradney 133
                case Qt::ShiftModifier:
8523 cbradney 134
                        keyMod = Qt::SHIFT;
1525 cbradney 135
                        break;
10390 cbradney 136
                case Qt::AltModifier:
8523 cbradney 137
                        keyMod = Qt::ALT;
1525 cbradney 138
                        break;
10390 cbradney 139
                case Qt::ControlModifier:
8523 cbradney 140
                        keyMod = Qt::CTRL;
1525 cbradney 141
                        break;
142
                default:
143
                        keyMod = 0;
144
                        break;
145
        }
146
        // Tell our action to be off
147
        //      if (keyMod==0 && keyEvent->key()==Key_Escape)
148
        //      emit paletteShown(false);
149
 
150
        QDialog::keyPressEvent(keyEvent);
151
}
152
        */
153
void ScrPaletteBase::closeEvent(QCloseEvent *closeEvent)
154
{
155
        emit paletteShown(false);
156
        closeEvent->ignore();
157
        hide();
158
}
159
 
160
void ScrPaletteBase::hideEvent(QHideEvent*)
161
{
162
        storePosition();
163
        storeSize();
164
}
165
 
14742 jghali 166
void ScrPaletteBase::showEvent(QShowEvent *showEvent)
1525 cbradney 167
{
14742 jghali 168
        // According to Qt doc, non-spontaneous show events are sent to widgets
169
        // immediately before they are shown. We want to restore geometry for those
170
        // events as spontaneous events are delivered after dialog has been shown
171
        if (palettePrefs && !showEvent->spontaneous())
1525 cbradney 172
        {
3932 avox 173
                QDesktopWidget *d = QApplication::desktop();
174
                QSize gStrut = QApplication::globalStrut();
1525 cbradney 175
                if (palettePrefs->contains("left"))
176
                {
13610 jghali 177
                        QRect scr = QApplication::desktop()->availableGeometry(this);
3932 avox 178
                        // all palettes should have enough room for 3x3 min widgets
8562 jghali 179
                        int vwidth  = qMin(qMax(3*gStrut.width(), palettePrefs->getInt("width")),
3932 avox 180
                                           d->width());
8562 jghali 181
                        int vheight = qMin(qMax(3*gStrut.height(), palettePrefs->getInt("height")),
3932 avox 182
                                           d->height());
183
                        // palettes should not use too much screen space
184
                        if (vwidth > d->width()/3 && vheight > d->height()/3)
185
                                vwidth = d->width()/3;
186
                        // and should be partly visible
13610 jghali 187
                        int vleft   = qMin(qMax(scr.left() - vwidth + gStrut.width(), palettePrefs->getInt("left")),
13611 jghali 188
                                           scr.right() - gStrut.width());
8562 jghali 189
                        int vtop = qMin(palettePrefs->getInt("top"), d->height() - gStrut.height());
10531 avox 190
#if defined(Q_OS_MAC) || defined(_WIN32)
4452 cbradney 191
                        // on Mac and Windows you're dead if the titlebar is not on screen
8562 jghali 192
                        vtop    = qMax(64, vtop);
4452 cbradney 193
#else
8562 jghali 194
                        vtop    = qMax(-vheight + gStrut.height(), vtop);
2633 cbradney 195
#endif
4802 cbradney 196
                        // Check values against current screen size
13610 jghali 197
                        if ( vleft >= scr.right() )
198
                                vleft = scr.left();
11522 jghali 199
                        if ( vtop >= scr.bottom() )
4802 cbradney 200
                                vtop = 64;
11522 jghali 201
                        if ( vtop <= scr.top() )
202
                                vtop = scr.top();
4802 cbradney 203
                        if ( vwidth >= scr.width() )
8562 jghali 204
                                vwidth = qMax( gStrut.width(), scr.width() - vleft );
4802 cbradney 205
                        if ( vheight >= scr.height() )
8562 jghali 206
                                vheight = qMax( gStrut.height(), scr.height() - vtop );
13085 jghali 207
//                      qDebug() << QString("root %1x%2 %7 palette %3x%4 @ (%5,%6)").arg(d->width()).arg(d->height())
208
//                              .arg(vwidth).arg(vheight).arg(vleft).arg(vtop).arg(name());
5541 fschmid 209
//                      setGeometry(vleft, vtop, vwidth, vheight);
210
                        resize(vwidth, vheight);
211
                        move(vleft, vtop);
1525 cbradney 212
                }
213
                storeVisibility(true);
214
        }
14742 jghali 215
        QDialog::showEvent(showEvent);
1525 cbradney 216
}
217
 
218
void ScrPaletteBase::hide()
219
{
10571 fschmid 220
        if (isVisible())
1525 cbradney 221
        {
222
                storePosition();
223
                storeSize();
224
                QDialog::hide();
225
        }
226
}
227
 
228
void ScrPaletteBase::reject()
229
{
230
        emit paletteShown(false);
231
        QDialog::reject();
232
}
233
 
234
void ScrPaletteBase::storePosition()
235
{
236
        if (palettePrefs)
237
        {
10827 fschmid 238
                QPoint geo = pos();
239
                palettePrefs->set("left", geo.x());
240
                palettePrefs->set("top", geo.y());
241
/*
10362 jghali 242
#if QT_VERSION  >= 0x040300 && !defined(_WIN32)
9378 fschmid 243
                QRect geo = geometry();
9447 fschmid 244
#else
245
                QRect geo = frameGeometry();
246
#endif
4452 cbradney 247
                palettePrefs->set("left", geo.left());
248
                palettePrefs->set("top", geo.top());
10827 fschmid 249
*/
1525 cbradney 250
        }
251
}
252
 
253
void ScrPaletteBase::storePosition(int newX, int newY)
254
{
255
        if (palettePrefs)
256
        {
257
                palettePrefs->set("left", newX);
258
                palettePrefs->set("top", newY);
259
        }
260
}
261
 
262
void ScrPaletteBase::storeSize()
263
{
264
        if (palettePrefs)
265
        {
266
                palettePrefs->set("width", width());
267
                palettePrefs->set("height", height());
268
        }
269
}
270
 
271
void ScrPaletteBase::storeVisibility(bool vis)
272
{
273
        if (palettePrefs)
274
                palettePrefs->set("visible", vis);
2937 cbradney 275
}
8428 cbradney 276
 
277
int ScrPaletteBase::exec(QWidget* newParent)
278
{
279
        Q_ASSERT(tempParent==0 && newParent!=0);
280
        tempParent=newParent;
8572 jghali 281
        Qt::WindowFlags wflags = windowFlags();
10571 fschmid 282
        setParent(newParent, wflags);
8428 cbradney 283
        int i=QDialog::exec();
10571 fschmid 284
        setParent(originalParent, wflags);
8428 cbradney 285
        tempParent=0;
286
        return i;
287
}