blob: ae096f360e6136b4ba3b8c95b9aeeb00fabbda98 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/*********
*
* In the name of the Father, and of the Son, and of the Holy Spirit.
*
* This file is part of BibleTime's source code, http://www.bibletime.info/.
*
* Copyright 1999-2016 by the BibleTime developers.
* The BibleTime source code is licensed under the GNU General Public License version 2.0.
*
**********/
#ifndef BTCONFIGDIALOG_H
#define BTCONFIGDIALOG_H
#include <QDialog>
#include <QIcon>
#include <QListWidgetItem>
class QDialogButtonBox;
class QStackedWidget;
class QVBoxLayout;
/**
* Base class for configuration dialogs. A dialog which has a page chooser (icons
* + text) at the left, widget pages and a buttonbox.
*
* Usage: add BtConfigPage pages with addPage(), add a button box with addButtonBox().
* Connect the button box signals. Use setAttribute(Qt::WA_DeleteOnClose) if you want
* an auto-destroying window.
*/
class BtConfigDialog : public QDialog {
public: /* Types: */
/** Base class for configuration dialog pages. */
class Page : public QWidget {
friend class BtConfigDialog;
public: /* Methods: */
inline Page(QIcon const & icon, QWidget * const parent)
: QWidget(parent)
, m_icon(icon)
{}
inline void setHeaderText(QString const & headerText) {
m_headerText = headerText;
if (m_listWidgetItem)
m_listWidgetItem->setText(headerText);
}
private: /* Methods: */
void setListWidgetItem(QListWidgetItem * const item) noexcept {
m_listWidgetItem = item;
item->setIcon(m_icon);
item->setText(m_headerText);
}
private: /* Fields: */
QIcon const m_icon;
QString m_headerText;
QListWidgetItem * m_listWidgetItem = nullptr;
};
public: /* Methods: */
BtConfigDialog(QWidget * const parent = nullptr,
Qt::WindowFlags const flags = 0);
/** Adds a BtConfigPage to the paged widget stack. The new page will be the current page.*/
void addPage(Page * const pageWidget);
/** Adds a button box to the lower edge of the dialog. */
void setButtonBox(QDialogButtonBox * const buttonBox);
/** Changes the current page using the given index number. */
void setCurrentPage(int const newIndex);
private: /* Fields: */
QListWidget * const m_contentsList;
QStackedWidget * const m_pageWidget;
QVBoxLayout * m_pageLayout;
int m_maxItemWidth = 0;
};
#endif
|