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 "../../util/btassert.h"
20#include "../../util/btconnect.h"
21#include "../../util/btmodules.h"
23
24
26 BtModuleList modules,
27 QWidget * const parent)
28 : QWidget(parent)
29 , m_moduleType(modtype)
30{
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
44 adjustWidgetCount(modules.size());
45 updateWidgets(modules);
46}
47
48void 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
77
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}
#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