BibleTime
btmodulechooserbutton.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 "btmodulechooserbutton.h"
14 
15 #include "../../backend/drivers/cswordmoduleinfo.h"
16 #include "../../util/btconnect.h"
17 #include "../../util/cresmgr.h"
18 #include "btmodulechoosermenu.h"
19 
20 
22  QWidget * parent)
23  : QToolButton(parent)
24  , m_popup(
26  QString(),
27  mtype,
28  BtModuleChooserMenu::DisableNonBiblesOnFirstButton
29  | BtModuleChooserMenu::AddNoneButton,
30  this))
31 {
32  setIcon(icon());
33  setMenu(m_popup);
34  setPopupMode(QToolButton::InstantPopup);
37 }
38 
39 QIcon const & BtModuleChooserButton::icon() {
40  switch (m_popup->moduleType()) {
42  return m_popup->selectedModule()
43  ? CResMgr::modules::bible::icon_unlocked()
44  : CResMgr::modules::bible::icon_add();
46  return m_popup->selectedModule()
47  ? CResMgr::modules::commentary::icon_unlocked()
48  : CResMgr::modules::commentary::icon_add();
50  return m_popup->selectedModule()
51  ? CResMgr::modules::lexicon::icon_unlocked()
52  : CResMgr::modules::lexicon::icon_add();
54  return m_popup->selectedModule()
55  ? CResMgr::modules::book::icon_unlocked()
56  : CResMgr::modules::book::icon_add();
57  default: //return as default the bible icon
58  return CResMgr::modules::bible::icon_unlocked();
59  }
60 }
61 
63  CSwordModuleInfo * newSelectedModule,
64  int newButtonIndex,
65  int newLeftLikeModules)
66 {
67  if (newSelectedModule) {
68  setToolTip(tr("Select a work [%1]").arg(newSelectedModule->name()));
69  } else {
70  setToolTip(tr("Select an additional work"));
71  }
72  m_popup->update(std::move(newModulesToUse),
73  newSelectedModule,
74  newButtonIndex,
75  newLeftLikeModules);
76  if (newSelectedModule) {
77  setIcon(newSelectedModule->moduleIcon());
78  } else {
79  setIcon(icon());
80  }
81 }
82 
83 /** Is called after a module was selected in the popup */
85  CSwordModuleInfo * const newModule)
86 {
87  if (m_popup->selectedModule()) { // If module was previously selected:
88  if (newModule) {
89  m_popup->setSelectedModule(newModule);
90  setIcon(newModule->moduleIcon());
91  Q_EMIT sigModuleReplace(m_popup->buttonIndex(), newModule);
92  } else {
93  m_popup->setSelectedModule(nullptr);
94  setIcon(icon());
96  }
97  } else if (newModule) {
98  m_popup->setSelectedModule(newModule);
99  setIcon(newModule->moduleIcon());
100  Q_EMIT sigModuleAdd(m_popup->buttonIndex(), newModule);
101  }
102 }
#define BT_CONNECT(...)
Definition: btconnect.h:20
QList< CSwordModuleInfo * > BtModuleList
Definition: btmodulelist.h:20
BtModuleChooserMenu * m_popup
void updateMenu(BtModuleList newModulesToUse, CSwordModuleInfo *thisModule, int newIndex, int leftLikeModules)
void sigModuleAdd(int index, CSwordModuleInfo *module)
void moduleChosen(CSwordModuleInfo *const module)
void sigModuleReplace(int index, CSwordModuleInfo *newModule)
BtModuleChooserButton(CSwordModuleInfo::ModuleType mtype, QWidget *parent=nullptr)
Constructs an new empty button.
void sigModuleRemove(int index)
void update(BtModuleList newModulesToUse, CSwordModuleInfo *newSelectedModule, int newButtonIndexIndex, int newLeftLikeModules)
void sigModuleChosen(CSwordModuleInfo *module)
CSwordModuleInfo * selectedModule() const noexcept
void setSelectedModule(CSwordModuleInfo *const newSelectedModule) noexcept
CSwordModuleInfo::ModuleType moduleType() const noexcept
int buttonIndex() const noexcept
QIcon moduleIcon() const
QString const & name() const