mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2025-09-16 16:08:08 +08:00
Make component more functionnal
This commit is contained in:
@@ -1,36 +1,35 @@
|
||||
#ifndef FTXUI_COMPONENT_BUTTON_HPP
|
||||
#define FTXUI_COMPONENT_BUTTON_HPP
|
||||
|
||||
#include <functional>
|
||||
#include <string>
|
||||
#include <functional> // for function
|
||||
#include <string> // for wstring
|
||||
|
||||
#include "ftxui/component/component.hpp"
|
||||
#include "ftxui/dom/elements.hpp"
|
||||
#include "ftxui/screen/box.hpp"
|
||||
#include "ftxui/component/component.hpp" // for Component
|
||||
#include "ftxui/component/component_base.hpp" // for ComponentBase
|
||||
#include "ftxui/dom/elements.hpp" // for Element
|
||||
#include "ftxui/screen/box.hpp" // for Box
|
||||
|
||||
namespace ftxui {
|
||||
struct Event;
|
||||
|
||||
/// @brief A button. An action is associated to the click event.
|
||||
/// @ingroup dom
|
||||
class Button : public Component {
|
||||
class ButtonBase : public ComponentBase {
|
||||
public:
|
||||
// Access this interface from a Component
|
||||
static ButtonBase* From(Component);
|
||||
|
||||
// Constructor.
|
||||
Button() = default;
|
||||
Button(std::wstring label) : label(label) {}
|
||||
~Button() override = default;
|
||||
|
||||
/// The Button label.
|
||||
std::wstring label = L"button";
|
||||
|
||||
/// Called when the user press the "enter" button.
|
||||
std::function<void()> on_click = [] {};
|
||||
ButtonBase(const std::wstring* label, std::function<void()> on_click);
|
||||
~ButtonBase() override = default;
|
||||
|
||||
// Component implementation.
|
||||
Element Render() override;
|
||||
bool OnEvent(Event) override;
|
||||
|
||||
private:
|
||||
const std::wstring* label_;
|
||||
std::function<void()> on_click_;
|
||||
Box box_;
|
||||
};
|
||||
|
||||
|
@@ -1,10 +1,13 @@
|
||||
#ifndef FTXUI_COMPONENT_CHECKBOX_HPP
|
||||
#define FTXUI_COMPONENT_CHECKBOX_HPP
|
||||
|
||||
#include <string>
|
||||
#include <functional> // for function
|
||||
#include <string> // for wstring, allocator
|
||||
|
||||
#include "ftxui/component/component.hpp"
|
||||
#include "ftxui/screen/box.hpp"
|
||||
#include "ftxui/component/component.hpp" // for Component
|
||||
#include "ftxui/component/component_base.hpp" // for ComponentBase
|
||||
#include "ftxui/dom/elements.hpp" // for Element, Decorator, inverted, nothing
|
||||
#include "ftxui/screen/box.hpp" // for Box
|
||||
|
||||
namespace ftxui {
|
||||
struct Event;
|
||||
@@ -12,14 +15,14 @@ struct Event;
|
||||
/// @brief A Checkbox. It can be checked or unchecked.Display an element on a
|
||||
/// ftxui::Screen.
|
||||
/// @ingroup dom
|
||||
class CheckBox : public Component {
|
||||
class CheckboxBase : public ComponentBase {
|
||||
public:
|
||||
// Constructor.
|
||||
CheckBox() = default;
|
||||
~CheckBox() override = default;
|
||||
// Access this interface from a Component
|
||||
static CheckboxBase* From(Component component);
|
||||
|
||||
bool state = false; // The current state. true=checked, false:unchecked.
|
||||
std::wstring label = L"label"; // The CheckBox label.
|
||||
// Constructor.
|
||||
CheckboxBase(const std::wstring* label, bool* state);
|
||||
~CheckboxBase() override = default;
|
||||
|
||||
#if defined(_WIN32)
|
||||
std::wstring checked = L"[X] "; /// Prefix for a "checked" state.
|
||||
@@ -32,7 +35,7 @@ class CheckBox : public Component {
|
||||
Decorator focused_style = inverted; /// Decorator used when focused.
|
||||
Decorator unfocused_style = nothing; /// Decorator used when unfocused.
|
||||
|
||||
/// Called when the user change the state of the CheckBox.
|
||||
/// Called when the user change the state of the CheckboxBase.
|
||||
std::function<void()> on_change = []() {};
|
||||
|
||||
// Component implementation.
|
||||
@@ -42,6 +45,8 @@ class CheckBox : public Component {
|
||||
private:
|
||||
bool OnMouseEvent(Event event);
|
||||
|
||||
const std::wstring* const label_;
|
||||
bool* const state_;
|
||||
int cursor_position = 0;
|
||||
Box box_;
|
||||
};
|
||||
|
@@ -1,77 +1,45 @@
|
||||
#ifndef FTXUI_COMPONENT_COMPONENT_HPP
|
||||
#define FTXUI_COMPONENT_COMPONENT_HPP
|
||||
#ifndef FTXUI_COMPONENT_HPP
|
||||
#define FTXUI_COMPONENT_HPP
|
||||
|
||||
#include <memory> // for unique_ptr
|
||||
#include <vector> // for vector
|
||||
#include <functional> // for function
|
||||
#include <memory> // for shared_ptr, make_shared
|
||||
#include <string> // for wstring
|
||||
#include <vector> // for vector
|
||||
|
||||
#include "ftxui/component/captured_mouse.hpp" // for CaptureMouse
|
||||
#include "ftxui/dom/elements.hpp" // for Element
|
||||
#include "ftxui/component/component_base.hpp"
|
||||
|
||||
namespace ftxui {
|
||||
|
||||
class Delegate;
|
||||
class Focus;
|
||||
struct Event;
|
||||
class ComponentBase;
|
||||
|
||||
/// @brief It implement rendering itself as ftxui::Element. It implement
|
||||
/// keyboard navigation by responding to ftxui::Event.
|
||||
/// @ingroup component
|
||||
class Component {
|
||||
public:
|
||||
// Constructor/Destructor.
|
||||
Component() = default;
|
||||
virtual ~Component();
|
||||
using Component = std::shared_ptr<ComponentBase>;
|
||||
using Components = std::vector<Component>;
|
||||
|
||||
// Component hierarchy.
|
||||
Component* Parent();
|
||||
void Add(Component* children);
|
||||
template <class T, class... Args>
|
||||
std::shared_ptr<T> Make(Args&&... args) {
|
||||
return std::make_shared<T>(args...);
|
||||
}
|
||||
|
||||
// Renders the component.
|
||||
virtual Element Render();
|
||||
Component Button(const std::wstring* label, std::function<void()> on_click);
|
||||
Component Checkbox(const std::wstring* label, bool* checked);
|
||||
Component Input(std::wstring* content, const std::wstring* placeholder);
|
||||
Component Menu(const std::vector<std::wstring>* entries, int* selected_);
|
||||
Component Radiobox(const std::vector<std::wstring>* entries, int* selected_);
|
||||
Component Toggle(const std::vector<std::wstring>* entries, int* selected);
|
||||
|
||||
// Handles an event.
|
||||
// By default, reduce on children with a lazy OR.
|
||||
//
|
||||
// Returns whether the event was handled or not.
|
||||
virtual bool OnEvent(Event);
|
||||
template <class T> // T = {int, float}
|
||||
Component Slider(std::wstring label, T* value, T min, T max, T increment);
|
||||
|
||||
// Focus management ----------------------------------------------------------
|
||||
//
|
||||
// If this component contains children, this indicates which one is active,
|
||||
// nullptr if none is active.
|
||||
//
|
||||
// We say an element has the focus if the chain of ActiveChild() from the
|
||||
// root component contains this object.
|
||||
virtual Component* ActiveChild();
|
||||
// namespace Component {
|
||||
// Component Vertical(Components children);
|
||||
// Component Horizontal(Components children);
|
||||
// Component Tab(int* selector, Components children);
|
||||
//} // namespace Component
|
||||
|
||||
// Whether this is the active child of its parent.
|
||||
bool Active();
|
||||
// Whether all the ancestors are active.
|
||||
bool Focused();
|
||||
}; // namespace ftxui
|
||||
|
||||
// Make the |child| to be the "active" one.
|
||||
virtual void SetActiveChild(Component* child);
|
||||
#endif /* end of include guard: FTXUI_COMPONENT_HPP */
|
||||
|
||||
// Configure all the ancestors to give focus to this component.
|
||||
void TakeFocus();
|
||||
|
||||
protected:
|
||||
CapturedMouse CaptureMouse(const Event& event);
|
||||
|
||||
std::vector<Component*> children_;
|
||||
|
||||
private:
|
||||
Component* parent_ = nullptr;
|
||||
void Detach();
|
||||
void Attach(Component* parent);
|
||||
};
|
||||
|
||||
using ComponentPtr = std::unique_ptr<Component>;
|
||||
|
||||
} // namespace ftxui
|
||||
|
||||
#endif /* end of include guard: FTXUI_COMPONENT_COMPONENT_HPP */
|
||||
|
||||
// Copyright 2020 Arthur Sonzogni. All rights reserved.
|
||||
// Copyright 2021 Arthur Sonzogni. All rights reserved.
|
||||
// Use of this source code is governed by the MIT license that can be found in
|
||||
// the LICENSE file.
|
||||
|
81
include/ftxui/component/component_base.hpp
Normal file
81
include/ftxui/component/component_base.hpp
Normal file
@@ -0,0 +1,81 @@
|
||||
#ifndef FTXUI_COMPONENT_BASE_HPP
|
||||
#define FTXUI_COMPONENT_BASE_HPP
|
||||
|
||||
#include <memory> // for unique_ptr
|
||||
#include <vector> // for vector
|
||||
|
||||
#include "ftxui/component/captured_mouse.hpp" // for CaptureMouse
|
||||
#include "ftxui/dom/elements.hpp" // for Element
|
||||
|
||||
namespace ftxui {
|
||||
|
||||
class Delegate;
|
||||
class Focus;
|
||||
struct Event;
|
||||
|
||||
class ComponentBase;
|
||||
using Component = std::shared_ptr<ComponentBase>;
|
||||
using Components = std::vector<Component>;
|
||||
|
||||
/// @brief It implement rendering itself as ftxui::Element. It implement
|
||||
/// keyboard navigation by responding to ftxui::Event.
|
||||
/// @ingroup component
|
||||
class ComponentBase {
|
||||
public:
|
||||
// Constructor/Destructor.
|
||||
ComponentBase() = default;
|
||||
virtual ~ComponentBase();
|
||||
|
||||
// ComponentBase hierarchy.
|
||||
ComponentBase* Parent();
|
||||
void Add(Component children);
|
||||
|
||||
// Renders the component.
|
||||
virtual Element Render();
|
||||
|
||||
// Handles an event.
|
||||
// By default, reduce on children with a lazy OR.
|
||||
//
|
||||
// Returns whether the event was handled or not.
|
||||
virtual bool OnEvent(Event);
|
||||
|
||||
// Focus management ----------------------------------------------------------
|
||||
//
|
||||
// If this component contains children, this indicates which one is active,
|
||||
// nullptr if none is active.
|
||||
//
|
||||
// We say an element has the focus if the chain of ActiveChild() from the
|
||||
// root component contains this object.
|
||||
virtual Component ActiveChild();
|
||||
|
||||
// Whether this is the active child of its parent.
|
||||
bool Active();
|
||||
// Whether all the ancestors are active.
|
||||
bool Focused();
|
||||
|
||||
// Make the |child| to be the "active" one.
|
||||
virtual void SetActiveChild(ComponentBase* child);
|
||||
void SetActiveChild(Component child);
|
||||
|
||||
// Configure all the ancestors to give focus to this component.
|
||||
void TakeFocus();
|
||||
|
||||
protected:
|
||||
CapturedMouse CaptureMouse(const Event& event);
|
||||
|
||||
std::vector<Component> children_;
|
||||
|
||||
private:
|
||||
ComponentBase* parent_ = nullptr;
|
||||
void Detach();
|
||||
};
|
||||
|
||||
using Component = std::shared_ptr<ComponentBase>;
|
||||
|
||||
} // namespace ftxui
|
||||
|
||||
#endif /* end of include guard: FTXUI_COMPONENT_BASE_HPP */
|
||||
|
||||
// Copyright 2020 Arthur Sonzogni. All rights reserved.
|
||||
// Use of this source code is governed by the MIT license that can be found in
|
||||
// the LICENSE file.
|
@@ -1,26 +1,32 @@
|
||||
#ifndef FTXUI_COMPONENT_CONTAINER_HPP
|
||||
#define FTXUI_COMPONENT_CONTAINER_HPP
|
||||
|
||||
#include "ftxui/component/component.hpp"
|
||||
#include "ftxui/component/event.hpp"
|
||||
#include "ftxui/dom/elements.hpp"
|
||||
#include "ftxui/component/component.hpp" // for Component, Components
|
||||
#include "ftxui/component/component_base.hpp" // for ComponentBase
|
||||
#include "ftxui/component/event.hpp" // for Event
|
||||
#include "ftxui/dom/elements.hpp" // for Element
|
||||
|
||||
namespace ftxui {
|
||||
|
||||
/// @brief A component where focus and events are automatically handled for you.
|
||||
class Container : public Component {
|
||||
class Container : public ComponentBase {
|
||||
public:
|
||||
static Container Vertical();
|
||||
static Container Horizontal();
|
||||
static Container Tab(int* selector);
|
||||
static Component Vertical();
|
||||
static Component Vertical(Components children);
|
||||
|
||||
static Component Horizontal();
|
||||
static Component Horizontal(Components children);
|
||||
|
||||
static Component Tab(int* selector);
|
||||
static Component Tab(int* selector, Components children);
|
||||
|
||||
~Container() override = default;
|
||||
|
||||
// Component override.
|
||||
bool OnEvent(Event event) override;
|
||||
Element Render() override;
|
||||
Component* ActiveChild() override;
|
||||
virtual void SetActiveChild(Component*) override;
|
||||
Component ActiveChild() override;
|
||||
virtual void SetActiveChild(ComponentBase*) override;
|
||||
|
||||
protected:
|
||||
// Handlers
|
||||
|
@@ -8,7 +8,7 @@
|
||||
namespace ftxui {
|
||||
|
||||
class ScreenInteractive;
|
||||
class Component;
|
||||
class ComponentBase;
|
||||
|
||||
/// @brief Represent an event. It can be key press event, a terminal resize, or
|
||||
/// more ...
|
||||
@@ -76,7 +76,7 @@ struct Event {
|
||||
|
||||
//--- State section ----------------------------------------------------------
|
||||
private:
|
||||
friend Component;
|
||||
friend ComponentBase;
|
||||
friend ScreenInteractive;
|
||||
enum class Type {
|
||||
Unknown,
|
||||
|
@@ -1,27 +1,29 @@
|
||||
#ifndef FTXUI_COMPONENT_INPUT_H_
|
||||
#define FTXUI_COMPONENT_INPUT_H_
|
||||
|
||||
#include <functional>
|
||||
#include <string>
|
||||
#include <functional> // for function
|
||||
#include <string> // for wstring
|
||||
|
||||
#include "ftxui/component/component.hpp"
|
||||
#include "ftxui/dom/elements.hpp"
|
||||
#include "ftxui/screen/box.hpp"
|
||||
#include "ftxui/component/component.hpp" // for Component
|
||||
#include "ftxui/component/component_base.hpp" // for ComponentBase
|
||||
#include "ftxui/dom/elements.hpp" // for Element
|
||||
#include "ftxui/screen/box.hpp" // for Box
|
||||
|
||||
namespace ftxui {
|
||||
struct Event;
|
||||
|
||||
/// @brief An input box. The user can type text into it.
|
||||
/// @ingroup component.
|
||||
class Input : public Component {
|
||||
class InputBase : public ComponentBase {
|
||||
public:
|
||||
// Access this interface from a Component
|
||||
static InputBase* From(Component component);
|
||||
|
||||
// Constructor.
|
||||
Input() = default;
|
||||
~Input() override = default;
|
||||
InputBase(std::wstring* content, const std::wstring* placeholder);
|
||||
~InputBase() override = default;
|
||||
|
||||
// State.
|
||||
std::wstring content;
|
||||
std::wstring placeholder;
|
||||
int cursor_position = 0;
|
||||
|
||||
// State update callback.
|
||||
@@ -33,6 +35,9 @@ class Input : public Component {
|
||||
bool OnEvent(Event) override;
|
||||
|
||||
private:
|
||||
std::wstring* const content_;
|
||||
const std::wstring* const placeholder_;
|
||||
|
||||
bool OnMouseEvent(Event);
|
||||
Box input_box_;
|
||||
Box cursor_box_;
|
||||
|
@@ -1,28 +1,30 @@
|
||||
#ifndef FTXUI_COMPONENT_MENU
|
||||
#define FTXUI_COMPONENT_MENU
|
||||
|
||||
#include <functional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <functional> // for function
|
||||
#include <string> // for wstring
|
||||
#include <vector> // for vector
|
||||
|
||||
#include "ftxui/component/component.hpp"
|
||||
#include "ftxui/dom/elements.hpp"
|
||||
#include "ftxui/screen/box.hpp"
|
||||
#include "ftxui/component/component.hpp" // for Component
|
||||
#include "ftxui/component/component_base.hpp" // for ComponentBase
|
||||
#include "ftxui/dom/elements.hpp" // for Element, Decorator, operator|, bold, inverted, nothing
|
||||
#include "ftxui/screen/box.hpp" // for Box
|
||||
|
||||
namespace ftxui {
|
||||
struct Event;
|
||||
|
||||
/// @brief A list of items. The user can navigate through them.
|
||||
/// @ingroup component
|
||||
class Menu : public Component {
|
||||
class MenuBase : public ComponentBase {
|
||||
public:
|
||||
// Access this interface from a Component
|
||||
static MenuBase* From(Component component);
|
||||
|
||||
// Constructor.
|
||||
Menu() = default;
|
||||
~Menu() override = default;
|
||||
MenuBase(const std::vector<std::wstring>* entries, int* selected_);
|
||||
~MenuBase() override = default;
|
||||
|
||||
// State.
|
||||
std::vector<std::wstring> entries = {};
|
||||
int selected = 0;
|
||||
int focused = 0;
|
||||
|
||||
Decorator normal_style = nothing;
|
||||
@@ -38,7 +40,10 @@ class Menu : public Component {
|
||||
Element Render() override;
|
||||
bool OnEvent(Event) override;
|
||||
|
||||
private:
|
||||
protected:
|
||||
const std::vector<std::wstring>* const entries_;
|
||||
int* selected_ = 0;
|
||||
|
||||
bool OnMouseEvent(Event);
|
||||
|
||||
std::vector<Box> boxes_;
|
||||
|
@@ -1,12 +1,14 @@
|
||||
#ifndef FTXUI_COMPONENT_RADIOBOX_HPP
|
||||
#define FTXUI_COMPONENT_RADIOBOX_HPP
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <functional> // for function
|
||||
#include <string> // for wstring, allocator
|
||||
#include <vector> // for vector
|
||||
|
||||
#include "ftxui/component/component.hpp"
|
||||
#include "ftxui/dom/elements.hpp"
|
||||
#include "ftxui/screen/box.hpp"
|
||||
#include "ftxui/component/component.hpp" // for Component
|
||||
#include "ftxui/component/component_base.hpp" // for ComponentBase
|
||||
#include "ftxui/dom/elements.hpp" // for Element, Decorator, inverted, nothing
|
||||
#include "ftxui/screen/box.hpp" // for Box
|
||||
|
||||
namespace ftxui {
|
||||
struct Event;
|
||||
@@ -14,15 +16,16 @@ struct Event;
|
||||
/// @brief A list of selectable element. One and only one can be selected at
|
||||
/// the same time.
|
||||
/// @ingroup component
|
||||
class RadioBox : public Component {
|
||||
class RadioboxBase : public ComponentBase {
|
||||
public:
|
||||
// Constructor.
|
||||
RadioBox() = default;
|
||||
~RadioBox() override = default;
|
||||
// Access this interface from a Component
|
||||
static RadioboxBase* From(Component component);
|
||||
|
||||
// Constructor.
|
||||
RadioboxBase(const std::vector<std::wstring>* entries, int* selected);
|
||||
~RadioboxBase() override = default;
|
||||
|
||||
int selected = 0;
|
||||
int focused = 0;
|
||||
std::vector<std::wstring> entries;
|
||||
|
||||
#if defined(_WIN32)
|
||||
std::wstring checked = L"(*) ";
|
||||
@@ -43,6 +46,9 @@ class RadioBox : public Component {
|
||||
bool OnEvent(Event) override;
|
||||
|
||||
private:
|
||||
const std::vector<std::wstring>* const entries_;
|
||||
int* const selected_;
|
||||
|
||||
bool OnMouseEvent(Event event);
|
||||
int cursor_position = 0;
|
||||
std::vector<Box> boxes_;
|
||||
|
@@ -3,15 +3,18 @@
|
||||
|
||||
#include <atomic> // for atomic
|
||||
#include <ftxui/component/receiver.hpp>
|
||||
#include <memory> // for unique_ptr
|
||||
#include <string> // for string
|
||||
#include <functional> // for function
|
||||
#include <memory> // for unique_ptr, shared_ptr
|
||||
#include <string> // for string
|
||||
|
||||
#include "ftxui/component/captured_mouse.hpp" // for CapturedMouse
|
||||
#include "ftxui/component/event.hpp"
|
||||
#include "ftxui/screen/screen.hpp" // for Screen
|
||||
|
||||
namespace ftxui {
|
||||
class Component;
|
||||
class ComponentBase;
|
||||
|
||||
using Component = std::shared_ptr<ComponentBase>;
|
||||
struct Event;
|
||||
|
||||
class ScreenInteractive : public Screen {
|
||||
@@ -22,15 +25,15 @@ class ScreenInteractive : public Screen {
|
||||
static ScreenInteractive TerminalOutput();
|
||||
|
||||
~ScreenInteractive();
|
||||
void Loop(Component*);
|
||||
void Loop(Component);
|
||||
std::function<void()> ExitLoopClosure();
|
||||
|
||||
void PostEvent(Event event);
|
||||
CapturedMouse CaptureMouse();
|
||||
|
||||
private:
|
||||
void Draw(Component* component);
|
||||
void EventLoop(Component* component);
|
||||
void Draw(Component component);
|
||||
void EventLoop(Component component);
|
||||
|
||||
enum class Dimension {
|
||||
FitComponent,
|
||||
|
@@ -1,23 +0,0 @@
|
||||
#ifndef FTXUI_COMPONENT_SLIDER_HPP
|
||||
#define FTXUI_COMPONENT_SLIDER_HPP
|
||||
|
||||
#include <string>
|
||||
#include "ftxui/component/component.hpp"
|
||||
|
||||
namespace ftxui {
|
||||
// ComponentPtr Slider(std::string label,
|
||||
// float* value,
|
||||
// float min = 0.f,
|
||||
// float max = 100.f,
|
||||
// float increment = (max - min) * 0.05f);
|
||||
|
||||
template <class T> // T = {int, float}
|
||||
ComponentPtr Slider(std::wstring label, T* value, T min, T max, T increment);
|
||||
|
||||
} // namespace ftxui
|
||||
|
||||
#endif /* end of include guard: FTXUI_COMPONENT_SLIDER_HPP */
|
||||
|
||||
// Copyright 2020 Arthur Sonzogni. All rights reserved.
|
||||
// Use of this source code is governed by the MIT license that can be found in
|
||||
// the LICENSE file.
|
@@ -1,26 +1,30 @@
|
||||
#ifndef FTXUI_COMPONENT_TOGGLE_H_
|
||||
#define FTXUI_COMPONENT_TOGGLE_H_
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <functional> // for function
|
||||
#include <string> // for wstring
|
||||
#include <vector> // for vector
|
||||
|
||||
#include "ftxui/component/component.hpp"
|
||||
#include "ftxui/dom/elements.hpp"
|
||||
#include "ftxui/screen/box.hpp"
|
||||
#include "ftxui/component/component.hpp" // for Component
|
||||
#include "ftxui/component/component_base.hpp" // for ComponentBase
|
||||
#include "ftxui/dom/elements.hpp" // for Element, Decorator, operator|, bold, dim, inverted
|
||||
#include "ftxui/screen/box.hpp" // for Box
|
||||
|
||||
namespace ftxui {
|
||||
struct Event;
|
||||
|
||||
/// @brief An horizontal list of elements. The user can navigate through them.
|
||||
/// @ingroup component
|
||||
class Toggle : public Component {
|
||||
class ToggleBase : public ComponentBase {
|
||||
public:
|
||||
// Access this interface from a Component
|
||||
static ToggleBase* From(Component component);
|
||||
|
||||
// Constructor.
|
||||
~Toggle() override = default;
|
||||
ToggleBase(const std::vector<std::wstring>* entries, int* selected);
|
||||
~ToggleBase() override = default;
|
||||
|
||||
// State.
|
||||
std::vector<std::wstring> entries = {L"On", L"Off"};
|
||||
int selected = 0;
|
||||
int focused = 0;
|
||||
|
||||
Decorator normal_style = dim;
|
||||
@@ -36,7 +40,10 @@ class Toggle : public Component {
|
||||
Element Render() override;
|
||||
bool OnEvent(Event) override;
|
||||
|
||||
private:
|
||||
protected:
|
||||
const std::vector<std::wstring>* const entries_;
|
||||
int* selected_ = 0;
|
||||
|
||||
bool OnMouseEvent(Event event);
|
||||
std::vector<Box> boxes_;
|
||||
};
|
||||
|
Reference in New Issue
Block a user