summaryrefslogtreecommitdiffstats
path: root/src/gui/Controls.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-12-31 18:27:20 +0000
committerDavid Robillard <d@drobilla.net>2009-12-31 18:27:20 +0000
commit3dded8a655b6cad1925f160cb1012b8334e00c3e (patch)
tree5d743f58c6494ea7e5ed4010f9016c7d3c3f7665 /src/gui/Controls.cpp
parentc11b1bd6fe15f281c5e6b1ab2109590c17e739e9 (diff)
downloadingen-3dded8a655b6cad1925f160cb1012b8334e00c3e.tar.gz
ingen-3dded8a655b6cad1925f160cb1012b8334e00c3e.tar.bz2
ingen-3dded8a655b6cad1925f160cb1012b8334e00c3e.zip
Various fixes related to port values and metadata (fix ticket #459 among other things).
Fix jitterey behaviour of port controls (on module) while dragging. Update value in status bar while dragging port slider (on module). Update plugin data (e.g. port control range) if the plugin is sent to the client after nodes that are instances of it (i.e. more robust plugin state tracking via merging like with objects). Correctly save and restore port values (ticket #459). git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2327 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/gui/Controls.cpp')
-rw-r--r--src/gui/Controls.cpp93
1 files changed, 9 insertions, 84 deletions
diff --git a/src/gui/Controls.cpp b/src/gui/Controls.cpp
index 6e8ca351..9c66b1ae 100644
--- a/src/gui/Controls.cpp
+++ b/src/gui/Controls.cpp
@@ -70,6 +70,7 @@ Control::init(ControlPanel* panel, SharedPtr<PortModel> pm)
assert(_port_model);
assert(panel);
+ _control_connection.disconnect();
_control_connection = pm->signal_value_changed.connect(sigc::mem_fun(this, &Control::set_value));
}
@@ -174,13 +175,13 @@ SliderControl::clicked(GdkEventButton* ev)
void
SliderControl::set_value(const Atom& atom)
{
- float val = atom.get_float();
+ if (_enabled) {
+ _enable_signal = false;
+ float val = atom.get_float();
- if (_port_model->is_integer())
- val = lrintf(val);
+ if (_port_model->is_integer())
+ val = lrintf(val);
- _enable_signal = false;
- if (_enabled) {
if (_slider->get_value() != val) {
const Gtk::Adjustment* range = _slider->get_adjustment();
const float lower = range->get_lower();
@@ -189,10 +190,12 @@ SliderControl::set_value(const Atom& atom)
set_range(min(lower, val), max(lower, val));
_slider->set_value(val);
}
+
if (_value_spinner->get_value() != val)
_value_spinner->set_value(val);
+
+ _enable_signal = true;
}
- _enable_signal = true;
}
@@ -290,94 +293,16 @@ SliderControl::update_value_from_spinner()
bool
SliderControl::slider_pressed(GdkEvent* ev)
{
- //cerr << "Pressed: " << ev->type << endl;
if (ev->type == GDK_BUTTON_PRESS) {
_enabled = false;
- //GtkClientInterface::instance()->set_ignore_port(_port_model->path());
} else if (ev->type == GDK_BUTTON_RELEASE) {
_enabled = true;
- //GtkClientInterface::instance()->clear_ignore_port();
}
return false;
}
-// ///////////// IntegerControl ////////////// //
-
-#if 0
-IntegerControl::IntegerControl(ControlPanel* panel, SharedPtr<PortModel> pm)
-: Control(panel, pm),
- _enable_signal(false),
- _alignment(0.5, 0.5, 0.0, 0.0),
- _name_label(pm->path().name()),
- _spinner(1.0, 0)
-{
- set_name(pm->path().name());
-
- _spinner.set_range(-99999, 99999);
- _spinner.set_value(_port_model->value());
- _spinner.signal_value_changed().connect(
- sigc::mem_fun(*this, &IntegerControl::update_value));
- _spinner.set_increments(1, 10);
-
- _alignment.add(_spinner);
- pack_start(_name_label);
- pack_start(_alignment);
-
- _enable_signal = true;
-
- show_all();
-}
-
-
-void
-IntegerControl::set_name(const string& name)
-{
- string name_label = "<span weight=\"bold\">";
- name_label += name + "</span>";
- _name_label->set_markup(name_label);
-}
-
-
-void
-IntegerControl::set_value(float val)
-{
- //cerr << "[IntegerControl] Setting value to " << val << endl;
- _enable_signal = false;
- _spinner.set_value(val);
- _enable_signal = true;
-}
-
-
-void
-IntegerControl::enable()
-{
- _spinner.property_sensitive() = true;
- _name_label->property_sensitive() = true;
-}
-
-
-void
-IntegerControl::disable()
-{
- _spinner.property_sensitive() = false;
- _name_label->property_sensitive() = false;
-}
-
-
-void
-IntegerControl::update_value()
-{
- if (_enable_signal) {
- float value = _spinner.get_value();
- _control_panel->value_changed(_port_model, value);
- //m_port_model->value(value);
- }
-}
-#endif
-
-
// ///////////// ToggleControl ////////////// //