Wt examples  4.9.2
Loading...
Searching...
No Matches
OptionList.C
Go to the documentation of this file.
1// This may look like C code, but it's really -*- C++ -*-
2/*
3 * Copyright (C) 2008 Emweb bv, Herent, Belgium.
4 *
5 * See the LICENSE file for terms of use.
6 */
7
8#include "OptionList.h"
9#include "Option.h"
10
12 : WContainerWidget(),
13 optionNeedReset_(0)
14{
15 resize(WLength::Auto, WLength(2.5, LengthUnit::FontEx));
16}
17
18void OptionList::add(std::unique_ptr<Option> option)
19{
20 Option *optionPtr = option.get();
21 addWidget(std::move(option));
22 optionPtr->setOptionList(this);
23
24 if (!options_.empty()) {
25 options_.back()->addSeparator();
26 }
27
28 options_.push_back(optionPtr);
29}
30
32{
33 if (optionNeedReset_ != 0)
34 optionNeedReset_->resetLearnedSlots();
35
37}
38
40{
41 /*
42 * Check if it was the last visible option, in that case the second last
43 * visible option loses its separator.
44 */
45 for (std::size_t i = options_.size() - 1; i > 0; --i) {
46 if (options_[i] == opt) {
47 for (int j = i - 1; j >= 0; --j) {
48 if (!options_[j]->isHidden()) {
49 if (hidden)
50 options_[j]->hideSeparator();
51 else
52 options_[j]->showSeparator();
53 break;
54 }
55 }
56 break;
57 } else
58 if (!options_[i]->isHidden())
59 break;
60 }
61
62 /*
63 * The Option to the right needs to relearn its stateless
64 * slot code for hide() and show().
65 */
66 for (unsigned i = 0; i < options_.size(); ++i) {
67 if (options_[i] == opt) {
68 for (unsigned j = i + 1; j < options_.size(); ++j) {
69 if (!options_[j]->isHidden()) {
71 break;
72 }
73 }
74
75 break;
76 }
77 }
78}
79
void optionVisibilityChanged(Option *opt, bool hidden)
An option changed visibility: possibly update the separators inbetween.
Definition: OptionList.C:39
Option * optionNeedReset_
The option that needs its stateless code updated.
Definition: OptionList.h:61
void update()
Updates the stateless implementations after an Option has been hidden or shown.
Definition: OptionList.C:31
std::vector< Option * > options_
The list of options.
Definition: OptionList.h:58
OptionList()
Create an OptionList.
Definition: OptionList.C:11
void add(std::unique_ptr< Option > option)
Add an Option to the list.
Definition: OptionList.C:18
A clickable option.
Definition: Option.h:32
void setOptionList(OptionList *l)
Definition: Option.C:28