Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
4546 subik 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
*/
4541 tsoots 7
/***************************************************************************
8
 *   Copyright (C) 2006 by Riku Leino                                      *
9
 *   riku@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.,                                       *
18122 mrdocs 24
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.             *
4541 tsoots 25
 ***************************************************************************/
26
 
15260 cbradney 27
#include <QCloseEvent>
10184 cbradney 28
#include <QEvent>
29
#include <QMenu>
30
#include <QPixmap>
31
#include <QString>
32
#include <QToolButton>
33
 
4541 tsoots 34
#include "sctoolbar.h"
10184 cbradney 35
 
4541 tsoots 36
#include "prefscontext.h"
37
#include "prefsfile.h"
38
#include "prefsmanager.h"
10200 cbradney 39
#include "util_icon.h"
4541 tsoots 40
 
10184 cbradney 41
ScToolBar::ScToolBar(const QString& name, const QString &prefName, QMainWindow *parent, Qt::Orientation o)
42
: QToolBar(name, parent),
15260 cbradney 43
  m_name(QString("ToolBar-%1").arg(prefName))
4541 tsoots 44
{
15260 cbradney 45
        m_prefs=PrefsManager::instance()->prefsFile->getContext(m_name);
10184 cbradney 46
        setObjectName(name);
47
//      hide();
48
        parentMW=parent;
49
 
50
        setAllowedAreas(Qt::AllToolBarAreas);
10976 cbradney 51
        this->setIconSize(QSize(16,16));
10184 cbradney 52
        /*
8501 cbradney 53
        setCloseMode(Q3DockWindow::Undocked);
4848 tsoots 54
 
4560 tsoots 55
        if (m_prefs->contains("IsDocked")) // set docking
4541 tsoots 56
        {
57
                if (m_prefs->getBool("IsDocked", true)) {
4545 tsoots 58
                        QString dockPlace = m_prefs->get("DockPlace", "top");
59
                        if (dockPlace == "top")
60
                                mainWindow()->addDockWindow(this, Qt::DockTop);
61
                        else if (dockPlace == "bottom")
62
                                mainWindow()->addDockWindow(this, Qt::DockBottom);
63
                        else if (dockPlace == "right")
64
                                mainWindow()->addDockWindow(this, Qt::DockRight);
65
                        else if (dockPlace == "left")
66
                                mainWindow()->addDockWindow(this, Qt::DockLeft);
4541 tsoots 67
                } else {
68
                        undock();
69
                        move(QPoint(m_prefs->getInt("x", 50), m_prefs->getInt("y", 50)));
70
                }
4542 tsoots 71
        }
4541 tsoots 72
 
4560 tsoots 73
        if (m_prefs->contains("FloatOrientation")) // set float orientation
74
        {
75
                floatOrientation = m_prefs->getInt("FloatOrientation", 1) == Hor ?
8528 cbradney 76
                                   Qt::Horizontal : Qt::Vertical;
4560 tsoots 77
        }
78
        else
79
        {
80
                floatOrientation = o;
8528 cbradney 81
                m_prefs->set("FloatOrientation", o == Qt::Horizontal ? Hor : Vert);
4560 tsoots 82
        }
83
 
4848 tsoots 84
        if (!m_prefs->contains("PosIndex"))
85
                storeDockPosition();
86
        else
87
                moveDocks();
88
 
4560 tsoots 89
        dockTop = m_prefs->getBool("DockTop", 1);
90
        dockRight = m_prefs->getBool("DockRight", 1);
91
        dockBottom = m_prefs->getBool("DockBottom", 1);
92
        dockLeft = m_prefs->getBool("DockLeft", 1);
8583 cbradney 93
        mainWindow()->setDockEnabled(this, Qt::DockTop, dockTop);
94
        mainWindow()->setDockEnabled(this, Qt::DockRight, dockRight);
95
        mainWindow()->setDockEnabled(this, Qt::DockBottom, dockBottom);
96
        mainWindow()->setDockEnabled(this, Qt::DockLeft, dockLeft);
4560 tsoots 97
 
98
        if (place() == InDock)
99
                setOrientation(area()->orientation());
100
        else
101
                setOrientation(floatOrientation);
102
 
103
        initPrefsButton();
10184 cbradney 104
        */
4561 tsoots 105
        languageChange();
4560 tsoots 106
 
10184 cbradney 107
//      connect(this, SIGNAL(placeChanged(Q3DockWindow::Place)), this, SLOT(slotPlaceChanged(Q3DockWindow::Place)));
4860 tsoots 108
}
15260 cbradney 109
 
4860 tsoots 110
void ScToolBar::initVisibility()
111
{
112
        if (m_prefs->getBool("IsVisible", true))
4869 cbradney 113
        {
4860 tsoots 114
                show();
15260 cbradney 115
                /*
4869 cbradney 116
                if (place() == InDock)
117
                        setOrientation(area()->orientation());
118
                else
15260 cbradney 119
                        setOrientation(floatOrientation);*/
4869 cbradney 120
        }
4860 tsoots 121
        else
122
                hide();
15260 cbradney 123
        connectPrefsSlot(true);
4541 tsoots 124
}
125
 
15260 cbradney 126
void ScToolBar::connectPrefsSlot(bool b)
127
{
128
        if (b)
129
                connect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(slotVisibilityChanged(bool)));
130
        else
131
                disconnect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(slotVisibilityChanged(bool)));
132
}
133
 
134
/*
4848 tsoots 135
int ScToolBar::position()
136
{
8501 cbradney 137
        if (place() == Q3DockWindow::OutsideDock)
4848 tsoots 138
                return -1;
139
 
140
        int index = -1;
141
        area()->hasDockWindow(this, &index);
142
 
143
        return index;
144
}
145
 
146
void ScToolBar::storeDockPosition()
147
{
148
        m_prefs->set("PosIndex", position());
149
        m_prefs->set("Offset", offset());
150
}
151
 
152
void ScToolBar::storeDockPositions()
153
{
8501 cbradney 154
        if (place() == Q3DockWindow::OutsideDock)
4860 tsoots 155
                return; // nothing to store if not docked
8659 subik 156
        QList<Q3DockWindow*> tbs = area()->dockWindowList();
157
        for (int i = 0; i < tbs.count(); ++i)
4848 tsoots 158
        {
159
                if (ScToolBar *sctb = dynamic_cast<ScToolBar*>(tbs.at(i)))
160
                        sctb->storeDockPosition();
161
        }
162
}
163
 
164
void ScToolBar::moveDocks()
165
{
8501 cbradney 166
        if (place() == Q3DockWindow::OutsideDock)
4860 tsoots 167
                return; // do not move if not docked;
8659 subik 168
        QList<Q3DockWindow*> tbs = area()->dockWindowList();
169
        for (int i = 0; i < tbs.count(); ++i)
4848 tsoots 170
        {
171
                if (ScToolBar *sctb = dynamic_cast<ScToolBar*>(tbs.at(i)))
172
                        sctb->moveDock();
173
        }
174
}
175
 
176
void ScToolBar::moveDock()
177
{
8501 cbradney 178
        if (place() == Q3DockWindow::OutsideDock)
4860 tsoots 179
                return; // do not move if not docked
4848 tsoots 180
        area()->moveDockWindow(this, m_prefs->getInt("PosIndex", -1));
181
        setOffset(m_prefs->getInt("Offset", 0));
182
}
183
 
8501 cbradney 184
void ScToolBar::slotPlaceChanged(Q3DockWindow::Place p)
4541 tsoots 185
{
8501 cbradney 186
        m_prefs->set("IsDocked", p == Q3DockWindow::InDock);
4541 tsoots 187
        m_prefs->set("x", x());
188
        m_prefs->set("y", y());
8501 cbradney 189
        if (p == Q3DockWindow::InDock) {
4560 tsoots 190
                setOrientation(area()->orientation());
4545 tsoots 191
                QString dockPlace = "top";
192
                if (area() == mainWindow()->leftDock())
193
                        dockPlace = "left";
194
                else if (area() == mainWindow()->rightDock())
195
                        dockPlace = "right";
196
                else if (area() == mainWindow()->bottomDock())
197
                        dockPlace = "bottom";
198
 
199
                m_prefs->set("DockPlace", dockPlace);
4848 tsoots 200
                storeDockPositions();
4560 tsoots 201
        } else {
202
                setOrientation(floatOrientation);
4545 tsoots 203
        }
4541 tsoots 204
}
15260 cbradney 205
*/
4541 tsoots 206
void ScToolBar::slotVisibilityChanged(bool visible)
207
{
208
        m_prefs->set("IsVisible", visible);
209
}
15260 cbradney 210
/*
4560 tsoots 211
void ScToolBar::slotTop()
212
{
213
        dockTop = !dockTop;
8583 cbradney 214
        mainWindow()->setDockEnabled(this, Qt::DockTop, dockTop);
4560 tsoots 215
        dockMenu->setItemChecked(dockMenu->idAt(0), dockTop);
216
        m_prefs->set("DockTop", dockTop);
217
        if (place() == InDock && mainWindow()->topDock() == area())
218
                undock();
219
}
220
 
221
void ScToolBar::slotRight()
222
{
223
        dockRight = !dockRight;
8583 cbradney 224
        mainWindow()->setDockEnabled(this, Qt::DockRight, dockRight);
4560 tsoots 225
        dockMenu->setItemChecked(dockMenu->idAt(1), dockRight);
226
        m_prefs->set("DockRight", dockRight);
227
        if (place() == InDock && mainWindow()->rightDock() == area())
228
                undock();
229
}
230
 
231
void ScToolBar::slotBottom()
232
{
233
        dockBottom = !dockBottom;
8583 cbradney 234
        mainWindow()->setDockEnabled(this, Qt::DockBottom, dockBottom);
4560 tsoots 235
        dockMenu->setItemChecked(dockMenu->idAt(2), dockBottom);
236
        m_prefs->set("DockBottom", dockBottom);
237
        if (place() == InDock && mainWindow()->bottomDock() == area())
238
                undock();
239
}
240
 
241
void ScToolBar::slotLeft()
242
{
243
        dockLeft = !dockLeft;
8583 cbradney 244
        mainWindow()->setDockEnabled(this, Qt::DockLeft, dockLeft);
4560 tsoots 245
        dockMenu->setItemChecked(dockMenu->idAt(3), dockLeft);
246
        m_prefs->set("DockLeft", dockLeft);
247
        if (place() == InDock && mainWindow()->leftDock() == area())
248
                undock();
249
}
250
 
251
void ScToolBar::slotVert()
252
{
8613 cbradney 253
        floatOrientation = Qt::Vertical;
4560 tsoots 254
        orientationMenu->setItemChecked(orientationMenu->idAt(0), false);
255
        orientationMenu->setItemChecked(orientationMenu->idAt(1), true);
256
        m_prefs->set("FloatOrientation", Vert);
257
        if (place() != InDock)
258
                setOrientation(floatOrientation);
259
}
260
 
261
void ScToolBar::slotHor()
262
{
8613 cbradney 263
        floatOrientation = Qt::Horizontal;
4560 tsoots 264
        orientationMenu->setItemChecked(orientationMenu->idAt(0), true);
265
        orientationMenu->setItemChecked(orientationMenu->idAt(1), false);
266
        m_prefs->set("FloatOrientation", Hor);
267
        if (place() != InDock)
268
                setOrientation(floatOrientation);
269
}
10184 cbradney 270
*/
4561 tsoots 271
void ScToolBar::languageChange()
4560 tsoots 272
{
10184 cbradney 273
//      popup->clear();
4560 tsoots 274
 
10184 cbradney 275
//      dockMenu = new QMenu(0);
276
//      dockMenu->setCheckable(true);
277
//      dockMenu->insertItem( tr("Top"), this, SLOT(slotTop()));
278
//      dockMenu->insertItem( tr("Right"), this, SLOT(slotRight()));
279
//      dockMenu->insertItem( tr("Bottom"), this, SLOT(slotBottom()));
280
//      dockMenu->insertItem( tr("Left"), this, SLOT(slotLeft()));
281
//      popup->insertItem( tr("Allow Docking To..."), dockMenu);
282
//      dockMenu->setItemChecked(dockMenu->idAt(0), dockTop);
283
//      dockMenu->setItemChecked(dockMenu->idAt(1), dockRight);
284
//      dockMenu->setItemChecked(dockMenu->idAt(2), dockBottom);
285
//      dockMenu->setItemChecked(dockMenu->idAt(3), dockLeft);
286
// 
287
//      orientationMenu = new QMenu(0);
288
//      orientationMenu->setCheckable(true);
289
//      orientationMenu->insertItem( tr("Horizontal"), this, SLOT(slotHor()));
290
//      orientationMenu->insertItem( tr("Vertical"), this, SLOT(slotVert()));
291
//      popup->insertItem( tr("Floating Orientation..."), orientationMenu);
292
//      bool b=(floatOrientation == Qt::Horizontal);
293
//      orientationMenu->setItemChecked(orientationMenu->idAt(0), b);
294
//      orientationMenu->setItemChecked(orientationMenu->idAt(1), !b);
4560 tsoots 295
}
296
 
10184 cbradney 297
// void ScToolBar::initPrefsButton()
298
// {
299
//      prefsButton = new QToolButton(Qt::DownArrow, this, "tbprefsbutton");
300
//      prefsButton->setAutoRaise(true);
301
//      popup = new QMenu(0);
302
//      prefsButton->setPopup(popup);
303
//      prefsButton->setPopupDelay(1);
304
// }
4560 tsoots 305
 
4541 tsoots 306
ScToolBar::~ScToolBar()
307
{
4546 subik 308
 
4541 tsoots 309
}
10969 subik 310
 
311
void ScToolBar::hideEvent(QHideEvent * e)
312
{
10982 fschmid 313
        emit visibilityChanged(isVisible());
10969 subik 314
        QToolBar::hideEvent(e);
315
}
316
 
317
void ScToolBar::showEvent(QShowEvent * e)
318
{
10982 fschmid 319
        emit visibilityChanged(isVisible());
10969 subik 320
        QToolBar::showEvent(e);
321
}