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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
/*********
*
* This file is part of BibleTime's source code, http://www.bibletime.info/.
*
* Copyright 1999-2008 by the BibleTime developers.
* The BibleTime source code is licensed under the GNU General Public License version 2.0.
*
**********/
#include "frontend/bookshelfmanager/btconfigdialog.h"
#include <QDialog>
#include <QDialogButtonBox>
#include <QEvent>
#include <QFrame>
#include <QHBoxLayout>
#include <QLabel>
#include <QListWidget>
#include <QListView>
#include <QListWidgetItem>
#include <QStackedWidget>
#include <QVBoxLayout>
#include "util/directory.h"
#include "util/tool.h"
BtConfigDialog::BtConfigDialog(QWidget* parent)
: QDialog(parent),
m_maxItemWidth(0),
m_previousPageIndex(-2) {
setWindowFlags(Qt::Window);
m_contentsList = new QListWidget(this);
m_contentsList->setViewMode(QListView::IconMode);
m_contentsList->setMovement(QListView::Static);
m_pageWidget = new QStackedWidget(this);
m_pageWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
QHBoxLayout *mainLayout = new QHBoxLayout;
setLayout(mainLayout);
mainLayout->addWidget(m_contentsList);
m_pageLayout = new QVBoxLayout;
mainLayout->addLayout(m_pageLayout);
m_pageLayout->addWidget(m_pageWidget);
// Horizontal line
QFrame* line = new QFrame();
line->setGeometry(QRect(1, 1, 1, 3));
line->setFrameShape(QFrame::HLine);
line->setFrameShadow(QFrame::Sunken);
line->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
m_pageLayout->addWidget(line);
connect(m_contentsList,
SIGNAL(currentRowChanged(int)),
this, SLOT(slotChangePage(int))
);
}
BtConfigDialog::~BtConfigDialog() {}
void BtConfigDialog::addPage(BtConfigPage* pageWidget) {
namespace DU = util::directory;
// this is a friend
pageWidget->m_parentDialog = this;
QVBoxLayout* containerLayout = new QVBoxLayout;
QLabel* headerLabel = util::tool::explanationLabel(pageWidget, pageWidget->header(), pageWidget->label());
containerLayout->addWidget(headerLabel);
containerLayout->addWidget(pageWidget);
QWidget* containerWidget = new QWidget(m_pageWidget);
containerWidget->setLayout(containerLayout);
m_pageWidget->addWidget(containerWidget);
QListWidgetItem* item = new QListWidgetItem(m_contentsList);
item->setIcon(DU::getIcon(pageWidget->iconName()));
item->setText(pageWidget->header());
item->setTextAlignment(Qt::AlignHCenter);
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
//set the list width - it may bee too wide (if there were no pages) or too narrow
if (m_maxItemWidth < m_contentsList->visualItemRect(item).width()) {
m_maxItemWidth = m_contentsList->visualItemRect(item).width();
m_contentsList->setFixedWidth( m_maxItemWidth + (m_contentsList->frameWidth()*2) );
}
// all items should has the same width
for (int i = 0; i < m_contentsList->count(); ++i) {
m_contentsList->item(i)->setSizeHint(QSize(m_maxItemWidth, m_contentsList->visualItemRect(m_contentsList->item(i)).height()) );
}
slotChangePage(m_contentsList->row(item));
}
void BtConfigDialog::addButtonBox(QDialogButtonBox* box) {
m_pageLayout->addWidget(box);
}
BtConfigPage* BtConfigDialog::currentPage() {
return dynamic_cast<BtConfigPage*>(m_pageWidget->currentWidget());
}
void BtConfigDialog::slotChangePage(int newIndex) {
if (m_previousPageIndex != newIndex) {
m_previousPageIndex = newIndex;
m_contentsList->setCurrentRow(newIndex);
m_pageWidget->setCurrentIndex(newIndex);
}
}
BtConfigPage::BtConfigPage() {}
BtConfigPage::~BtConfigPage() {}
|