diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-02-20 19:49:43 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-02-20 19:49:43 +0000 |
commit | 7321f25043d87de1f391f5ff1aa69ebbb2fff149 (patch) | |
tree | 47d2f955675fdc9391431fbe47a55146e227b1e7 | |
parent | 87bbf0f04f6abfeb1f0378ce939f5ca968834d73 (diff) |
drop ruler_show[] in favor of specific editor actions; various new actions and menu support for new Tracks top level menu
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3089 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/ardour-sae.menus | 30 | ||||
-rw-r--r-- | gtk2_ardour/ardour.menus | 15 | ||||
-rw-r--r-- | gtk2_ardour/audio_time_axis.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 27 | ||||
-rw-r--r-- | gtk2_ardour/editor_actions.cc | 112 | ||||
-rw-r--r-- | gtk2_ardour/editor_markers.cc | 8 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 148 | ||||
-rw-r--r-- | gtk2_ardour/editor_rulers.cc | 250 | ||||
-rw-r--r-- | gtk2_ardour/editor_selection.cc | 13 | ||||
-rw-r--r-- | gtk2_ardour/splash.cc | 5 |
10 files changed, 442 insertions, 176 deletions
diff --git a/gtk2_ardour/ardour-sae.menus b/gtk2_ardour/ardour-sae.menus index e8b8a20b5e..c4939f037a 100644 --- a/gtk2_ardour/ardour-sae.menus +++ b/gtk2_ardour/ardour-sae.menus @@ -27,6 +27,7 @@ </menu> <menuitem action='ToggleOptionsEditor'/> <menuitem action='About'/> + <menuitem action='Quit'/> </menu> <menu name='Transport' action='Transport'> @@ -169,7 +170,20 @@ </menu> </menu> - <menu name='Regions' action='Regions'> + <menu action='TrackMenu'> + <menu action='TrackHeightMenu'> + <menuitem action='track-height-largest'/> + <menuitem action='track-height-large'/> + <menuitem action='track-height-larger'/> + <menuitem action='track-height-normal'/> + <menuitem action='track-height-smaller'/> + <menuitem action='track-height-small'/> + </menu> + <menuitem action='toggle-track-active'/> + <menuitem action='remove-track'/> + </menu> + + <menu action='Regions'> <menuitem action='insert-region'/> <menuitem action='rename-region'/> <menuitem action='auto-rename-region'/> @@ -218,6 +232,7 @@ <menuitem action="toggle-meter-ruler"/> <menuitem action="toggle-tempo-ruler"/> <menuitem action="toggle-range-ruler"/> + <menuitem action="toggle-marker-ruler"/> <menuitem action="toggle-cd-marker-ruler"/> <menuitem action="toggle-loop-punch-ruler"/> </menu> @@ -296,6 +311,19 @@ </menubar> + <popup action="RulerMenuPopup"> + <menuitem action="toggle-bbt-ruler"/> + <menuitem action="toggle-minsec-ruler"/> + <menuitem action="toggle-samples-ruler"/> + <separator/> + <menuitem action="toggle-meter-ruler"/> + <menuitem action="toggle-tempo-ruler"/> + <menuitem action="toggle-range-ruler"/> + <menuitem action="toggle-marker-ruler"/> + <menuitem action="toggle-cd-marker-ruler"/> + <menuitem action="toggle-loop-punch-ruler"/> + </popup> + <popup name='redirectmenu'> <menuitem action='newplugin'/> <menuitem action='newinsert'/> diff --git a/gtk2_ardour/ardour.menus b/gtk2_ardour/ardour.menus index c180d0b57e..399743939c 100644 --- a/gtk2_ardour/ardour.menus +++ b/gtk2_ardour/ardour.menus @@ -448,6 +448,21 @@ </menu> </menubar> + <popup action="RulerMenuPopup"> + <menuitem action="toggle-minsec-ruler"/> + <menuitem action="toggle-timecode-ruler"/> + <menuitem action="toggle-samples-ruler"/> + <menuitem action="toggle-bbt-ruler"/> + <separator/> + <menuitem action="toggle-meter-ruler"/> + <menuitem action="toggle-timecode-ruler"/> + <menuitem action="toggle-tempo-ruler"/> + <menuitem action="toggle-range-ruler"/> + <menuitem action="toggle-marker-ruler"/> + <menuitem action="toggle-cd-marker-ruler"/> + <menuitem action="toggle-loop-punch-ruler"/> + </popup> + <popup name='redirectmenu'> <menuitem action='newplugin'/> <menuitem action='newinsert'/> diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc index 76cce8c318..43cf205981 100644 --- a/gtk2_ardour/audio_time_axis.cc +++ b/gtk2_ardour/audio_time_axis.cc @@ -634,25 +634,27 @@ AudioTimeAxisView::update_control_names () { if (is_audio_track()) { if (_route->active()) { - controls_ebox.set_name ("AudioTrackControlsBaseUnselected"); controls_base_selected_name = "AudioTrackControlsBaseSelected"; controls_base_unselected_name = "AudioTrackControlsBaseUnselected"; } else { - controls_ebox.set_name ("AudioTrackControlsBaseInactiveUnselected"); controls_base_selected_name = "AudioTrackControlsBaseInactiveSelected"; controls_base_unselected_name = "AudioTrackControlsBaseInactiveUnselected"; } } else { if (_route->active()) { - controls_ebox.set_name ("BusControlsBaseUnselected"); controls_base_selected_name = "BusControlsBaseSelected"; controls_base_unselected_name = "BusControlsBaseUnselected"; } else { - controls_ebox.set_name ("BusControlsBaseInactiveUnselected"); controls_base_selected_name = "BusControlsBaseInactiveSelected"; controls_base_unselected_name = "BusControlsBaseInactiveUnselected"; } } + + if (get_selected()) { + controls_ebox.set_name (controls_base_selected_name); + } else { + controls_ebox.set_name (controls_base_unselected_name); + } } XMLNode* diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index c264a4fcb1..1a11082b4e 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -59,6 +59,7 @@ #include "editor_items.h" #include "region_selection.h" #include "canvas.h" +#include "time_axis_view.h" #include "draginfo.h" namespace Gtkmm2ext { @@ -572,7 +573,7 @@ class Editor : public PublicEditor ArdourCanvas::Group* transport_marker_group; ArdourCanvas::Group* cd_marker_group; - enum { + enum RulerType { ruler_metric_smpte = 0, ruler_metric_bbt = 1, ruler_metric_frames = 2, @@ -587,7 +588,16 @@ class Editor : public PublicEditor }; static GtkCustomMetric ruler_metrics[4]; - bool ruler_shown[10]; + Glib::RefPtr<Gtk::ToggleAction> ruler_timecode_action; + Glib::RefPtr<Gtk::ToggleAction> ruler_bbt_action; + Glib::RefPtr<Gtk::ToggleAction> ruler_samples_action; + Glib::RefPtr<Gtk::ToggleAction> ruler_minsec_action; + Glib::RefPtr<Gtk::ToggleAction> ruler_tempo_action; + Glib::RefPtr<Gtk::ToggleAction> ruler_meter_action; + Glib::RefPtr<Gtk::ToggleAction> ruler_marker_action; + Glib::RefPtr<Gtk::ToggleAction> ruler_range_action; + Glib::RefPtr<Gtk::ToggleAction> ruler_loop_punch_action; + Glib::RefPtr<Gtk::ToggleAction> ruler_cd_marker_action; bool no_ruler_shown_update; gint ruler_button_press (GdkEventButton*); @@ -604,6 +614,8 @@ class Editor : public PublicEditor void update_tempo_based_rulers (); void popup_ruler_menu (nframes_t where = 0, ItemType type = RegionItem); void update_ruler_visibility (); + void set_ruler_visible (RulerType, bool); + void toggle_ruler_visibility (RulerType rt); void ruler_toggled (int); gint ruler_label_button_release (GdkEventButton*); void store_ruler_visibility (); @@ -2082,6 +2094,17 @@ public: void snap_to_internal (nframes64_t& first, int32_t direction = 0, bool for_mark = false); RhythmFerret* rhythm_ferret; + + void set_track_height (TimeAxisView::TrackHeight h); + void set_track_height_largest (); + void set_track_height_large (); + void set_track_height_larger (); + void set_track_height_normal (); + void set_track_height_smaller (); + void set_track_height_small (); + + void remove_tracks (); + void toggle_tracks_active (); }; #endif /* __ardour_editor_h__ */ diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index efc8f85630..b0cbab3092 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -18,6 +18,7 @@ */ #include <ardour/ardour.h> +#include <ardour/profile.h> #include "utils.h" #include "editor.h" @@ -81,6 +82,8 @@ Editor::register_actions () ActionManager::register_action (editor_actions, X_("Subframes"), _("Subframes")); ActionManager::register_action (editor_actions, X_("TempoMenu"), _("Tempo")); ActionManager::register_action (editor_actions, X_("Timecode"), _("Timecode fps")); + ActionManager::register_action (editor_actions, X_("TrackHeightMenu"), _("Height")); + ActionManager::register_action (editor_actions, X_("TrackMenu"), _("Tracks")); ActionManager::register_action (editor_actions, X_("Tools"), _("Tools")); ActionManager::register_action (editor_actions, X_("TrimMenu"), _("Trim")); ActionManager::register_action (editor_actions, X_("View"), _("View")); @@ -499,6 +502,24 @@ Editor::register_actions () act = ActionManager::register_action (editor_actions, "remove-last-capture", _("Remove Last Capture"), (mem_fun(*this, &Editor::remove_last_capture))); ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "toggle-track-active", _("Toggle Active"), (mem_fun(*this, &Editor::toggle_tracks_active))); + ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "remove-track", _("Remove"), (mem_fun(*this, &Editor::remove_tracks))); + ActionManager::session_sensitive_actions.push_back (act); + + act = ActionManager::register_action (editor_actions, "track-height-largest", _("Largest"), (mem_fun(*this, &Editor::set_track_height_largest))); + ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "track-height-larger", _("Larger"), (mem_fun(*this, &Editor::set_track_height_large))); + ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "track-height-large", _("Large"), (mem_fun(*this, &Editor::set_track_height_larger))); + ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "track-height-normal", _("Normal"), (mem_fun(*this, &Editor::set_track_height_normal))); + ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "track-height-small", _("Small"), (mem_fun(*this, &Editor::set_track_height_smaller))); + ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "track-height-smaller", _("Smaller"), (mem_fun(*this, &Editor::set_track_height_small))); + ActionManager::session_sensitive_actions.push_back (act); + Glib::RefPtr<ActionGroup> zoom_actions = ActionGroup::create (X_("Zoom")); RadioAction::Group zoom_group; @@ -577,17 +598,36 @@ Editor::register_actions () /* RULERS */ Glib::RefPtr<ActionGroup> ruler_actions = ActionGroup::create (X_("Rulers")); - ActionManager::register_toggle_action (ruler_actions, X_("toggle-tempo-ruler"), _("Tempo"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_tempo)); - ActionManager::register_toggle_action (ruler_actions, X_("toggle-meter-ruler"), _("Meter"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_meter)); - ActionManager::register_toggle_action (ruler_actions, X_("toggle-range-ruler"), _("Ranges"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_range_marker)); - ActionManager::register_toggle_action (ruler_actions, X_("toggle-marker-ruler"), _("Markers"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_marker)); - ActionManager::register_toggle_action (ruler_actions, X_("toggle-cd-marker-ruler"), _("CD Markers"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_cd_marker)); - ActionManager::register_toggle_action (ruler_actions, X_("toggle-loop-punch-ruler"), _("Loop/Punch"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_transport_marker)); - ActionManager::register_toggle_action (ruler_actions, X_("toggle-bbt-ruler"), _("Bars & Beats"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_frames)); - ActionManager::register_toggle_action (ruler_actions, X_("toggle-samples-ruler"), _("Samples"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_bbt)); - ActionManager::register_toggle_action (ruler_actions, X_("toggle-timecode-ruler"), _("Timecode"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_smpte)); - ActionManager::register_toggle_action (ruler_actions, X_("toggle-minsec-ruler"), _("Timecode"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_minsec)); - + ruler_tempo_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-tempo-ruler"), _("Tempo"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_tempo))); + ruler_meter_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-meter-ruler"), _("Meter"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_meter))); + ruler_range_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-range-ruler"), _("Ranges"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_range_marker))); + ruler_marker_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-marker-ruler"), _("Markers"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_marker))); + ruler_cd_marker_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-cd-marker-ruler"), _("CD Markers"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_cd_marker))); + ruler_loop_punch_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-loop-punch-ruler"), _("Loop/Punch"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_transport_marker))); + ruler_bbt_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-bbt-ruler"), _("Bars & Beats"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_frames))); + ruler_samples_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-samples-ruler"), _("Samples"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_bbt))); + ruler_timecode_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-timecode-ruler"), _("Timecode"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_smpte))); + ruler_minsec_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-minsec-ruler"), _("Min:Sec"), bind (mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_minsec))); + + /* set defaults here */ + + no_ruler_shown_update = true; + ruler_meter_action->set_active (true); + ruler_tempo_action->set_active (true); + ruler_marker_action->set_active (true); + ruler_range_action->set_active (true); + if (Profile->get_sae()) { + ruler_cd_marker_action->set_active (false); + ruler_timecode_action->set_active (false); + ruler_minsec_action->set_active (true); + } else { + ruler_cd_marker_action->set_active (true); + ruler_timecode_action->set_active (true); + ruler_minsec_action->set_active (false); + } + ruler_samples_action->set_active (false); + no_ruler_shown_update = false; + /* REGION LIST */ Glib::RefPtr<ActionGroup> rl_actions = ActionGroup::create (X_("RegionList")); @@ -697,6 +737,56 @@ Editor::register_actions () } void +Editor::toggle_ruler_visibility (RulerType rt) +{ + char* action = 0; + + if (no_ruler_shown_update) { + return; + } + + switch (rt) { + case ruler_metric_smpte: + action = "toggle-timecode-ruler"; + break; + case ruler_metric_bbt: + action = "toggle-bbt-ruler"; + break; + case ruler_metric_frames: + action = "toggle-samples-ruler"; + break; + case ruler_metric_minsec: + action = "toggle-minsec-ruler"; + break; + case ruler_time_tempo: + action = "toggle-tempo-ruler"; + break; + case ruler_time_meter: + action = "toggle-meter-ruler"; + break; + case ruler_time_marker: + action = "toggle-marker-ruler"; + break; + case ruler_time_range_marker: + action = "toggle-range-ruler"; + break; + case ruler_time_transport_marker: + action = "toggle-loop-punch-ruler"; + break; + case ruler_time_cd_marker: + action = "toggle-cd-marker-ruler"; + break; + } + + Glib::RefPtr<Action> act = ActionManager::get_action (X_("Rulers"), action); + if (act) { + Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act); + update_ruler_visibility (); + store_ruler_visibility (); + } +} + +void Editor::toggle_waveform_visibility () { Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleWaveformVisibility")); diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index 583040d71e..f6af1ae67d 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -79,7 +79,7 @@ Editor::add_new_location (Location *location) if (location->is_mark()) { - if (location->is_cd_marker() && ruler_shown[ruler_time_cd_marker]) { + if (location->is_cd_marker() && ruler_cd_marker_action->get_active()) { lam->start = new Marker (*this, *cd_marker_group, color, location->name(), Marker::Mark, location->start()); } else { @@ -103,7 +103,7 @@ Editor::add_new_location (Location *location) } else { // range marker - if (location->is_cd_marker() && ruler_shown[ruler_time_cd_marker]) { + if (location->is_cd_marker() && ruler_cd_marker_action->get_active()) { lam->start = new Marker (*this, *cd_marker_group, color, location->name(), Marker::Start, location->start()); lam->end = new Marker (*this, *cd_marker_group, color, @@ -212,7 +212,7 @@ void Editor::update_cd_marker_display () void Editor::ensure_cd_marker_updated (LocationMarkers * lam, Location * location) { if (location->is_cd_marker() - && (ruler_shown[ruler_time_cd_marker] && lam->start->get_parent() != cd_marker_group)) + && (ruler_cd_marker_action->get_active() && lam->start->get_parent() != cd_marker_group)) { //cerr << "reparenting non-cd marker so it can be relocated: " << location->name() << endl; if (lam->start) { @@ -222,7 +222,7 @@ void Editor::ensure_cd_marker_updated (LocationMarkers * lam, Location * locatio lam->end->reparent (*cd_marker_group); } } - else if ( (!location->is_cd_marker() || !ruler_shown[ruler_time_cd_marker]) + else if ( (!location->is_cd_marker() || !ruler_cd_marker_action->get_active()) && (lam->start->get_parent() == cd_marker_group)) { //cerr << "reparenting non-cd marker so it can be relocated: " << location->name() << endl; diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 84b2136498..bba155d94e 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -5462,3 +5462,151 @@ Editor::playhead_backward_to_grid () } } +void +Editor::set_track_height (TimeAxisView::TrackHeight h) +{ + TrackSelection& ts (selection->tracks); + + if (ts.empty()) { + return; + } + + for (TrackSelection::iterator x = ts.begin(); x != ts.end(); ++x) { + (*x)->set_height (h); + } +} + +void +Editor::set_track_height_largest () +{ + set_track_height (TimeAxisView::Largest); +} +void +Editor::set_track_height_large () +{ + set_track_height (TimeAxisView::Large); +} +void +Editor::set_track_height_larger () +{ + set_track_height (TimeAxisView::Larger); +} +void +Editor::set_track_height_normal () +{ + set_track_height (TimeAxisView::Normal); +} +void +Editor::set_track_height_smaller () +{ + set_track_height (TimeAxisView::Smaller); +} +void +Editor::set_track_height_small () +{ + set_track_height (TimeAxisView::Small); +} + +void +Editor::toggle_tracks_active () +{ + TrackSelection& ts (selection->tracks); + bool first = true; + bool target = false; + + if (ts.empty()) { + return; + } + + for (TrackSelection::iterator x = ts.begin(); x != ts.end(); ++x) { + RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(*x); + + if (rtv) { + if (first) { + target = !rtv->_route->active(); + first = false; + } + rtv->_route->set_active (target); + } + } +} + +void +Editor::remove_tracks () +{ + TrackSelection& ts (selection->tracks); + + if (ts.empty()) { + return; + } + + vector<string> choices; + string prompt; + int ntracks = 0; + int nbusses = 0; + const char* trackstr; + const char* busstr; + vector<boost::shared_ptr<Route> > routes; + + for (TrackSelection::iterator x = ts.begin(); x != ts.end(); ++x) { + RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*x); + if (rtv) { + if (rtv->is_track()) { + ntracks++; + } else { + nbusses++; + } + } + routes.push_back (rtv->_route); + } + + if (ntracks + nbusses == 0) { + return; + } + + if (ntracks > 1) { + trackstr = _("tracks"); + } else { + trackstr = _("track"); + } + + if (nbusses > 1) { + busstr = _("busses"); + } else { + busstr = _("bus"); + } + + if (ntracks) { + if (nbusses) { + prompt = string_compose (_("Do you really want to remove %1 %2 and %3 %4?\n" + "(You may also lose the playlists associated with the %2)\n\n" + "This action cannot be undone!"), + ntracks, trackstr, nbusses, busstr); + } else { + prompt = string_compose (_("Do you really want to remove %1 %2?\n" + "(You may also lose the playlists associated with the %2)\n\n" + "This action cannot be undone!"), + ntracks, trackstr); + } + } else if (nbusses) { + prompt = string_compose (_("Do you really want to remove %1 %2?"), + nbusses, busstr); + } + + choices.push_back (_("No, do nothing.")); + if (ntracks + nbusses > 1) { + choices.push_back (_("Yes, remove them.")); + } else { + choices.push_back (_("Yes, remove it.")); + } + + Choice prompter (prompt, choices); + + if (prompter.run () != 1) { + return; + } + + for (vector<boost::shared_ptr<Route> >::iterator x = routes.begin(); x != routes.end(); ++x) { + session->remove_route (*x); + } +} diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc index 74fd0aff7e..f75a180335 100644 --- a/gtk2_ardour/editor_rulers.cc +++ b/gtk2_ardour/editor_rulers.cc @@ -22,12 +22,15 @@ #include <string> +#include <gtk/gtkaction.h> + #include <ardour/tempo.h> #include <ardour/profile.h> #include <gtkmm2ext/gtk_ui.h> #include "editor.h" #include "editing.h" +#include "actions.h" #include "gtk-custom-hruler.h" #include "gui_thread.h" @@ -65,14 +68,12 @@ Editor::initialize_rulers () smpte_ruler->set_name ("SMPTERuler"); smpte_ruler->set_size_request (-1, (int)timebar_height); gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_smpte_ruler), &ruler_metrics[ruler_metric_smpte]); - ruler_shown[ruler_metric_smpte] = true; _bbt_ruler = gtk_custom_hruler_new (); bbt_ruler = Glib::wrap (_bbt_ruler); bbt_ruler->set_name ("BBTRuler"); bbt_ruler->set_size_request (-1, (int)timebar_height); gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_bbt_ruler), &ruler_metrics[ruler_metric_bbt]); - ruler_shown[ruler_metric_bbt] = true; _frames_ruler = gtk_custom_hruler_new (); frames_ruler = Glib::wrap (_frames_ruler); @@ -86,19 +87,6 @@ Editor::initialize_rulers () minsec_ruler->set_size_request (-1, (int)timebar_height); gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_minsec_ruler), &ruler_metrics[ruler_metric_minsec]); - ruler_shown[ruler_time_meter] = true; - ruler_shown[ruler_time_tempo] = true; - ruler_shown[ruler_time_marker] = true; - ruler_shown[ruler_time_range_marker] = true; - ruler_shown[ruler_time_transport_marker] = true; - if (Profile->get_sae()) { - ruler_shown[ruler_time_cd_marker] = false; - } else { - ruler_shown[ruler_time_cd_marker] = true; - } - ruler_shown[ruler_metric_frames] = false; - ruler_shown[ruler_metric_minsec] = false; - visible_timebars = 7; /* 4 here, 3 in time_canvas */ ruler_pressed_button = 0; } @@ -260,9 +248,11 @@ Editor::ruler_button_release (GdkEventButton* ev) gint Editor::ruler_label_button_release (GdkEventButton* ev) { - if (ev->button == 3) - { - popup_ruler_menu(); + if (ev->button == 3) { + Gtk::Menu* m= dynamic_cast<Gtk::Menu*> (ActionManager::get_widget (X_("/RulerMenuPopup"))); + if (m) { + m->popup (1, ev->time); + } } return TRUE; @@ -357,10 +347,6 @@ Editor::popup_ruler_menu (nframes_t where, ItemType t) editor_ruler_menu->set_name ("ArdourContextMenu"); ruler_items.clear(); - CheckMenuItem * mitem; - - no_ruler_shown_update = true; - switch (t) { case MarkerBarItem: ruler_items.push_back (MenuElem (_("New location marker"), bind ( mem_fun(*this, &Editor::mouse_add_new_marker), where, false, false))); @@ -400,114 +386,74 @@ Editor::popup_ruler_menu (nframes_t where, ItemType t) default: break; } - - ruler_items.push_back (CheckMenuElem (_("Min:Secs"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_minsec))); - mitem = (CheckMenuItem *) &ruler_items.back(); - if (ruler_shown[ruler_metric_minsec]) { - mitem->set_active(true); - } - ruler_items.push_back (CheckMenuElem (_("Timecode"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_smpte))); - mitem = (CheckMenuItem *) &ruler_items.back(); - if (ruler_shown[ruler_metric_smpte]) { - mitem->set_active(true); - } + Glib::RefPtr<Action> action; - ruler_items.push_back (CheckMenuElem (_("Samples"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_frames))); - mitem = (CheckMenuItem *) &ruler_items.back(); - if (ruler_shown[ruler_metric_frames]) { - mitem->set_active(true); + action = ActionManager::get_action ("Rulers", "toggle-minsec-ruler"); + if (action) { + ruler_items.push_back (MenuElem (*action->create_menu_item())); } - - ruler_items.push_back (CheckMenuElem (_("Bars:Beats"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_bbt))); - mitem = (CheckMenuItem *) &ruler_items.back(); - if (ruler_shown[ruler_metric_bbt]) { - mitem->set_active(true); + if (!Profile->get_sae()) { + action = ActionManager::get_action ("Rulers", "toggle-timecode-ruler"); + if (action) { + ruler_items.push_back (MenuElem (*action->create_menu_item())); + } } - - ruler_items.push_back (SeparatorElem ()); - - ruler_items.push_back (CheckMenuElem (_("Meter"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_meter))); - mitem = (CheckMenuItem *) &ruler_items.back(); - if (ruler_shown[ruler_time_meter]) { - mitem->set_active(true); + action = ActionManager::get_action ("Rulers", "toggle-samples-ruler"); + if (action) { + ruler_items.push_back (MenuElem (*action->create_menu_item())); } - - ruler_items.push_back (CheckMenuElem (_("Tempo"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_tempo))); - mitem = (CheckMenuItem *) &ruler_items.back(); - if (ruler_shown[ruler_time_tempo]) { - mitem->set_active(true); + action = ActionManager::get_action ("Rulers", "toggle-bbt-ruler"); + if (action) { + ruler_items.push_back (MenuElem (*action->create_menu_item())); } - - ruler_items.push_back (CheckMenuElem (_("Location Markers"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_marker))); - mitem = (CheckMenuItem *) &ruler_items.back(); - if (ruler_shown[ruler_time_marker]) { - mitem->set_active(true); + action = ActionManager::get_action ("Rulers", "toggle-meter-ruler"); + if (action) { + ruler_items.push_back (MenuElem (*action->create_menu_item())); + } + action = ActionManager::get_action ("Rulers", "toggle-tempo-ruler"); + if (action) { + ruler_items.push_back (MenuElem (*action->create_menu_item())); + } + action = ActionManager::get_action ("Rulers", "toggle-marker-ruler"); + if (action) { + ruler_items.push_back (MenuElem (*action->create_menu_item())); } - if (!Profile->get_sae()) { - ruler_items.push_back (CheckMenuElem (_("Range Markers"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_range_marker))); - mitem = (CheckMenuItem *) &ruler_items.back(); - if (ruler_shown[ruler_time_range_marker]) { - mitem->set_active(true); + action = ActionManager::get_action ("Rulers", "toggle-range-ruler"); + if (action) { + ruler_items.push_back (MenuElem (*action->create_menu_item())); } } + action = ActionManager::get_action ("Rulers", "toggle-cd-marker-ruler"); + if (action) { + ruler_items.push_back (MenuElem (*action->create_menu_item())); + } + action = ActionManager::get_action ("Rulers", "toggle-loop-punch-ruler"); + if (action) { + ruler_items.push_back (MenuElem (*action->create_menu_item())); + } - ruler_items.push_back (CheckMenuElem (_("CD Markers"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_cd_marker))); - mitem = (CheckMenuItem *) &ruler_items.back(); - if (ruler_shown[ruler_time_cd_marker]) { - mitem->set_active(true); - } - - ruler_items.push_back (CheckMenuElem (_("Loop/Punch Ranges"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_transport_marker))); - mitem = (CheckMenuItem *) &ruler_items.back(); - if (ruler_shown[ruler_time_transport_marker]) { - mitem->set_active(true); - } - editor_ruler_menu->popup (1, gtk_get_current_event_time()); no_ruler_shown_update = false; } void -Editor::ruler_toggled (int ruler) -{ - if (!session) return; - if (ruler < 0 || ruler >= (int) sizeof(ruler_shown)) return; - - if (no_ruler_shown_update) return; - - if (ruler_shown[ruler]) { - if (visible_timebars <= 1) { - // must always have 1 visible - return; - } - } - - ruler_shown[ruler] = !ruler_shown[ruler]; - - update_ruler_visibility (); - - // update session extra RulerVisibility - store_ruler_visibility (); -} - -void Editor::store_ruler_visibility () { XMLNode* node = new XMLNode(X_("RulerVisibility")); - node->add_property (X_("smpte"), ruler_shown[ruler_metric_smpte] ? "yes": "no"); - node->add_property (X_("bbt"), ruler_shown[ruler_metric_bbt] ? "yes": "no"); - node->add_property (X_("frames"), ruler_shown[ruler_metric_frames] ? "yes": "no"); - node->add_property (X_("minsec"), ruler_shown[ruler_metric_minsec] ? "yes": "no"); - node->add_property (X_("tempo"), ruler_shown[ruler_time_tempo] ? "yes": "no"); - node->add_property (X_("meter"), ruler_shown[ruler_time_meter] ? "yes": "no"); - node->add_property (X_("marker"), ruler_shown[ruler_time_marker] ? "yes": "no"); - node->add_property (X_("rangemarker"), ruler_shown[ruler_time_range_marker] ? "yes": "no"); - node->add_property (X_("transportmarker"), ruler_shown[ruler_time_transport_marker] ? "yes": "no"); - node->add_property (X_("cdmarker"), ruler_shown[ruler_time_cd_marker] ? "yes": "no"); + node->add_property (X_("smpte"), ruler_timecode_action->get_active() ? "yes": "no"); + node->add_property (X_("bbt"), ruler_bbt_action->get_active() ? "yes": "no"); + node->add_property (X_("frames"), ruler_samples_action->get_active() ? "yes": "no"); + node->add_property (X_("minsec"), ruler_minsec_action->get_active() ? "yes": "no"); + node->add_property (X_("tempo"), ruler_tempo_action->get_active() ? "yes": "no"); + node->add_property (X_("meter"), ruler_meter_action->get_active() ? "yes": "no"); + node->add_property (X_("marker"), ruler_marker_action->get_active() ? "yes": "no"); + node->add_property (X_("rangemarker"), ruler_range_action->get_active() ? "yes": "no"); + node->add_property (X_("transportmarker"), ruler_loop_punch_action->get_active() ? "yes": "no"); + node->add_property (X_("cdmarker"), ruler_cd_marker_action->get_active() ? "yes": "no"); session->add_extra_xml (*node); session->set_dirty (); @@ -519,92 +465,92 @@ Editor::restore_ruler_visibility () XMLProperty* prop; XMLNode * node = session->extra_xml (X_("RulerVisibility")); + no_ruler_shown_update = true; + if (node) { if ((prop = node->property ("smpte")) != 0) { if (prop->value() == "yes") - ruler_shown[ruler_metric_smpte] = true; + ruler_timecode_action->set_active (true); else - ruler_shown[ruler_metric_smpte] = false; + ruler_timecode_action->set_active (false); } if ((prop = node->property ("bbt")) != 0) { if (prop->value() == "yes") - ruler_shown[ruler_metric_bbt] = true; + ruler_bbt_action->set_active (true); else - ruler_shown[ruler_metric_bbt] = false; + ruler_bbt_action->set_active (false); } if ((prop = node->property ("frames")) != 0) { if (prop->value() == "yes") - ruler_shown[ruler_metric_frames] = true; + ruler_samples_action->set_active (true); else - ruler_shown[ruler_metric_frames] = false; + ruler_samples_action->set_active (false); } if ((prop = node->property ("minsec")) != 0) { if (prop->value() == "yes") - ruler_shown[ruler_metric_minsec] = true; + ruler_minsec_action->set_active (true); else - ruler_shown[ruler_metric_minsec] = false; + ruler_minsec_action->set_active (false); } if ((prop = node->property ("tempo")) != 0) { if (prop->value() == "yes") - ruler_shown[ruler_time_tempo] = true; + ruler_tempo_action->set_active (true); else - ruler_shown[ruler_time_tempo] = false; + ruler_tempo_action->set_active (false); } if ((prop = node->property ("meter")) != 0) { if (prop->value() == "yes") - ruler_shown[ruler_time_meter] = true; + ruler_meter_action->set_active (true); else - ruler_shown[ruler_time_meter] = false; + ruler_meter_action->set_active (false); } if ((prop = node->property ("marker")) != 0) { if (prop->value() == "yes") - ruler_shown[ruler_time_marker] = true; + ruler_marker_action->set_active (true); else - ruler_shown[ruler_time_marker] = false; + ruler_marker_action->set_active (false); } if ((prop = node->property ("rangemarker")) != 0) { if (prop->value() == "yes") - ruler_shown[ruler_time_range_marker] = true; + ruler_range_action->set_active (true); else - ruler_shown[ruler_time_range_marker] = false; + ruler_range_action->set_active (false); } if ((prop = node->property ("transportmarker")) != 0) { if (prop->value() == "yes") - ruler_shown[ruler_time_transport_marker] = true; + ruler_loop_punch_action->set_active (true); else - ruler_shown[ruler_time_transport_marker] = false; + ruler_loop_punch_action->set_active (false); } if ((prop = node->property ("cdmarker")) != 0) { if (prop->value() == "yes") - ruler_shown[ruler_time_cd_marker] = true; + ruler_cd_marker_action->set_active (true); else - ruler_shown[ruler_time_cd_marker] = false; - - cerr << "cd marker ruler set to " << ruler_shown[ruler_time_cd_marker] << endl; + ruler_cd_marker_action->set_active (false); } else { // this session doesn't yet know about the cdmarker ruler // as a benefit to the user who doesn't know the feature exists, show the ruler if // any cd marks exist - ruler_shown[ruler_time_cd_marker] = false; + ruler_cd_marker_action->set_active (false); const Locations::LocationList & locs = session->locations()->list(); for (Locations::LocationList::const_iterator i = locs.begin(); i != locs.end(); ++i) { if ((*i)->is_cd_marker()) { - ruler_shown[ruler_time_cd_marker] = true; + ruler_cd_marker_action->set_active (true); break; } } - cerr << "cd marker ruler default to " << ruler_shown[ruler_time_cd_marker] << endl; } } + no_ruler_shown_update = false; + update_ruler_visibility (); } - void Editor::update_ruler_visibility () { @@ -612,6 +558,10 @@ Editor::update_ruler_visibility () BoxList & lab_children = time_button_vbox.children(); BoxList & ruler_children = time_canvas_vbox.children(); + if (no_ruler_shown_update) { + return; + } + visible_timebars = 0; lab_children.clear(); @@ -674,25 +624,25 @@ Editor::update_ruler_visibility () ruler_children.insert (canvaspos, Element(*_ruler_separator, PACK_SHRINK, PACK_START)); - if (ruler_shown[ruler_metric_minsec]) { + if (ruler_minsec_action->get_active()) { lab_children.push_back (Element(minsec_label, PACK_SHRINK, PACK_START)); ruler_children.insert (canvaspos, Element(*minsec_ruler, PACK_SHRINK, PACK_START)); visible_timebars++; } - if (ruler_shown[ruler_metric_smpte]) { + if (ruler_timecode_action->get_active()) { lab_children.push_back (Element(smpte_label, PACK_SHRINK, PACK_START)); ruler_children.insert (canvaspos, Element(*smpte_ruler, PACK_SHRINK, PACK_START)); visible_timebars++; } - if (ruler_shown[ruler_metric_frames]) { + if (ruler_samples_action->get_active()) { lab_children.push_back (Element(frame_label, PACK_SHRINK, PACK_START)); ruler_children.insert (canvaspos, Element(*frames_ruler, PACK_SHRINK, PACK_START)); visible_timebars++; } - if (ruler_shown[ruler_metric_bbt]) { + if (ruler_bbt_action->get_active()) { lab_children.push_back (Element(bbt_label, PACK_SHRINK, PACK_START)); ruler_children.insert (canvaspos, Element(*bbt_ruler, PACK_SHRINK, PACK_START)); visible_timebars++; @@ -701,7 +651,7 @@ Editor::update_ruler_visibility () double tbpos = 1.0; double old_unit_pos ; - if (ruler_shown[ruler_time_meter]) { + if (ruler_meter_action->get_active()) { lab_children.push_back (Element(meter_label, PACK_SHRINK, PACK_START)); old_unit_pos = meter_group->property_y(); @@ -716,7 +666,7 @@ Editor::update_ruler_visibility () meter_group->hide(); } - if (ruler_shown[ruler_time_tempo]) { + if (ruler_tempo_action->get_active()) { lab_children.push_back (Element(tempo_label, PACK_SHRINK, PACK_START)); old_unit_pos = tempo_group->property_y(); if (tbpos != old_unit_pos) { @@ -730,7 +680,7 @@ Editor::update_ruler_visibility () tempo_group->hide(); } - if (!Profile->get_sae() && ruler_shown[ruler_time_range_marker]) { + if (!Profile->get_sae() && ruler_range_action->get_active()) { lab_children.push_back (Element(range_mark_label, PACK_SHRINK, PACK_START)); old_unit_pos = range_marker_group->property_y(); if (tbpos != old_unit_pos) { @@ -743,7 +693,7 @@ Editor::update_ruler_visibility () range_marker_group->hide(); } - if (ruler_shown[ruler_time_transport_marker]) { + if (ruler_loop_punch_action->get_active()) { lab_children.push_back (Element(transport_mark_label, PACK_SHRINK, PACK_START)); old_unit_pos = transport_marker_group->property_y(); if (tbpos != old_unit_pos) { @@ -757,7 +707,7 @@ Editor::update_ruler_visibility () transport_marker_group->hide(); } - if (ruler_shown[ruler_time_cd_marker]) { + if (ruler_cd_marker_action->get_active()) { lab_children.push_back (Element(cd_mark_label, PACK_SHRINK, PACK_START)); old_unit_pos = cd_marker_group->property_y(); if (tbpos != old_unit_pos) { @@ -775,7 +725,7 @@ Editor::update_ruler_visibility () update_cd_marker_display(); } - if (ruler_shown[ruler_time_marker]) { + if (ruler_marker_action->get_active()) { lab_children.push_back (Element(mark_label, PACK_SHRINK, PACK_START)); old_unit_pos = marker_group->property_y(); if (tbpos != old_unit_pos) { @@ -811,7 +761,7 @@ Editor::update_just_smpte () nframes_t rightmost_frame = leftmost_frame + current_page_frames(); - if (ruler_shown[ruler_metric_smpte]) { + if (ruler_timecode_action->get_active()) { gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_smpte_ruler), leftmost_frame, rightmost_frame, leftmost_frame, session->current_end_frame()); } @@ -836,17 +786,17 @@ Editor::update_fixed_rulers () to compute the relevant ticks to display. */ - if (ruler_shown[ruler_metric_smpte]) { + if (ruler_timecode_action->get_active()) { gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_smpte_ruler), leftmost_frame, rightmost_frame, leftmost_frame, session->current_end_frame()); } - if (ruler_shown[ruler_metric_frames]) { + if (ruler_samples_action->get_active()) { gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_frames_ruler), leftmost_frame, rightmost_frame, leftmost_frame, session->current_end_frame()); } - if (ruler_shown[ruler_metric_minsec]) { + if (ruler_minsec_action->get_active()) { gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_minsec_ruler), leftmost_frame, rightmost_frame, leftmost_frame, session->current_end_frame()); } @@ -861,7 +811,7 @@ Editor::update_tempo_based_rulers () ruler_metrics[ruler_metric_bbt].units_per_pixel = frames_per_unit; - if (ruler_shown[ruler_metric_bbt]) { + if (ruler_bbt_action->get_active()) { gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_bbt_ruler), leftmost_frame, leftmost_frame+current_page_frames(), leftmost_frame, session->current_end_frame()); } diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index e5bf67389a..ba12ca0a33 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -25,6 +25,7 @@ #include <ardour/diskstream.h> #include <ardour/playlist.h> #include <ardour/route_group.h> +#include <ardour/profile.h> #include "editor.h" #include "actions.h" @@ -768,6 +769,10 @@ Editor::track_selection_changed () void Editor::time_selection_changed () { + if (Profile->get_sae()) { + return; + } + for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { (*i)->hide_selection (); } @@ -985,7 +990,9 @@ Editor::set_selection_from_audio_region () } selection->set (0, selection->regions.start(), selection->regions.end_frame()); - set_mouse_mode (Editing::MouseRange, false); + if (!Profile->get_sae()) { + set_mouse_mode (Editing::MouseRange, false); + } } void @@ -1018,7 +1025,9 @@ Editor::set_selection_from_range (Location& loc) selection->set (0, loc.start(), loc.end()); commit_reversible_command (); - set_mouse_mode (Editing::MouseRange, false); + if (!Profile->get_sae()) { + set_mouse_mode (Editing::MouseRange, false); + } } void diff --git a/gtk2_ardour/splash.cc b/gtk2_ardour/splash.cc index 1cf15cdef7..1ed991f74b 100644 --- a/gtk2_ardour/splash.cc +++ b/gtk2_ardour/splash.cc @@ -116,10 +116,11 @@ Splash::message (const string& msg) str += "</b>"; layout->set_markup (str); - darea.queue_draw (); - Glib::RefPtr<Gdk::Window> win = darea.get_window(); + if (win) { + win->invalidate_rect (Gdk::Rectangle (0, darea.get_height() - 30, + darea.get_width(), 30), true); win->process_updates (true); gdk_flush (); } |