X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Ftime_axis_view.cc;h=2a0087dc2ccd2798804ce4f2cb361db67a4d5b30;hb=691b0c10ac8089efa015e88513d309768fe0f44b;hp=f3f96e4065b97b125c3a57de15ad9466181924d0;hpb=f0484eee892027e50c2132efbaddbf974147345d;p=ardour.git diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index f3f96e4065..2a0087dc2c 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include @@ -128,6 +127,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie controls_table.attach (name_hbox, 0, 4, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND); controls_table.show_all (); + controls_table.set_no_show_all (); controls_vbox.pack_start (controls_table, false, false); controls_vbox.show (); @@ -233,7 +233,7 @@ TimeAxisView::show_at (double y, int& nth, VBox *parent) if (canvas_item_visible ((*i)->canvas_display)) { ++nth; - effective_height += (*i)->show_at (y + effective_height, nth, parent); + effective_height += (*i)->show_at (y + 1 + effective_height, nth, parent); } } @@ -285,18 +285,8 @@ TimeAxisView::controls_ebox_button_release (GdkEventButton* ev) void TimeAxisView::selection_click (GdkEventButton* ev) { - if (Keyboard::modifier_state_contains (ev->state, Keyboard::Shift)) { - - if (editor.get_selection().selected (this)) { - editor.get_selection().remove (this); - } else { - editor.get_selection().add (this); - } - - } else { - - editor.get_selection().set (this); - } + Selection::Operation op = Keyboard::selection_type (ev->state); + editor.set_selected_track (*this, op, false); } void @@ -382,8 +372,48 @@ TimeAxisView::set_height_pixels (uint32_t h) bool TimeAxisView::name_entry_key_release (GdkEventKey* ev) { + PublicEditor::TrackViewList *allviews = 0; + PublicEditor::TrackViewList::iterator i; + switch (ev->keyval) { + case GDK_Escape: + name_entry.select_region (0,0); + controls_ebox.grab_focus (); + name_entry_changed (); + return true; + + /* Shift+Tab Keys Pressed. Note that for Shift+Tab, GDK actually + * generates a different ev->keyval, rather than setting + * ev->state. + */ + case GDK_ISO_Left_Tab: case GDK_Tab: + name_entry_changed (); + allviews = editor.get_valid_views (0); + if (allviews != 0) { + i = find (allviews->begin(), allviews->end(), this); + if (ev->keyval == GDK_Tab) { + if (i != allviews->end()) { + do { + if (++i == allviews->end()) { return true; } + } while((*i)->hidden()); + } + } else { + if (i != allviews->begin()) { + do { + if (--i == allviews->begin()) { return true; } + } while ((*i)->hidden()); + } + } + + if ((*i)->height_style == Small) { + (*i)->set_height(Smaller); + } + + (*i)->name_entry.grab_focus(); + } + return true; + case GDK_Up: case GDK_Down: name_entry_changed (); @@ -433,6 +463,7 @@ TimeAxisView::name_entry_focus_out (GdkEventFocus* ev) last_name_entry_key_press_event = 0; name_entry_key_timeout.disconnect (); name_entry.set_name ("EditorTrackNameDisplay"); + name_entry.select_region (0,0); /* do the real stuff */ @@ -484,12 +515,14 @@ TimeAxisView::popup_display_menu (guint32 when) if (display_menu == 0) { build_display_menu (); } + editor.set_selected_track (*this, Selection::Add); display_menu->popup (1, when); } gint TimeAxisView::size_click (GdkEventButton *ev) { + editor.set_selected_track (*this, Selection::Add); popup_size_menu (ev->time); return TRUE; } @@ -574,7 +607,7 @@ TimeAxisView::set_samples_per_unit (double spu) } void -TimeAxisView::show_timestretch (jack_nframes_t start, jack_nframes_t end) +TimeAxisView::show_timestretch (nframes_t start, nframes_t end) { for (vector::iterator i = children.begin(); i != children.end(); ++i) { (*i)->show_timestretch (start, end); @@ -616,7 +649,7 @@ TimeAxisView::show_selection (TimeSelection& ts) selection_group->raise_to_top(); for (list::iterator i = ts.begin(); i != ts.end(); ++i) { - jack_nframes_t start, end, cnt; + nframes_t start, end, cnt; start = (*i).start; end = (*i).end; @@ -661,8 +694,6 @@ TimeAxisView::show_selection (TimeSelection& ts) void TimeAxisView::reshow_selection (TimeSelection& ts) { - cerr << name() << ": reshow selection" << endl; - show_selection (ts); for (vector::iterator i = children.begin(); i != children.end(); ++i) { @@ -729,8 +760,9 @@ TimeAxisView::get_selection_rect (uint32_t id) for (list::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i) { if ((*i)->id == id) { + SelectionRect* ret = (*i); free_selection_rects.erase (i); - return (*i); + return ret; } } @@ -796,7 +828,7 @@ TimeAxisView::remove_child (TimeAxisView* child) } void -TimeAxisView::get_selectables (jack_nframes_t start, jack_nframes_t end, double top, double bot, list& result) +TimeAxisView::get_selectables (nframes_t start, nframes_t end, double top, double bot, list& result) { return; } @@ -936,20 +968,16 @@ TimeAxisView::compute_controls_size_info () buttons[i]->set_name ("TrackMuteButton"); } - Gtk::Requisition req; - one_row_table.attach (*buttons[0], 6, 7, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0); one_row_table.show_all (); - one_row_table.size_request (req); + Gtk::Requisition req(one_row_table.size_request ()); // height required to show 1 row of buttons hSmaller = req.height + extra_height; - cerr << "hSmaller = " << hSmaller << endl; - window.remove (); window.add (two_row_table); @@ -959,7 +987,7 @@ TimeAxisView::compute_controls_size_info () two_row_table.attach (*buttons[4], 8, 9, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0); two_row_table.show_all (); - two_row_table.size_request (req); + req = two_row_table.size_request (); // height required to show all normal buttons @@ -1037,3 +1065,25 @@ TimeAxisView::color_handler (ColorID id, uint32_t val) break; } } + +TimeAxisView* +TimeAxisView::covers_y_position (double y) +{ + if (hidden()) { + return 0; + } + + if (y_position <= y && y < (y_position + height)) { + return this; + } + + for (vector::iterator i = children.begin(); i != children.end(); ++i) { + TimeAxisView* tv; + + if ((tv = (*i)->covers_y_position (y)) != 0) { + return tv; + } + } + + return 0; +}