#include <xtd/forms/application>
#include <xtd/forms/choice>
#include <xtd/forms/color_picker>
#include <xtd/forms/form>
#include <xtd/forms/radio_button>
#include <xtd/forms/radio_button_renderer>
#include <xtd/cdebug>
 
 
namespace radio_button_renderer_example {
  class form1 : 
public form {
 
  public:
    form1() {
      text("Radio button renderer example");
      client_size({500, 300});
      set_color(color::blue);
      set_color(nullptr);
      
      choice_theme.parent(*this);
      choice_theme.location({10, 10});
      choice_theme.items().push_back("default theme");
      auto names = application::style_sheet_names();
      sort(names.begin(), names.end());
      choice_theme.items().push_back_range(names);
      choice_theme.selected_index(0);
      choice_theme.selected_index_changed += [&] {
        application::style_sheet(choice_theme.selected_index() == 0 ? application::system_style_sheet() : application::get_style_sheet_from_name(choice_theme.selected_item().value()));
        color_picker_background.color(back_color());
        color_picker_foreground.color(fore_color());
        bcolor.reset();
        fcolor.reset();
        radio_button_system.back_color(nullptr);
        radio_button_system.fore_color(nullptr);
        radio_button_standard.back_color(nullptr);
        radio_button_standard.fore_color(nullptr);
      };
      
      color_picker_background.parent(*this);
      color_picker_background.location({180, 10});
      color_picker_background.color(back_color());
      color_picker_background.color_picker_changed += [&] {
        bcolor = color_picker_background.color();
        radio_button_system.back_color(bcolor.value());
        radio_button_standard.back_color(bcolor.value());
      };
      
      color_picker_foreground.parent(*this);
      color_picker_foreground.location({290, 10});
      color_picker_foreground.color(fore_color());
      color_picker_foreground.color_picker_changed += [&] {
        fcolor = color_picker_foreground.color();
        radio_button_system.fore_color(fcolor.value());
        radio_button_standard.fore_color(fcolor.value());
      };
      
      radio_button_system.parent(*this);
      radio_button_system.checked(true);
      radio_button_system.location({10, 170});
      radio_button_system.text("System");
      
      radio_button_standard.parent(*this);
      radio_button_standard.location({100, 170});
      radio_button_standard.text("Standard");
    }
    
  protected:
      form::on_paint(e);
      radio_button_renderer::draw_radio_button(e.graphics(), {10, 70, 104, 25}, 
"Normal", 
font(), 
xtd::forms::text_format_flags::vertical_center | 
xtd::forms::text_format_flags::left, 
xtd::drawing::image::empty, {0, 0, 0, 0}, 
false, 
xtd::forms::visual_styles::radio_button_state::unchecked_normal, bcolor, fcolor);
 
      radio_button_renderer::draw_radio_button(e.graphics(), {124, 70, 104, 25}, 
"Hot", 
font(), 
xtd::forms::text_format_flags::vertical_center | 
xtd::forms::text_format_flags::left, 
xtd::drawing::image::empty, {0, 0, 0, 0}, 
false, 
xtd::forms::visual_styles::radio_button_state::unchecked_hot, bcolor, fcolor);
 
      radio_button_renderer::draw_radio_button(e.graphics(), {238, 70, 104, 25}, 
"Pressed", 
font(), 
xtd::forms::text_format_flags::vertical_center | 
xtd::forms::text_format_flags::left, 
xtd::drawing::image::empty, {0, 0, 0, 0}, 
false, 
xtd::forms::visual_styles::radio_button_state::unchecked_pressed, bcolor, fcolor);
 
      radio_button_renderer::draw_radio_button(e.graphics(), {352, 70, 104, 25}, 
"Disabled", 
font(), 
xtd::forms::text_format_flags::vertical_center | 
xtd::forms::text_format_flags::left, 
xtd::drawing::image::empty, {0, 0, 0, 0}, 
false, 
xtd::forms::visual_styles::radio_button_state::unchecked_disabled, bcolor, fcolor);
 
      radio_button_renderer::draw_radio_button(e.graphics(), {10, 110, 104, 25}, 
"Normal", 
font(), 
xtd::forms::text_format_flags::vertical_center | 
xtd::forms::text_format_flags::left, 
xtd::drawing::image::empty, {0, 0, 0, 0}, 
false, 
xtd::forms::visual_styles::radio_button_state::checked_normal, bcolor, fcolor);
 
      radio_button_renderer::draw_radio_button(e.graphics(), {124, 110, 104, 25}, 
"Hot", 
font(), 
xtd::forms::text_format_flags::vertical_center | 
xtd::forms::text_format_flags::left, 
xtd::drawing::image::empty, {0, 0, 0, 0}, 
false, 
xtd::forms::visual_styles::radio_button_state::checked_hot, bcolor, fcolor);
 
      radio_button_renderer::draw_radio_button(e.graphics(), {238, 110, 104, 25}, 
"Pressed", 
font(), 
xtd::forms::text_format_flags::vertical_center | 
xtd::forms::text_format_flags::left, 
xtd::drawing::image::empty, {0, 0, 0, 0}, 
false, 
xtd::forms::visual_styles::radio_button_state::checked_pressed, bcolor, fcolor);
 
      radio_button_renderer::draw_radio_button(e.graphics(), {352, 110, 104, 25}, 
"Disabled", 
font(), 
xtd::forms::text_format_flags::vertical_center | 
xtd::forms::text_format_flags::left, 
xtd::drawing::image::empty, {0, 0, 0, 0}, 
false, 
xtd::forms::visual_styles::radio_button_state::checked_disabled, bcolor, fcolor);
 
    }
    
  private:
      cdebug << string::format(
"color = {}", 
color.
to_string()) << environment::new_line;
 
    }
    void set_color(nullptr_t) {
      cdebug << "color = (nullptr)" << environment::new_line;
    }
    std::optional<color> bcolor;
    std::optional<color> fcolor;
  };
}
 
auto main() -> int {
  application::run(radio_button_renderer_example::form1 {});
}
Represents an ARGB (alpha, red, green, blue) color.
Definition color.hpp:49
 
xtd::string to_string() const noexcept override
Creates a human-readable string that represents this color class.
 
Defines a particular format for text, including font face, size, and style attributes....
Definition font.hpp:45
 
static image empty
Represent an empty xtd::drawing::image.
Definition image.hpp:65
 
The xtd::drawing namespace provides access to GDI+ basic graphics functionality. More advanced functi...
Definition brush.hpp:18
 
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition xtd_about_box.hpp:10