X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor.cc;h=210f6350befe8e38c7ab4f938a0f15c9987b69e8;hb=631629b8e7d3ca826fc55901653c1c795a8a5083;hp=41cad5b64cbb6b251037b93740a06581339c66d1;hpb=285ec18aa50ab7dafe1d727d20b1c0359cd9c590;p=ardour.git diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 41cad5b64c..210f6350be 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -57,13 +57,10 @@ #include #include "gtkmm2ext/bindings.h" -#include "gtkmm2ext/eventboxext.h" -#include "gtkmm2ext/grouped_buttons.h" #include "gtkmm2ext/gtk_ui.h" -#include +#include "gtkmm2ext/keyboard.h" #include "gtkmm2ext/utils.h" #include "gtkmm2ext/window_title.h" -#include "gtkmm2ext/choice.h" #include "gtkmm2ext/cell_renderer_pixbuf_toggle.h" #include "ardour/analysis_graph.h" @@ -84,11 +81,14 @@ #include "canvas/debug.h" #include "canvas/text.h" +#include "widgets/ardour_spacer.h" +#include "widgets/eventboxext.h" +#include "widgets/tooltips.h" + #include "control_protocol/control_protocol.h" #include "actions.h" #include "analysis_window.h" -#include "ardour_spacer.h" #include "audio_clock.h" #include "audio_region_view.h" #include "audio_streamview.h" @@ -137,7 +137,6 @@ #include "time_axis_view.h" #include "time_info_box.h" #include "timers.h" -#include "tooltips.h" #include "ui_config.h" #include "utils.h" #include "vca_time_axis.h" @@ -147,6 +146,7 @@ using namespace std; using namespace ARDOUR; +using namespace ArdourWidgets; using namespace ARDOUR_UI_UTILS; using namespace PBD; using namespace Gtk; @@ -302,9 +302,11 @@ Editor::Editor () , minsec_mark_interval (0) , minsec_mark_modulo (0) , minsec_nmarks (0) + , timecode_ruler_scale (timecode_show_many_hours) , timecode_mark_modulo (0) , timecode_nmarks (0) , _samples_ruler_interval (0) + , bbt_ruler_scale (bbt_show_many) , bbt_bars (0) , bbt_nmarks (0) , bbt_bar_helper_on (0) @@ -351,7 +353,7 @@ Editor::Editor () , cut_buffer_start (0) , cut_buffer_length (0) , button_bindings (0) - , last_paste_pos (0) + , last_paste_pos (-1) , paste_count (0) , sfbrowser (0) , current_interthread_info (0) @@ -684,33 +686,21 @@ Editor::Editor () editor_summary_pane.set_check_divider_position (true); editor_summary_pane.add (edit_packer); - Button* summary_arrows_left_left = manage (new Button); - summary_arrows_left_left->add (*manage (new Arrow (ARROW_LEFT, SHADOW_NONE))); - summary_arrows_left_left->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*this, &Editor::scroll_press), LEFT))); - summary_arrows_left_left->signal_released().connect (sigc::mem_fun (*this, &Editor::scroll_release)); + Button* summary_arrow_left = manage (new Button); + summary_arrow_left->add (*manage (new Arrow (ARROW_LEFT, SHADOW_NONE))); + summary_arrow_left->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*this, &Editor::scroll_press), LEFT))); + summary_arrow_left->signal_released().connect (sigc::mem_fun (*this, &Editor::scroll_release)); - Button* summary_arrows_left_right = manage (new Button); - summary_arrows_left_right->add (*manage (new Arrow (ARROW_RIGHT, SHADOW_NONE))); - summary_arrows_left_right->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*this, &Editor::scroll_press), RIGHT))); - summary_arrows_left_right->signal_released().connect (sigc::mem_fun (*this, &Editor::scroll_release)); + Button* summary_arrow_right = manage (new Button); + summary_arrow_right->add (*manage (new Arrow (ARROW_RIGHT, SHADOW_NONE))); + summary_arrow_right->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*this, &Editor::scroll_press), RIGHT))); + summary_arrow_right->signal_released().connect (sigc::mem_fun (*this, &Editor::scroll_release)); VBox* summary_arrows_left = manage (new VBox); - summary_arrows_left->pack_start (*summary_arrows_left_left); - summary_arrows_left->pack_start (*summary_arrows_left_right); - - Button* summary_arrows_right_up = manage (new Button); - summary_arrows_right_up->add (*manage (new Arrow (ARROW_UP, SHADOW_NONE))); - summary_arrows_right_up->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*this, &Editor::scroll_press), UP))); - summary_arrows_right_up->signal_released().connect (sigc::mem_fun (*this, &Editor::scroll_release)); - - Button* summary_arrows_right_down = manage (new Button); - summary_arrows_right_down->add (*manage (new Arrow (ARROW_DOWN, SHADOW_NONE))); - summary_arrows_right_down->signal_pressed().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*this, &Editor::scroll_press), DOWN))); - summary_arrows_right_down->signal_released().connect (sigc::mem_fun (*this, &Editor::scroll_release)); + summary_arrows_left->pack_start (*summary_arrow_left); VBox* summary_arrows_right = manage (new VBox); - summary_arrows_right->pack_start (*summary_arrows_right_up); - summary_arrows_right->pack_start (*summary_arrows_right_down); + summary_arrows_right->pack_start (*summary_arrow_right); Frame* summary_frame = manage (new Frame); summary_frame->set_shadow_type (Gtk::SHADOW_ETCHED_IN); @@ -760,11 +750,11 @@ Editor::Editor () ebox->set_name("EditorWindow"); ebox->add (toolbar_hbox); - Gtk::EventBox* epane_box = manage (new Gtkmm2ext::EventBoxExt); //a themeable box + Gtk::EventBox* epane_box = manage (new EventBoxExt); //a themeable box epane_box->set_name("EditorWindow"); epane_box->add (edit_pane); - Gtk::EventBox* epane_box2 = manage (new Gtkmm2ext::EventBoxExt); //a themeable box + Gtk::EventBox* epane_box2 = manage (new EventBoxExt); //a themeable box epane_box2->set_name("EditorWindow"); epane_box2->add (global_vpacker); @@ -845,16 +835,16 @@ Editor::Editor () _show_marker_lines = false; - /* Button bindings */ + /* Button bindings */ button_bindings = new Bindings ("editor-mouse"); XMLNode* node = button_settings(); - if (node) { - for (XMLNodeList::const_iterator i = node->children().begin(); i != node->children().end(); ++i) { - button_bindings->load_operation (**i); - } - } + if (node) { + for (XMLNodeList::const_iterator i = node->children().begin(); i != node->children().end(); ++i) { + button_bindings->load_operation (**i); + } + } constructed = true; @@ -1142,7 +1132,7 @@ Editor::deferred_control_scroll (framepos_t /*target*/) } void -Editor::access_action (std::string action_group, std::string action_item) +Editor::access_action (const std::string& action_group, const std::string& action_item) { if (!_session) { return; @@ -1158,6 +1148,12 @@ Editor::access_action (std::string action_group, std::string action_item) } } +void +Editor::set_toggleaction (const std::string& action_group, const std::string& action_item, bool s) +{ + ActionManager::set_toggleaction_state (action_group.c_str(), action_item.c_str(), s); +} + void Editor::on_realize () { @@ -1323,6 +1319,10 @@ Editor::set_session (Session *t) return; } + //initialize leftmost_frame to the extents of the session + //this prevents a bogus setting of leftmost = "0" if the summary view asks for the leftmost frame before the visible state has been loaded from instant.xml + leftmost_frame = session_gui_extents().first; + _playlist_selector->set_session (_session); nudge_clock->set_session (_session); _summary->set_session (_session); @@ -1888,20 +1888,10 @@ Editor::add_region_context_items (Menu_Helpers::MenuList& edit_items, boost::sha RegionSelection rs = get_regions_from_selection_and_entered (); - string::size_type pos = 0; string menu_item_name = (rs.size() == 1) ? rs.front()->region()->name() : _("Selected Regions"); - /* we have to hack up the region name because "_" has a special - meaning for menu titles. - */ - - while ((pos = menu_item_name.find ("_", pos)) != string::npos) { - menu_item_name.replace (pos, 1, "__"); - pos += 2; - } - if (_popup_region_menu_item == 0) { - _popup_region_menu_item = new MenuItem (menu_item_name); + _popup_region_menu_item = new MenuItem (menu_item_name, false); _popup_region_menu_item->set_submenu (*dynamic_cast (ActionManager::get_widget (X_("/PopupRegionMenu")))); _popup_region_menu_item->show (); } else { @@ -3792,6 +3782,7 @@ Editor::build_track_count_menu () zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to 8 hours"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), 8 * 60 * 60 * 1000))); zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to 24 hours"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), 24 * 60 * 60 * 1000))); zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to Session"), sigc::mem_fun(*this, &Editor::temporal_zoom_session))); + zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to Extents"), sigc::mem_fun(*this, &Editor::temporal_zoom_extents))); zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to Range/Region Selection"), sigc::bind (sigc::mem_fun(*this, &Editor::temporal_zoom_selection), Horizontal))); } } @@ -3834,11 +3825,21 @@ Editor::set_visible_track_count (int32_t n) str = s.str(); } else if (_visible_track_count == 0) { uint32_t n = 0; - for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { + for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i) { if ((*i)->marked_for_display()) { ++n; + TimeAxisView::Children cl ((*i)->get_child_list ()); + for (TimeAxisView::Children::const_iterator j = cl.begin(); j != cl.end(); ++j) { + if ((*j)->marked_for_display()) { + ++n; + } + } } } + if (n == 0) { + visible_tracks_selector.set_text (X_("*")); + return; + } h = trackviews_height() / n; str = _("All"); } else { @@ -4716,7 +4717,7 @@ Editor::get_preferred_edit_position (EditIgnoreOption ignore, bool from_context_ } if (entered_marker) { - DEBUG_TRACE (DEBUG::CutNPaste, string_compose ("GPEP: use entered marker @ %1\n", entered_marker->position())); + DEBUG_TRACE (DEBUG::CutNPaste, string_compose ("GPEP: use entered marker @ %1\n", entered_marker->position())); return entered_marker->position(); } @@ -4737,7 +4738,7 @@ Editor::get_preferred_edit_position (EditIgnoreOption ignore, bool from_context_ } else { where = _session->audible_frame(); } - DEBUG_TRACE (DEBUG::CutNPaste, string_compose ("GPEP: use playhead @ %1\n", where)); + DEBUG_TRACE (DEBUG::CutNPaste, string_compose ("GPEP: use playhead @ %1\n", where)); break; case EditAtSelectedMarker: @@ -4750,7 +4751,7 @@ Editor::get_preferred_edit_position (EditIgnoreOption ignore, bool from_context_ } else { where = loc->end(); } - DEBUG_TRACE (DEBUG::CutNPaste, string_compose ("GPEP: use selected marker @ %1\n", where)); + DEBUG_TRACE (DEBUG::CutNPaste, string_compose ("GPEP: use selected marker @ %1\n", where)); break; } } @@ -4765,7 +4766,7 @@ Editor::get_preferred_edit_position (EditIgnoreOption ignore, bool from_context_ snap_mf.frame = where; snap_to (snap_mf); where = snap_mf.frame; - DEBUG_TRACE (DEBUG::CutNPaste, string_compose ("GPEP: use mouse @ %1\n", where)); + DEBUG_TRACE (DEBUG::CutNPaste, string_compose ("GPEP: use mouse @ %1\n", where)); break; } @@ -5562,15 +5563,15 @@ Editor::foreach_time_axis_view (sigc::slot theslot) } } -/** Find a RouteTimeAxisView by the ID of its route */ -RouteTimeAxisView* -Editor::get_route_view_by_route_id (const PBD::ID& id) const +/** Find a StripableTimeAxisView by the ID of its stripable */ +StripableTimeAxisView* +Editor::get_stripable_time_axis_by_id (const PBD::ID& id) const { - RouteTimeAxisView* v; + StripableTimeAxisView* v; for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i) { - if((v = dynamic_cast(*i)) != 0) { - if(v->route()->id() == id) { + if((v = dynamic_cast(*i)) != 0) { + if(v->stripable()->id() == id) { return v; } }