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