Wt examples  4.10.4
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 
18 void 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)
35 
36  optionNeedReset_ = 0;
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
virtual void addWidget(std::unique_ptr< WWidget > widget)
void resetLearnedSlots()
virtual void resize(const WLength &width, const WLength &height) override
virtual bool isHidden() const override