/* For general Scribus (>=1.3.2) copyright and licensing information please refer to the COPYING file provided with the program. Following this notice may exist a copyright and/or license notice that predates the release of Scribus 1.3.2 for which a new license (GPL+exception) is in place. */ /*************************************************************************** * Copyright (C) 2006 by Riku Leino * * riku@scribus.info * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include #include #include #include "sctoolbar.h" #include "prefscontext.h" #include "prefsfile.h" #include "prefsmanager.h" #include "util_icon.h" ScToolBar::ScToolBar(const QString& name, const QString &prefName, QMainWindow *parent, Qt::Orientation o) : QToolBar(name, parent), m_name(QString("ToolBar-%1").arg(prefName)), m_prefs(PrefsManager::instance()->prefsFile->getContext(m_name)) { setObjectName(name); // hide(); parentMW=parent; setAllowedAreas(Qt::AllToolBarAreas); this->setIconSize(QSize(16,16)); /* setCloseMode(Q3DockWindow::Undocked); if (m_prefs->contains("IsDocked")) // set docking { if (m_prefs->getBool("IsDocked", true)) { QString dockPlace = m_prefs->get("DockPlace", "top"); if (dockPlace == "top") mainWindow()->addDockWindow(this, Qt::DockTop); else if (dockPlace == "bottom") mainWindow()->addDockWindow(this, Qt::DockBottom); else if (dockPlace == "right") mainWindow()->addDockWindow(this, Qt::DockRight); else if (dockPlace == "left") mainWindow()->addDockWindow(this, Qt::DockLeft); } else { undock(); move(QPoint(m_prefs->getInt("x", 50), m_prefs->getInt("y", 50))); } } if (m_prefs->contains("FloatOrientation")) // set float orientation { floatOrientation = m_prefs->getInt("FloatOrientation", 1) == Hor ? Qt::Horizontal : Qt::Vertical; } else { floatOrientation = o; m_prefs->set("FloatOrientation", o == Qt::Horizontal ? Hor : Vert); } if (!m_prefs->contains("PosIndex")) storeDockPosition(); else moveDocks(); dockTop = m_prefs->getBool("DockTop", 1); dockRight = m_prefs->getBool("DockRight", 1); dockBottom = m_prefs->getBool("DockBottom", 1); dockLeft = m_prefs->getBool("DockLeft", 1); mainWindow()->setDockEnabled(this, Qt::DockTop, dockTop); mainWindow()->setDockEnabled(this, Qt::DockRight, dockRight); mainWindow()->setDockEnabled(this, Qt::DockBottom, dockBottom); mainWindow()->setDockEnabled(this, Qt::DockLeft, dockLeft); if (place() == InDock) setOrientation(area()->orientation()); else setOrientation(floatOrientation); initPrefsButton(); */ languageChange(); // connect(this, SIGNAL(placeChanged(Q3DockWindow::Place)), this, SLOT(slotPlaceChanged(Q3DockWindow::Place))); } void ScToolBar::initVisibility() { if (m_prefs->getBool("IsVisible", true)) { show(); /* if (place() == InDock) setOrientation(area()->orientation()); else setOrientation(floatOrientation); */ } else hide(); connectPrefsSlot(true); } void ScToolBar::connectPrefsSlot(bool b) { if (b) connect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(slotVisibilityChanged(bool))); else disconnect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(slotVisibilityChanged(bool))); } /* int ScToolBar::position() { if (place() == Q3DockWindow::OutsideDock) return -1; int index = -1; area()->hasDockWindow(this, &index); return index; } void ScToolBar::storeDockPosition() { m_prefs->set("PosIndex", position()); m_prefs->set("Offset", offset()); } void ScToolBar::storeDockPositions() { if (place() == Q3DockWindow::OutsideDock) return; // nothing to store if not docked QList tbs = area()->dockWindowList(); for (int i = 0; i < tbs.count(); ++i) { if (ScToolBar *sctb = dynamic_cast(tbs.at(i))) sctb->storeDockPosition(); } } void ScToolBar::moveDocks() { if (place() == Q3DockWindow::OutsideDock) return; // do not move if not docked; QList tbs = area()->dockWindowList(); for (int i = 0; i < tbs.count(); ++i) { if (ScToolBar *sctb = dynamic_cast(tbs.at(i))) sctb->moveDock(); } } void ScToolBar::moveDock() { if (place() == Q3DockWindow::OutsideDock) return; // do not move if not docked area()->moveDockWindow(this, m_prefs->getInt("PosIndex", -1)); setOffset(m_prefs->getInt("Offset", 0)); } void ScToolBar::slotPlaceChanged(Q3DockWindow::Place p) { m_prefs->set("IsDocked", p == Q3DockWindow::InDock); m_prefs->set("x", x()); m_prefs->set("y", y()); if (p == Q3DockWindow::InDock) { setOrientation(area()->orientation()); QString dockPlace = "top"; if (area() == mainWindow()->leftDock()) dockPlace = "left"; else if (area() == mainWindow()->rightDock()) dockPlace = "right"; else if (area() == mainWindow()->bottomDock()) dockPlace = "bottom"; m_prefs->set("DockPlace", dockPlace); storeDockPositions(); } else { setOrientation(floatOrientation); } } */ void ScToolBar::slotVisibilityChanged(bool visible) { m_prefs->set("IsVisible", visible); } /* void ScToolBar::slotTop() { dockTop = !dockTop; mainWindow()->setDockEnabled(this, Qt::DockTop, dockTop); dockMenu->setItemChecked(dockMenu->idAt(0), dockTop); m_prefs->set("DockTop", dockTop); if (place() == InDock && mainWindow()->topDock() == area()) undock(); } void ScToolBar::slotRight() { dockRight = !dockRight; mainWindow()->setDockEnabled(this, Qt::DockRight, dockRight); dockMenu->setItemChecked(dockMenu->idAt(1), dockRight); m_prefs->set("DockRight", dockRight); if (place() == InDock && mainWindow()->rightDock() == area()) undock(); } void ScToolBar::slotBottom() { dockBottom = !dockBottom; mainWindow()->setDockEnabled(this, Qt::DockBottom, dockBottom); dockMenu->setItemChecked(dockMenu->idAt(2), dockBottom); m_prefs->set("DockBottom", dockBottom); if (place() == InDock && mainWindow()->bottomDock() == area()) undock(); } void ScToolBar::slotLeft() { dockLeft = !dockLeft; mainWindow()->setDockEnabled(this, Qt::DockLeft, dockLeft); dockMenu->setItemChecked(dockMenu->idAt(3), dockLeft); m_prefs->set("DockLeft", dockLeft); if (place() == InDock && mainWindow()->leftDock() == area()) undock(); } void ScToolBar::slotVert() { floatOrientation = Qt::Vertical; orientationMenu->setItemChecked(orientationMenu->idAt(0), false); orientationMenu->setItemChecked(orientationMenu->idAt(1), true); m_prefs->set("FloatOrientation", Vert); if (place() != InDock) setOrientation(floatOrientation); } void ScToolBar::slotHor() { floatOrientation = Qt::Horizontal; orientationMenu->setItemChecked(orientationMenu->idAt(0), true); orientationMenu->setItemChecked(orientationMenu->idAt(1), false); m_prefs->set("FloatOrientation", Hor); if (place() != InDock) setOrientation(floatOrientation); } */ void ScToolBar::languageChange() { // popup->clear(); // dockMenu = new QMenu(0); // dockMenu->setCheckable(true); // dockMenu->insertItem( tr("Top"), this, SLOT(slotTop())); // dockMenu->insertItem( tr("Right"), this, SLOT(slotRight())); // dockMenu->insertItem( tr("Bottom"), this, SLOT(slotBottom())); // dockMenu->insertItem( tr("Left"), this, SLOT(slotLeft())); // popup->insertItem( tr("Allow Docking To..."), dockMenu); // dockMenu->setItemChecked(dockMenu->idAt(0), dockTop); // dockMenu->setItemChecked(dockMenu->idAt(1), dockRight); // dockMenu->setItemChecked(dockMenu->idAt(2), dockBottom); // dockMenu->setItemChecked(dockMenu->idAt(3), dockLeft); // // orientationMenu = new QMenu(0); // orientationMenu->setCheckable(true); // orientationMenu->insertItem( tr("Horizontal"), this, SLOT(slotHor())); // orientationMenu->insertItem( tr("Vertical"), this, SLOT(slotVert())); // popup->insertItem( tr("Floating Orientation..."), orientationMenu); // bool b=(floatOrientation == Qt::Horizontal); // orientationMenu->setItemChecked(orientationMenu->idAt(0), b); // orientationMenu->setItemChecked(orientationMenu->idAt(1), !b); } // void ScToolBar::initPrefsButton() // { // prefsButton = new QToolButton(Qt::DownArrow, this, "tbprefsbutton"); // prefsButton->setAutoRaise(true); // popup = new QMenu(0); // prefsButton->setPopup(popup); // prefsButton->setPopupDelay(1); // } ScToolBar::~ScToolBar() { } void ScToolBar::hideEvent(QHideEvent * e) { emit visibilityChanged(isVisible()); QToolBar::hideEvent(e); } void ScToolBar::showEvent(QShowEvent * e) { emit visibilityChanged(isVisible()); QToolBar::showEvent(e); }