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