-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathPanelList.cpp
More file actions
60 lines (47 loc) · 1.22 KB
/
PanelList.cpp
File metadata and controls
60 lines (47 loc) · 1.22 KB
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
/*
* Copyright (C) 2008 Emweb bvba, Kessel-Lo, Belgium.
*
* See the LICENSE file for terms of use.
*/
#include <Wt/WPanel.h>
#include "PanelList.h"
using namespace Wt;
PanelList::PanelList()
: WContainerWidget()
{ }
WPanel *PanelList::addWidget(const WString& text, std::unique_ptr<WWidget> w)
{
std::unique_ptr<WPanel> p
= cpp14::make_unique<WPanel>();
WPanel *result = p.get();
p->setTitle(text);
p->setCentralWidget(std::move(w));
addPanel(std::move(p));
return result;
}
void PanelList::addPanel(std::unique_ptr<WPanel> panel)
{
panel->setCollapsible(true);
panel->collapse();
panel->expandedSS().connect(std::bind(&PanelList::onExpand, this, std::placeholders::_1, panel.get()));
WContainerWidget::addWidget(std::move(panel));
}
void PanelList::onExpand(bool notUndo, WPanel *panel)
{
if (notUndo) {
wasExpanded_ = -1;
for (unsigned i = 0; i < children().size(); ++i) {
WPanel *p = dynamic_cast<WPanel *>(children()[i]);
if (p != panel) {
if (!p->isCollapsed())
wasExpanded_ = i;
p->collapse();
}
}
} else {
if (wasExpanded_ != -1) {
WPanel *p = dynamic_cast<WPanel *>(children()[wasExpanded_]);
p->expand();
}
}
}