diff options
author | David Robillard <d@drobilla.net> | 2007-04-23 02:41:20 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-04-23 02:41:20 +0000 |
commit | 67fff73eaa9c78cfbae53ac1948f38fe3812c77f (patch) | |
tree | 6125a493f3ad36e6decb14f98da17ffdb8103c4b /src/progs | |
parent | bd315305771e98eba1d81672a47ce4fe7bcc95cc (diff) | |
download | ingen-67fff73eaa9c78cfbae53ac1948f38fe3812c77f.tar.gz ingen-67fff73eaa9c78cfbae53ac1948f38fe3812c77f.tar.bz2 ingen-67fff73eaa9c78cfbae53ac1948f38fe3812c77f.zip |
Moved range controls from node controls window to popup dialog to declutter.
git-svn-id: http://svn.drobilla.net/lad/ingen@472 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/progs')
-rw-r--r-- | src/progs/ingenuity/ControlGroups.cpp | 118 | ||||
-rw-r--r-- | src/progs/ingenuity/ControlGroups.h | 17 | ||||
-rw-r--r-- | src/progs/ingenuity/Makefile.am | 2 | ||||
-rw-r--r-- | src/progs/ingenuity/NodePropertiesWindow.h | 2 | ||||
-rw-r--r-- | src/progs/ingenuity/PortPropertiesWindow.cpp | 173 | ||||
-rw-r--r-- | src/progs/ingenuity/PortPropertiesWindow.h | 68 | ||||
-rw-r--r-- | src/progs/ingenuity/ingenuity.glade | 306 |
7 files changed, 548 insertions, 138 deletions
diff --git a/src/progs/ingenuity/ControlGroups.cpp b/src/progs/ingenuity/ControlGroups.cpp index 9bd96204..d7e2c6c1 100644 --- a/src/progs/ingenuity/ControlGroups.cpp +++ b/src/progs/ingenuity/ControlGroups.cpp @@ -23,6 +23,8 @@ #include "PluginModel.h" #include "NodeModel.h" #include "PortModel.h" +#include "PortPropertiesWindow.h" +#include "GladeFactory.h" #include "App.h" using std::cerr; using std::cout; using std::endl; @@ -60,7 +62,6 @@ ControlGroup::init(ControlPanel* panel, SharedPtr<PortModel> pm, bool separator) } */ - pm->metadata_update_sig.connect(sigc::mem_fun(this, &ControlGroup::metadata_update)); pm->control_change_sig.connect(sigc::mem_fun(this, &ControlGroup::set_value)); } @@ -73,9 +74,14 @@ SliderControlGroup::SliderControlGroup(BaseObjectType* cobject, const Glib::RefP _enabled(true) { xml->get_widget("control_strip_name_label", _name_label); - xml->get_widget("control_strip_min_spinner", _min_spinner); - xml->get_widget("control_strip_max_spinner", _max_spinner); xml->get_widget("control_strip_slider", _slider); + + Glib::RefPtr<Gnome::Glade::Xml> menu_xml = GladeFactory::new_glade_reference("port_control_menu"); + menu_xml->get_widget("port_control_menu", _menu); + menu_xml->get_widget("port_control_menu_properties", _menu_properties); + + _menu_properties->signal_activate().connect( + sigc::mem_fun(this, &SliderControlGroup::menu_properties)); } @@ -85,12 +91,22 @@ SliderControlGroup::init(ControlPanel* panel, SharedPtr<PortModel> pm, bool sepa ControlGroup::init(panel, pm, separator); assert(_name_label); - assert(_min_spinner); - assert(_max_spinner); assert(_slider); + set_name(pm->path().name()); + _slider->set_draw_value(true); + _slider->set_value(_port_model->value()); + + _slider->signal_button_press_event().connect(sigc::mem_fun(*this, &SliderControlGroup::clicked)); + _slider->signal_event().connect( + sigc::mem_fun(*this, &SliderControlGroup::slider_pressed)); + + _slider->signal_value_changed().connect( + sigc::mem_fun(*this, &SliderControlGroup::update_value_from_slider)); + + // FIXME: code duplication w/ PortPropertiesWindow.cpp float min = 0.0f; float max = 1.0f; @@ -117,28 +133,37 @@ SliderControlGroup::init(ControlPanel* panel, SharedPtr<PortModel> pm, bool sepa if (max <= min) max = min + 1.0f; - set_name(pm->path().name()); + _slider->set_range(min, max); - _min_spinner->set_value(min); - _min_spinner->signal_value_changed().connect(sigc::mem_fun(*this, &SliderControlGroup::min_changed)); - _max_spinner->set_value(max); - _max_spinner->signal_value_changed().connect(sigc::mem_fun(*this, &SliderControlGroup::max_changed)); + set_value(pm->value()); - _slider->set_value(_port_model->value()); + _enable_signal = true; - _slider->signal_event().connect( - sigc::mem_fun(*this, &SliderControlGroup::slider_pressed)); + show_all(); +} - _slider->signal_value_changed().connect( - sigc::mem_fun(*this, &SliderControlGroup::update_value_from_slider)); - _slider->set_range(min, max); +bool +SliderControlGroup::clicked(GdkEventButton* ev) +{ + if (ev->button == 3) { + _menu->popup(ev->button, ev->time); + return true; + } else { + return false; + } +} - set_value(pm->value()); - _enable_signal = true; +void +SliderControlGroup::menu_properties() +{ + Glib::RefPtr<Gnome::Glade::Xml> xml = GladeFactory::new_glade_reference(); - show_all(); + PortPropertiesWindow* dialog; + xml->get_widget_derived("port_properties_win", dialog); + dialog->init(this, _port_model); + dialog->run(); } @@ -156,16 +181,9 @@ SliderControlGroup::set_value(float val) void -SliderControlGroup::metadata_update(const string& key, const Atom& value) +SliderControlGroup::set_range(float min, float max) { - _enable_signal = false; - - if ( (key == "min") && value.type() == Atom::FLOAT) - _min_spinner->set_value(value.get_float()); - else if ( (key == "max") && value.type() == Atom::FLOAT) - _max_spinner->set_value(value.get_float()); - - _enable_signal = true; + _slider->set_range(min, max); } @@ -182,8 +200,8 @@ void SliderControlGroup::enable() { _slider->property_sensitive() = true; - _min_spinner->property_sensitive() = true; - _max_spinner->property_sensitive() = true; + //_min_spinner->property_sensitive() = true; + //_max_spinner->property_sensitive() = true; //m_value_spinner.property_sensitive() = true; _name_label->property_sensitive() = true; } @@ -193,50 +211,14 @@ void SliderControlGroup::disable() { _slider->property_sensitive() = false; - _min_spinner->property_sensitive() = false; - _max_spinner->property_sensitive() = false; + //_min_spinner->property_sensitive() = false; + //_max_spinner->property_sensitive() = false; //m_value_spinner.property_sensitive() = false; _name_label->property_sensitive() = false; } void -SliderControlGroup::min_changed() -{ - float min = _min_spinner->get_value(); - const float max = _max_spinner->get_value(); - - if (min >= max) { - min = max - 1.0; - _min_spinner->set_value(min); - } - - _slider->set_range(min, max); - - if (_enable_signal) - App::instance().engine()->set_metadata(_port_model->path(), "min", min); -} - - -void -SliderControlGroup::max_changed() -{ - const float min = _min_spinner->get_value(); - float max = _max_spinner->get_value(); - - if (max <= min) { - max = min + 1.0; - _max_spinner->set_value(max); - } - - _slider->set_range(min, max); - - if (_enable_signal) - App::instance().engine()->set_metadata(_port_model->path(), "max", max); -} - - -void SliderControlGroup::update_value_from_slider() { if (_enable_signal) { diff --git a/src/progs/ingenuity/ControlGroups.h b/src/progs/ingenuity/ControlGroups.h index 1cbf34d7..a05cceee 100644 --- a/src/progs/ingenuity/ControlGroups.h +++ b/src/progs/ingenuity/ControlGroups.h @@ -31,6 +31,7 @@ using namespace Ingen::Client; namespace Ingenuity { class ControlPanel; +class PortPropertiesWindow; /** A group of controls (for a single Port) in a NodeControlWindow. @@ -52,9 +53,10 @@ public: } protected: + friend class PortPropertiesWindow; virtual void set_value(float value) = 0; - virtual void metadata_update(const string& key, const Atom& value) = 0; + virtual void set_range(float min, float max) {} ControlPanel* _control_panel; SharedPtr<PortModel> _port_model; @@ -82,15 +84,17 @@ public: private: void set_name(const string& name); - virtual void metadata_update(const string& key, const Atom& value); + + bool clicked(GdkEventButton* ev); void set_value(float value); + void set_range(float min, float max); - void min_changed(); - void max_changed(); void update_range(); void update_value_from_slider(); void update_value_from_spinner(); + + void menu_properties(); //void slider_grabbed(bool b); @@ -99,10 +103,11 @@ private: bool _enabled; Gtk::Label* _name_label; - Gtk::SpinButton* _min_spinner; - Gtk::SpinButton* _max_spinner; //Gtk::SpinButton* _value_spinner; Gtk::VScale* _slider; + + Gtk::Menu* _menu; + Gtk::MenuItem* _menu_properties; }; diff --git a/src/progs/ingenuity/Makefile.am b/src/progs/ingenuity/Makefile.am index 932e47df..07420b48 100644 --- a/src/progs/ingenuity/Makefile.am +++ b/src/progs/ingenuity/Makefile.am @@ -92,6 +92,8 @@ ingenuity_SOURCES = \ RenameWindow.cpp \ NodePropertiesWindow.h \ NodePropertiesWindow.cpp \ + PortPropertiesWindow.h \ + PortPropertiesWindow.cpp \ PatchTreeWindow.h \ PatchTreeWindow.cpp diff --git a/src/progs/ingenuity/NodePropertiesWindow.h b/src/progs/ingenuity/NodePropertiesWindow.h index c45ab59c..b6d90062 100644 --- a/src/progs/ingenuity/NodePropertiesWindow.h +++ b/src/progs/ingenuity/NodePropertiesWindow.h @@ -27,7 +27,7 @@ using namespace Ingen::Client; namespace Ingenuity { -/** 'New Patch' Window. +/** Node properties window. * * Loaded by libglade as a derived object. * diff --git a/src/progs/ingenuity/PortPropertiesWindow.cpp b/src/progs/ingenuity/PortPropertiesWindow.cpp new file mode 100644 index 00000000..b7a78ebc --- /dev/null +++ b/src/progs/ingenuity/PortPropertiesWindow.cpp @@ -0,0 +1,173 @@ +/* This file is part of Ingen. + * Copyright (C) 2007 Dave Robillard <http://drobilla.net> + * + * Ingen is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * Ingen is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "PortPropertiesWindow.h" +#include <cassert> +#include <string> +#include "NodeModel.h" +#include "PluginModel.h" +#include "ModelEngineInterface.h" +#include "ControlGroups.h" +#include "App.h" + +using std::string; + +namespace Ingenuity { + + +PortPropertiesWindow::PortPropertiesWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& xml) + : Gtk::Dialog(cobject) + , _enable_signal(false) + , _control(NULL) +{ + xml->get_widget("port_properties_min_spinner", _min_spinner); + xml->get_widget("port_properties_max_spinner", _max_spinner); + xml->get_widget("port_properties_cancel_button", _cancel_button); + xml->get_widget("port_properties_ok_button", _ok_button); + + _cancel_button->signal_clicked().connect(sigc::mem_fun(this, + &PortPropertiesWindow::cancel)); + + _ok_button->signal_clicked().connect(sigc::mem_fun(this, + &PortPropertiesWindow::ok)); +} + + +/** Set the port this window is associated with. + * This function MUST be called before using this object in any way. + */ +void +PortPropertiesWindow::init(ControlGroup* control, SharedPtr<PortModel> pm) +{ + assert(pm); + assert(control); + + _port_model = pm; + _control = control; + + + set_title(pm->path() + " Properties"); + + // FIXME: code duplication w/ ControlGroups.cpp + float min = 0.0f; + float max = 1.0f; + + const Atom& min_atom = pm->get_metadata("min"); + const Atom& max_atom = pm->get_metadata("max"); + if (min_atom.type() == Atom::FLOAT && max_atom.type() == Atom::FLOAT) { + min = min_atom.get_float(); + max = max_atom.get_float(); + } + + const SharedPtr<NodeModel> parent = PtrCast<NodeModel>(pm->parent()); + + if (parent && parent->plugin() && parent->plugin()->type() == PluginModel::LV2) { + min = slv2_port_get_minimum_value( + parent->plugin()->slv2_plugin(), + slv2_plugin_get_port_by_symbol(parent->plugin()->slv2_plugin(), + pm->path().name().c_str())); + max = slv2_port_get_maximum_value( + parent->plugin()->slv2_plugin(), + slv2_plugin_get_port_by_symbol(parent->plugin()->slv2_plugin(), + pm->path().name().c_str())); + } + + if (max <= min) + max = min + 1.0f; + + _initial_min = min; + _initial_max = max; + + _min_spinner->set_value(min); + _min_spinner->signal_value_changed().connect(sigc::mem_fun(*this, &PortPropertiesWindow::min_changed)); + _max_spinner->set_value(max); + _max_spinner->signal_value_changed().connect(sigc::mem_fun(*this, &PortPropertiesWindow::max_changed)); + + pm->metadata_update_sig.connect(sigc::mem_fun(this, &PortPropertiesWindow::metadata_update)); + + _enable_signal = true; +} + + +void +PortPropertiesWindow::metadata_update(const string& key, const Atom& value) +{ + _enable_signal = false; + + if ( (key == "min") && value.type() == Atom::FLOAT) + _min_spinner->set_value(value.get_float()); + else if ( (key == "max") && value.type() == Atom::FLOAT) + _max_spinner->set_value(value.get_float()); + + _enable_signal = true; +} + + +void +PortPropertiesWindow::min_changed() +{ + float min = _min_spinner->get_value(); + const float max = _max_spinner->get_value(); + + if (min >= max) { + min = max - 1.0; + _min_spinner->set_value(min); + } + + _control->set_range(min, max); + + if (_enable_signal) + App::instance().engine()->set_metadata(_port_model->path(), "min", min); +} + + +void +PortPropertiesWindow::max_changed() +{ + const float min = _min_spinner->get_value(); + float max = _max_spinner->get_value(); + + if (max <= min) { + max = min + 1.0; + _max_spinner->set_value(max); + } + + _control->set_range(min, max); + + if (_enable_signal) + App::instance().engine()->set_metadata(_port_model->path(), "max", max); +} + + +void +PortPropertiesWindow::cancel() +{ + App::instance().engine()->set_metadata(_port_model->path(), "min", _initial_min); + App::instance().engine()->set_metadata(_port_model->path(), "max", _initial_max); + delete this; +} + + +void +PortPropertiesWindow::ok() +{ + delete this; +} + + +} // namespace Ingenuity + diff --git a/src/progs/ingenuity/PortPropertiesWindow.h b/src/progs/ingenuity/PortPropertiesWindow.h new file mode 100644 index 00000000..cd22cb09 --- /dev/null +++ b/src/progs/ingenuity/PortPropertiesWindow.h @@ -0,0 +1,68 @@ +/* This file is part of Ingen. + * Copyright (C) 2007 Dave Robillard <http://drobilla.net> + * + * Ingen is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * Ingen is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef PORTPROPERTIESWINDOW_H +#define PORTPROPERTIESWINDOW_H + +#include <gtkmm.h> +#include <libglademm.h> +#include "raul/SharedPtr.h" +#include "PortModel.h" +using namespace Ingen::Client; + +namespace Ingenuity { + +class ControlGroup; + + +/** Port properties window. + * + * Loaded by libglade as a derived object. + * + * \ingroup Ingenuity + */ +class PortPropertiesWindow : public Gtk::Dialog +{ +public: + PortPropertiesWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade); + + void init(ControlGroup* control, SharedPtr<PortModel> port_model); + +private: + void metadata_update(const string& key, const Atom& value); + void min_changed(); + void max_changed(); + + void ok(); + void cancel(); + + bool _enable_signal; + + float _initial_min; + float _initial_max; + + ControlGroup* _control; + SharedPtr<PortModel> _port_model; + Gtk::SpinButton* _min_spinner; + Gtk::SpinButton* _max_spinner; + Gtk::Button* _cancel_button; + Gtk::Button* _ok_button; +}; + +} // namespace Ingenuity + +#endif // PORTPROPERTIESWINDOW_H diff --git a/src/progs/ingenuity/ingenuity.glade b/src/progs/ingenuity/ingenuity.glade index 6c80dc08..fddef5b4 100644 --- a/src/progs/ingenuity/ingenuity.glade +++ b/src/progs/ingenuity/ingenuity.glade @@ -1718,27 +1718,41 @@ <property name="spacing">0</property> <child> - <widget class="GtkScrolledWindow" id="scrolledwin1"> + <widget class="GtkAlignment" id="alignment6"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">0</property> + <property name="yscale">1</property> + <property name="top_padding">0</property> + <property name="bottom_padding">0</property> + <property name="left_padding">0</property> + <property name="right_padding">0</property> <child> - <widget class="GtkViewport" id="viewport1"> + <widget class="GtkScrolledWindow" id="scrolledwin1"> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> <property name="shadow_type">GTK_SHADOW_NONE</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> <child> - <widget class="GtkHBox" id="control_panel_controls_box"> + <widget class="GtkViewport" id="viewport1"> <property name="visible">True</property> - <property name="homogeneous">True</property> - <property name="spacing">4</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> <child> - <placeholder/> + <widget class="GtkHBox" id="control_panel_controls_box"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <property name="spacing">4</property> + + <child> + <placeholder/> + </child> + </widget> </child> </widget> </child> @@ -2216,31 +2230,25 @@ </child> <child> + <widget class="GtkHSeparator" id="hseparator5"> + <property name="visible">True</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">fill</property> + </packing> + </child> + + <child> <widget class="GtkVBox" id="control_strip"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> - <widget class="GtkSpinButton" id="control_strip_max_spinner"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="climb_rate">1</property> - <property name="digits">3</property> - <property name="numeric">True</property> - <property name="update_policy">GTK_UPDATE_ALWAYS</property> - <property name="snap_to_ticks">False</property> - <property name="wrap">False</property> - <property name="adjustment">1 -99999 99999 1 10 10</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> <widget class="GtkAlignment" id="alignment3"> <property name="visible">True</property> <property name="xalign">0.5</property> @@ -2309,45 +2317,13 @@ <property name="fill">True</property> </packing> </child> - - <child> - <widget class="GtkSpinButton" id="control_strip_min_spinner"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="climb_rate">1</property> - <property name="digits">3</property> - <property name="numeric">True</property> - <property name="update_policy">GTK_UPDATE_ALWAYS</property> - <property name="snap_to_ticks">False</property> - <property name="wrap">False</property> - <property name="adjustment">0 -99999 99999 1 10 10</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> - <property name="x_options">shrink|fill</property> - </packing> - </child> - - <child> - <widget class="GtkHSeparator" id="hseparator5"> - <property name="visible">True</property> - </widget> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> + <property name="x_options">shrink</property> </packing> </child> </widget> @@ -4469,4 +4445,208 @@ Thank you for contributing.</property> </child> </widget> +<widget class="GtkMenu" id="port_control_menu"> + + <child> + <widget class="GtkImageMenuItem" id="port_control_menu_properties"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Properties...</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_port_control_menu_properties_activate" last_modification_time="Mon, 23 Apr 2007 00:39:20 GMT"/> + + <child internal-child="image"> + <widget class="GtkImage" id="image2137"> + <property name="visible">True</property> + <property name="stock">gtk-properties</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> +</widget> + +<widget class="GtkDialog" id="port_properties_win"> + <property name="border_width">8</property> + <property name="title" translatable="yes">Port Properties</property> + <property name="type">GTK_WINDOW_POPUP</property> + <property name="window_position">GTK_WIN_POS_MOUSE</property> + <property name="modal">False</property> + <property name="resizable">False</property> + <property name="destroy_with_parent">False</property> + <property name="decorated">True</property> + <property name="skip_taskbar_hint">False</property> + <property name="skip_pager_hint">False</property> + <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> + <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> + <property name="focus_on_map">True</property> + <property name="urgency_hint">False</property> + <property name="has_separator">True</property> + + <child internal-child="vbox"> + <widget class="GtkVBox" id="dialog-vbox6"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">8</property> + + <child internal-child="action_area"> + <widget class="GtkHButtonBox" id="dialog-action_area6"> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_END</property> + + <child> + <widget class="GtkButton" id="port_properties_cancel_button"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-cancel</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="response_id">-6</property> + </widget> + </child> + + <child> + <widget class="GtkButton" id="port_properties_ok_button"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="has_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-ok</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="response_id">-5</property> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack_type">GTK_PACK_END</property> + </packing> + </child> + + <child> + <widget class="GtkTable" id="table20"> + <property name="visible">True</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <property name="homogeneous">False</property> + <property name="row_spacing">4</property> + <property name="column_spacing">2</property> + + <child> + <widget class="GtkSpinButton" id="port_properties_min_spinner"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="climb_rate">1</property> + <property name="digits">5</property> + <property name="numeric">True</property> + <property name="update_policy">GTK_UPDATE_ALWAYS</property> + <property name="snap_to_ticks">False</property> + <property name="wrap">False</property> + <property name="adjustment">0 -100000000 100000000 1 10 10</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkSpinButton" id="port_properties_max_spinner"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="climb_rate">1</property> + <property name="digits">5</property> + <property name="numeric">True</property> + <property name="update_policy">GTK_UPDATE_ALWAYS</property> + <property name="snap_to_ticks">False</property> + <property name="wrap">False</property> + <property name="adjustment">1 -99999 99999 1 10 10</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label138"> + <property name="visible">True</property> + <property name="label" translatable="yes">Minimum Value: </property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label139"> + <property name="visible">True</property> + <property name="label" translatable="yes">Maximum Value: </property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + </child> +</widget> + </glade-interface> |