summaryrefslogtreecommitdiff
path: root/src/bibletime_init.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bibletime_init.cpp')
-rw-r--r--src/bibletime_init.cpp800
1 files changed, 555 insertions, 245 deletions
diff --git a/src/bibletime_init.cpp b/src/bibletime_init.cpp
index cbff79f..4ac6350 100644
--- a/src/bibletime_init.cpp
+++ b/src/bibletime_init.cpp
@@ -2,7 +2,7 @@
*
* This file is part of BibleTime's source code, http://www.bibletime.info/.
*
-* Copyright 1999-2008 by the BibleTime developers.
+* Copyright 1999-2011 by the BibleTime developers.
* The BibleTime source code is licensed under the GNU General Public License version 2.0.
*
**********/
@@ -18,53 +18,65 @@
#include <QPointer>
#include <QSplitter>
#include <QToolBar>
+#include <QToolButton>
#include <QVBoxLayout>
#include "backend/config/cbtconfig.h"
#include "backend/managers/btstringmgr.h"
#include "backend/managers/clanguagemgr.h"
#include "backend/managers/cswordbackend.h"
#include "frontend/btbookshelfdockwidget.h"
+#include "frontend/btopenworkaction.h"
#include "frontend/cinfodisplay.h"
#include "frontend/cmdiarea.h"
#include "frontend/cprinter.h"
#include "frontend/displaywindow/btactioncollection.h"
-#include "frontend/mainindex/bookmarks/cbookmarkindex.h"
+#include "frontend/displaywindow/btmodulechooserbar.h"
+#include "frontend/bookmarks/cbookmarkindex.h"
#include "frontend/profile/cprofile.h"
#include "frontend/profile/cprofilemgr.h"
-#include "util/cpointers.h"
#include "util/cresmgr.h"
#include "util/directory.h"
// Sword includes:
#include <swlog.h>
+#ifdef BT_DEBUG
+#include <QLabel>
+#include <QMetaObject>
+#include <QMutexLocker>
+#include <QTimer>
+#endif
+
using namespace InfoDisplay;
using namespace Profile;
/**Initializes the view of this widget*/
void BibleTime::initView() {
+
+ // Create menu and toolbar before the mdi area
+ createMenuAndToolBar();
+
m_mdi = new CMDIArea(this);
setCentralWidget(m_mdi);
m_bookshelfDock = new BtBookshelfDockWidget(this);
addDockWidget(Qt::LeftDockWidgetArea, m_bookshelfDock);
- m_bookmarksDock = new QDockWidget(tr("Bookmarks"), this);
+ m_bookmarksDock = new QDockWidget(this);
m_bookmarksDock->setObjectName("BookmarksDock");
m_bookmarksPage = new CBookmarkIndex(0);
m_bookmarksDock->setWidget(m_bookmarksPage);
addDockWidget(Qt::LeftDockWidgetArea, m_bookmarksDock);
tabifyDockWidget(m_bookmarksDock, m_bookshelfDock);
- m_magDock = new QDockWidget(tr("Mag"), this);
+ m_magDock = new QDockWidget(this);
m_magDock->setObjectName("MagDock");
m_infoDisplay = new CInfoDisplay(this);
m_infoDisplay->resize(150, 150);
m_magDock->setWidget(m_infoDisplay);
addDockWidget(Qt::LeftDockWidgetArea, m_magDock);
- CPointers::setInfoDisplay(m_infoDisplay);
m_mdi->setMinimumSize(100, 100);
m_mdi->setFocusPolicy(Qt::ClickFocus);
}
@@ -158,6 +170,13 @@ void BibleTime::insertKeyboardActions( BtActionCollection* const a ) {
a->addAction("autoTile", action);
action = new QAction(a);
+ action->setText(tr("Ta&bbed"));
+ action->setIcon(DU::getIcon(CResMgr::mainMenu::window::arrangementMode::autoTabbed::icon));
+ action->setShortcut(QKeySequence(CResMgr::mainMenu::window::arrangementMode::autoTabbed::accel));
+ action->setToolTip(tr("Automatically tab the open windows"));
+ a->addAction("autoTabbed", action);
+
+ action = new QAction(a);
action->setText(tr("Auto-&cascade"));
action->setIcon(DU::getIcon(CResMgr::mainMenu::window::arrangementMode::autoCascade::icon));
action->setShortcut(QKeySequence(CResMgr::mainMenu::window::arrangementMode::autoCascade::accel));
@@ -237,241 +256,431 @@ void BibleTime::insertKeyboardActions( BtActionCollection* const a ) {
action->setText(tr("&About BibleTime"));
action->setToolTip(tr("Information about the BibleTime program"));
a->addAction("aboutBibleTime", action);
-}
-/** Initializes the action objects of the GUI */
-void BibleTime::initActions() {
- m_actionCollection = new BtActionCollection(this);
+ action = new QAction(a);
+ action->setText(tr("&Tip of the day..."));
+ action->setIcon(DU::getIcon(CResMgr::mainMenu::help::tipOfTheDay::icon));
+ action->setShortcut(QKeySequence(CResMgr::mainMenu::help::tipOfTheDay::accel));
+ action->setToolTip(tr("Show tips about BibleTime"));
+ a->addAction("tipOfTheDay", action);
- /**
- * Create the window to signal mapper and connect it up.
- */
- m_windowMapper = new QSignalMapper(this);
- connect(m_windowMapper, SIGNAL(mapped(QWidget*)),
- this, SLOT(slotSetActiveSubWindow(QWidget*)));
+ action = new QAction(a);
+ a->addAction("showToolbarsInTextWindows", action);
- insertKeyboardActions(m_actionCollection);
+ action = new QAction(a);
+ a->addAction("showNavigation", action);
- // Main menus
- QMenu* fileMenu = menuBar()->addMenu(tr("&File"));
- QMenu* viewMenu = menuBar()->addMenu(tr("&View"));
- QMenu* searchMenu = menuBar()->addMenu(tr("&Search"));
- m_windowMenu = menuBar()->addMenu(tr("&Window"));
- QMenu* settingsMenu = menuBar()->addMenu(tr("Se&ttings"));
- QMenu* helpMenu = menuBar()->addMenu(tr("&Help"));
-
- // Name of the main toolbar
- m_mainToolBar = addToolBar(tr("Main Toolbar"));
- m_mainToolBar->setObjectName("MainToolBar");
- m_mainToolBar->setFloatable(false);
- m_mainToolBar->setMovable(false);
-
- QAction* tmp = m_actionCollection->action("quit");
- fileMenu->addAction(tmp);
- connect(tmp, SIGNAL(triggered()), this, SLOT(quit()) );
-
-
- // ********** View menu *********************
-
- m_windowFullscreen_action = m_actionCollection->action("toggleFullscreen");
- m_windowFullscreen_action->setCheckable(true);
- viewMenu->addAction(m_windowFullscreen_action);
- m_mainToolBar->addAction(m_windowFullscreen_action);
- connect(m_windowFullscreen_action, SIGNAL(triggered()), this, SLOT(toggleFullscreen()) );
-
- m_viewToolbar_action = m_actionCollection->action("showToolbar");
- m_viewToolbar_action->setCheckable(true);
- m_viewToolbar_action->setChecked(true);
- viewMenu->addAction(m_viewToolbar_action);
- connect(m_viewToolbar_action, SIGNAL(triggered()), this, SLOT(slotToggleToolbar()) );
-
- QAction* action = m_bookshelfDock->toggleViewAction();
- action->setText(tr("Show Bookshelf"));
- viewMenu->addAction(action);
-
- action = m_bookmarksDock->toggleViewAction();
- action->setText(tr("Show Bookmarks"));
- viewMenu->addAction(action);
-
- action = m_magDock->toggleViewAction();
- action->setText(tr("Show Mag"));
- viewMenu->addAction(action);
-
- viewMenu->addSeparator();
- QMenu* textWindowsMenu = new QMenu(tr("Text windows"));
- viewMenu->addMenu(textWindowsMenu);
-
- action = new QAction(tr("Show text area headers"), this);
- action->setCheckable(true);
- action->setChecked(CBTConfig::get(CBTConfig::showTextWindowHeaders));
- connect(action, SIGNAL(toggled(bool)), SLOT(slotToggleTextWindowHeader()));
- textWindowsMenu->addAction(action);
-
- action = new QAction(tr("Show navigation"), this);
- action->setCheckable(true);
- action->setChecked(CBTConfig::get(CBTConfig::showTextWindowNavigator));
- connect(action, SIGNAL(toggled(bool)), SLOT(slotToggleTextWindowNavigator()));
- textWindowsMenu->addAction(action);
-
- action = new QAction(tr("Show work chooser buttons"), this);
- action->setCheckable(true);
- action->setChecked(CBTConfig::get(CBTConfig::showTextWindowModuleSelectorButtons));
- connect(action, SIGNAL(toggled(bool)), SLOT(slotToggleTextWindowModuleChooser()));
- textWindowsMenu->addAction(action);
-
- action = new QAction(tr("Show tools"), this);
- action->setCheckable(true);
- action->setChecked(CBTConfig::get(CBTConfig::showTextWindowToolButtons));
- connect(action, SIGNAL(toggled(bool)), SLOT(slotToggleTextWindowToolButtons()));
- textWindowsMenu->addAction(action);
-
- // *************************************
- m_mainToolBar->addSeparator();
+ action = new QAction(a);
+ a->addAction("showWorks", action);
- tmp = m_actionCollection->action("searchOpenWorks");
- searchMenu->addAction(tmp);
- m_mainToolBar->addAction(tmp);
- m_mainToolBar->addSeparator();
- connect(tmp, SIGNAL(triggered()), this, SLOT(slotSearchModules()) );
+ action = new QAction(a);
+ a->addAction("showTools", action);
- tmp = m_actionCollection->action("searchStdBible");
- searchMenu->addAction(tmp);
- connect(tmp, SIGNAL(triggered()), this, SLOT(slotSearchDefaultBible()) );
+ action = new QAction(a);
+ a->addAction("showFormat", action);
- /**
- * Window Menu
- */
- m_openWindowsMenu = new QMenu(tr("O&pen Windows"), m_windowMenu);
- m_windowMenu->addMenu(m_openWindowsMenu);
+ action = new QAction(a);
+ a->addAction("showParallelTextHeaders", action);
- m_windowClose_action = m_actionCollection->action("closeWindow");
- m_windowMenu->addAction(m_windowClose_action);
- connect(m_windowClose_action, SIGNAL(triggered()), m_mdi, SLOT(closeActiveSubWindow()));
+ action = new QAction(a);
+ a->addAction("showBookshelf", action);
- m_windowCloseAll_action = m_actionCollection->action("closeAllWindows");
- m_windowMenu->addAction(m_windowCloseAll_action);
- connect(m_windowCloseAll_action, SIGNAL(triggered()), m_mdi, SLOT(closeAllSubWindows()));
+ action = new QAction(a);
+ a->addAction("showBookmarks", action);
- m_windowMenu->addSeparator();
+ action = new QAction(a);
+ a->addAction("showMag", action);
- // *** Window arrangement actions ***
+ retranslateUiActions(a);
+}
- m_windowCascade_action = m_actionCollection->action("cascade");
- m_windowMenu->addAction(m_windowCascade_action);
- connect(m_windowCascade_action, SIGNAL(triggered()), this, SLOT(slotCascade()) );
+static QToolBar* createToolBar(const QString& name, QWidget* parent, bool visible) {
+ QToolBar* bar = new QToolBar(parent);
+ bar->setObjectName(name);
+ bar->setFloatable(false);
+ bar->setMovable(true);
+ bar->setVisible(visible);
+ return bar;
+}
- m_windowTile_action = m_actionCollection->action("tile");
- m_windowMenu->addAction(m_windowTile_action);
- connect(m_windowTile_action, SIGNAL(triggered()), this, SLOT(slotTile()) );
+void BibleTime::clearMdiToolBars() {
+ // Clear main window toolbars
+ m_navToolBar->clear();
+ m_worksToolBar->clear();
+ m_toolsToolBar->clear();
+ m_formatToolBar->clear();
+}
- m_windowTileVertical_action = m_actionCollection->action("tileVertically");
- m_windowMenu->addAction(m_windowTileVertical_action);
- connect(m_windowTileVertical_action, SIGNAL(triggered()), this, SLOT(slotTileVertical()) );
+void BibleTime::createMenuAndToolBar()
+{
+ // Create menubar
+ menuBar();
- m_windowTileHorizontal_action = m_actionCollection->action("tileHorizontally");
- m_windowMenu->addAction(m_windowTileHorizontal_action);
- connect(m_windowTileHorizontal_action, SIGNAL(triggered()), this, SLOT(slotTileHorizontal()) );
+ m_mainToolBar = createToolBar("MainToolBar", this, true);
+ addToolBar(m_mainToolBar);
- QMenu* arrangementMenu = new QMenu(tr("&Arrangement mode"));
- m_windowMenu->addMenu(arrangementMenu);
+ // Set visibility of main window toolbars based on config
+ bool visible = ! CBTConfig::get(CBTConfig::showToolbarsInEachWindow);
- m_windowManualMode_action = m_actionCollection->action("manualArrangement");
- m_windowManualMode_action->setCheckable(true);
- arrangementMenu->addAction(m_windowManualMode_action);
- connect(m_windowManualMode_action, SIGNAL(triggered()), this, SLOT(slotManualArrangementMode()) );
+ m_navToolBar = createToolBar("NavToolBar", this, visible);
+ addToolBar(m_navToolBar);
- //: Vertical tiling means that windows are vertical, placed side by side
- m_windowAutoTileVertical_action = m_actionCollection->action("autoVertical");
- m_windowAutoTileVertical_action->setCheckable(true);
- arrangementMenu->addAction(m_windowAutoTileVertical_action);
- connect(m_windowAutoTileVertical_action, SIGNAL(triggered()), this, SLOT(slotAutoTileVertical()) );
+ m_worksToolBar = new BtModuleChooserBar(this);
+ m_worksToolBar->setObjectName("WorksToolBar");
+ m_worksToolBar->setVisible(visible);
+ addToolBar(m_worksToolBar);
- //: Horizontal tiling means that windows are horizontal, placed on top of each other
- m_windowAutoTileHorizontal_action = m_actionCollection->action("autoHorizontal");
- m_windowAutoTileHorizontal_action->setCheckable(true);
- arrangementMenu->addAction(m_windowAutoTileHorizontal_action);
- connect(m_windowAutoTileHorizontal_action, SIGNAL(triggered()), this, SLOT(slotAutoTileHorizontal()) );
+ m_toolsToolBar = createToolBar("ToolsToolBar", this, visible);
+ addToolBar(m_toolsToolBar);
- m_windowAutoTile_action = m_actionCollection->action("autoTile");
- m_windowAutoTile_action->setCheckable(true);
- arrangementMenu->addAction(m_windowAutoTile_action);
- connect(m_windowAutoTile_action, SIGNAL(triggered()), this, SLOT(slotAutoTile()) );
+ m_formatToolBar = createToolBar("FormatToolBar", this, visible);
+ addToolBar(m_formatToolBar);
+}
- m_windowAutoCascade_action = m_actionCollection->action("autoCascade");
- m_windowAutoCascade_action->setCheckable(true);
- arrangementMenu->addAction(m_windowAutoCascade_action);
- connect(m_windowAutoCascade_action, SIGNAL(triggered()), this, SLOT(slotAutoCascade()) );
+/** Initializes the action objects of the GUI */
+void BibleTime::initActions() {
+ m_actionCollection = new BtActionCollection(this);
+ insertKeyboardActions(m_actionCollection);
- m_windowMenu->addSeparator();
+ // Create the window to signal mapper and connect it up:
+ m_windowMapper = new QSignalMapper(this);
+ connect(m_windowMapper, SIGNAL(mapped(QWidget*)),
+ this, SLOT(slotSetActiveSubWindow(QWidget*)));
+
+ // File menu actions:
+ m_openWorkAction = new BtOpenWorkAction("GUI/MainWindow/OpenWorkAction/grouping", this);
+ connect(m_openWorkAction, SIGNAL(triggered(CSwordModuleInfo*)),
+ this, SLOT(createReadDisplayWindow(CSwordModuleInfo*)));
+
+ m_quitAction = m_actionCollection->action("quit");
+ connect(m_quitAction, SIGNAL(triggered()),
+ this, SLOT(quit()));
+
+
+ // View menu actions:
+ m_windowFullscreenAction = m_actionCollection->action("toggleFullscreen");
+ m_windowFullscreenAction->setCheckable(true);
+ connect(m_windowFullscreenAction, SIGNAL(triggered()),
+ this, SLOT(toggleFullscreen()));
+
+ m_viewToolbarAction = m_actionCollection->action("showToolbar");
+ m_viewToolbarAction->setCheckable(true);
+ m_viewToolbarAction->setChecked(true);
+ connect(m_viewToolbarAction, SIGNAL(triggered()),
+ this, SLOT(slotToggleMainToolbar()));
+
+ // Special case these actions, overwrite those already in collection
+ m_showBookshelfAction = m_bookshelfDock->toggleViewAction();
+ m_actionCollection->addAction("showBookshelf", m_showBookshelfAction);
+ m_showBookmarksAction = m_bookmarksDock->toggleViewAction();
+ m_actionCollection->addAction("showBookmarks", m_showBookmarksAction);
+ m_showMagAction = m_magDock->toggleViewAction();
+ m_actionCollection->addAction("showMag", m_showMagAction);
+
+ m_showTextAreaHeadersAction = m_actionCollection->action("showParallelTextHeaders");
+ m_showTextAreaHeadersAction->setCheckable(true);
+ m_showTextAreaHeadersAction->setChecked(CBTConfig::get(CBTConfig::showTextWindowHeaders));
+ connect(m_showTextAreaHeadersAction, SIGNAL(toggled(bool)),
+ this, SLOT(slotToggleTextWindowHeader()));
+
+ m_showTextWindowNavigationAction = m_actionCollection->action("showNavigation");
+ m_showTextWindowNavigationAction->setCheckable(true);
+ m_showTextWindowNavigationAction->setChecked(CBTConfig::get(CBTConfig::showTextWindowNavigator));
+ connect(m_showTextWindowNavigationAction, SIGNAL(toggled(bool)),
+ this, SLOT(slotToggleNavigatorToolbar()));
+
+ m_showTextWindowModuleChooserAction = m_actionCollection->action("showWorks");
+ m_showTextWindowModuleChooserAction->setCheckable(true);
+ m_showTextWindowModuleChooserAction->setChecked(CBTConfig::get(CBTConfig::showTextWindowModuleSelectorButtons));
+ connect(m_showTextWindowModuleChooserAction, SIGNAL(toggled(bool)),
+ this, SLOT(slotToggleWorksToolbar()));
+
+ m_showTextWindowToolButtonsAction = m_actionCollection->action("showTools");
+ m_showTextWindowToolButtonsAction->setCheckable(true);
+ m_showTextWindowToolButtonsAction->setChecked(CBTConfig::get(CBTConfig::showTextWindowToolButtons));
+ connect(m_showTextWindowToolButtonsAction, SIGNAL(toggled(bool)),
+ this, SLOT(slotToggleToolsToolbar()));
+
+ m_showFormatToolbarAction = m_actionCollection->action("showFormat");
+ m_showFormatToolbarAction->setCheckable(true);
+ m_showFormatToolbarAction->setChecked(CBTConfig::get(CBTConfig::showFormatToolbarButtons));
+ bool ok = connect(m_showFormatToolbarAction, SIGNAL(toggled(bool)),
+ this, SLOT(slotToggleFormatToolbar()));
+
+ m_toolbarsInEachWindow = m_actionCollection->action("showToolbarsInTextWindows");
+ m_toolbarsInEachWindow->setCheckable(true);
+ m_toolbarsInEachWindow->setChecked(CBTConfig::get(CBTConfig::showToolbarsInEachWindow));
+ ok = connect(m_toolbarsInEachWindow, SIGNAL(toggled(bool)),
+ this, SLOT(slotToggleToolBarsInEachWindow()));
+ Q_ASSERT(ok);
- m_windowSaveProfileMenu = new QMenu(tr("&Save session"));
- m_windowMenu->addMenu(m_windowSaveProfileMenu);
+ // Search menu actions:
+ m_searchOpenWorksAction = m_actionCollection->action("searchOpenWorks");
+ connect(m_searchOpenWorksAction, SIGNAL(triggered()),
+ this, SLOT(slotSearchModules()));
- m_windowSaveToNewProfile_action = m_actionCollection->action("saveNewSession");
- m_windowMenu->addAction(m_windowSaveToNewProfile_action);
- connect(m_windowSaveToNewProfile_action, SIGNAL(triggered()), this, SLOT(saveToNewProfile()) );
+ m_searchStandardBibleAction = m_actionCollection->action("searchStdBible");
+ connect(m_searchStandardBibleAction, SIGNAL(triggered()),
+ this, SLOT(slotSearchDefaultBible()));
- m_windowLoadProfileMenu = new QMenu(tr("&Load session"));
- m_windowMenu->addMenu(m_windowLoadProfileMenu);
+ // Window menu actions:
+ m_windowCloseAction = m_actionCollection->action("closeWindow");
+ connect(m_windowCloseAction, SIGNAL(triggered()),
+ m_mdi, SLOT(closeActiveSubWindow()));
- m_windowDeleteProfileMenu = new QMenu(tr("&Delete session"));
- m_windowMenu->addMenu(m_windowDeleteProfileMenu);
+ m_windowCloseAllAction = m_actionCollection->action("closeAllWindows");
+ connect(m_windowCloseAllAction, SIGNAL(triggered()),
+ m_mdi, SLOT(closeAllSubWindows()));
- QObject::connect(m_windowLoadProfileMenu, SIGNAL(triggered(QAction*)), SLOT(loadProfile(QAction*)));
- QObject::connect(m_windowSaveProfileMenu, SIGNAL(triggered(QAction*)), SLOT(saveProfile(QAction*)));
- QObject::connect(m_windowDeleteProfileMenu, SIGNAL(triggered(QAction*)), SLOT(deleteProfile(QAction*)));
+ m_windowCascadeAction = m_actionCollection->action("cascade");
+ connect(m_windowCascadeAction, SIGNAL(triggered()),
+ this, SLOT(slotCascade()));
- refreshProfileMenus();
+ m_windowTileAction = m_actionCollection->action("tile");
+ connect(m_windowTileAction, SIGNAL(triggered()),
+ this, SLOT(slotTile()));
+
+ m_windowTileVerticalAction = m_actionCollection->action("tileVertically");
+ connect(m_windowTileVerticalAction, SIGNAL(triggered()),
+ this, SLOT(slotTileVertical()));
+
+ m_windowTileHorizontalAction = m_actionCollection->action("tileHorizontally");
+ connect(m_windowTileHorizontalAction, SIGNAL(triggered()),
+ this, SLOT(slotTileHorizontal()));
- tmp = m_actionCollection->action("setPreferences");
- settingsMenu->addAction(tmp);
- connect(tmp, SIGNAL(triggered()), this, SLOT(slotSettingsOptions()) );
+ m_windowManualModeAction = m_actionCollection->action("manualArrangement");
+ m_windowManualModeAction->setCheckable(true);
+ connect(m_windowManualModeAction, SIGNAL(triggered()),
+ this, SLOT(slotManualArrangementMode()));
- settingsMenu->addSeparator();
+ m_windowAutoTabbedAction = m_actionCollection->action("autoTabbed");
+ m_windowAutoTabbedAction->setCheckable(true);
+ connect(m_windowAutoTabbedAction, SIGNAL(triggered()),
+ this, SLOT(slotAutoTabbed()));
- tmp = m_actionCollection->action("bookshelfManager");
- settingsMenu->addAction(tmp);
- connect(tmp, SIGNAL(triggered()), this, SLOT(slotSwordSetupDialog()) );
+ //: Vertical tiling means that windows are vertical, placed side by side
+ m_windowAutoTileVerticalAction = m_actionCollection->action("autoVertical");
+ m_windowAutoTileVerticalAction->setCheckable(true);
+ connect(m_windowAutoTileVerticalAction, SIGNAL(triggered()),
+ this, SLOT(slotAutoTileVertical()));
+
+ //: Horizontal tiling means that windows are horizontal, placed on top of each other
+ m_windowAutoTileHorizontalAction = m_actionCollection->action("autoHorizontal");
+ m_windowAutoTileHorizontalAction->setCheckable(true);
+ connect(m_windowAutoTileHorizontalAction, SIGNAL(triggered()),
+ this, SLOT(slotAutoTileHorizontal()));
+
+ m_windowAutoTileAction = m_actionCollection->action("autoTile");
+ m_windowAutoTileAction->setCheckable(true);
+ connect(m_windowAutoTileAction, SIGNAL(triggered()),
+ this, SLOT(slotAutoTile()));
+
+ m_windowAutoCascadeAction = m_actionCollection->action("autoCascade");
+ m_windowAutoCascadeAction->setCheckable(true);
+ connect(m_windowAutoCascadeAction, SIGNAL(triggered()),
+ this, SLOT(slotAutoCascade()));
+
+ m_windowSaveToNewProfileAction = m_actionCollection->action("saveNewSession");
+ connect(m_windowSaveToNewProfileAction, SIGNAL(triggered()),
+ this, SLOT(saveToNewProfile()));
+
+ m_setPreferencesAction = m_actionCollection->action("setPreferences");
+ connect(m_setPreferencesAction, SIGNAL(triggered()),
+ this, SLOT(slotSettingsOptions()));
+
+ m_bookshelfManagerAction = m_actionCollection->action("bookshelfManager");
+ connect(m_bookshelfManagerAction, SIGNAL(triggered()),
+ this, SLOT(slotSwordSetupDialog()));
+
+ m_openHandbookAction = m_actionCollection->action("openHandbook");
+ connect(m_openHandbookAction, SIGNAL(triggered()),
+ this, SLOT(openOnlineHelp_Handbook()));
+
+ m_bibleStudyHowtoAction = m_actionCollection->action("bibleStudyHowto");
+ connect(m_bibleStudyHowtoAction, SIGNAL(triggered()),
+ this, SLOT(openOnlineHelp_Howto()));
+
+ m_aboutBibleTimeAction = m_actionCollection->action("aboutBibleTime");
+ connect(m_aboutBibleTimeAction, SIGNAL(triggered()),
+ this, SLOT(slotOpenAboutDialog()) );
+
+ m_tipOfTheDayAction = m_actionCollection->action("tipOfTheDay");
+ connect(m_tipOfTheDayAction, SIGNAL(triggered()),
+ this, SLOT(slotOpenTipDialog()) );
+
+ #ifdef BT_DEBUG
+ m_debugWidgetAction = new QAction(this);
+ m_debugWidgetAction->setCheckable(true);
+ connect(m_debugWidgetAction, SIGNAL(triggered(bool)),
+ this, SLOT(slotShowDebugWindow(bool)));
+ #endif
+
+ retranslateUiActions(m_actionCollection);
+}
+
+void BibleTime::initMenubar() {
+ // File menu:
+ m_fileMenu = new QMenu(this);
+ m_fileMenu->addAction(m_openWorkAction);
+ m_fileMenu->addSeparator();
+ m_fileMenu->addAction(m_quitAction);
+ menuBar()->addMenu(m_fileMenu);
+
+ // View menu:
+ m_viewMenu = new QMenu(this);
+ m_viewMenu->addAction(m_windowFullscreenAction);
+ m_viewMenu->addAction(m_showBookshelfAction);
+ m_viewMenu->addAction(m_showBookmarksAction);
+ m_viewMenu->addAction(m_showMagAction);
+ m_viewMenu->addAction(m_showTextAreaHeadersAction);
+ m_viewMenu->addSeparator();
+ m_toolBarsMenu = new QMenu(this);
+ m_toolBarsMenu->addAction(m_viewToolbarAction);
+ m_toolBarsMenu->addAction(m_showTextWindowNavigationAction);
+ m_toolBarsMenu->addAction(m_showTextWindowModuleChooserAction);
+ m_toolBarsMenu->addAction(m_showTextWindowToolButtonsAction);
+ m_toolBarsMenu->addAction(m_showFormatToolbarAction);
+ m_toolBarsMenu->addSeparator();
+ m_toolBarsMenu->addAction(m_toolbarsInEachWindow);
+ m_viewMenu->addMenu(m_toolBarsMenu);
+ menuBar()->addMenu(m_viewMenu);
+
+ // Search menu:
+ m_searchMenu = new QMenu(this);
+ m_searchMenu->addAction(m_searchOpenWorksAction);
+ m_searchMenu->addAction(m_searchStandardBibleAction);
+ menuBar()->addMenu(m_searchMenu);
+
+ // Window menu:
+ m_windowMenu = new QMenu(this);
+ m_openWindowsMenu = new QMenu(this);
+ QObject::connect(m_openWindowsMenu, SIGNAL(aboutToShow()),
+ this, SLOT(slotOpenWindowsMenuAboutToShow()));
+ m_windowMenu->addMenu(m_openWindowsMenu);
+ m_windowMenu->addAction(m_windowCloseAction);
+ m_windowMenu->addAction(m_windowCloseAllAction);
+ m_windowMenu->addSeparator();
+ m_windowMenu->addAction(m_windowCascadeAction);
+ m_windowMenu->addAction(m_windowTileAction);
+ m_windowMenu->addAction(m_windowTileVerticalAction);
+ m_windowMenu->addAction(m_windowTileHorizontalAction);
+ m_windowArrangementMenu = new QMenu(this);
+ m_windowArrangementMenu->addAction(m_windowManualModeAction);
+ m_windowArrangementMenu->addAction(m_windowAutoTabbedAction);
+ m_windowArrangementMenu->addAction(m_windowAutoTileVerticalAction);
+ m_windowArrangementMenu->addAction(m_windowAutoTileHorizontalAction);
+ m_windowArrangementMenu->addAction(m_windowAutoTileAction);
+ m_windowArrangementMenu->addAction(m_windowAutoCascadeAction);
+ m_windowMenu->addMenu(m_windowArrangementMenu);
+ m_windowMenu->addSeparator();
+ m_windowSaveProfileMenu = new QMenu(this);
+ m_windowMenu->addMenu(m_windowSaveProfileMenu);
+ m_windowMenu->addAction(m_windowSaveToNewProfileAction);
+ m_windowLoadProfileMenu = new QMenu(this);
+ m_windowMenu->addMenu(m_windowLoadProfileMenu);
+ m_windowDeleteProfileMenu = new QMenu(this);
+ m_windowMenu->addMenu(m_windowDeleteProfileMenu);
+ connect(m_windowLoadProfileMenu, SIGNAL(triggered(QAction*)),
+ this, SLOT(loadProfile(QAction*)));
+ connect(m_windowSaveProfileMenu, SIGNAL(triggered(QAction*)),
+ this, SLOT(saveProfile(QAction*)));
+ connect(m_windowDeleteProfileMenu, SIGNAL(triggered(QAction*)),
+ this, SLOT(deleteProfile(QAction*)));
+ refreshProfileMenus();
+ menuBar()->addMenu(m_windowMenu);
+ connect(m_windowMenu, SIGNAL(aboutToShow()),
+ this, SLOT(slotWindowMenuAboutToShow()));
+
+ // Settings menu:
+ m_settingsMenu = new QMenu(this);
+ m_settingsMenu->addAction(m_setPreferencesAction);
+ m_settingsMenu->addSeparator();
+ m_settingsMenu->addAction(m_bookshelfManagerAction);
+ menuBar()->addMenu(m_settingsMenu);
+
+ // Help menu:
+ m_helpMenu = new QMenu(this);
+ m_helpMenu->addAction(m_openHandbookAction);
+ m_helpMenu->addAction(m_bibleStudyHowtoAction);
+ m_helpMenu->addAction(m_tipOfTheDayAction);
+ m_helpMenu->addSeparator();
+ m_helpMenu->addAction(m_aboutBibleTimeAction);
+ #ifdef BT_DEBUG
+ m_helpMenu->addSeparator();
+ m_helpMenu->addAction(m_debugWidgetAction);
+ #endif
+ menuBar()->addMenu(m_helpMenu);
+}
- tmp = m_actionCollection->action("openHandbook");
- helpMenu->addAction(tmp);
- m_mainToolBar->addAction(tmp);
- connect(tmp, SIGNAL(triggered()), this, SLOT(openOnlineHelp_Handbook()) );
+void BibleTime::initToolbars() {
+ QToolButton *openWorkButton = new QToolButton(this);
+ openWorkButton->setDefaultAction(m_openWorkAction);
+ openWorkButton->setPopupMode(QToolButton::InstantPopup);
+ m_mainToolBar->addWidget(openWorkButton);
- tmp = m_actionCollection->action("bibleStudyHowto");
- helpMenu->addAction(tmp);
- connect(tmp, SIGNAL(triggered()), this, SLOT(openOnlineHelp_Howto()) );
+ m_mainToolBar->addSeparator();
+ m_mainToolBar->addAction(m_windowFullscreenAction);
+ m_mainToolBar->addSeparator();
+ m_mainToolBar->addAction(m_searchOpenWorksAction);
+ m_mainToolBar->addSeparator();
+ m_mainToolBar->addAction(m_openHandbookAction);
+}
- helpMenu->addSeparator();
+void BibleTime::retranslateUi() {
+ m_bookmarksDock->setWindowTitle(tr("Bookmarks"));
+ m_magDock->setWindowTitle(tr("Mag"));
+ m_mainToolBar->setWindowTitle(tr("Main toolbar"));
+ m_navToolBar->setWindowTitle(tr("Navigation toolbar"));
+ m_worksToolBar->setWindowTitle(tr("Works toolbar"));
+ m_toolsToolBar->setWindowTitle(tr("Tools toolbar"));
+ m_formatToolBar->setWindowTitle(tr("Format toolbar"));
+
+ m_fileMenu->setTitle(tr("&File"));
+ m_viewMenu->setTitle(tr("&View"));
+ m_toolBarsMenu->setTitle(tr("Toolbars"));
+
+ m_searchMenu->setTitle(tr("&Search"));
+ m_windowMenu->setTitle(tr("&Window"));
+ m_openWindowsMenu->setTitle(tr("O&pen windows"));
+ m_windowArrangementMenu->setTitle(tr("&Arrangement mode"));
+ m_windowSaveProfileMenu->setTitle(tr("&Save session"));
+ m_windowLoadProfileMenu->setTitle(tr("&Load session"));
+ m_windowDeleteProfileMenu->setTitle(tr("&Delete session"));
+ m_settingsMenu->setTitle(tr("Se&ttings"));
+ m_helpMenu->setTitle(tr("&Help"));
+
+ #ifdef BT_DEBUG
+ m_debugWidgetAction->setText(tr("Show \"Whats this widget\" dialog"));
+ #endif
+
+ retranslateUiActions(m_actionCollection);
+}
- tmp = m_actionCollection->action("aboutBibleTime");
- helpMenu->addAction(tmp);
- connect(tmp, SIGNAL(triggered()), this, SLOT(slotOpenAboutDialog()) );
+/** retranslation for actions used in this class
+* This is called for two different collections of actions
+* One set is for the actual use in the menus, etc
+* The second is used during the use of the configuration shortcut editor
+*/
+void BibleTime::retranslateUiActions(BtActionCollection* ac) {
+ ac->action("showToolbarsInTextWindows")->setText(tr("Show toolbars in text windows"));
+ ac->action("showToolbar")->setText(tr("Show main toolbar"));
+ ac->action("showNavigation")->setText(tr("Show navigation bar"));
+ ac->action("showWorks")->setText(tr("Show works toolbar"));
+ ac->action("showTools")->setText(tr("Show tools toolbar"));
+ ac->action("showFormat")->setText(tr("Show formatting toolbar"));
+ ac->action("showBookshelf")->setText(tr("Show bookshelf"));
+ ac->action("showBookmarks")->setText(tr("Show bookmarks"));
+ ac->action("showMag")->setText(tr("Show mag"));
+ ac->action("showParallelTextHeaders")->setText(tr("Show parallel text headers"));
}
/** Initializes the SIGNAL / SLOT connections */
void BibleTime::initConnections() {
- if (m_windowMenu) {
- QObject::connect(m_windowMenu, SIGNAL(aboutToShow()), this, SLOT(slotWindowMenuAboutToShow()));
- }
- else {
- qWarning() << "Main window: can't find window menu";
- }
+ // Bookmarks page connections:
+ connect(m_bookmarksPage, SIGNAL(createReadDisplayWindow(QList<CSwordModuleInfo*>, const QString&)),
+ this, SLOT(createReadDisplayWindow(QList<CSwordModuleInfo*>, const QString&)));
- if (m_openWindowsMenu) {
- QObject::connect(m_openWindowsMenu, SIGNAL(aboutToShow()),
- this, SLOT(slotOpenWindowsMenuAboutToShow()));
- }
- else {
- qWarning() << "Main window: can't find open windows menu";
- }
-
- bool ok;
- ok = connect(m_bookmarksPage,
- SIGNAL(createReadDisplayWindow(QList<CSwordModuleInfo*>, const QString&)),
- this,
- SLOT(createReadDisplayWindow(QList<CSwordModuleInfo*>, const QString&)));
- Q_ASSERT(ok);
+ // Bookshelf dock connections:
connect(m_bookshelfDock, SIGNAL(moduleOpenTriggered(CSwordModuleInfo*)),
this, SLOT(createReadDisplayWindow(CSwordModuleInfo*)));
connect(m_bookshelfDock, SIGNAL(moduleSearchTriggered(CSwordModuleInfo*)),
@@ -481,11 +690,9 @@ void BibleTime::initConnections() {
connect(m_bookshelfDock, SIGNAL(moduleEditHtmlTriggered(CSwordModuleInfo*)),
this, SLOT(moduleEditHtml(CSwordModuleInfo*)));
connect(m_bookshelfDock, SIGNAL(moduleUnlockTriggered(CSwordModuleInfo*)),
- this, SLOT(moduleUnlock(CSwordModuleInfo*)));
+ this, SLOT(slotModuleUnlock(CSwordModuleInfo*)));
connect(m_bookshelfDock, SIGNAL(moduleAboutTriggered(CSwordModuleInfo*)),
this, SLOT(moduleAbout(CSwordModuleInfo*)));
-
- connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(slot_aboutToQuit()));
}
void BibleTime::initSwordConfigFile() {
@@ -511,6 +718,24 @@ void BibleTime::initSwordConfigFile() {
out << "\n";
file.close();
#endif
+
+#ifdef Q_WS_MAC
+ namespace DU = util::directory;
+ QString configFile = util::directory::getUserHomeSwordDir().filePath("sword.conf");
+ QFile file(configFile);
+ if (file.exists()) {
+ return;
+ }
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ return;
+ }
+ QTextStream out(&file);
+ out << "\n";
+ out << "[Install]\n";
+ out << "DataPath=" << DU::convertDirSeparators( DU::getUserHomeSwordDir().absolutePath()) << "\n";
+ out << "\n";
+ file.close();
+#endif
}
/** Initializes the backend */
@@ -520,55 +745,64 @@ void BibleTime::initBackends() {
initSwordConfigFile();
sword::StringMgr::setSystemStringMgr( new BTStringMgr() );
- sword::SWLog::getSystemLog()->setLogLevel(1);
+ sword::SWLog::getSystemLog()->setLogLevel(sword::SWLog::LOG_ERROR);
+
+ if (qApp->property("--debug").toBool()) {
+ sword::SWLog::getSystemLog()->setLogLevel(sword::SWLog::LOG_DEBUG);
+ }
- CSwordBackend* backend = new CSwordBackend();
+#ifdef Q_WS_MAC
+ // set a LocaleMgr with a fixed path to the locales.d of the DMG image on MacOS
+ // note: this must be done after setting the BTStringMgr, because this will reset the LocaleMgr
+ qDebug() << "Using sword locales dir: " << util::directory::getSwordLocalesDir().absolutePath().toUtf8();
+ sword::LocaleMgr::setSystemLocaleMgr(new sword::LocaleMgr(util::directory::getSwordLocalesDir().absolutePath().toUtf8()));
+#endif
+
+ CSwordBackend *backend = CSwordBackend::createInstance();
backend->booknameLanguage(CBTConfig::get(CBTConfig::language) );
- CPointers::setBackend(backend);
- const CSwordBackend::LoadError errorCode = CPointers::backend()->initModules(CSwordBackend::OtherChange);
+ const CSwordBackend::LoadError errorCode = CSwordBackend::instance()->initModules(CSwordBackend::OtherChange);
if (errorCode != CSwordBackend::NoError) {
//show error message that initBackend failed
/// \todo
-// switch (errorCode) {
-// case CSwordBackend::NoSwordConfig: //mods.d or mods.conf missing
-// {
-// KStartupLogo::hideSplash();
-// qDebug() << "case CSwordBackend::NoSwordConfig";
-// BookshelfManager::CSwordSetupDialog dlg;
-// dlg.showPart( BookshelfManager::CSwordSetupDialog::Sword );
-// dlg.exec();
-// break;
-// }
+// switch (errorCode) {
+// case CSwordBackend::NoSwordConfig: //mods.d or mods.conf missing
+// {
+// KStartupLogo::hideSplash();
+// qDebug() << "case CSwordBackend::NoSwordConfig";
+// BookshelfManager::CSwordSetupDialog dlg;
+// dlg.showPart( BookshelfManager::CSwordSetupDialog::Sword );
+// dlg.exec();
+// break;
+// }
//
-// case CSwordBackend::NoModules: //no modules installed, but config exists
-// {
-// KStartupLogo::hideSplash();
-// qDebug() << "case CSwordBackend::NoModules";
-// BookshelfManager::CSwordSetupDialog dlg;
-// dlg.showPart( BookshelfManager::CSwordSetupDialog::Install );
-// dlg.exec();
-// break;
-// }
+// case CSwordBackend::NoModules: //no modules installed, but config exists
+// {
+// KStartupLogo::hideSplash();
+// qDebug() << "case CSwordBackend::NoModules";
+// BookshelfManager::CSwordSetupDialog dlg;
+// dlg.showPart( BookshelfManager::CSwordSetupDialog::Install );
+// dlg.exec();
+// break;
+// }
//
-// default: //unknown error
-// {
-// KStartupLogo::hideSplash();
-// qDebug() << "unknown error";
-// BookshelfManager::CSwordSetupDialog dlg;
-// dlg.showPart( BookshelfManager::CSwordSetupDialog::Sword );
-// dlg.exec();
-// break;
-// }
-// }
+// default: //unknown error
+// {
+// KStartupLogo::hideSplash();
+// qDebug() << "unknown error";
+// BookshelfManager::CSwordSetupDialog dlg;
+// dlg.showPart( BookshelfManager::CSwordSetupDialog::Sword );
+// dlg.exec();
+// break;
+// }
+// }
}
- //This function will
+ // This function will
// - delete all orphaned indexes (no module present) if autoDeleteOrphanedIndices is true
// - delete all indices of modules where hasIndex() returns false
- //BookshelfManager::CManageIndicesWidget::deleteOrphanedIndices();
- /// \todo //backend::deleteOrphanedIndices();
+ backend->deleteOrphanedIndices();
}
@@ -577,10 +811,10 @@ void BibleTime::applyProfileSettings( CProfile* p ) {
Q_ASSERT(p);
if (!p) return;
- //first Main Window state
- restoreState(p->getMainwindowState());
+ //first Main Window geometry
restoreGeometry(p->getMainwindowGeometry());
- m_windowFullscreen_action->setChecked(isFullScreen());
+ restoreState(p->getMainwindowState());
+ m_windowFullscreenAction->setChecked(isFullScreen());
const CMDIArea::MDIArrangementMode newArrangementMode = p->getMDIArrangementMode();
//make sure actions are updated by calling the slot functions
@@ -598,6 +832,9 @@ void BibleTime::applyProfileSettings( CProfile* p ) {
case CMDIArea::ArrangementModeTile:
slotAutoTile();
break;
+ case CMDIArea::ArrangementModeTabbed:
+ slotAutoTabbed();
+ break;
case CMDIArea::ArrangementModeManual:
slotManualArrangementMode();
break;
@@ -605,14 +842,87 @@ void BibleTime::applyProfileSettings( CProfile* p ) {
slotAutoTileVertical();
break;
}
+ layout()->invalidate();
}
void BibleTime::storeProfileSettings( CProfile* p ) {
- Q_ASSERT(p && m_windowFullscreen_action);
- if (!p || !m_windowFullscreen_action) return;
+ Q_ASSERT(p && m_windowFullscreenAction);
+ if (!p || !m_windowFullscreenAction) return;
p->setMainwindowState(saveState());
p->setMainwindowGeometry(saveGeometry());
p->setMDIArrangementMode(m_mdi->getMDIArrangementMode());
}
+#if BT_DEBUG
+
+QLabel *BibleTime::m_debugWindow = 0;
+QMutex BibleTime::m_debugWindowLock;
+
+void BibleTime::slotShowDebugWindow(bool show) {
+ if (show) {
+ QMutexLocker lock(&m_debugWindowLock);
+ if (m_debugWindow == 0) {
+ m_debugWindow = new QLabel(0, Qt::Dialog);
+ m_debugWindow->setAttribute(Qt::WA_DeleteOnClose);
+ m_debugWindow->setTextFormat(Qt::RichText);
+ m_debugWindow->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ m_debugWindow->setWindowTitle(tr("Whats this widget?"));
+ }
+ m_debugWindow->show();
+ connect(m_debugWindow, SIGNAL(destroyed()),
+ this, SLOT(slotDebugWindowClosing()), Qt::DirectConnection);
+ QTimer::singleShot(0, this, SLOT(slotDebugTimeout()));
+ } else {
+ deleteDebugWindow();
+ }
+}
+
+void BibleTime::deleteDebugWindow() {
+ QMutexLocker lock(&m_debugWindowLock);
+ if (m_debugWindow != 0) {
+ m_debugWindow->disconnect(SIGNAL(destroyed()), this, SLOT(slotDebugWindowClosing()));
+ delete m_debugWindow;
+ m_debugWindow = 0;
+ }
+}
+
+void BibleTime::slotDebugWindowClosing() {
+ QMutexLocker lock(&m_debugWindowLock);
+ m_debugWindow = 0;
+ m_debugWidgetAction->setChecked(false);
+}
+
+void BibleTime::slotDebugTimeout() {
+ QMutexLocker lock(&m_debugWindowLock);
+ if (m_debugWindow == 0 || m_debugWindow->isVisible() == false) return;
+
+ QTimer::singleShot(0, this, SLOT(slotDebugTimeout()));
+ QObject *w = QApplication::widgetAt(QCursor::pos());
+ if (w != 0) {
+ QString objectHierarchy;
+ do {
+ const QMetaObject *m = w->metaObject();
+ QString classHierarchy;
+ do {
+ if (!classHierarchy.isEmpty()) classHierarchy += ": ";
+ classHierarchy += m->className();
+
+ m = m->superClass();
+ } while (m != 0);
+ if (!objectHierarchy.isEmpty()) {
+ objectHierarchy += "<br/><b>child of:</b> ";
+ } else {
+ objectHierarchy += "<b>This widget is:</b> ";
+ }
+ objectHierarchy += classHierarchy;
+ w = w->parent();
+ } while (w != 0);
+ m_debugWindow->setText(objectHierarchy);
+ } else {
+ m_debugWindow->setText("No widget");
+ }
+ m_debugWindow->resize(m_debugWindow->minimumSizeHint());
+}
+
+#endif