blob: a9d045a521319e95ffc4e47fd63a1807483cdfeb (
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
|
#include "expanderwidget.h"
ExpanderWidget::ExpanderWidget()
: m_button(nullptr), m_content(nullptr), opened_(false)
{
}
ExpanderWidget::ExpanderWidget(QToolButton* button, QWidget* content)
: ExpanderWidget()
{
set(button, content);
}
void ExpanderWidget::set(QToolButton* button, QWidget* content, bool o)
{
m_button = button;
m_content = content;
m_button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
QObject::connect(m_button, &QToolButton::clicked, [&]{ toggle(); });
toggle(o);
}
void ExpanderWidget::toggle()
{
if (opened()) {
toggle(false);
}
else {
toggle(true);
}
}
void ExpanderWidget::toggle(bool b)
{
if (b) {
m_button->setArrowType(Qt::DownArrow);
m_content->show();
} else {
m_button->setArrowType(Qt::RightArrow);
m_content->hide();
}
// the state has to be remembered instead of using m_content's visibility
// because saving the state in saveConflictExpandersState() happens after the
// dialog is closed, which marks all the widgets hidden
opened_ = b;
}
bool ExpanderWidget::opened() const
{
return opened_;
}
QByteArray ExpanderWidget::saveState() const
{
QByteArray result;
QDataStream stream(&result, QIODevice::WriteOnly);
stream << opened();
return result;
}
void ExpanderWidget::restoreState(const QByteArray& a)
{
QDataStream stream(a);
bool opened = false;
stream >> opened;
if (stream.status() == QDataStream::Ok) {
toggle(opened);
}
}
QToolButton* ExpanderWidget::button() const
{
return m_button;
}
|