X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor.cc;h=630499a9c4645b0d6f5bb15583612e4e11179550;hb=061a85191c301ac18f2e8ca59d43127a4499ba96;hp=730b6e0fab29ba9f62d23484bf994be0180c08bd;hpb=d1624f9ed2c5197e7302904ab69996ba897b9ce8;p=ardour.git diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 730b6e0fab..630499a9c4 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -220,6 +220,27 @@ show_me_the_size (Requisition* r, const char* what) cerr << "size of " << what << " = " << r->width << " x " << r->height << endl; } +#ifdef GTKOSX +static void +pane_size_watcher (Paned* pane) +{ + /* if the handle of a pane vanishes into (at least) the tabs of a notebook, + it is no longer accessible. so stop that. this doesn't happen on X11, + just the quartz backend. + + ugh. + */ + + int max_width_of_lhs = GTK_WIDGET(pane->gobj())->allocation.width - 25; + + gint pos = pane->get_position (); + + if (pos > max_width_of_lhs) { + pane->set_position (max_width_of_lhs); + } +} +#endif + Editor::Editor () : _join_object_range_state (JOIN_OBJECT_RANGE_NONE) @@ -304,14 +325,12 @@ Editor::Editor () last_autoscroll_y = 0; autoscroll_active = false; autoscroll_timeout_tag = -1; - interthread_progress_window = 0; logo_item = 0; analysis_window = 0; current_interthread_info = 0; _show_measures = true; - _show_waveforms_recording = true; show_gain_after_trim = false; verbose_cursor_on = true; last_item_entered = 0; @@ -324,7 +343,7 @@ Editor::Editor () editor_ruler_menu = 0; no_ruler_shown_update = false; marker_menu = 0; - start_end_marker_menu = 0; + session_range_marker_menu = 0; range_marker_menu = 0; marker_menu_item = 0; tm_marker_menu = 0; @@ -589,7 +608,10 @@ Editor::Editor () edit_pane.pack2 (the_notebook, false, true); edit_pane.signal_size_allocate().connect (sigc::bind (sigc::mem_fun(*this, &Editor::pane_allocation_handler), static_cast (&edit_pane))); - +#ifdef GTKOSX + Glib::PropertyProxy proxy = edit_pane.property_position(); + proxy.signal_changed().connect (bind (sigc::ptr_fun (pane_size_watcher), static_cast (&edit_pane))); +#endif top_hbox.pack_start (toolbar_frame, false, true); HBox *hbox = manage (new HBox); @@ -1082,7 +1104,7 @@ Editor::set_session (Session *t) _session->locations()->removed.connect (_session_connections, invalidator (*this), ui_bind (&Editor::location_gone, this, _1), gui_context()); _session->locations()->changed.connect (_session_connections, invalidator (*this), boost::bind (&Editor::refresh_location_display, this), gui_context()); _session->locations()->StateChanged.connect (_session_connections, invalidator (*this), ui_bind (&Editor::refresh_location_display_s, this, _1), gui_context()); - _session->locations()->end_location()->changed.connect (_session_connections, invalidator (*this), ui_bind (&Editor::end_location_changed, this, _1), gui_context()); + _session->locations()->session_range_location()->changed.connect (_session_connections, invalidator (*this), ui_bind (&Editor::session_range_location_changed, this, _1), gui_context()); _session->history().Changed.connect (_session_connections, invalidator (*this), boost::bind (&Editor::history_changed, this), gui_context()); if (Profile->get_sae()) { @@ -1336,7 +1358,7 @@ Editor::popup_track_context_menu (int button, int32_t time, ItemType item_type, break; case StreamItem: - if (clicked_routeview->get_diskstream()) { + if (clicked_routeview->track()) { build_menu_function = &Editor::build_track_context_menu; } else { build_menu_function = &Editor::build_track_bus_context_menu; @@ -1458,11 +1480,11 @@ Editor::build_track_region_context_menu (nframes64_t frame) RouteTimeAxisView* rtv = dynamic_cast (clicked_axisview); if (rtv) { - boost::shared_ptr ds; + boost::shared_ptr tr; boost::shared_ptr pl; - if ((ds = rtv->get_diskstream()) && ((pl = ds->playlist()))) { - Playlist::RegionList* regions = pl->regions_at ((nframes64_t) floor ( (double)frame * ds->speed())); + if ((tr = rtv->track()) && ((pl = tr->playlist()))) { + Playlist::RegionList* regions = pl->regions_at ((nframes64_t) floor ( (double)frame * tr->speed())); if (selection->regions.size() > 1) { // there's already a multiple selection: just add a @@ -1471,7 +1493,7 @@ Editor::build_track_region_context_menu (nframes64_t frame) boost::shared_ptr dummy_region; // = NULL add_region_context_items (rtv->view(), dummy_region, edit_items); } else { - for (Playlist::RegionList::iterator i = regions->begin(); i != regions->end(); ++i) { + for (Playlist::RegionList::reverse_iterator i = regions->rbegin(); i != regions->rend(); ++i) { add_region_context_items (rtv->view(), (*i), edit_items); } } @@ -1495,11 +1517,11 @@ Editor::build_track_crossfade_context_menu (nframes64_t frame) AudioTimeAxisView* atv = dynamic_cast (clicked_axisview); if (atv) { - boost::shared_ptr ds; + boost::shared_ptr tr; boost::shared_ptr pl; boost::shared_ptr apl; - if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()) != 0) && ((apl = boost::dynamic_pointer_cast (pl)) != 0)) { + if ((tr = atv->track()) && ((pl = tr->playlist()) != 0) && ((apl = boost::dynamic_pointer_cast (pl)) != 0)) { Playlist::RegionList* regions = pl->regions_at (frame); AudioPlaylist::Crossfades xfades; @@ -1519,7 +1541,7 @@ Editor::build_track_crossfade_context_menu (nframes64_t frame) boost::shared_ptr dummy_region; // = NULL add_region_context_items (atv->audio_view(), dummy_region, edit_items); } else { - for (Playlist::RegionList::iterator i = regions->begin(); i != regions->end(); ++i) { + for (Playlist::RegionList::reverse_iterator i = regions->rbegin(); i != regions->rend(); ++i) { add_region_context_items (atv->audio_view(), (*i), edit_items); } } @@ -2309,18 +2331,6 @@ Editor::set_state (const XMLNode& node, int /*version*/) set_edit_point_preference ((EditPoint) string_2_enum (prop->value(), _edit_point), true); } - if ((prop = node.property ("show-waveforms-recording"))) { - bool yn = string_is_affirmative (prop->value()); - _show_waveforms_recording = !yn; - RefPtr act = ActionManager::get_action (X_("Editor"), X_("ToggleWaveformsWhileRecording")); - if (act) { - RefPtr tact = RefPtr::cast_dynamic(act); - /* do it twice to force the change */ - tact->set_active (!yn); - tact->set_active (yn); - } - } - if ((prop = node.property ("show-measures"))) { bool yn = string_is_affirmative (prop->value()); _show_measures = !yn; @@ -2399,6 +2409,13 @@ Editor::set_state (const XMLNode& node, int /*version*/) } } + if ((prop = node.property (X_("editor-list-page")))) { + the_notebook.set_current_page (atoi (prop->value ())); + } + + if ((prop = node.property (X_("editor-pane-position")))) { + edit_pane.set_position (atoi (prop->value ())); + } return 0; } @@ -2460,7 +2477,6 @@ Editor::get_state () snprintf (buf, sizeof (buf), "%f", vertical_adjustment.get_value ()); node->add_property ("y-origin", buf); - node->add_property ("show-waveforms-recording", _show_waveforms_recording ? "yes" : "no"); node->add_property ("show-measures", _show_measures ? "yes" : "no"); node->add_property ("follow-playhead", _follow_playhead ? "yes" : "no"); node->add_property ("stationary-playhead", _stationary_playhead ? "yes" : "no"); @@ -2482,6 +2498,12 @@ Editor::get_state () node->add_property (X_("show-editor-list"), tact->get_active() ? "yes" : "no"); } + snprintf (buf, sizeof (buf), "%d", the_notebook.get_current_page ()); + node->add_property (X_("editor-list-page"), buf); + + snprintf (buf, sizeof (buf), "%d", edit_pane.get_position ()); + node->add_property (X_("editor-pane-position"), buf); + return *node; } @@ -3253,8 +3275,8 @@ Editor::duplicate_dialog (bool with_dialog) if (with_dialog) { - ArdourDialog win ("Duplicate"); - Label label (_("Number of Duplications:")); + ArdourDialog win (_("Duplicate")); + Label label (_("Number of Duplications:")); Adjustment adjustment (1.0, 1.0, 1000000.0, 1.0, 5.0); SpinButton spinner (adjustment, 0.0, 1); HBox hbox; @@ -3850,11 +3872,11 @@ Editor::get_nudge_distance (nframes64_t pos, nframes64_t& next) } void -Editor::end_location_changed (Location* location) +Editor::session_range_location_changed (Location* location) { - ENSURE_GUI_THREAD (*this, &Editor::end_location_changed, location) + ENSURE_GUI_THREAD (*this, &Editor::session_range_location_changed, location) //reset_scrolling_region (); - nframes64_t session_span = location->start() + (nframes64_t) floorf (current_page_frames() * 0.10f); + nframes64_t const session_span = location->end() + (nframes64_t) floorf (current_page_frames() * 0.10f); horizontal_adjustment.set_upper (session_span / frames_per_unit); } @@ -4515,13 +4537,13 @@ Editor::get_regions_at (RegionSelection& rs, nframes64_t where, const TrackViewL for (TrackViewList::const_iterator t = tracks->begin(); t != tracks->end(); ++t) { RouteTimeAxisView* rtv = dynamic_cast(*t); if (rtv) { - boost::shared_ptr ds; + boost::shared_ptr tr; boost::shared_ptr pl; - if ((ds = rtv->get_diskstream()) && ((pl = ds->playlist()))) { + if ((tr = rtv->track()) && ((pl = tr->playlist()))) { Playlist::RegionList* regions = pl->regions_at ( - (nframes64_t) floor ( (double)where * ds->speed())); + (nframes64_t) floor ( (double)where * tr->speed())); for (Playlist::RegionList::iterator i = regions->begin(); i != regions->end(); ++i) { RegionView* rv = rtv->view()->find_view (*i); @@ -4550,13 +4572,13 @@ Editor::get_regions_after (RegionSelection& rs, nframes64_t where, const TrackVi for (TrackViewList::const_iterator t = tracks->begin(); t != tracks->end(); ++t) { RouteTimeAxisView* rtv = dynamic_cast(*t); if (rtv) { - boost::shared_ptr ds; + boost::shared_ptr tr; boost::shared_ptr pl; - if ((ds = rtv->get_diskstream()) && ((pl = ds->playlist()))) { + if ((tr = rtv->track()) && ((pl = tr->playlist()))) { Playlist::RegionList* regions = pl->regions_touched ( - (nframes64_t) floor ( (double)where * ds->speed()), max_frames); + (nframes64_t) floor ( (double)where * tr->speed()), max_frames); for (Playlist::RegionList::iterator i = regions->begin(); i != regions->end(); ++i) { @@ -4628,14 +4650,14 @@ Editor::get_regions_corresponding_to (boost::shared_ptr region, vector pl; vector > results; RegionView* marv; - boost::shared_ptr ds; + boost::shared_ptr tr; - if ((ds = tatv->get_diskstream()) == 0) { + if ((tr = tatv->track()) == 0) { /* bus */ continue; } - if ((pl = (ds->playlist())) != 0) { + if ((pl = (tr->playlist())) != 0) { pl->get_region_list_equivalent_regions (region, results); }