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-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 "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 
49 void 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 
67  auto * const w = new BtTextWindowHeaderWidget(m_moduleType, this);
68  layout()->addWidget(w);
69  m_widgetList.append(w);
76  return w;
77 }
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
Definition: btmodulelist.h:20
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