#include #include #include #include #include #include #include #include #include "control.hpp" #include "config.hpp" #include "color.hpp" namespace cx_light { control::control(light *target) { this->title = target->get_name(); this->address = target->get_address(); this->set_row_spacing(DEFAULT_MARGIN); this->set_column_spacing(DEFAULT_MARGIN); std::string description_text = "Manage "; description_text += this->title; description_text += "."; this->description = new Gtk::Label(description_text); this->description->set_use_markup(); this->description->set_hexpand(); this->description->set_halign(Gtk::Align::START); this->attach(*this->description, 0, 0, 4, 1); this->power_description = new Gtk::Label("Brightness"); this->power_description->set_halign(Gtk::Align::START); this->attach(*this->power_description, 0, 1, 1, 1); this->power_value = new Glib::RefPtr ( Gtk::Adjustment::create(512, 0, 1024, 1) ); this->power = new Gtk::Scale( *this->power_value, Gtk::Orientation::HORIZONTAL ); this->attach(*this->power, 1, 1, 2, 1); this->color_description = new Gtk::Label("Color"); this->color_description->set_halign(Gtk::Align::START); this->attach(*this->color_description, 0, 2, 1, 1); this->color_value = new Glib::RefPtr ( Gtk::Adjustment::create(6500, 1000, 20000, 1) ); (*this->color_value)->signal_value_changed().connect([&] () { this->drawing->queue_draw(); }); this->color = new Gtk::Scale( *this->color_value, Gtk::Orientation::HORIZONTAL ); this->attach(*this->color, 1, 2, 2, 1); this->drawing = new Gtk::DrawingArea(); this->drawing->set_draw_func(sigc::mem_fun(*this, &control::redraw)); this->attach(*this->drawing, 3, 1, 1, 2); this->apply = new Gtk::Button("Apply"); this->attach(*this->apply, 2, 3, 2, 1); this->back = new Gtk::Button("Back");; this->attach(*this->back, 0, 3, 2, 1); } control::~control() { this->remove(*this->description); this->remove(*this->power); this->remove(*this->power_description); this->remove(*this->color); this->remove(*this->color_description); this->remove(*this->apply); this->remove(*this->back); this->remove(*this->drawing); delete this->drawing; delete this->description; delete this->power; delete this->power_value; delete this->power_description; delete this->color; delete this->color_value; delete this->color_description; delete this->apply; delete this->back; } void control::redraw( const Cairo::RefPtr &context, int width, int height ) { context->set_line_width(10.0); color ::from_white(((*this->color_value)->get_value())) .set_source(context); context->arc(width / 2, height / 2, width / 4, 0.0, 2 * M_PI); context->stroke(); } }