Author: Carlos Lopez <[email protected]>
Date:   Sat Jun 25 18:48:55 2011 +0200

Replace OptionMenu by ComBoBox.

---

 synfig-studio/src/gui/widgets/widget_defaults.cpp |    4 +-
 synfig-studio/src/gui/widgets/widget_enum.cpp     |   65 ++++++++++++---------
 synfig-studio/src/gui/widgets/widget_enum.h       |   28 ++++++---
 synfig-studio/src/gui/widgets/widget_value.cpp    |    2 +-
 4 files changed, 58 insertions(+), 41 deletions(-)

diff --git a/synfig-studio/src/gui/widgets/widget_defaults.cpp 
b/synfig-studio/src/gui/widgets/widget_defaults.cpp
index 48d7691..d118689 100644
--- a/synfig-studio/src/gui/widgets/widget_defaults.cpp
+++ b/synfig-studio/src/gui/widgets/widget_defaults.cpp
@@ -278,7 +278,7 @@ Widget_Defaults::Widget_Defaults()
 
        widget_blend_method=manage(new Widget_Enum());
        widget_blend_method->show();
-       
widget_blend_method->signal_activate().connect(sigc::mem_fun(*this,&studio::Widget_Defaults::on_blend_method_changed));
+       
widget_blend_method->signal_changed().connect(sigc::mem_fun(*this,&studio::Widget_Defaults::on_blend_method_changed));
        widget_blend_method->set_param_desc(
                ParamDesc(Color::BLEND_COMPOSITE,"blend_method")
                .add_enum_value(Color::BLEND_BY_LAYER,"bylayer", _("By Layer 
Default"))
@@ -288,7 +288,7 @@ Widget_Defaults::Widget_Defaults()
 
        widget_interpolation=manage(new Widget_Enum());
        widget_interpolation->show();
-       
widget_interpolation->signal_activate().connect(sigc::mem_fun(*this,&studio::Widget_Defaults::on_interpolation_changed));
+       
widget_interpolation->signal_changed().connect(sigc::mem_fun(*this,&studio::Widget_Defaults::on_interpolation_changed));
        widget_interpolation->set_param_desc(
                ParamDesc("interpolation")
                        .set_hint("enum")
diff --git a/synfig-studio/src/gui/widgets/widget_enum.cpp 
b/synfig-studio/src/gui/widgets/widget_enum.cpp
index b247e28..eba8b65 100644
--- a/synfig-studio/src/gui/widgets/widget_enum.cpp
+++ b/synfig-studio/src/gui/widgets/widget_enum.cpp
@@ -55,6 +55,9 @@ using namespace studio;
 
 Widget_Enum::Widget_Enum()
 {
+       enum_TreeModel = Gtk::ListStore::create(enum_model);
+       set_model(enum_TreeModel);
+       pack_start(enum_model.local_name);
 }
 
 Widget_Enum::~Widget_Enum()
@@ -65,47 +68,43 @@ void
 Widget_Enum::set_param_desc(const synfig::ParamDesc &x)
 {
        param_desc=x;
-       //refresh();
-}
-
-void
-Widget_Enum::set_value_(int data)
-{
-       set_value(data);
-       activate();
+       // First clear the current items in the ComobBox
+       enum_TreeModel->clear();
+       std::list<synfig::ParamDesc::EnumData> 
enum_list=param_desc.get_enum_list();
+       std::list<synfig::ParamDesc::EnumData>::iterator iter;
+       // Fill the combo with the values
+       for(iter=enum_list.begin();iter!=enum_list.end();iter++)
+               {
+                       Gtk::TreeModel::Row row = *(enum_TreeModel->append());
+                       row[enum_model.value] = iter->value;
+                       row[enum_model.local_name] = iter->local_name;
+               }
+       refresh();
 }
 
 void
 Widget_Enum::refresh()
 {
-       enum_menu = manage(new class Gtk::Menu());
-
-       std::list<synfig::ParamDesc::EnumData> 
enum_list=param_desc.get_enum_list();
-       std::list<synfig::ParamDesc::EnumData>::iterator iter;
-
-       String name=strprintf("(%d)",value);
-
-       for(iter=enum_list.begin();iter!=enum_list.end();iter++)
-               if(iter->value!=value)
-                       
enum_menu->items().push_back(Gtk::Menu_Helpers::MenuElem(iter->local_name,
-                               
sigc::bind(sigc::mem_fun(*this,&Widget_Enum::set_value_),iter->value)
-                       ));
-               else
-                       name=iter->local_name;
-
-       enum_menu->items().push_front(Gtk::Menu_Helpers::MenuElem(name));
-
-       set_menu(*enum_menu);
+       typedef Gtk::TreeModel::Children type_children;
+       type_children children = enum_TreeModel->children();
+       for(type_children::iterator iter = children.begin();
+               iter != children.end(); ++iter)
+       {
+               Gtk::TreeModel::Row row = *iter;
+               if(row[enum_model.value] == value)
+               {
+                       set_active(iter);
+                       return;
+               }
+       }
 }
 
 void
 Widget_Enum::set_value(int data)
 {
        value=data;
-
        refresh();
 
-       set_history(0);
 }
 
 int
@@ -113,3 +112,13 @@ Widget_Enum::get_value() const
 {
        return value;
 }
+
+void Widget_Enum::on_changed()
+{
+       Gtk::TreeModel::iterator iter = get_active();
+       if(iter)
+               {
+                       Gtk::TreeModel::Row row = *iter;
+                       value = row[enum_model.value];
+               }
+}
diff --git a/synfig-studio/src/gui/widgets/widget_enum.h 
b/synfig-studio/src/gui/widgets/widget_enum.h
index 4d6e205..743a8fd 100644
--- a/synfig-studio/src/gui/widgets/widget_enum.h
+++ b/synfig-studio/src/gui/widgets/widget_enum.h
@@ -27,8 +27,8 @@
 
 /* === H E A D E R S ======================================================= */
 
-#include <synfig/layer.h>
-#include <gtkmm/optionmenu.h>
+#include <gtkmm/combobox.h>
+#include <gtkmm/liststore.h>
 #include <synfig/paramdesc.h>
 
 /* === M A C R O S ========================================================= */
@@ -37,17 +37,25 @@
 
 /* === C L A S S E S & S T R U C T S ======================================= */
 
-namespace Gtk { class Menu; };
-
 namespace studio {
-
-class Widget_Enum : public Gtk::OptionMenu
+class Widget_Enum : public Gtk::ComboBox
 {
-       Gtk::Menu *enum_menu;
        synfig::ParamDesc param_desc;
-
        int value;
-       void set_value_(int data);
+protected:
+class Model : public Gtk::TreeModel::ColumnRecord
+       {
+               public:
+
+               Model()
+               { add(value); add(local_name); }
+
+               Gtk::TreeModelColumn<int> value;
+               Gtk::TreeModelColumn<Glib::ustring> local_name;
+       };
+       Model enum_model;
+       Glib::RefPtr<Gtk::ListStore> enum_TreeModel;
+
 public:
 
        Widget_Enum();
@@ -58,8 +66,8 @@ public:
 
        void set_value(int data);
        int get_value() const;
+       virtual void on_changed();
 }; // END of class Widget_Enum
-
 }; // END of namespace studio
 
 /* === E N D =============================================================== */
diff --git a/synfig-studio/src/gui/widgets/widget_value.cpp 
b/synfig-studio/src/gui/widgets/widget_value.cpp
index be291fa..e311618 100644
--- a/synfig-studio/src/gui/widgets/widget_value.cpp
+++ b/synfig-studio/src/gui/widgets/widget_value.cpp
@@ -123,7 +123,7 @@ Widget_ValueBase::Widget_ValueBase():
 
        
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));
+       
enum_widget->signal_changed().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));


------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to