summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-02-19 17:30:47 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-02-19 17:30:47 +0000
commit4c6b2c7eb7fa4b8fffe8ea9cbc5eb775f6b12cd8 (patch)
tree260e4b1ba4587b8cb5b3b3d8d1cef5f924a864ca /gtk2_ardour
parent60b8dce6379426ccdf54832e11c83a7b13c44d57 (diff)
remote control IDs follow editor/mixer view order; fix multiple display of disk over/under run errors; don't show automation editing cursor unless you actually edit it
git-svn-id: svn://localhost/ardour2/trunk@1474 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour.menus8
-rw-r--r--gtk2_ardour/ardour_ui.cc40
-rw-r--r--gtk2_ardour/ardour_ui.h9
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc7
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc9
-rw-r--r--gtk2_ardour/ardour_ui_options.cc62
-rw-r--r--gtk2_ardour/editor_mouse.cc52
-rw-r--r--gtk2_ardour/editor_route_list.cc2
-rw-r--r--gtk2_ardour/mixer_ui.cc2
-rw-r--r--gtk2_ardour/route_ui.cc10
10 files changed, 147 insertions, 54 deletions
diff --git a/gtk2_ardour/ardour.menus b/gtk2_ardour/ardour.menus
index ba007e5cae..c826b40bc3 100644
--- a/gtk2_ardour/ardour.menus
+++ b/gtk2_ardour/ardour.menus
@@ -291,8 +291,12 @@
<menuitem action='OutputAutoConnectMaster'/>
<menuitem action='OutputAutoConnectManual'/>
</menu>
- <menu action='ControlSurfaces'/>
- <menu action='Monitoring'>
+ <menu action='ControlSurfaces'>
+ <menuitem action='RemoteUserDefined'/>
+ <menuitem action='RemoteMixerDefined'/>
+ <menuitem action='RemoteEditorDefined'/>
+ </menu>
+ <menu action='Monitoring'>
<menuitem action='UseHardwareMonitoring'/>
<menuitem action='UseSoftwareMonitoring'/>
<menuitem action='UseExternalMonitoring'/>
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index febdbab088..ecf60acaa1 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -180,8 +180,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
location_ui = 0;
open_session_selector = 0;
have_configure_timeout = false;
- have_disk_overrun_displayed = false;
- have_disk_underrun_displayed = false;
+ have_disk_speed_dialog_displayed = false;
_will_create_new_session_automatically = false;
session_loaded = false;
last_speed_displayed = -1.0f;
@@ -2366,18 +2365,18 @@ ARDOUR_UI::halt_on_xrun_message ()
void
ARDOUR_UI::disk_overrun_handler ()
{
- ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::disk_underrun_handler));
+ ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::disk_overrun_handler));
- if (!have_disk_overrun_displayed) {
- have_disk_overrun_displayed = true;
- MessageDialog msg (*editor, X_("diskrate dialog"), _("\
+ if (!have_disk_speed_dialog_displayed) {
+ have_disk_speed_dialog_displayed = true;
+ MessageDialog* msg = new MessageDialog (*editor, X_("diskrate dialog"), _("\
The disk system on your computer\n\
was not able to keep up with Ardour.\n\
\n\
Specifically, it failed to write data to disk\n\
quickly enough to keep up with recording.\n"));
- msg.run ();
- have_disk_overrun_displayed = false;
+ msg->signal_response().connect (bind (mem_fun (*this, &ARDOUR_UI::disk_speed_dialog_gone), msg));
+ msg->show_all ();
}
}
@@ -2386,29 +2385,24 @@ ARDOUR_UI::disk_underrun_handler ()
{
ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::disk_underrun_handler));
- if (!have_disk_underrun_displayed) {
- have_disk_underrun_displayed = true;
- MessageDialog msg (*editor,
- (_("The disk system on your computer\n\
+ if (!have_disk_speed_dialog_displayed) {
+ have_disk_speed_dialog_displayed = true;
+ MessageDialog* msg = new MessageDialog (*editor,
+ _("The disk system on your computer\n\
was not able to keep up with Ardour.\n\
\n\
Specifically, it failed to read data from disk\n\
-quickly enough to keep up with playback.\n")));
- msg.run ();
- have_disk_underrun_displayed = false;
+quickly enough to keep up with playback.\n"));
+ msg->signal_response().connect (bind (mem_fun (*this, &ARDOUR_UI::disk_speed_dialog_gone), msg));
+ msg->show_all ();
}
}
void
-ARDOUR_UI::disk_underrun_message_gone ()
-{
- have_disk_underrun_displayed = false;
-}
-
-void
-ARDOUR_UI::disk_overrun_message_gone ()
+ARDOUR_UI::disk_speed_dialog_gone (int ignored_response, MessageDialog* msg)
{
- have_disk_underrun_displayed = false;
+ have_disk_speed_dialog_displayed = false;
+ delete msg;
}
int
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 4d8d82f31b..dfef964c67 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -645,11 +645,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
struct timeval last_peak_grab;
struct timeval last_shuttle_request;
- bool have_disk_overrun_displayed;
- bool have_disk_underrun_displayed;
-
- void disk_overrun_message_gone ();
- void disk_underrun_message_gone ();
+ bool have_disk_speed_dialog_displayed;
+ void disk_speed_dialog_gone (int ignored_response, Gtk::MessageDialog*);
void disk_overrun_handler ();
void disk_underrun_handler ();
@@ -682,6 +679,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void set_output_auto_connect (ARDOUR::AutoConnectOption);
void set_solo_model (ARDOUR::SoloModel);
void set_monitor_model (ARDOUR::MonitorModel);
+ void set_remote_model (ARDOUR::RemoteModel);
void toggle_StopPluginsWithTransport();
void toggle_DoNotRunPluginsWhileRecording();
@@ -697,6 +695,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void mtc_port_changed ();
void map_solo_model ();
void map_monitor_model ();
+ void map_remote_model ();
void map_file_header_format ();
void map_file_data_format ();
void map_input_auto_connect ();
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index 2f73e070ef..a0d772dbf1 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -62,6 +62,13 @@ ARDOUR_UI::connect_to_session (Session *s)
ActionManager::set_sensitive (ActionManager::range_sensitive_actions, false);
}
+ if (!session->control_out()) {
+ Glib::RefPtr<Action> act = ActionManager::get_action (X_("options"), X_("SoloViaBus"));
+ if (act) {
+ act->set_sensitive (false);
+ }
+ }
+
/* allow wastebasket flush again */
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Main"), X_("FlushWastebasket"));
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index fa047d65d0..acd81c1ccf 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -470,6 +470,15 @@ ARDOUR_UI::install_actions ()
act = ActionManager::register_radio_action (option_actions, output_auto_connect_group, X_("OutputAutoConnectManual"), _("Manually connect outputs"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_output_auto_connect), (AutoConnectOption) 0)));
ActionManager::session_sensitive_actions.push_back (act);
+ RadioAction::Group remote_group;
+
+ act = ActionManager::register_radio_action (option_actions, remote_group, X_("RemoteUserDefined"), _("Remote ID assigned by User"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_remote_model), UserOrdered)));
+ ActionManager::session_sensitive_actions.push_back (act);
+ act = ActionManager::register_radio_action (option_actions, remote_group, X_("RemoteMixerDefined"), _("Remote ID follows order of Mixer"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_remote_model), MixerOrdered)));
+ ActionManager::session_sensitive_actions.push_back (act);
+ act = ActionManager::register_radio_action (option_actions, remote_group, X_("RemoteEditorDefined"), _("Remote ID follows order of Editor"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_remote_model), EditorOrdered)));
+ ActionManager::session_sensitive_actions.push_back (act);
+
ActionManager::add_action_group (shuttle_actions);
ActionManager::add_action_group (option_actions);
ActionManager::add_action_group (jack_actions);
diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc
index fec0f83752..b34825bff3 100644
--- a/gtk2_ardour/ardour_ui_options.cc
+++ b/gtk2_ardour/ardour_ui_options.cc
@@ -226,6 +226,39 @@ ARDOUR_UI::set_solo_model (SoloModel model)
}
void
+ARDOUR_UI::set_remote_model (RemoteModel model)
+{
+ const char* action = 0;
+
+ switch (model) {
+ case UserOrdered:
+ action = X_("RemoteUserDefined");
+ break;
+ case MixerOrdered:
+ action = X_("RemoteMixerDefined");
+ break;
+ case EditorOrdered:
+ action = X_("RemoteEditorDefined");
+ break;
+
+ default:
+ fatal << string_compose (_("programming error: unknown remote model in ARDOUR_UI::set_remote_model: %1"), model) << endmsg;
+ /*NOTREACHED*/
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", action);
+
+ if (act) {
+ Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
+
+ if (ract && ract->get_active() && Config->get_remote_model() != model) {
+ Config->set_remote_model (model);
+ }
+ }
+
+}
+
+void
ARDOUR_UI::set_monitor_model (MonitorModel model)
{
const char* action = 0;
@@ -478,6 +511,33 @@ ARDOUR_UI::map_monitor_model ()
}
void
+ARDOUR_UI::map_remote_model ()
+{
+ const char* on = 0;
+
+ switch (Config->get_remote_model()) {
+ case UserOrdered:
+ on = X_("RemoteUserDefined");
+ break;
+ case MixerOrdered:
+ on = X_("RemoteMixerDefined");
+ break;
+ case EditorOrdered:
+ on = X_("RemoteEditorDefined");
+ break;
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", on);
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+
+ if (tact && !tact->get_active()) {
+ tact->set_active (true);
+ }
+ }
+}
+
+void
ARDOUR_UI::map_file_header_format ()
{
const char* action = 0;
@@ -814,6 +874,8 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
ActionManager::map_some_state ("options", "StopTransportAtEndOfSession", &Configuration::get_stop_at_session_end);
} else if (PARAM_IS ("monitoring-model")) {
map_monitor_model ();
+ } else if (PARAM_IS ("remote-model")) {
+ map_remote_model ();
} else if (PARAM_IS ("use-video-sync")) {
ActionManager::map_some_state ("Transport", "ToggleVideoSync", &Configuration::get_use_video_sync);
} else if (PARAM_IS ("quieten-at-speed")) {
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 558d4b29da..8ed76b80ae 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -1176,23 +1176,25 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case GainAutomationControlPointItem:
case PanAutomationControlPointItem:
case RedirectAutomationControlPointItem:
- cp = static_cast<ControlPoint*>(item->get_data ("control_point"));
- cp->set_visible (true);
-
- double at_x, at_y;
- at_x = cp->get_x();
- at_y = cp->get_y ();
- cp->item->i2w (at_x, at_y);
- at_x += 20.0;
- at_y += 20.0;
-
- fraction = 1.0 - (cp->get_y() / cp->line.height());
-
- set_verbose_canvas_cursor (cp->line.get_verbose_cursor_string (fraction), at_x, at_y);
- show_verbose_canvas_cursor ();
-
- if (is_drawable()) {
- track_canvas.get_window()->set_cursor (*fader_cursor);
+ if (mouse_mode == MouseGain || mouse_mode == MouseObject) {
+ cp = static_cast<ControlPoint*>(item->get_data ("control_point"));
+ cp->set_visible (true);
+
+ double at_x, at_y;
+ at_x = cp->get_x();
+ at_y = cp->get_y ();
+ cp->item->i2w (at_x, at_y);
+ at_x += 20.0;
+ at_y += 20.0;
+
+ fraction = 1.0 - (cp->get_y() / cp->line.height());
+
+ set_verbose_canvas_cursor (cp->line.get_verbose_cursor_string (fraction), at_x, at_y);
+ show_verbose_canvas_cursor ();
+
+ if (is_drawable()) {
+ track_canvas.get_window()->set_cursor (*fader_cursor);
+ }
}
break;
@@ -1210,13 +1212,15 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case GainAutomationLineItem:
case RedirectAutomationLineItem:
case PanAutomationLineItem:
- {
- ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
- if (line)
- line->property_fill_color_rgba() = color_map[cEnteredAutomationLine];
- }
- if (is_drawable()) {
- track_canvas.get_window()->set_cursor (*fader_cursor);
+ if (mouse_mode == MouseGain || mouse_mode == MouseObject) {
+ {
+ ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
+ if (line)
+ line->property_fill_color_rgba() = color_map[cEnteredAutomationLine];
+ }
+ if (is_drawable()) {
+ track_canvas.get_window()->set_cursor (*fader_cursor);
+ }
}
break;
diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc
index b0311d24a8..727d4a82f4 100644
--- a/gtk2_ardour/editor_route_list.cc
+++ b/gtk2_ardour/editor_route_list.cc
@@ -512,11 +512,13 @@ Editor::initial_route_list_display ()
void
Editor::route_list_change (const Gtk::TreeModel::Path& path,const Gtk::TreeModel::iterator& iter)
{
+ session->set_remote_control_ids();
redisplay_route_list ();
}
void
Editor::route_list_delete (const Gtk::TreeModel::Path& path)
{
+ session->set_remote_control_ids();
redisplay_route_list ();
}
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 4d13367cb6..2894456f9e 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -555,12 +555,14 @@ Mixer_UI::hide_all_audiotracks ()
void
Mixer_UI::track_list_change (const Gtk::TreeModel::Path& path,const Gtk::TreeModel::iterator& iter)
{
+ session->set_remote_control_ids();
redisplay_track_list ();
}
void
Mixer_UI::track_list_delete (const Gtk::TreeModel::Path& path)
{
+ session->set_remote_control_ids();
redisplay_track_list ();
}
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index cc8545ad61..c1e7e59afb 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -107,6 +107,8 @@ RouteUI::RouteUI (boost::shared_ptr<ARDOUR::Route> rt, ARDOUR::Session& sess, co
update_rec_display ();
}
+ _route->RemoteControlIDChanged.connect (mem_fun(*this, &RouteUI::refresh_remote_control_menu));
+
/* map the current state */
map_frozen ();
@@ -478,6 +480,14 @@ RouteUI::build_remote_control_menu ()
void
RouteUI::refresh_remote_control_menu ()
{
+ ENSURE_GUI_THREAD (mem_fun (*this, &RouteUI::refresh_remote_control_menu));
+
+ // only refresh the menu if it has been instantiated
+
+ if (remote_control_menu == 0) {
+ return;
+ }
+
using namespace Menu_Helpers;
RadioMenuItem::Group rc_group;