summaryrefslogtreecommitdiff
path: root/src/frontend/displaywindow/cdisplaywindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/displaywindow/cdisplaywindow.cpp')
-rw-r--r--src/frontend/displaywindow/cdisplaywindow.cpp122
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;
}