BibleTime
bibletime_init.cpp
Go to the documentation of this file.
1 /*********
2 *
3 * In the name of the Father, and of the Son, and of the Holy Spirit.
4 *
5 * This file is part of BibleTime's source code, https://bibletime.info/
6 *
7 * Copyright 1999-2021 by the BibleTime developers.
8 * The BibleTime source code is licensed under the GNU General Public License
9 * version 2.0.
10 *
11 **********/
12 
13 #include "bibletime.h"
14 
15 #include <QActionGroup>
16 #include <QDebug>
17 #include <QDockWidget>
18 #include <QMdiSubWindow>
19 #include <QMenu>
20 #include <QMenuBar>
21 #include <QPointer>
22 #include <QSplitter>
23 #include <QToolBar>
24 #include <QToolButton>
25 #include <QVBoxLayout>
26 #include "../backend/config/btconfig.h"
27 #include "../util/btassert.h"
28 #include "../util/btconnect.h"
29 #include "../util/cresmgr.h"
30 #include "bibletimeapp.h"
31 #include "btbookshelfdockwidget.h"
32 #include "btopenworkaction.h"
33 #include "cinfodisplay.h"
34 #include "cmdiarea.h"
35 #include "display/btfindwidget.h"
38 #include "keychooser/ckeychooser.h"
40 
41 // Sword includes:
42 #include <swmgr.h>
43 
44 
45 using namespace InfoDisplay;
46 
47 /**Initializes the view of this widget*/
49 
50  // Create menu and toolbar before the mdi area
51  createMenuAndToolBar();
52 
53  createCentralWidget();
54 
55  m_bookshelfDock = new BtBookshelfDockWidget(this);
56  addDockWidget(Qt::LeftDockWidgetArea, m_bookshelfDock);
57 
58  m_bookmarksDock = new QDockWidget(this);
59  m_bookmarksPage = new CBookmarkIndex(this);
60  m_bookmarksDock->setWidget(m_bookmarksPage);
61  addDockWidget(Qt::LeftDockWidgetArea, m_bookmarksDock);
62  tabifyDockWidget(m_bookmarksDock, m_bookshelfDock);
63  m_bookshelfDock->loadBookshelfState();
64 
65  m_magDock = new QDockWidget(this);
66  m_infoDisplay = new CInfoDisplay(this);
67  m_infoDisplay->resize(150, 150);
68  m_magDock->setWidget(m_infoDisplay);
69  addDockWidget(Qt::LeftDockWidgetArea, m_magDock);
70 
72  m_infoDisplay,
73  qOverload<CSwordModuleInfo *>(&CInfoDisplay::setInfo));
75  m_infoDisplay,
76  qOverload<Rendering::InfoType, QString const &>(
78 
79  m_mdi->setMinimumSize(100, 100);
80  m_mdi->setFocusPolicy(Qt::ClickFocus);
81 
82  BT_CONNECT(&m_autoScrollTimer, &QTimer::timeout,
84 }
85 
86 // Creates QAction's for all actions that can have keyboard shortcuts
87 // Used in creating the main window and by the configuration dialog for setting shortcuts
89  QAction* action = new QAction(a);
90  action->setText(tr("&Quit"));
91  action->setIcon(CResMgr::mainMenu::window::quit::icon());
92  action->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q));
93  action->setToolTip(tr("Quit BibleTime"));
94  a->addAction(QStringLiteral("quit"), action);
95 
96  action = new QAction(a);
97  action->setText(tr("Auto scroll up"));
98  action->setShortcut(QKeySequence(Qt::ShiftModifier | Qt::Key_Up));
99  a->addAction(QStringLiteral("autoScrollUp"), action);
100 
101  action = new QAction(a);
102  action->setText(tr("Auto scroll down"));
103  action->setShortcut(QKeySequence(Qt::ShiftModifier | Qt::Key_Down));
104  a->addAction(QStringLiteral("autoScrollDown"), action);
105 
106  action = new QAction(a);
107  action->setText(tr("Auto scroll pause"));
108  action->setShortcut(QKeySequence(Qt::Key_Space));
109  action->setDisabled(true);
110  a->addAction(QStringLiteral("autoScrollPause"), action);
111 
112  action = new QAction(a);
113  action->setText(tr("&Fullscreen mode"));
114  action->setIcon(CResMgr::mainMenu::window::showFullscreen::icon());
115  action->setShortcut(QKeySequence(CResMgr::mainMenu::window::showFullscreen::accel));
116  action->setToolTip(tr("Toggle fullscreen mode of the main window"));
117  a->addAction(QStringLiteral("toggleFullscreen"), action);
118 
119  action = new QAction(a);
120  action->setText(tr("&Show toolbar"));
121  action->setShortcut(QKeySequence(Qt::Key_F6));
122  a->addAction(QStringLiteral("showToolbar"), action);
123 
124  action = new QAction(a);
125  action->setText(tr("Search in &open works..."));
126  action->setIcon(CResMgr::mainMenu::mainIndex::search::icon());
127  action->setShortcut(QKeySequence(CResMgr::mainMenu::mainIndex::search::accel));
128  action->setToolTip(tr("Search in all works that are currently open"));
129  a->addAction(QStringLiteral("searchOpenWorks"), action);
130 
131  action = new QAction(a);
132  action->setText(tr("Search in standard &Bible..."));
133  action->setIcon(CResMgr::mainMenu::mainIndex::searchdefaultbible::icon());
134  action->setShortcut(QKeySequence(CResMgr::mainMenu::mainIndex::searchdefaultbible::accel));
135  action->setToolTip(tr("Search in the standard Bible"));
136  a->addAction(QStringLiteral("searchStdBible"), action);
137 
138  action = new QAction(a);
139  action->setText(tr("Save as &new session..."));
140  action->setIcon(CResMgr::mainMenu::window::saveToNewProfile::icon());
141  action->setShortcut(QKeySequence(CResMgr::mainMenu::window::saveToNewProfile::accel));
142  action->setToolTip(tr("Create and save a new session"));
143  a->addAction(QStringLiteral("saveNewSession"), action);
144 
145  action = new QAction(a);
146  action->setText(tr("&Manual mode"));
147  action->setIcon(CResMgr::mainMenu::window::arrangementMode::manual::icon());
148  action->setShortcut(QKeySequence(CResMgr::mainMenu::window::arrangementMode::manual::accel));
149  action->setToolTip(tr("Manually arrange the open windows"));
150  a->addAction(QStringLiteral("manualArrangement"), action);
151 
152  action = new QAction(a);
153  action->setText(tr("Auto-tile &vertically"));
154  action->setIcon(CResMgr::mainMenu::window::arrangementMode::autoTileVertical::icon());
156  action->setToolTip(tr("Automatically tile the open windows vertically (arrange side by side)"));
157  a->addAction(QStringLiteral("autoVertical"), action);
158 
159  action = new QAction(a);
160  action->setText(tr("Auto-tile &horizontally"));
161  action->setIcon(CResMgr::mainMenu::window::arrangementMode::autoTileHorizontal::icon());
163  action->setToolTip(tr("Automatically tile the open windows horizontally (arrange on top of each other)"));
164  a->addAction(QStringLiteral("autoHorizontal"), action);
165 
166  action = new QAction(a);
167  action->setText(tr("Auto-&tile"));
168  action->setIcon(CResMgr::mainMenu::window::arrangementMode::autoTile::icon());
169  action->setShortcut(QKeySequence(CResMgr::mainMenu::window::arrangementMode::autoTile::accel));
170  action->setToolTip(tr("Automatically tile the open windows"));
171  a->addAction(QStringLiteral("autoTile"), action);
172 
173  action = new QAction(a);
174  action->setText(tr("Ta&bbed"));
175  action->setIcon(CResMgr::mainMenu::window::arrangementMode::autoTabbed::icon());
176  action->setShortcut(QKeySequence(CResMgr::mainMenu::window::arrangementMode::autoTabbed::accel));
177  action->setToolTip(tr("Automatically tab the open windows"));
178  a->addAction(QStringLiteral("autoTabbed"), action);
179 
180  action = new QAction(a);
181  action->setText(tr("Auto-&cascade"));
182  action->setIcon(CResMgr::mainMenu::window::arrangementMode::autoCascade::icon());
183  action->setShortcut(QKeySequence(CResMgr::mainMenu::window::arrangementMode::autoCascade::accel));
184  action->setToolTip(tr("Automatically cascade the open windows"));
185  a->addAction(QStringLiteral("autoCascade"), action);
186 
187  action = new QAction(a);
188  action->setText(tr("&Cascade"));
189  action->setIcon(CResMgr::mainMenu::window::cascade::icon());
190  action->setShortcut(QKeySequence(CResMgr::mainMenu::window::cascade::accel));
191  action->setToolTip(tr("Cascade the open windows"));
192  a->addAction(QStringLiteral("cascade"), action);
193 
194  action = new QAction(a);
195  action->setText(tr("&Tile"));
196  action->setIcon(CResMgr::mainMenu::window::tile::icon());
197  action->setShortcut(QKeySequence(CResMgr::mainMenu::window::tile::accel));
198  action->setToolTip(tr("Tile the open windows"));
199  a->addAction(QStringLiteral("tile"), action);
200 
201  action = new QAction(a);
202  action->setText(tr("Tile &vertically"));
203  action->setIcon(CResMgr::mainMenu::window::tileVertical::icon());
204  action->setShortcut(QKeySequence(CResMgr::mainMenu::window::tileVertical::accel));
205  action->setToolTip(tr("Vertically tile (arrange side by side) the open windows"));
206  a->addAction(QStringLiteral("tileVertically"), action);
207 
208  action = new QAction(a);
209  action->setText(tr("Tile &horizontally"));
210  action->setIcon(CResMgr::mainMenu::window::tileHorizontal::icon());
211  action->setShortcut(QKeySequence(CResMgr::mainMenu::window::tileHorizontal::accel));
212  action->setToolTip(tr("Horizontally tile (arrange on top of each other) the open windows"));
213  a->addAction(QStringLiteral("tileHorizontally"), action);
214 
215  action = new QAction(a);
216  action->setText(tr("Close &window"));
217  action->setIcon(CResMgr::mainMenu::window::close::icon());
218  action->setShortcut(QKeySequence(CResMgr::mainMenu::window::close::accel));
219  action->setToolTip(tr("Close the current open window"));
220  a->addAction(QStringLiteral("closeWindow"), action);
221 
222  action = new QAction(a);
223  action->setText(tr("Cl&ose all windows"));
224  action->setIcon(CResMgr::mainMenu::window::closeAll::icon());
225  action->setShortcut(QKeySequence(CResMgr::mainMenu::window::closeAll::accel));
226  action->setToolTip(tr("Close all open windows inside BibleTime"));
227  a->addAction(QStringLiteral("closeAllWindows"), action);
228 
229  action = new QAction(a);
230  action->setText(tr("&Configure BibleTime..."));
231  action->setIcon(CResMgr::mainMenu::settings::configureDialog::icon());
232  action->setToolTip(tr("Set BibleTime's preferences"));
233  a->addAction(QStringLiteral("setPreferences"), action);
234 
235  action = new QAction(a);
236  action->setText(tr("Bookshelf Manager..."));
237  action->setIcon(CResMgr::mainMenu::settings::swordSetupDialog::icon());
238  action->setShortcut(QKeySequence(CResMgr::mainMenu::settings::swordSetupDialog::accel));
239  action->setToolTip(tr("Configure your bookshelf and install/update/remove/index works"));
240  a->addAction(QStringLiteral("bookshelfWizard"), action);
241 
242  action = new QAction(a);
243  action->setText(tr("&Handbook"));
244  action->setIcon(CResMgr::mainMenu::help::handbook::icon());
245  action->setShortcut(QKeySequence(CResMgr::mainMenu::help::handbook::accel));
246  action->setToolTip(tr("Open BibleTime's handbook"));
247  a->addAction(QStringLiteral("openHandbook"), action);
248 
249  action = new QAction(a);
250  action->setText(tr("&Bible Study Howto"));
251  action->setIcon(CResMgr::mainMenu::help::bibleStudyHowTo::icon());
252  action->setShortcut(QKeySequence(CResMgr::mainMenu::help::bibleStudyHowTo::accel));
253  action->setToolTip(tr("Open the Bible study HowTo included with BibleTime.<br/>This HowTo is an introduction on how to study the Bible in an efficient way."));
254  a->addAction(QStringLiteral("bibleStudyHowto"), action);
255 
256  action = new QAction(a);
257  action->setText(tr("&About BibleTime"));
258  action->setIcon(CResMgr::mainMenu::help::aboutBibleTime::icon());
259  action->setToolTip(tr("Information about the BibleTime program"));
260  a->addAction(QStringLiteral("aboutBibleTime"), action);
261 
262  action = new QAction(a);
263  action->setText(tr("&Tip of the day..."));
264  action->setIcon(CResMgr::mainMenu::help::tipOfTheDay::icon());
265  action->setShortcut(QKeySequence(CResMgr::mainMenu::help::tipOfTheDay::accel));
266  action->setToolTip(tr("Show tips about BibleTime"));
267  a->addAction(QStringLiteral("tipOfTheDay"), action);
268 
269  action = new QAction(a);
270  a->addAction(QStringLiteral("showToolbarsInTextWindows"), action);
271 
272  action = new QAction(a);
273  a->addAction(QStringLiteral("showNavigation"), action);
274 
275  action = new QAction(a);
276  a->addAction(QStringLiteral("showWorks"), action);
277 
278  action = new QAction(a);
279  a->addAction(QStringLiteral("showTools"), action);
280 
281  action = new QAction(a);
282  a->addAction(QStringLiteral("showFormat"), action);
283 
284  action = new QAction(a);
285  a->addAction(QStringLiteral("showParallelTextHeaders"), action);
286 
287  action = new QAction(a);
288  a->addAction(QStringLiteral("showBookshelf"), action);
289 
290  action = new QAction(a);
291  a->addAction(QStringLiteral("showBookmarks"), action);
292 
293  action = new QAction(a);
294  a->addAction(QStringLiteral("showMag"), action);
295 
296  retranslateUiActions(a);
297 }
298 
299 static QToolBar* createToolBar(QWidget* parent, bool visible) {
300  QToolBar* bar = new QToolBar(parent);
301  bar->setFloatable(false);
302  bar->setMovable(true);
303  bar->setVisible(visible);
304  return bar;
305 }
306 
308  // Clear main window toolbars
309  m_navToolBar->clear();
310  m_worksToolBar->clear();
311  m_toolsToolBar->clear();
312 }
313 
315  BT_ASSERT(m_navToolBar);
316 
317  return m_navToolBar->findChild<CKeyChooser *>();
318 }
319 
321 {
322  // Create menubar
323  menuBar();
324 
325  m_mainToolBar = createToolBar(this, true);
326  addToolBar(m_mainToolBar);
327 
328  // Set visibility of main window toolbars based on config
329  bool visible =
330  !btConfig().session().value<bool>(
331  QStringLiteral("GUI/showToolbarsInEachWindow"),
332  true);
333 
334  m_navToolBar = createToolBar(this, visible);
335  addToolBar(m_navToolBar);
336 
337  m_worksToolBar = new BtModuleChooserBar(this);
338  m_worksToolBar->setVisible(visible);
339  addToolBar(m_worksToolBar);
340 
341  m_toolsToolBar = createToolBar(this, visible);
342  addToolBar(m_toolsToolBar);
343 }
344 
346 {
347  m_mdi = new CMDIArea(this);
348  m_findWidget = new BtFindWidget(this);
349  m_findWidget->setVisible(false);
350 
351  QVBoxLayout* layout = new QVBoxLayout();
352  layout->setContentsMargins(0, 0, 0, 0);
353  layout->addWidget(m_mdi);
354  layout->addWidget(m_findWidget);
355 
356  QWidget* widget = new QWidget(this);
357  widget->setLayout(layout);
358  setCentralWidget(widget);
359 
360  BT_CONNECT(m_findWidget, &BtFindWidget::findNext,
362 
363  BT_CONNECT(m_findWidget, &BtFindWidget::findPrevious,
365 
368 
369  BT_CONNECT(m_mdi, &CMDIArea::subWindowActivated,
371 }
372 
373 /** Initializes the action objects of the GUI */
375  m_actionCollection = new BtActionCollection(this);
376  insertKeyboardActions(m_actionCollection);
377 
378  // File menu actions:
379  m_openWorkAction =
380  new BtOpenWorkAction(
381  btConfig(),
382  QStringLiteral("GUI/mainWindow/openWorkAction/grouping"),
383  this);
384  BT_CONNECT(m_openWorkAction, &BtOpenWorkAction::triggered,
385  [this](CSwordModuleInfo * const module)
386  { createReadDisplayWindow(module); });
387 
388  m_quitAction = &m_actionCollection->action(QStringLiteral("quit"));
389  m_quitAction->setMenuRole(QAction::QuitRole);
390  BT_CONNECT(m_quitAction, &QAction::triggered,
391  this, &BibleTime::close);
392 
393  // AutoScroll actions:
394  m_autoScrollUpAction =
395  &m_actionCollection->action(QStringLiteral("autoScrollUp"));
396  BT_CONNECT(m_autoScrollUpAction, &QAction::triggered,
397  this, &BibleTime::autoScroll<true>);
398  m_autoScrollDownAction =
399  &m_actionCollection->action(QStringLiteral("autoScrollDown"));
400  BT_CONNECT(m_autoScrollDownAction, &QAction::triggered,
401  this, &BibleTime::autoScroll<false>);
402  m_autoScrollPauseAction =
403  &m_actionCollection->action(QStringLiteral("autoScrollPause"));
404  BT_CONNECT(m_autoScrollPauseAction, &QAction::triggered,
406 
407  // View menu actions:
408  m_windowFullscreenAction =
409  &m_actionCollection->action(QStringLiteral("toggleFullscreen"));
410  m_windowFullscreenAction->setCheckable(true);
411  BT_CONNECT(m_windowFullscreenAction, &QAction::triggered,
413 
414  // Special case these actions, overwrite those already in collection
415  m_showBookshelfAction = m_bookshelfDock->toggleViewAction();
416  m_showBookshelfAction->setIcon(CResMgr::mainMenu::view::showBookshelf::icon());
417  m_showBookshelfAction->setToolTip(tr("Toggle visibility of the bookshelf window"));
418  m_actionCollection->removeAction(QStringLiteral("showBookshelf"));
419  m_actionCollection->addAction(QStringLiteral("showBookshelf"),
420  m_showBookshelfAction);
421  m_showBookmarksAction = m_bookmarksDock->toggleViewAction();
422  m_showBookmarksAction->setIcon(CResMgr::mainMenu::view::showBookmarks::icon());
423  m_showBookmarksAction->setToolTip(tr("Toggle visibility of the bookmarks window"));
424  m_actionCollection->removeAction(QStringLiteral("showBookmarks"));
425  m_actionCollection->addAction(QStringLiteral("showBookmarks"),
426  m_showBookmarksAction);
427  m_showMagAction = m_magDock->toggleViewAction();
428  m_showMagAction->setIcon(CResMgr::mainMenu::view::showMag::icon());
429  m_showMagAction->setToolTip(tr("Toggle visibility of the mag window"));
430  m_actionCollection->removeAction(QStringLiteral("showMag"));
431  m_actionCollection->addAction(QStringLiteral("showMag"), m_showMagAction);
432 
433  auto const sessionGuiConf =
434  btConfig().session().group(QStringLiteral("GUI"));
435 
436  m_showTextAreaHeadersAction =
437  &m_actionCollection->action(
438  QStringLiteral("showParallelTextHeaders"));
439  m_showTextAreaHeadersAction->setCheckable(true);
440  m_showTextAreaHeadersAction->setChecked(
441  sessionGuiConf.value<bool>(
442  QStringLiteral("showTextWindowHeaders"),
443  true));
444  BT_CONNECT(m_showTextAreaHeadersAction, &QAction::toggled,
446 
447  m_showMainWindowToolbarAction =
448  &m_actionCollection->action(QStringLiteral("showToolbar"));
449  m_showMainWindowToolbarAction->setCheckable(true);
450  m_showMainWindowToolbarAction->setChecked(
451  sessionGuiConf.value<bool>(QStringLiteral("showMainToolbar"),
452  true));
453  BT_CONNECT(m_showMainWindowToolbarAction, &QAction::triggered,
455 
456  m_showTextWindowNavigationAction =
457  &m_actionCollection->action(QStringLiteral("showNavigation"));
458  m_showTextWindowNavigationAction->setCheckable(true);
459  m_showTextWindowNavigationAction->setChecked(
460  sessionGuiConf.value<bool>(
461  QStringLiteral("showTextWindowNavigator"), true));
462  BT_CONNECT(m_showTextWindowNavigationAction, &QAction::toggled,
464 
465  m_showTextWindowModuleChooserAction =
466  &m_actionCollection->action(QStringLiteral("showWorks"));
467  m_showTextWindowModuleChooserAction->setCheckable(true);
468  m_showTextWindowModuleChooserAction->setChecked(
469  sessionGuiConf.value<bool>(
470  QStringLiteral("showTextWindowModuleSelectorButtons"),
471  true));
472  BT_CONNECT(m_showTextWindowModuleChooserAction, &QAction::toggled,
474 
475  m_showTextWindowToolButtonsAction =
476  &m_actionCollection->action(QStringLiteral("showTools"));
477  m_showTextWindowToolButtonsAction->setCheckable(true);
478  m_showTextWindowToolButtonsAction->setChecked(
479  sessionGuiConf.value<bool>(
480  QStringLiteral("showTextWindowToolButtons"),
481  true));
482  BT_CONNECT(m_showTextWindowToolButtonsAction, &QAction::toggled,
484 
485  m_toolbarsInEachWindow =
486  &m_actionCollection->action(
487  QStringLiteral("showToolbarsInTextWindows"));
488  m_toolbarsInEachWindow->setCheckable(true);
489  m_toolbarsInEachWindow->setChecked(
490  sessionGuiConf.value<bool>(
491  QStringLiteral("showToolbarsInEachWindow"),
492  true));
493  BT_CONNECT(m_toolbarsInEachWindow, &QAction::toggled,
495 
496  // Search menu actions:
497  m_searchOpenWorksAction =
498  &m_actionCollection->action(QStringLiteral("searchOpenWorks"));
499  BT_CONNECT(m_searchOpenWorksAction, &QAction::triggered,
501 
502  m_searchStandardBibleAction =
503  &m_actionCollection->action(QStringLiteral("searchStdBible"));
504  BT_CONNECT(m_searchStandardBibleAction, &QAction::triggered,
506 
507  // Window menu actions:
508  m_windowCloseAction =
509  &m_actionCollection->action(QStringLiteral("closeWindow"));
510  BT_CONNECT(m_windowCloseAction, &QAction::triggered,
511  m_mdi, &CMDIArea::closeActiveSubWindow);
512 
513  m_windowCloseAllAction =
514  &m_actionCollection->action(QStringLiteral("closeAllWindows"));
515  BT_CONNECT(m_windowCloseAllAction, &QAction::triggered,
516  m_mdi, &CMDIArea::closeAllSubWindows);
517 
518  m_windowCascadeAction =
519  &m_actionCollection->action(QStringLiteral("cascade"));
520  BT_CONNECT(m_windowCascadeAction, &QAction::triggered,
521  this, &BibleTime::slotCascade);
522 
523  m_windowTileAction = &m_actionCollection->action(QStringLiteral("tile"));
524  BT_CONNECT(m_windowTileAction, &QAction::triggered,
525  this, &BibleTime::slotTile);
526 
527  m_windowTileVerticalAction =
528  &m_actionCollection->action(QStringLiteral("tileVertically"));
529  BT_CONNECT(m_windowTileVerticalAction, &QAction::triggered,
531 
532  m_windowTileHorizontalAction =
533  &m_actionCollection->action(QStringLiteral("tileHorizontally"));
534  BT_CONNECT(m_windowTileHorizontalAction, &QAction::triggered,
536 
537  alignmentMode alignment =
538  sessionGuiConf.value<alignmentMode>(QStringLiteral("alignmentMode"),
540 
541  m_windowManualModeAction =
542  &m_actionCollection->action(QStringLiteral("manualArrangement"));
543  m_windowManualModeAction->setCheckable(true);
544 
545  m_windowAutoTabbedAction =
546  &m_actionCollection->action(QStringLiteral("autoTabbed"));
547  m_windowAutoTabbedAction->setCheckable(true);
548 
549  //: Vertical tiling means that windows are vertical, placed side by side
550  m_windowAutoTileVerticalAction =
551  &m_actionCollection->action(QStringLiteral("autoVertical"));
552  m_windowAutoTileVerticalAction->setCheckable(true);
553 
554  //: Horizontal tiling means that windows are horizontal, placed on top of each other
555  m_windowAutoTileHorizontalAction =
556  &m_actionCollection->action(QStringLiteral("autoHorizontal"));
557  m_windowAutoTileHorizontalAction->setCheckable(true);
558 
559  m_windowAutoTileAction =
560  &m_actionCollection->action(QStringLiteral("autoTile"));
561  m_windowAutoTileAction->setCheckable(true);
562 
563  m_windowAutoCascadeAction =
564  &m_actionCollection->action(QStringLiteral("autoCascade"));
565  m_windowAutoCascadeAction->setCheckable(true);
566 
567  /*
568  * All actions related to arrangement modes have to be initialized before calling a slot on them,
569  * thus we call them afterwards now.
570  */
571  QAction * alignmentAction;
572  switch (alignment) {
573  case autoTabbed:
574  alignmentAction = m_windowAutoTabbedAction; break;
575  case autoTileVertical:
576  alignmentAction = m_windowAutoTileVerticalAction; break;
577  case autoTileHorizontal:
578  alignmentAction = m_windowAutoTileHorizontalAction; break;
579  case autoTile:
580  alignmentAction = m_windowAutoTileAction; break;
581  case autoCascade:
582  alignmentAction = m_windowAutoCascadeAction; break;
583  case manual:
584  default:
585  alignmentAction = m_windowManualModeAction; break;
586  }
587  alignmentAction->setChecked(true);
588  slotUpdateWindowArrangementActions(alignmentAction);
589 
590  m_windowSaveToNewProfileAction =
591  &m_actionCollection->action(QStringLiteral("saveNewSession"));
592  BT_CONNECT(m_windowSaveToNewProfileAction, &QAction::triggered,
594 
595  m_setPreferencesAction =
596  &m_actionCollection->action(QStringLiteral("setPreferences"));
597  m_setPreferencesAction->setMenuRole( QAction::PreferencesRole );
598  BT_CONNECT(m_setPreferencesAction, &QAction::triggered,
600 
601  m_bookshelfWizardAction =
602  &m_actionCollection->action(QStringLiteral("bookshelfWizard"));
603  m_bookshelfWizardAction->setMenuRole( QAction::ApplicationSpecificRole );
604  BT_CONNECT(m_bookshelfWizardAction, &QAction::triggered,
606 
607  m_openHandbookAction =
608  &m_actionCollection->action(QStringLiteral("openHandbook"));
609  BT_CONNECT(m_openHandbookAction, &QAction::triggered,
611 
612  m_bibleStudyHowtoAction =
613  &m_actionCollection->action(QStringLiteral("bibleStudyHowto"));
614  BT_CONNECT(m_bibleStudyHowtoAction, &QAction::triggered,
616 
617  m_aboutBibleTimeAction =
618  &m_actionCollection->action(QStringLiteral("aboutBibleTime"));
619  m_aboutBibleTimeAction->setMenuRole( QAction::AboutRole );
620  BT_CONNECT(m_aboutBibleTimeAction, &QAction::triggered,
622 
623  m_tipOfTheDayAction =
624  &m_actionCollection->action(QStringLiteral("tipOfTheDay"));
625  BT_CONNECT(m_tipOfTheDayAction, &QAction::triggered,
627 
628  if (btApp->debugMode()) {
629  m_debugWidgetAction = new QAction(this);
630  m_debugWidgetAction->setCheckable(true);
631  BT_CONNECT(m_debugWidgetAction, &QAction::triggered,
633  }
634 
635  retranslateUiActions(m_actionCollection);
636 }
637 
639  // File menu:
640  m_fileMenu = new QMenu(this);
641  m_fileMenu->addAction(m_openWorkAction);
642  m_fileMenu->addSeparator();
643  m_fileMenu->addAction(m_quitAction);
644  menuBar()->addMenu(m_fileMenu);
645 
646  // View menu:
647  m_viewMenu = new QMenu(this);
648  m_viewMenu->addAction(m_windowFullscreenAction);
649  m_viewMenu->addAction(m_showBookshelfAction);
650  m_viewMenu->addAction(m_showBookmarksAction);
651  m_viewMenu->addAction(m_showMagAction);
652  m_viewMenu->addAction(m_showTextAreaHeadersAction);
653  m_viewMenu->addSeparator();
654 
655  m_toolBarsMenu = new QMenu(this);
656  m_toolBarsMenu->addAction( m_showMainWindowToolbarAction);
657  m_toolBarsMenu->addAction(m_showTextWindowNavigationAction);
658  m_toolBarsMenu->addAction(m_showTextWindowModuleChooserAction);
659  m_toolBarsMenu->addAction(m_showTextWindowToolButtonsAction);
660  m_toolBarsMenu->addSeparator();
661  m_toolBarsMenu->addAction(m_toolbarsInEachWindow);
662  m_viewMenu->addMenu(m_toolBarsMenu);
663  m_viewMenu->addSeparator();
664 
665  m_scrollMenu= new QMenu(this);
666  m_scrollMenu->addAction(m_autoScrollUpAction);
667  m_scrollMenu->addAction(m_autoScrollDownAction);
668  m_scrollMenu->addAction(m_autoScrollPauseAction);
669  m_viewMenu->addMenu(m_scrollMenu);
670 
671  menuBar()->addMenu(m_viewMenu);
672 
673  // Search menu:
674  m_searchMenu = new QMenu(this);
675  m_searchMenu->addAction(m_searchOpenWorksAction);
676  m_searchMenu->addAction(m_searchStandardBibleAction);
677  menuBar()->addMenu(m_searchMenu);
678 
679  // Window menu:
680  m_windowMenu = new QMenu(this);
681  m_openWindowsMenu = new QMenu(this);
682  BT_CONNECT(m_openWindowsMenu, &QMenu::aboutToShow,
684  m_windowMenu->addMenu(m_openWindowsMenu);
685  m_windowMenu->addAction(m_windowCloseAction);
686  m_windowMenu->addAction(m_windowCloseAllAction);
687  m_windowMenu->addSeparator();
688  m_windowMenu->addAction(m_windowCascadeAction);
689  m_windowMenu->addAction(m_windowTileAction);
690  m_windowMenu->addAction(m_windowTileVerticalAction);
691  m_windowMenu->addAction(m_windowTileHorizontalAction);
692  m_windowArrangementMenu = new QMenu(this);
693  m_windowArrangementActionGroup = new QActionGroup(m_windowArrangementMenu);
694  m_windowArrangementMenu->addAction(m_windowManualModeAction);
695  m_windowArrangementActionGroup->addAction(m_windowManualModeAction);
696  m_windowArrangementMenu->addAction(m_windowAutoTabbedAction);
697  m_windowArrangementActionGroup->addAction(m_windowAutoTabbedAction);
698  m_windowArrangementMenu->addAction(m_windowAutoTileVerticalAction);
699  m_windowArrangementActionGroup->addAction(m_windowAutoTileVerticalAction);
700  m_windowArrangementMenu->addAction(m_windowAutoTileHorizontalAction);
701  m_windowArrangementActionGroup->addAction(m_windowAutoTileHorizontalAction);
702  m_windowArrangementMenu->addAction(m_windowAutoTileAction);
703  m_windowArrangementActionGroup->addAction(m_windowAutoTileAction);
704  m_windowArrangementMenu->addAction(m_windowAutoCascadeAction);
705  m_windowArrangementActionGroup->addAction(m_windowAutoCascadeAction);
706  BT_CONNECT(m_windowArrangementActionGroup, &QActionGroup::triggered,
708 
709  m_windowMenu->addMenu(m_windowArrangementMenu);
710  m_windowMenu->addSeparator();
711  m_windowMenu->addAction(m_windowSaveToNewProfileAction);
712  m_windowLoadProfileMenu = new QMenu(this);
713  m_windowLoadProfileActionGroup = new QActionGroup(m_windowLoadProfileMenu);
714  m_windowMenu->addMenu(m_windowLoadProfileMenu);
715  m_windowDeleteProfileMenu = new QMenu(this);
716  m_windowMenu->addMenu(m_windowDeleteProfileMenu);
717  BT_CONNECT(m_windowLoadProfileMenu, &QMenu::triggered,
718  this, qOverload<QAction *>(&BibleTime::loadProfile));
719  BT_CONNECT(m_windowDeleteProfileMenu, &QMenu::triggered,
720  this, &BibleTime::deleteProfile);
721  refreshProfileMenus();
722  menuBar()->addMenu(m_windowMenu);
723  BT_CONNECT(m_windowMenu, &QMenu::aboutToShow,
725 
726  #ifndef Q_OS_MAC
727  m_settingsMenu = new QMenu(this);
728  m_settingsMenu->addAction(m_setPreferencesAction);
729  m_settingsMenu->addSeparator();
730  m_settingsMenu->addAction(m_bookshelfWizardAction);
731  menuBar()->addMenu(m_settingsMenu);
732  #else
733  // On MAC OS, the settings actions will be moved to a system menu item.
734  // Therefore the settings menu would be empty, so we do not show it.
735  m_fileMenu->addAction(m_setPreferencesAction);
736  m_fileMenu->addAction(m_bookshelfWizardAction);
737  #endif
738 
739  // Help menu:
740  m_helpMenu = new QMenu(this);
741  m_helpMenu->addAction(m_openHandbookAction);
742  m_helpMenu->addAction(m_bibleStudyHowtoAction);
743  m_helpMenu->addAction(m_tipOfTheDayAction);
744  m_helpMenu->addSeparator();
745  m_helpMenu->addAction(m_aboutBibleTimeAction);
746  if (m_debugWidgetAction) {
747  m_helpMenu->addSeparator();
748  m_helpMenu->addAction(m_debugWidgetAction);
749  }
750  menuBar()->addMenu(m_helpMenu);
751 }
752 
754  QToolButton *openWorkButton = new QToolButton(this);
755  openWorkButton->setDefaultAction(m_openWorkAction);
756  openWorkButton->setPopupMode(QToolButton::InstantPopup);
757  m_mainToolBar->addWidget(openWorkButton);
758 
759  m_mainToolBar->addAction(m_windowFullscreenAction);
760  m_mainToolBar->addAction(
761  &m_actionCollection->action(QStringLiteral("showBookshelf")));
762  m_mainToolBar->addAction(
763  &m_actionCollection->action(QStringLiteral("showBookmarks")));
764  m_mainToolBar->addAction(
765  &m_actionCollection->action(QStringLiteral("showMag")));
766  m_mainToolBar->addAction(m_searchOpenWorksAction);
767  m_mainToolBar->addAction(m_openHandbookAction);
768 }
769 
771  m_bookmarksDock->setWindowTitle(tr("Bookmarks"));
772  m_magDock->setWindowTitle(tr("Mag"));
773  m_mainToolBar->setWindowTitle(tr("Main toolbar"));
774  m_navToolBar->setWindowTitle(tr("Navigation toolbar"));
775  m_worksToolBar->setWindowTitle(tr("Works toolbar"));
776  m_toolsToolBar->setWindowTitle(tr("Tools toolbar"));
777 
778  m_fileMenu->setTitle(tr("&File"));
779  m_viewMenu->setTitle(tr("&View"));
780  m_toolBarsMenu->setTitle(tr("Toolbars"));
781  m_scrollMenu->setTitle(tr("Scroll"));
782 
783  m_searchMenu->setTitle(tr("&Search"));
784  m_windowMenu->setTitle(tr("&Window"));
785  m_openWindowsMenu->setTitle(tr("O&pen windows"));
786  m_windowArrangementMenu->setTitle(tr("&Arrangement mode"));
787  m_windowLoadProfileMenu->setTitle(tr("Sw&itch session"));
788  m_windowDeleteProfileMenu->setTitle(tr("&Delete session"));
789 
790  #ifndef Q_OS_MAC
791  // This item is not present on Mac OS
792  m_settingsMenu->setTitle(tr("Se&ttings"));
793  #endif
794 
795  m_helpMenu->setTitle(tr("&Help"));
796 
797  if (m_debugWidgetAction)
798  m_debugWidgetAction->setText(tr("Show \"What's this widget\" dialog"));
799 
800  retranslateUiActions(m_actionCollection);
801 }
802 
803 /** retranslation for actions used in this class
804 * This is called for two different collections of actions
805 * One set is for the actual use in the menus, etc
806 * The second is used during the use of the configuration shortcut editor
807 */
809  ac->action(QStringLiteral("showToolbarsInTextWindows"))
810  .setText(tr("Show toolbars in text windows"));
811  ac->action(QStringLiteral("showToolbar")).setText(tr("Show main toolbar"));
812  ac->action(QStringLiteral("showNavigation"))
813  .setText(tr("Show navigation bar"));
814  ac->action(QStringLiteral("showWorks")).setText(tr("Show works toolbar"));
815  ac->action(QStringLiteral("showTools")).setText(tr("Show tools toolbar"));
816  ac->action(QStringLiteral("showFormat"))
817  .setText(tr("Show formatting toolbar"));
818  ac->action(QStringLiteral("showBookshelf")).setText(tr("Show bookshelf"));
819  ac->action(QStringLiteral("showBookmarks")).setText(tr("Show bookmarks"));
820  ac->action(QStringLiteral("showMag")).setText(tr("Show mag"));
821  ac->action(QStringLiteral("showParallelTextHeaders"))
822  .setText(tr("Show parallel text headers"));
823 }
824 
825 /** Initializes the SIGNAL / SLOT connections */
827  // Bookmarks page connections:
829  this,
830  qOverload<QList<CSwordModuleInfo *>, QString const &>(
832 
833  // Bookshelf dock connections:
835  [this](CSwordModuleInfo * const module)
836  { createReadDisplayWindow(module); });
838  this,
839  [this](CSwordModuleInfo * const m) { openSearchDialog({m}); });
843  this, &BibleTime::moduleAbout);
846 }
static QToolBar * createToolBar(QWidget *parent, bool visible)
#define btApp
Definition: bibletimeapp.h:59
#define BT_ASSERT(...)
Definition: btassert.h:17
BtConfig & btConfig()
This is a shortchand for BtConfig::getInstance().
Definition: btconfig.h:305
#define BT_CONNECT(...)
Definition: btconnect.h:20
alignmentMode
Definition: btglobal.h:70
@ autoTabbed
Definition: btglobal.h:74
@ autoTileHorizontal
Definition: btglobal.h:72
@ autoCascade
Definition: btglobal.h:75
@ autoTile
Definition: btglobal.h:73
@ autoTileVertical
Definition: btglobal.h:71
@ manual
Definition: btglobal.h:76
void loadProfile(QAction *action)
void slotModuleUnlock(CSwordModuleInfo *module)
Definition: bibletime.cpp:229
void clearMdiToolBars()
void slotCascade()
void slotBookshelfWizard()
void slotOpenTipDialog()
void initMenubar()
void slotSearchModules()
void retranslateUi()
void slotShowDebugWindow(bool)
void moduleAbout(CSwordModuleInfo *module)
Definition: bibletime.cpp:233
CKeyChooser * keyChooser() const
void slotActiveWindowChanged(QMdiSubWindow *window)
static void retranslateUiActions(BtActionCollection *ac)
void deleteProfile(QAction *action)
void slotTileHorizontal()
void initView()
void slotUpdateWindowArrangementActions(QAction *trigerredAction)
void createCentralWidget()
void slotToggleWorksToolbar()
void slotOpenAboutDialog()
void initToolbars()
static void insertKeyboardActions(BtActionCollection *const a)
void slotSearchDefaultBible()
void slotSettingsOptions()
void slotToggleMainToolbar()
void autoScrollPause()
void slotToggleTextWindowHeader()
void slotAutoScroll()
void slotOpenWindowsMenuAboutToShow()
void openOnlineHelp_Handbook()
void initConnections()
void initActions()
void createMenuAndToolBar()
void slotToggleToolsToolbar()
void slotToggleToolBarsInEachWindow()
void saveToNewProfile()
void slotTileVertical()
void openOnlineHelp_Howto()
void slotWindowMenuAboutToShow()
CDisplayWindow * createReadDisplayWindow(QList< CSwordModuleInfo * > modules, QString const &key)
Creates a new presenter in the MDI area according to the type of the module.
Definition: bibletime.cpp:145
void slotToggleNavigatorToolbar()
void toggleFullscreen()
void addAction(QString const &name, QAction *const action)
QAction & action(QString const &name) const
void moduleUnlockTriggered(CSwordModuleInfo *module)
void moduleHovered(CSwordModuleInfo *module)
void moduleOpenTriggered(CSwordModuleInfo *module)
void moduleAboutTriggered(CSwordModuleInfo *module)
void moduleSearchTriggered(CSwordModuleInfo *module)
BtConfigCore group(Prefix &&prefix) const &
Definition: btconfigcore.h:93
T value(QString const &key, T const &defaultValue=T()) const
Returns the settings value for the given global key.
Definition: btconfigcore.h:50
BtConfigCore session() const
Definition: btconfig.cpp:213
void findPrevious()
void findNext()
void highlightText(QString const &text, bool caseSensitive)
void triggered(CSwordModuleInfo *module)
void createReadDisplayWindow(QList< CSwordModuleInfo * >, QString const &)
Emitted when a module should be opened.
void magInfoProvided(Rendering::InfoType const, QString const &data)
void highlightTextInActiveWindow(const QString &text, bool caseSensitive)
Definition: cmdiarea.cpp:355
void findNextTextInActiveWindow()
Definition: cmdiarea.cpp:351
void findPreviousTextInActiveWindow()
Definition: cmdiarea.cpp:353
void setInfo(const QString &renderedData, const QString &lang=QString())