X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fwidget_value.cpp;fp=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fwidget_value.cpp;h=ddf28fae56752409d3ed4c0e2335e7eccdd662e7;hb=3a3c4bca3a17137bec5d7960560934b91ef4146e;hp=0000000000000000000000000000000000000000;hpb=41257b650db1defb40ac20072ffeef70d5985f5e;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/widget_value.cpp b/synfig-studio/trunk/src/gtkmm/widget_value.cpp new file mode 100644 index 0000000..ddf28fa --- /dev/null +++ b/synfig-studio/trunk/src/gtkmm/widget_value.cpp @@ -0,0 +1,484 @@ +/* === S I N F G =========================================================== */ +/*! \file widget_value.cpp +** \brief Template File +** +** $Id: widget_value.cpp,v 1.1.1.1 2005/01/07 03:34:37 darco Exp $ +** +** \legal +** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** +** This software and associated documentation +** are CONFIDENTIAL and PROPRIETARY property of +** the above-mentioned copyright holder. +** +** You may not copy, print, publish, or in any +** other way distribute this software without +** a prior written agreement with +** the copyright holder. +** \endlegal +*/ +/* ========================================================================= */ + +/* === H E A D E R S ======================================================= */ + +#ifdef USING_PCH +# include "pch.h" +#else +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include "widget_value.h" +#include +#include +#include +#include +#include +#include /* see XXX below */ +#include "app.h" + + +#include "widget_vector.h" +#include "widget_filename.h" +#include "widget_enum.h" +#include "widget_coloredit.h" +#include "widget_canvaschooser.h" +#include "widget_time.h" +#include "app.h" +#include "widget_distance.h" + +#endif + +using namespace sinfg; +using namespace etl; +using namespace std; +using namespace studio; + +/* === M A C R O S ========================================================= */ + +#define DIGITS 15 + +/* === G L O B A L S ======================================================= */ + +/* === P R O C E D U R E S ================================================= */ + +/* === M E T H O D S ======================================================= */ + +Widget_ValueBase::Widget_ValueBase(): + Glib::ObjectBase (typeid(Widget_ValueBase)), + Gtk::HBox(), + real_adjustment(0,-2000000000,2000000000,0.05,0.05,0.05), + integer_adjustment(0,-2000000000,2000000000,1,1,1), + angle_adjustment(0,-2000000000,2000000000,1,1,1) +{ + set_no_show_all(); + + label=manage(new class Gtk::Label("Unknown Datatype")); + pack_start(*label); + label->show(); + + vector_widget=manage(new class Widget_Vector()); + pack_start(*vector_widget); + + color_widget=manage(new class Widget_ColorEdit()); + pack_start(*color_widget); + + enum_widget=manage(new class Widget_Enum()); + pack_start(*enum_widget); + + real_widget=manage(new class Gtk::SpinButton(real_adjustment,0.05,DIGITS)); + pack_start(*real_widget); + + integer_widget=manage(new class Gtk::SpinButton(integer_adjustment,1,0)); + pack_start(*integer_widget); + + angle_widget=manage(new class Gtk::SpinButton(angle_adjustment,15,2)); + pack_start(*angle_widget); + + bool_widget=manage(new class Gtk::CheckButton()); + pack_start(*bool_widget); + + //color_widget=manage(new class Gtk::ColorSelection()); + //pack_start(*color_widget); + + string_widget=manage(new class Gtk::Entry()); + pack_start(*string_widget); + + canvas_widget=manage(new class Widget_CanvasChooser()); + pack_start(*canvas_widget); + + filename_widget=manage(new class Widget_Filename()); + pack_start(*filename_widget); + + time_widget=manage(new class Widget_Time()); + pack_start(*time_widget); + + distance_widget=manage(new class Widget_Distance()); + pack_start(*distance_widget); + + + vector_widget->signal_activate().connect(sigc::mem_fun(*this,&Widget_ValueBase::activate)); + color_widget->signal_activate().connect(sigc::mem_fun(*this,&Widget_ValueBase::activate)); + enum_widget->signal_activate().connect(sigc::mem_fun(*this,&Widget_ValueBase::activate)); + real_widget->signal_activate().connect(sigc::mem_fun(*this,&Widget_ValueBase::activate)); + integer_widget->signal_activate().connect(sigc::mem_fun(*this,&Widget_ValueBase::activate)); + angle_widget->signal_activate().connect(sigc::mem_fun(*this,&Widget_ValueBase::activate)); + string_widget->signal_activate().connect(sigc::mem_fun(*this,&Widget_ValueBase::activate)); + canvas_widget->signal_activate().connect(sigc::mem_fun(*this,&Widget_ValueBase::activate)); + filename_widget->signal_activate().connect(sigc::mem_fun(*this,&Widget_ValueBase::activate)); + time_widget->signal_activate().connect(sigc::mem_fun(*this,&Widget_ValueBase::activate)); + distance_widget->signal_activate().connect(sigc::mem_fun(*this,&Widget_ValueBase::activate)); + + /*signal_focus_in_event().connect( + sigc::bind_return( + sigc::hide( + sigc::mem_fun(*this,&Widget_ValueBase::grab_focus) + ),false + ) + );*/ +} + +Widget_ValueBase::~Widget_ValueBase() +{ +} + +void +Widget_ValueBase::activate() +{ + //DEBUGPOINT(); + signal_activate()(); +} + +void +Widget_ValueBase::inside_cellrenderer() +{ + string_widget->set_has_frame(false); + string_widget->gobj()->is_cell_renderer = true; // XXX + + real_widget->set_has_frame(false); + //static_cast(real_widget)->gobj()->is_cell_renderer = true; // XXX + + distance_widget->set_has_frame(false); + //static_cast(distance_widget)->gobj()->is_cell_renderer = true; // XXX + + integer_widget->set_has_frame(false); + //static_cast(integer_widget)->gobj()->is_cell_renderer = true; // XXX + vector_widget->set_has_frame(false); + //vector_widget->set_digits(10); + + color_widget->set_has_frame(false); + //color_widget->set_digits(10); + filename_widget->set_has_frame(false); + time_widget->set_has_frame(false); +} + +void +Widget_ValueBase::set_sensitive(bool x) +{ + Gtk::HBox::set_sensitive(x); + label->set_sensitive(x); + vector_widget->set_sensitive(x); + real_widget->set_sensitive(x); + integer_widget->set_sensitive(x); + bool_widget->set_sensitive(x); + color_widget->set_sensitive(x); + string_widget->set_sensitive(x); + canvas_widget->set_sensitive(x); + enum_widget->set_sensitive(x); + angle_widget->set_sensitive(x); + filename_widget->set_sensitive(x); + time_widget->set_sensitive(x); + distance_widget->set_sensitive(x); +} + +void +Widget_ValueBase::set_value(const sinfg::ValueBase &data) +{ + label->hide(); + vector_widget->hide(); + real_widget->hide(); + integer_widget->hide(); + bool_widget->hide(); + color_widget->hide(); + string_widget->hide(); + canvas_widget->hide(); + enum_widget->hide(); + angle_widget->hide(); + filename_widget->hide(); + time_widget->hide(); + distance_widget->hide(); + + value=data; + try{ + switch(value.get_type()) + { + case ValueBase::TYPE_VECTOR: + vector_widget->set_canvas(canvas); + vector_widget->set_value(value.get(Vector())); + vector_widget->show(); + break; + case ValueBase::TYPE_REAL: + if(param_desc.get_is_distance() && canvas) + { + Distance dist(value.get(Real()),Distance::SYSTEM_UNITS); + dist.convert(App::distance_system,canvas->rend_desc()); + distance_widget->set_value(dist); + distance_widget->show(); + } + else + { + real_widget->set_value(value.get(Real())); + real_widget->show(); + } + break; + case ValueBase::TYPE_TIME: + if(canvas)time_widget->set_fps(canvas->rend_desc().get_frame_rate()); + time_widget->set_value(value.get(Time())); + time_widget->show(); + break; + case ValueBase::TYPE_ANGLE: + angle_widget->set_value(Angle::deg(value.get(Angle())).get()); + angle_widget->show(); + break; + case ValueBase::TYPE_INTEGER: + if(param_desc.get_hint()!="enum") + { + integer_widget->set_value(value.get(int())); + integer_widget->show(); + } + else + { + enum_widget->set_param_desc(param_desc); + enum_widget->set_value(value.get(int())); + enum_widget->show(); + } + break; + case ValueBase::TYPE_CANVAS: + assert(canvas); + canvas_widget->set_parent_canvas(canvas); + canvas_widget->set_value(value.get(etl::loose_handle())); + canvas_widget->show(); + break; + case ValueBase::TYPE_BOOL: + bool_widget->set_active(value.get(bool())); + bool_widget->show(); + break; + case ValueBase::TYPE_STRING: + if(param_desc.get_hint()!="filename") + { + string_widget->set_text(value.get(string())); + string_widget->show(); + } + else + { + filename_widget->set_value(value.get(string())); + filename_widget->show(); + } + break; + case ValueBase::TYPE_COLOR: + { + color_widget->set_value(value.get(sinfg::Color())); + color_widget->show(); +/* + Gdk::Color gdkcolor; + sinfg::Color color=value.get(sinfg::Color()); + gdkcolor.set_rgb_p(color.get_r(),color.get_g(),color.get_b()); + color_widget->set_current_color(gdkcolor); + color_widget->set_has_opacity_control(true); + color_widget->set_current_alpha((unsigned short)(color.get_a()*65535.0)); + color_widget->show(); +*/ + } + break; + default: + label->show(); + break; + } + }catch(...) { sinfg::error(__FILE__":%d: Caught something that was thrown",__LINE__); } +} + +const sinfg::ValueBase & +Widget_ValueBase::get_value() +{ + switch(value.get_type()) + { + case ValueBase::TYPE_VECTOR: + value=vector_widget->get_value(); + break; + case ValueBase::TYPE_REAL: + if(param_desc.get_is_distance() && canvas) + value=distance_widget->get_value().units(canvas->rend_desc()); + else + value=real_widget->get_value(); + break; + case ValueBase::TYPE_TIME: + value=time_widget->get_value(); + break; + case ValueBase::TYPE_ANGLE: + value=Angle::deg(angle_widget->get_value()); + break; + case ValueBase::TYPE_CANVAS: + value=canvas_widget->get_value(); + break; + case ValueBase::TYPE_INTEGER: + if(param_desc.get_hint()!="enum") + { + value=integer_widget->get_value_as_int(); + } + else + { + value=enum_widget->get_value(); + } + + break; + case ValueBase::TYPE_BOOL: + value=bool_widget->get_active(); + break; + case ValueBase::TYPE_STRING: + if(param_desc.get_hint()!="filename") + { + value=string(string_widget->get_text()); + } + else + { + value=string(filename_widget->get_value()); + } + break; + case ValueBase::TYPE_COLOR: + { + value=color_widget->get_value(); +/* + Gdk::Color gdkcolor; + sinfg::Color color; + gdkcolor=color_widget->get_current_color(); + color.set_r(gdkcolor.get_red_p()); + color.set_g(gdkcolor.get_green_p()); + color.set_b(gdkcolor.get_blue_p()); + color.set_a(color_widget->get_current_alpha()/65535.0); + + value=color; +*/ + } + break; + default: + break; + } + + return value; +} + + +void +Widget_ValueBase::on_grab_focus() +{ + switch(value.get_type()) + { + case ValueBase::TYPE_VECTOR: + vector_widget->grab_focus(); + break; + case ValueBase::TYPE_REAL: + if(param_desc.get_is_distance()&& canvas) + distance_widget->grab_focus(); + else + real_widget->grab_focus(); + break; + case ValueBase::TYPE_TIME: + time_widget->grab_focus(); + break; + case ValueBase::TYPE_ANGLE: + angle_widget->grab_focus(); + break; + case ValueBase::TYPE_CANVAS: + canvas_widget->grab_focus(); + break; + case ValueBase::TYPE_INTEGER: + if(param_desc.get_hint()!="enum") + { + integer_widget->grab_focus(); + } + else + { + enum_widget->grab_focus(); + } + + break; + case ValueBase::TYPE_BOOL: + bool_widget->grab_focus(); + break; + case ValueBase::TYPE_STRING: + if(param_desc.get_hint()!="filename") + { + string_widget->grab_focus(); + } + else + { + filename_widget->grab_focus(); + } + break; + case ValueBase::TYPE_COLOR: + { + color_widget->grab_focus(); + } + break; + default: + break; + } +} + +/* +Glib::SignalProxy0 +Widget_ValueBase::signal_activate() +{ + switch(value.get_type()) + { + case ValueBase::TYPE_VECTOR: + return vector_widget->signal_activate(); + break; + case ValueBase::TYPE_REAL: + if(param_desc.get_is_distance()&& canvas) + return distance_widget->signal_activate(); + else + return real_widget->signal_activate(); + + break; + case ValueBase::TYPE_TIME: + return time_widget->signal_activate(); + break; + case ValueBase::TYPE_ANGLE: + return angle_widget->signal_activate(); + break; + case ValueBase::TYPE_CANVAS: + return canvas_widget->signal_activate(); + break; + case ValueBase::TYPE_INTEGER: + if(param_desc.get_hint()!="enum") + return integer_widget->signal_activate(); + else + return enum_widget->signal_activate(); + + break; + case ValueBase::TYPE_BOOL: + return string_widget->signal_activate(); + break; + case ValueBase::TYPE_STRING: + if(param_desc.get_hint()!="filename") + { + return string_widget->signal_activate(); + } + else + { + return filename_widget->signal_activate(); + } + break; + case ValueBase::TYPE_COLOR: + { + return color_widget->signal_activate(); + } + break; + default: + return string_widget->signal_activate(); + break; + } +} +*/