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-2025 by the BibleTime developers.
8* The BibleTime source code is licensed under the GNU General Public License
9* version 2.0.
10*
11**********/
12
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
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
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)
CSwordModuleInfo * selectedModule() const noexcept
void update(BtModuleList newModulesToUse, CSwordModuleInfo *newSelectedModule, int newButtonIndexIndex, int newLeftLikeModules)
void sigModuleChosen(CSwordModuleInfo *module)
void setSelectedModule(CSwordModuleInfo *const newSelectedModule) noexcept
CSwordModuleInfo::ModuleType moduleType() const noexcept
int buttonIndex() const noexcept
QIcon moduleIcon() const
QString const & name() const