37 checkbox_ = Checkbox(checkbox);
40 Add(Container::Vertical({
42 Maybe(radiobox_, checkbox.checked),
49 selected_ = util::clamp(selected_(), 0,
int(
radiobox.entries.size()) - 1);
51 if (selected_() >= 0 && selected_() <
int(
radiobox.entries.size())) {
52 title_ =
radiobox.entries[selected_()];
55 return transform(*open_, checkbox_->Render(), radiobox_->Render());
60 const bool open_old = open_();
61 const int selected_old = selected_();
62 bool handled = ComponentBase::OnEvent(event);
65 if (!open_old && open_()) {
66 radiobox_->TakeFocus();
70 const bool should_close =
71 (selected_() != selected_old) ||
72 (event == Event::Return) ||
73 (
event == Event::Character(
' ')) ||
74 (event == Event::Escape) ||
75 (
event.is_mouse() && event.
mouse().
button == Mouse::Left &&
79 checkbox_->TakeFocus();
89 open_ = checkbox.checked;
91 checkbox.checked = &*open_;
93 checkbox.label = &title_;
95 if (!checkbox.transform) {
97 auto prefix =
text(s.state ?
"↓ " :
"→ ");
98 auto t =
text(s.label);
105 return hbox({prefix, t});
110 transform = [](
bool is_open,
Element checkbox_element,
113 const int max_height = 12;
115 std::move(checkbox_element),
117 std::move(radiobox_element) | vscroll_indicator | frame |
122 return vbox({std::move(checkbox_element),
filler()}) | border;
來自 |ButtonOption|、|CheckboxOption|、 |RadioboxOption|、|MenuEntryOption|、|MenuOption| 的轉換參數。