1 #ifndef CPPURSES_DEMOS_PALETTE_COLOR_CONTROL_HPP
2 #define CPPURSES_DEMOS_PALETTE_COLOR_CONTROL_HPP
3 #include <signals/signal.hpp>
4 
5 #include <cppurses/widget/layouts/horizontal.hpp>
6 
7 #include "value_control.hpp"
8 
9 namespace palette {
10 
11 /// Holds Value_control objects for red, green, and blue color values.
12 class Color_control : public cppurses::layout::Horizontal {
13     Value_control& slider_red_{this->make_child<Value_control>("R")};
14     Value_control& slider_green_{this->make_child<Value_control>("G")};
15     Value_control& slider_blue_{this->make_child<Value_control>("B")};
16 
17    public:
18     Color_control();
19 
20     /// Set the red slider to a specific value.
set_red_slider(int value)21     void set_red_slider(int value) { slider_red_.set_value(value); }
22 
23     /// Set the green slider to a specific value.
set_green_slider(int value)24     void set_green_slider(int value) { slider_green_.set_value(value); }
25 
26     /// Set the blue slider to a specific value.
set_blue_slider(int value)27     void set_blue_slider(int value) { slider_blue_.set_value(value); }
28 
29     /// Set all sliders to the respective RGB color value.
30     void set_sliders(cppurses::Color color);
31 
32     sig::Signal<void(int)>& red_changed{slider_red_.value_changed};
33     sig::Signal<void(int)>& green_changed{slider_green_.value_changed};
34     sig::Signal<void(int)>& blue_changed{slider_blue_.value_changed};
35 };
36 
37 }  // namespace palette
38 #endif  // CPPURSES_DEMOS_PALETTE_COLOR_CONTROL_HPP
39