1 /*********
2 *
3 * This file is part of BibleTime's source code, http://www.bibletime.info/.
4 *
5 * Copyright 1999-2016 by the BibleTime developers.
6 * The BibleTime source code is licensed under the GNU General Public License version 2.0.
7 *
8 **********/
9
10 #include "frontend/displaywindow/cbookreadwindow.h"
11
12 #include <QAction>
13 #include <QMenu>
14 #include <QSplitter>
15 #include <QToolBar>
16 #include "bibletime.h"
17 #include "backend/keys/cswordtreekey.h"
18 #include "frontend/display/bthtmlreaddisplay.h"
19 #include "frontend/displaywindow/bttoolbarpopupaction.h"
20 #include "frontend/displaywindow/btactioncollection.h"
21 #include "frontend/displaywindow/btmodulechooserbar.h"
22 #include "frontend/displaywindow/btdisplaysettingsbutton.h"
23 #include "frontend/keychooser/cbooktreechooser.h"
24 #include "util/btassert.h"
25 #include "util/btconnect.h"
26 #include "util/cresmgr.h"
27 #include "util/tool.h"
28
29
applyProfileSettings(const QString & windowGroup)30 void CBookReadWindow::applyProfileSettings(const QString & windowGroup) {
31 CLexiconReadWindow::applyProfileSettings(windowGroup);
32
33 BT_ASSERT(m_treeAction);
34 BT_ASSERT(windowGroup.endsWith('/'));
35 if (btConfig().sessionValue<bool>(windowGroup + "treeShown", true) != m_treeAction->isChecked())
36 m_treeAction->activate(QAction::Trigger);
37 }
38
storeProfileSettings(QString const & windowGroup) const39 void CBookReadWindow::storeProfileSettings(QString const & windowGroup) const {
40 CLexiconReadWindow::storeProfileSettings(windowGroup);
41
42 BT_ASSERT(windowGroup.endsWith('/'));
43 btConfig().setSessionValue(windowGroup + "treeShown", m_treeAction->isChecked());
44 }
45
initActions()46 void CBookReadWindow::initActions() {
47 CLexiconReadWindow::initActions();
48 BtActionCollection* ac = actionCollection();
49 insertKeyboardActions(ac);
50
51 //cleanup, not a clean oo-solution
52 ac->action("nextEntry").setEnabled(false);
53 ac->action("previousEntry").setEnabled(false);
54
55 m_treeAction = &ac->action("toggleTree");
56 BT_ASSERT(m_treeAction);
57 BT_CONNECT(m_treeAction, SIGNAL(triggered()), this, SLOT(treeToggled()));
58 addAction(m_treeAction);
59
60 ac->readShortcuts("Book shortcuts");
61 }
62
insertKeyboardActions(BtActionCollection * const a)63 void CBookReadWindow::insertKeyboardActions( BtActionCollection* const a ) {
64 QAction* qaction;
65
66 qaction = new QAction( /* QIcon(CResMgr::displaywindows::bookWindow::toggleTree::icon), */
67 tr("Toggle tree view"), a);
68 qaction->setCheckable(true);
69 // qaction->setShortcut(CResMgr::displaywindows::bookWindow::toggleTree::accel);
70 a->addAction("toggleTree", qaction);
71 }
72
73 /** No descriptions */
initConnections()74 void CBookReadWindow::initConnections() {
75 CLexiconReadWindow::initConnections();
76
77 BT_CONNECT(m_treeChooser, SIGNAL(keyChanged(CSwordKey *)),
78 this, SLOT(lookupSwordKey(CSwordKey *)));
79 BT_CONNECT(m_treeChooser, SIGNAL(keyChanged(CSwordKey *)),
80 keyChooser(), SLOT(updateKey(CSwordKey *)));
81 BT_CONNECT(keyChooser(), SIGNAL(keyChanged(CSwordKey *)),
82 m_treeChooser, SLOT(updateKey(CSwordKey *)));
83 }
84
85 /** Init the view */
initView()86 void CBookReadWindow::initView() {
87 QSplitter* splitter = new QSplitter(this);
88 m_treeChooser = new CBookTreeChooser(modules(), history(), key(), splitter);
89 setDisplayWidget(new BtHtmlReadDisplay(this, splitter));
90 m_treeChooser->hide();
91
92 // Create Navigation toolbar
93 setMainToolBar( new QToolBar(this) );
94 mainToolBar()->setAllowedAreas(Qt::TopToolBarArea);
95 mainToolBar()->setFloatable(false);
96 addToolBar(mainToolBar());
97 setKeyChooser( CKeyChooser::createInstance(modules(), history(), key(), mainToolBar()) );
98
99 // Create the Works toolbar
100 setModuleChooserBar( new BtModuleChooserBar(this));
101 moduleChooserBar()->setModules(getModuleList(), modules().first()->type(), this);
102 addToolBar(moduleChooserBar());
103
104 // Create the Tools toolbar
105 setButtonsToolBar( new QToolBar(this) );
106 buttonsToolBar()->setAllowedAreas(Qt::TopToolBarArea);
107 buttonsToolBar()->setFloatable(false);
108 addToolBar(buttonsToolBar());
109
110 setCentralWidget( splitter );
111 setWindowIcon(util::tool::getIconForModule(modules().first()));
112 }
113
initToolbars()114 void CBookReadWindow::initToolbars() {
115 BT_ASSERT(m_treeAction);
116 BT_ASSERT(m_actions.backInHistory);
117
118 mainToolBar()->addAction(m_actions.backInHistory);
119 mainToolBar()->addAction(m_actions.forwardInHistory);
120 mainToolBar()->addWidget(keyChooser());
121
122 // Tools toolbar
123 buttonsToolBar()->addAction(m_treeAction); // Tree
124 m_treeAction->setChecked(false);
125 BtDisplaySettingsButton* button = new BtDisplaySettingsButton(buttonsToolBar());
126 setDisplaySettingsButton(button);
127 buttonsToolBar()->addWidget(button); // Display settings
128 // Search:
129 buttonsToolBar()->addAction(
130 &actionCollection()->action(
131 CResMgr::displaywindows::general::search::actionName));
132 }
133
setupMainWindowToolBars()134 void CBookReadWindow::setupMainWindowToolBars() {
135 // Navigation toolbar
136 btMainWindow()->navToolBar()->addAction(m_actions.backInHistory); //1st button
137 btMainWindow()->navToolBar()->addAction(m_actions.forwardInHistory); //2nd button
138 CKeyChooser* keyChooser = CKeyChooser::createInstance(modules(), history(), key(), btMainWindow()->navToolBar() );
139 btMainWindow()->navToolBar()->addWidget(keyChooser);
140 BT_CONNECT(keyChooser, SIGNAL(keyChanged(CSwordKey *)),
141 this, SLOT(lookupSwordKey(CSwordKey *)));
142 BT_CONNECT(this, SIGNAL(sigKeyChanged(CSwordKey *)),
143 keyChooser, SLOT(updateKey(CSwordKey *)));
144
145 // Works toolbar
146 btMainWindow()->worksToolBar()->setModules(getModuleList(), modules().first()->type(), this);
147
148 // Tools toolbar
149 btMainWindow()->toolsToolBar()->addAction(m_treeAction); // Tree
150 BtDisplaySettingsButton* button = new BtDisplaySettingsButton(buttonsToolBar());
151 setDisplaySettingsButton(button);
152 btMainWindow()->toolsToolBar()->addWidget(button); // Display settings
153 // Search:
154 btMainWindow()->toolsToolBar()->addAction(
155 &actionCollection()->action(
156 CResMgr::displaywindows::general::search::actionName));
157 }
158
159 /** Is called when the action was executed to toggle the tree view. */
treeToggled()160 void CBookReadWindow::treeToggled() {
161 if (m_treeAction->isChecked()) {
162 m_treeChooser->doShow();
163 }
164 else {
165 m_treeChooser->hide();
166 }
167 }
168
169 /** Reimplementation to take care of the tree chooser. */
modulesChanged()170 void CBookReadWindow::modulesChanged() {
171 CLexiconReadWindow::modulesChanged();
172 m_treeChooser->setModules(modules());
173 }
174
setupPopupMenu()175 void CBookReadWindow::setupPopupMenu() {
176 CLexiconReadWindow::setupPopupMenu();
177 }
178
reload(CSwordBackend::SetupChangedReason reason)179 void CBookReadWindow::reload(CSwordBackend::SetupChangedReason reason) {
180 CLexiconReadWindow::reload(reason);
181 }
182