BibleTime
src
frontend
displaywindow
bttextwindowheader.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
13
#include "
bttextwindowheader.h
"
14
15
#include <QHBoxLayout>
16
#include <QLayout>
17
#include <QSizePolicy>
18
#include <Qt>
19
#include "../../util/btassert.h"
20
#include "../../util/btconnect.h"
21
#include "../../util/btmodules.h"
22
#include "
bttextwindowheaderwidget.h
"
23
24
25
BtTextWindowHeader::BtTextWindowHeader
(
CSwordModuleInfo::ModuleType
modtype,
26
BtModuleList
modules,
27
QWidget
*
const
parent)
28
:
QWidget
(parent)
29
, m_moduleType(modtype)
30
{
31
BT_ASSERT
(modtype !=
CSwordModuleInfo::GenericBook
);
32
33
auto
*
const
layout =
new
QHBoxLayout(
this
);
34
layout->setContentsMargins(0, 0, 0, 0);
35
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
36
setLayoutDirection(Qt::LeftToRight);
37
38
for
(
int
i = 0; i < modules.count(); i++)
39
addWidget
();
40
updateWidgets
(modules);
41
}
42
43
void
BtTextWindowHeader::setModules
(
BtModuleList
modules) {
44
adjustWidgetCount
(modules.size());
45
updateWidgets
(modules);
46
}
47
48
void
BtTextWindowHeader::adjustWidgetCount
(
int
const
numWidgets) {
49
if
(
m_widgetList
.size() > numWidgets) {
50
auto
toRemove =
m_widgetList
.size() - numWidgets;
51
do
{
52
// it should be safe to delete the button later
53
auto
*
const
w =
m_widgetList
.takeFirst();
54
w->setParent(
nullptr
);
55
w->deleteLater();
56
}
while
(--toRemove);
57
}
else
if
(numWidgets >
m_widgetList
.size()) {
58
auto
toAdd = numWidgets -
m_widgetList
.size();
59
do
{
60
addWidget
();
61
}
while
(--toAdd);
62
}
63
}
64
65
BtTextWindowHeaderWidget
*
BtTextWindowHeader::addWidget
() {
66
auto
*
const
w =
new
BtTextWindowHeaderWidget
(
m_moduleType
,
this
);
67
layout()->addWidget(w);
68
m_widgetList
.append(w);
69
BT_CONNECT
(w, &
BtTextWindowHeaderWidget::sigModuleAdd
,
70
this
, &
BtTextWindowHeader::moduleAdded
);
71
BT_CONNECT
(w, &
BtTextWindowHeaderWidget::sigModuleReplace
,
72
this
, &
BtTextWindowHeader::moduleReplaced
);
73
BT_CONNECT
(w, &
BtTextWindowHeaderWidget::sigModuleRemove
,
74
this
, &
BtTextWindowHeader::moduleRemoved
);
75
return
w;
76
}
77
78
void
BtTextWindowHeader::updateWidgets
(
BtModuleList
const
& modules) {
79
int
const
leftLikeModules =
leftLikeParallelModules
(modules);
80
for
(
int
i = 0; i <
m_widgetList
.count(); i++)
81
m_widgetList
.at(i)->updateWidget(modules,
82
modules.at(i),
83
i,
84
leftLikeModules);
85
}
BT_ASSERT
#define BT_ASSERT(...)
Definition
btassert.h:17
BT_CONNECT
#define BT_CONNECT(...)
Definition
btconnect.h:20
BtModuleList
QList< CSwordModuleInfo * > BtModuleList
Definition
btmodulelist.h:20
leftLikeParallelModules
int leftLikeParallelModules(BtModuleList const &modules)
Definition
btmodules.cpp:19
bttextwindowheader.h
bttextwindowheaderwidget.h
BtTextWindowHeaderWidget
Definition
bttextwindowheaderwidget.h:36
BtTextWindowHeaderWidget::sigModuleReplace
void sigModuleReplace(int index, CSwordModuleInfo *newModule)
BtTextWindowHeaderWidget::sigModuleAdd
void sigModuleAdd(int index, CSwordModuleInfo *module)
BtTextWindowHeaderWidget::sigModuleRemove
void sigModuleRemove(int index)
BtTextWindowHeader::moduleAdded
void moduleAdded(int index, CSwordModuleInfo *module)
BtTextWindowHeader::moduleReplaced
void moduleReplaced(int index, CSwordModuleInfo *newModule)
BtTextWindowHeader::addWidget
BtTextWindowHeaderWidget * addWidget()
Definition
bttextwindowheader.cpp:65
BtTextWindowHeader::adjustWidgetCount
void adjustWidgetCount(int const numWidgets)
Ensures exactly numModules widgets.
Definition
bttextwindowheader.cpp:48
BtTextWindowHeader::setModules
void setModules(BtModuleList newModules)
Definition
bttextwindowheader.cpp:43
BtTextWindowHeader::updateWidgets
void updateWidgets(BtModuleList const &modules)
Definition
bttextwindowheader.cpp:78
BtTextWindowHeader::m_moduleType
CSwordModuleInfo::ModuleType const m_moduleType
Definition
bttextwindowheader.h:64
BtTextWindowHeader::BtTextWindowHeader
BtTextWindowHeader(CSwordModuleInfo::ModuleType modtype, BtModuleList modules, QWidget *window=nullptr)
Definition
bttextwindowheader.cpp:25
BtTextWindowHeader::moduleRemoved
void moduleRemoved(int index)
BtTextWindowHeader::m_widgetList
QList< BtTextWindowHeaderWidget * > m_widgetList
Definition
bttextwindowheader.h:63
CSwordModuleInfo::ModuleType
ModuleType
Definition
cswordmoduleinfo.h:86
CSwordModuleInfo::GenericBook
@ GenericBook
Definition
cswordmoduleinfo.h:90
QWidget
Generated by
1.9.8