diff options
Diffstat (limited to 'src/frontend/displaywindow/cdisplaywindow.cpp')
-rw-r--r-- | src/frontend/displaywindow/cdisplaywindow.cpp | 122 |
1 files changed, 99 insertions, 23 deletions
diff --git a/src/frontend/displaywindow/cdisplaywindow.cpp b/src/frontend/displaywindow/cdisplaywindow.cpp index 0b9bc61..a584d6e 100644 --- a/src/frontend/displaywindow/cdisplaywindow.cpp +++ b/src/frontend/displaywindow/cdisplaywindow.cpp @@ -2,7 +2,7 @@ * * This file is part of BibleTime's source code, http://www.bibletime.info/. * -* Copyright 1999-2011 by the BibleTime developers. +* Copyright 1999-2014 by the BibleTime developers. * The BibleTime source code is licensed under the GNU General Public License version 2.0. * **********/ @@ -11,12 +11,14 @@ #include <QCloseEvent> #include <QDebug> +#include <QMdiSubWindow> #include <QMenu> #include <QStringList> #include <QWidget> -#include "backend/config/cbtconfig.h" +#include "backend/config/btconfig.h" #include "backend/keys/cswordkey.h" #include "bibletime.h" +#include "bibletimeapp.h" #include "frontend/cmdiarea.h" #include "frontend/display/cdisplay.h" #include "frontend/displaywindow/bttoolbarpopupaction.h" @@ -25,15 +27,12 @@ #include "frontend/displaywindow/btdisplaysettingsbutton.h" #include "frontend/keychooser/ckeychooser.h" #include "frontend/keychooser/bthistory.h" -#include "frontend/profile/cprofilewindow.h" #include "frontend/searchdialog/csearchdialog.h" -#include "util/directory.h" #include "util/cresmgr.h" +#include "util/geticon.h" -using namespace Profile; - -CDisplayWindow::CDisplayWindow(QList<CSwordModuleInfo*> modules, CMDIArea *parent) +CDisplayWindow::CDisplayWindow(const QList<CSwordModuleInfo *> & modules, CMDIArea * parent) : QMainWindow(parent), m_actionCollection(0), m_mdi(parent), @@ -69,8 +68,17 @@ CDisplayWindow::~CDisplayWindow() { m_swordKey = 0; } +QWidget * CDisplayWindow::getProfileWindow() const { + for (QWidget * w = parentWidget(); w; w = w->parentWidget()) { + QMdiSubWindow * sw = qobject_cast<QMdiSubWindow *>(w); + if (sw) + return sw; + } + return const_cast<CDisplayWindow *>(this); +} + BibleTime* CDisplayWindow::btMainWindow() { - return dynamic_cast<BibleTime*>(m_mdi->parent()); + return dynamic_cast<BibleTime*>(m_mdi->parent()->parent()); } void CDisplayWindow::setToolBarsHidden() { @@ -110,9 +118,77 @@ const QList<const CSwordModuleInfo*> CDisplayWindow::modules() const { return CSwordBackend::instance()->getConstPointerList(m_modules); } -void CDisplayWindow::insertKeyboardActions( BtActionCollection* a ) { - namespace DU = util::directory; +/** Store the settings of this window in the given CProfileWindow object. */ +void CDisplayWindow::storeProfileSettings(const QString & windowGroup) { + BtConfig & conf = btConfig(); + + conf.beginGroup(windowGroup); + + QWidget * w = getProfileWindow(); + + /** + \note We don't use saveGeometry/restoreGeometry for MDI subwindows, + because they give slightly incorrect results with some window + managers. Might be related to Qt bug QTBUG-7634. + */ + const QRect rect(w->x(), w->y(), w->width(), w->height()); + conf.setSessionValue<QRect>("windowRect", rect); + + conf.setSessionValue("maximized", w->isMaximized()); + + bool hasFocus = (w == dynamic_cast<CDisplayWindow *>(mdi()->activeSubWindow())); + conf.setSessionValue("hasFocus", hasFocus); + // conf.setSessionValue("type", static_cast<int>(modules().first()->type())); + + // Save current key: + if (key()) { + CSwordKey * k = key(); + sword::VerseKey * vk = dynamic_cast<sword::VerseKey*>(k); + QString oldLang; + if (vk) { + // Save keys in english only: + const QString oldLang = QString::fromLatin1(vk->getLocale()); + vk->setLocale("en"); + conf.setSessionValue("key", k->key()); + vk->setLocale(oldLang.toLatin1()); + } else { + conf.setSessionValue("key", k->key()); + } + } + // Save list of modules: + QStringList mods; + Q_FOREACH (const CSwordModuleInfo * module, modules()) + mods.append(module->name()); + conf.setSessionValue("modules", mods); + + conf.endGroup(); +} + +void CDisplayWindow::applyProfileSettings(const QString & windowGroup) { + BtConfig & conf = btConfig(); + conf.beginGroup(windowGroup); + setUpdatesEnabled(false); + + QWidget * w = getProfileWindow(); + + /** + \note We don't use restoreGeometry/saveGeometry for MDI subwindows, + because they give slightly incorrect results with some window + managers. Might be related to Qt bug QTBUG-7634. + */ + const QRect rect = conf.sessionValue<QRect>("windowRect"); + w->resize(rect.width(), rect.height()); + w->move(rect.x(), rect.y()); + + if (conf.sessionValue<bool>("maximized")) + w->showMaximized(); + + setUpdatesEnabled(true); + conf.endGroup(); +} + +void CDisplayWindow::insertKeyboardActions( BtActionCollection* a ) { QAction* actn = new QAction(QIcon(), tr("Select all"), a); actn->setShortcut(QKeySequence::SelectAll); a->addAction("selectAll", actn); @@ -129,13 +205,13 @@ void CDisplayWindow::insertKeyboardActions( BtActionCollection* a ) { actn->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L)); a->addAction("openLocation", actn); - actn = new QAction(QIcon(DU::getIcon(CResMgr::displaywindows::general::search::icon)), + actn = new QAction(QIcon(util::getIcon(CResMgr::displaywindows::general::search::icon)), tr("Search with works of this window"), a); actn->setShortcut(CResMgr::displaywindows::general::search::accel); a->addAction(CResMgr::displaywindows::general::search::actionName, actn); BtToolBarPopupAction* action = new BtToolBarPopupAction( - QIcon(DU::getIcon(CResMgr::displaywindows::general::backInHistory::icon)), + QIcon(util::getIcon(CResMgr::displaywindows::general::backInHistory::icon)), tr("Back in history"), a ); @@ -143,7 +219,7 @@ void CDisplayWindow::insertKeyboardActions( BtActionCollection* a ) { a->addAction(CResMgr::displaywindows::general::backInHistory::actionName, action); action = new BtToolBarPopupAction( - QIcon(DU::getIcon(CResMgr::displaywindows::general::forwardInHistory::icon)), + QIcon(util::getIcon(CResMgr::displaywindows::general::forwardInHistory::icon)), tr("Forward in history"), a ); @@ -201,7 +277,7 @@ void CDisplayWindow::initActions() { Q_ASSERT(ok); addAction(actn); - CBTConfig::setupAccelSettings(CBTConfig::allWindows, ac); + ac->readShortcuts("Displaywindow shortcuts"); } /** Refresh the settings of this window. */ @@ -223,8 +299,8 @@ void CDisplayWindow::reload(CSwordBackend::SetupChangedReason) { lookup(); - CBTConfig::setupAccelSettings(CBTConfig::allWindows, actionCollection()); - CBTConfig::setupAccelSettings(CBTConfig::readWindow, actionCollection()); + actionCollection()->readShortcuts("DisplayWindow shortcuts"); + actionCollection()->readShortcuts("Readwindow shortcuts"); emit sigModuleListSet(m_modules); } @@ -316,7 +392,7 @@ void CDisplayWindow::setModuleChooserBar( BtModuleChooserBar* bar ) { m_moduleChooserBar = bar; bar->setWindowTitle(tr("Work chooser buttons")); bar->setLayoutDirection(Qt::LeftToRight); - bar->setVisible(CBTConfig::get(CBTConfig::showTextWindowModuleSelectorButtons)); + bar->setVisible(btConfig().sessionValue<bool>("GUI/showTextWindowModuleSelectorButtons", true)); } } @@ -325,7 +401,7 @@ void CDisplayWindow::setHeaderBar( QToolBar* header ) { m_headerBar = header; header->setMovable(false); header->setWindowTitle(tr("Text area header")); - header->setVisible(CBTConfig::get(CBTConfig::showTextWindowHeaders)); + header->setVisible(btConfig().sessionValue<bool>("GUI/showTextWindowHeaders", true)); } /** Sets the modules. */ @@ -348,15 +424,15 @@ bool CDisplayWindow::init() { parentWidget()->setFocusPolicy(Qt::ClickFocus); initActions(); initToolbars(); - if ( ! CBTConfig::get(CBTConfig::showToolbarsInEachWindow)) + if (!btConfig().sessionValue<bool>("GUI/showToolbarsInEachWindow", true)) setToolBarsHidden(); btMainWindow()->clearMdiToolBars(); clearMainWindowToolBars(); initConnections(); setupPopupMenu(); - m_filterOptions = CBTConfig::getFilterOptionDefaults(); - m_displayOptions = CBTConfig::getDisplayOptionDefaults(); + m_filterOptions = btConfig().getFilterOptions(); + m_displayOptions = btConfig().getDisplayOptions(); emit sigDisplayOptionsChanged(m_displayOptions); emit sigFilterOptionsChanged(m_filterOptions); emit sigModulesChanged(modules()); @@ -374,13 +450,13 @@ static void prepareToolBar(QToolBar* bar, const QString& title, bool visible) { /** Setup the Navigation toolbar. */ void CDisplayWindow::setMainToolBar( QToolBar* bar ) { - prepareToolBar(bar, tr("Navigation"), CBTConfig::get(CBTConfig::showTextWindowNavigator) ); + prepareToolBar(bar, tr("Navigation"), btConfig().sessionValue<bool>("GUI/showTextWindowNavigator", true)); m_mainToolBar = bar; } /** Setup the Tools toolbar. */ void CDisplayWindow::setButtonsToolBar( QToolBar* bar ) { - prepareToolBar(bar, tr("Tool"), CBTConfig::get(CBTConfig::showTextWindowToolButtons) ); + prepareToolBar(bar, tr("Tool"), btConfig().sessionValue<bool>("GUI/showTextWindowToolButtons", true)); m_buttonsToolBar = bar; } |