summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mainsbridge <beatroute@iprimus.com.au>2006-04-26 16:04:04 +0000
committerNick Mainsbridge <beatroute@iprimus.com.au>2006-04-26 16:04:04 +0000
commit1855ed57fd65f3338b8aa94d2c10d0d2d406d549 (patch)
tree569c1c5023548b675abffa846e342445023f5d69
parent56f0a56805054c9e96f52b2b173996987aa73c02 (diff)
Plugin selector useability changes, fix mouse grab bug in plugin barcontroller, prevent alpah key entry in tempo/meter dialogs
git-svn-id: svn://localhost/trunk/ardour2@483 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/plugin_selector.cc52
-rw-r--r--gtk2_ardour/plugin_selector.h5
-rw-r--r--gtk2_ardour/plugin_ui.cc2
-rw-r--r--gtk2_ardour/tempo_dialog.cc97
-rw-r--r--gtk2_ardour/tempo_dialog.h2
-rw-r--r--libs/gtkmm2ext/barcontroller.cc1
6 files changed, 155 insertions, 4 deletions
diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc
index 9171815bcd..56f5fab9c8 100644
--- a/gtk2_ardour/plugin_selector.cc
+++ b/gtk2_ardour/plugin_selector.cc
@@ -93,9 +93,11 @@ PluginSelector::PluginSelector (PluginManager *mgr)
ascroller.set_border_width(10);
ascroller.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
ascroller.add(added_list);
- Gtk::Button *btn_add = manage(new Gtk::Button(Stock::ADD));
+ btn_add = manage(new Gtk::Button(Stock::ADD));
ARDOUR_UI::instance()->tooltips().set_tip(*btn_add, _("Add a plugin to the effect list"));
- Gtk::Button *btn_remove = manage(new Gtk::Button(Stock::REMOVE));
+ btn_add->set_sensitive (false);
+ btn_remove = manage(new Gtk::Button(Stock::REMOVE));
+ btn_remove->set_sensitive (false);
ARDOUR_UI::instance()->tooltips().set_tip(*btn_remove, _("Remove a plugin from the effect list"));
Gtk::Button *btn_update = manage(new Gtk::Button(Stock::REFRESH));
ARDOUR_UI::instance()->tooltips().set_tip(*btn_update, _("Update available plugins"));
@@ -116,7 +118,7 @@ PluginSelector::PluginSelector (PluginManager *mgr)
add_button (Stock::CANCEL, RESPONSE_CANCEL);
add_button (Stock::CONNECT, RESPONSE_APPLY);
set_default_response (RESPONSE_APPLY);
-
+ set_response_sensitive (RESPONSE_APPLY, false);
get_vbox()->pack_start (*table);
using namespace Gtk::Notebook_Helpers;
@@ -136,12 +138,15 @@ PluginSelector::PluginSelector (PluginManager *mgr)
#ifdef VST_SUPPORT
if (Config->get_use_vst()) {
vst_display.signal_button_press_event().connect_notify (mem_fun(*this, &PluginSelector::row_clicked));
+ vst_display.get_selection()->signal_changed().connect (mem_fun(*this, &PluginSelector::vst_display_selection_changed));
}
#endif
btn_update->signal_clicked().connect (mem_fun(*this, &PluginSelector::btn_update_clicked));
btn_add->signal_clicked().connect(mem_fun(*this, &PluginSelector::btn_add_clicked));
btn_remove->signal_clicked().connect(mem_fun(*this, &PluginSelector::btn_remove_clicked));
+ ladspa_display.get_selection()->signal_changed().connect (mem_fun(*this, &PluginSelector::ladspa_display_selection_changed));
+ added_list.get_selection()->signal_changed().connect (mem_fun(*this, &PluginSelector::added_list_selection_changed));
input_refiller ();
}
@@ -274,6 +279,10 @@ PluginSelector::btn_add_clicked()
}
newrow[acols.text] = name;
newrow[acols.plugin] = pi;
+
+ if (!amodel->children().empty()) {
+ set_response_sensitive (RESPONSE_APPLY, true);
+ }
}
void
@@ -285,6 +294,11 @@ PluginSelector::btn_remove_clicked()
added_plugins.erase(i);
amodel->erase(iter);
+ if (amodel->children().empty()) {
+ set_response_sensitive (RESPONSE_APPLY, false);
+ }
+
+
}
void
@@ -294,6 +308,38 @@ PluginSelector::btn_update_clicked()
input_refiller ();
}
+#ifdef VST_SUPPORT
+void
+PluginSelector::vst_display_selection_changed()
+{
+ if (vst_display.get_selection()->count_selected_rows() != 0) {
+ btn_add->set_sensitive (true);
+ } else {
+ btn_add->set_sensitive (false);
+ }
+}
+#endif
+
+void
+PluginSelector::ladspa_display_selection_changed()
+{
+ if (ladspa_display.get_selection()->count_selected_rows() != 0) {
+ btn_add->set_sensitive (true);
+ } else {
+ btn_add->set_sensitive (false);
+ }
+}
+
+void
+PluginSelector::added_list_selection_changed()
+{
+ if (added_list.get_selection()->count_selected_rows() != 0) {
+ btn_remove->set_sensitive (true);
+ } else {
+ btn_remove->set_sensitive (false);
+ }
+}
+
int
PluginSelector::run ()
{
diff --git a/gtk2_ardour/plugin_selector.h b/gtk2_ardour/plugin_selector.h
index 2f0395e82b..cbd076918e 100644
--- a/gtk2_ardour/plugin_selector.h
+++ b/gtk2_ardour/plugin_selector.h
@@ -67,6 +67,8 @@ class PluginSelector : public ArdourDialog
Glib::RefPtr<Gtk::ListStore> lmodel;
Glib::RefPtr<Gtk::TreeSelection> lselection;
Gtk::TreeView ladspa_display;
+ Gtk::Button* btn_add;
+ Gtk::Button* btn_remove;
struct AddedColumns : public Gtk::TreeModel::ColumnRecord {
AddedColumns () {
@@ -101,6 +103,7 @@ class PluginSelector : public ArdourDialog
Gtk::TreeView vst_display;
static void _vst_refiller (void *);
void vst_refiller ();
+ void vst_dispaly_selection_changed();
#endif
ARDOUR::PluginInfo* i_selected_plug;
@@ -119,6 +122,8 @@ class PluginSelector : public ArdourDialog
void btn_add_clicked();
void btn_remove_clicked();
void btn_update_clicked();
+ void added_list_selection_changed();
+ void ladspa_display_selection_changed();
void btn_apply_clicked();
void use_plugin (ARDOUR::PluginInfo*);
void cleanup ();
diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc
index e0d22d8834..7965bd1257 100644
--- a/gtk2_ardour/plugin_ui.cc
+++ b/gtk2_ardour/plugin_ui.cc
@@ -100,7 +100,7 @@ PluginUIWindow::PluginUIWindow (AudioEngine &engine, PluginInsert& insert, bool
set_position (Gtk::WIN_POS_MOUSE);
set_name ("PluginEditor");
- add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
+ add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window*> (this)));
insert.GoingAway.connect (mem_fun(*this, &PluginUIWindow::plugin_going_away));
diff --git a/gtk2_ardour/tempo_dialog.cc b/gtk2_ardour/tempo_dialog.cc
index 43c9ece5ba..fc37550172 100644
--- a/gtk2_ardour/tempo_dialog.cc
+++ b/gtk2_ardour/tempo_dialog.cc
@@ -102,11 +102,60 @@ TempoDialog::init (const BBT_Time& when, double bpm, bool movable)
bpm_entry.show();
set_name ("MetricDialog");
+ bpm_entry.signal_key_press_event().connect (mem_fun (*this, &TempoDialog::bpm_key_press), false);
bpm_entry.signal_activate().connect (bind (mem_fun (*this, &TempoDialog::response), RESPONSE_ACCEPT));
bpm_entry.signal_key_release_event().connect (mem_fun (*this, &TempoDialog::bpm_key_release));
}
bool
+TempoDialog::bpm_key_press (GdkEventKey* ev)
+{
+
+switch (ev->keyval) {
+
+ case GDK_0:
+ case GDK_1:
+ case GDK_2:
+ case GDK_3:
+ case GDK_4:
+ case GDK_5:
+ case GDK_6:
+ case GDK_7:
+ case GDK_8:
+ case GDK_9:
+ case GDK_KP_0:
+ case GDK_KP_1:
+ case GDK_KP_2:
+ case GDK_KP_3:
+ case GDK_KP_4:
+ case GDK_KP_5:
+ case GDK_KP_6:
+ case GDK_KP_7:
+ case GDK_KP_8:
+ case GDK_KP_9:
+ case GDK_period:
+ case GDK_comma:
+ case GDK_KP_Delete:
+ case GDK_KP_Enter:
+ case GDK_Delete:
+ case GDK_BackSpace:
+ case GDK_Escape:
+ case GDK_Return:
+ case GDK_Home:
+ case GDK_End:
+ case GDK_Left:
+ case GDK_Right:
+ case GDK_Num_Lock:
+ case GDK_Tab:
+ return FALSE;
+ default:
+ break;
+ }
+
+ return TRUE;
+}
+
+bool
TempoDialog::bpm_key_release (GdkEventKey* ev)
{
if (bpm_entry.get_text() != "") {
@@ -280,6 +329,54 @@ MeterDialog::init (const BBT_Time& when, double bpb, double note_type, bool mova
}
bool
+MeterDialog::bpb_key_press (GdkEventKey* ev)
+{
+
+switch (ev->keyval) {
+
+ case GDK_0:
+ case GDK_1:
+ case GDK_2:
+ case GDK_3:
+ case GDK_4:
+ case GDK_5:
+ case GDK_6:
+ case GDK_7:
+ case GDK_8:
+ case GDK_9:
+ case GDK_KP_0:
+ case GDK_KP_1:
+ case GDK_KP_2:
+ case GDK_KP_3:
+ case GDK_KP_4:
+ case GDK_KP_5:
+ case GDK_KP_6:
+ case GDK_KP_7:
+ case GDK_KP_8:
+ case GDK_KP_9:
+ case GDK_period:
+ case GDK_comma:
+ case GDK_KP_Delete:
+ case GDK_KP_Enter:
+ case GDK_Delete:
+ case GDK_BackSpace:
+ case GDK_Escape:
+ case GDK_Return:
+ case GDK_Home:
+ case GDK_End:
+ case GDK_Left:
+ case GDK_Right:
+ case GDK_Num_Lock:
+ case GDK_Tab:
+ return FALSE;
+ default:
+ break;
+ }
+
+ return TRUE;
+}
+
+bool
MeterDialog::bpb_key_release (GdkEventKey* ev)
{
if (bpb_entry.get_text() != "") {
diff --git a/gtk2_ardour/tempo_dialog.h b/gtk2_ardour/tempo_dialog.h
index 4d41e2250c..2c6827954f 100644
--- a/gtk2_ardour/tempo_dialog.h
+++ b/gtk2_ardour/tempo_dialog.h
@@ -41,6 +41,7 @@ struct TempoDialog : public ArdourDialog
private:
void init (const ARDOUR::BBT_Time& start, double, bool);
+ bool bpm_key_press (GdkEventKey* );
bool bpm_key_release (GdkEventKey* );
};
@@ -74,6 +75,7 @@ struct MeterDialog : public ArdourDialog
private:
void init (const ARDOUR::BBT_Time&, double, double, bool);
+ bool bpb_key_press (GdkEventKey* );
bool bpb_key_release (GdkEventKey* );
void note_types_change ();
};
diff --git a/libs/gtkmm2ext/barcontroller.cc b/libs/gtkmm2ext/barcontroller.cc
index 1ce19770e3..c977f3e5f7 100644
--- a/libs/gtkmm2ext/barcontroller.cc
+++ b/libs/gtkmm2ext/barcontroller.cc
@@ -170,6 +170,7 @@ BarController::button_release (GdkEventButton* ev)
darea.remove_modal_grab();
grabbed = false;
StopGesture ();
+ grabbed = false;
break;
case 2: