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