summaryrefslogtreecommitdiff
path: root/src/frontend/btopenworkaction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/btopenworkaction.cpp')
-rw-r--r--src/frontend/btopenworkaction.cpp111
1 files changed, 111 insertions, 0 deletions
diff --git a/src/frontend/btopenworkaction.cpp b/src/frontend/btopenworkaction.cpp
new file mode 100644
index 0000000..9f33fc5
--- /dev/null
+++ b/src/frontend/btopenworkaction.cpp
@@ -0,0 +1,111 @@
+/*********
+*
+* In the name of the Father, and of the Son, and of the Holy Spirit.
+*
+* This file is part of BibleTime's source code, http://www.bibletime.info/.
+*
+* Copyright 1999-2011 by the BibleTime developers.
+* The BibleTime source code is licensed under the GNU General Public License
+* version 2.0.
+*
+**********/
+
+#include "frontend/btopenworkaction.h"
+
+#include "backend/bookshelfmodel/btbookshelffiltermodel.h"
+#include "backend/managers/cswordbackend.h"
+#include "frontend/btbookshelfgroupingmenu.h"
+#include "util/directory.h"
+
+
+BtOpenWorkActionMenu::BtOpenWorkActionMenu(const QString &groupingConfigKey,
+ QWidget *parent)
+ : BtMenuView(parent), m_treeModel(0), m_postFilterModel(0),
+ m_groupingConfigKey(groupingConfigKey)
+{
+ // Setup models:
+ m_treeModel = new BtBookshelfTreeModel(groupingConfigKey, this);
+ m_postFilterModel = new BtBookshelfFilterModel(this);
+ m_postFilterModel->setSourceModel(m_treeModel);
+ setModel(m_postFilterModel);
+
+ m_groupingMenu = new BtBookshelfGroupingMenu(false, this);
+
+ connect(this, SIGNAL(triggered(QModelIndex)),
+ this, SLOT(slotIndexTriggered(QModelIndex)));
+ connect(m_groupingMenu, SIGNAL(signalGroupingOrderChanged(BtBookshelfTreeModel::Grouping)),
+ this, SLOT(slotGroupingActionTriggered(BtBookshelfTreeModel::Grouping)));
+
+ retranslateUi();
+}
+
+BtOpenWorkActionMenu::~BtOpenWorkActionMenu() {
+ // Intentionally empty
+}
+
+void BtOpenWorkActionMenu::setSourceModel(QAbstractItemModel *model) {
+ m_treeModel->setSourceModel(model);
+}
+
+void BtOpenWorkActionMenu::retranslateUi() {
+ m_groupingMenu->setTitle(tr("&Grouping order"));
+ m_groupingMenu->setStatusTip(tr("Sets the grouping order for the items in "
+ "this menu."));
+}
+
+void BtOpenWorkActionMenu::postBuildMenu() {
+ addSeparator();
+ addMenu(m_groupingMenu);
+}
+
+void BtOpenWorkActionMenu::slotIndexTriggered(const QModelIndex &index) {
+ static const int MPR = BtBookshelfModel::ModulePointerRole;
+
+ CSwordModuleInfo *i;
+ i = static_cast<CSwordModuleInfo *>(model()->data(index, MPR).value<void*>());
+ if (i != 0) {
+ emit triggered(i);
+ }
+}
+
+void BtOpenWorkActionMenu::slotGroupingActionTriggered(const BtBookshelfTreeModel::Grouping &grouping) {
+ m_treeModel->setGroupingOrder(grouping);
+ grouping.saveTo(m_groupingConfigKey);
+}
+
+BtOpenWorkAction::BtOpenWorkAction(const QString &groupingConfigKey,
+ QObject *parent)
+ : QAction(parent)
+{
+ m_menu = new BtOpenWorkActionMenu(groupingConfigKey);
+ m_menu->setSourceModel(CSwordBackend::instance()->model());
+
+ setMenu(m_menu);
+ setIcon(util::directory::getIcon("folder-open.svg"));
+ retranslateUi();
+ slotModelChanged();
+
+ BtBookshelfFilterModel *filterModel = m_menu->postFilterModel();
+ connect(m_menu, SIGNAL(triggered(CSwordModuleInfo*)),
+ this, SIGNAL(triggered(CSwordModuleInfo*)));
+ connect(filterModel, SIGNAL(layoutChanged()),
+ this, SLOT(slotModelChanged()));
+ connect(filterModel, SIGNAL(modelReset()),
+ this, SLOT(slotModelChanged()));
+ connect(filterModel, SIGNAL(rowsInserted(QModelIndex, int, int)),
+ this, SLOT(slotModelChanged()));
+ connect(filterModel, SIGNAL(rowsRemoved(QModelIndex, int, int)),
+ this, SLOT(slotModelChanged()));
+}
+
+BtOpenWorkAction::~BtOpenWorkAction() {
+ delete m_menu;
+}
+
+void BtOpenWorkAction::retranslateUi() {
+ setText(tr("&Open work"));
+}
+
+void BtOpenWorkAction::slotModelChanged() {
+ setEnabled(m_menu->postFilterModel()->rowCount() > 0);
+}