X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Ftime_axis_view.cc;h=2a0087dc2ccd2798804ce4f2cb361db67a4d5b30;hb=691b0c10ac8089efa015e88513d309768fe0f44b;hp=44b354182667fbdaa9837579ff4fca47a82815f5;hpb=a157537898eccf08009281633b19970515366a78;p=ardour.git diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index 44b3541826..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 @@ -55,6 +54,7 @@ using namespace Gtk; using namespace Gdk; using namespace sigc; using namespace ARDOUR; +using namespace PBD; using namespace Editing; using namespace ArdourCanvas; @@ -108,7 +108,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie name_entry.signal_activate().connect (mem_fun(*this, &TimeAxisView::name_entry_activated)); name_entry.signal_focus_in_event().connect (mem_fun (*this, &TimeAxisView::name_entry_focus_in)); name_entry.signal_focus_out_event().connect (mem_fun (*this, &TimeAxisView::name_entry_focus_out)); - Gtkmm2ext::set_size_request_to_display_given_text (name_entry, N_("gTortnam"), 2, 2); // just represents a short name + Gtkmm2ext::set_size_request_to_display_given_text (name_entry, N_("gTortnam"), 10, 10); // just represents a short name name_label.set_name ("TrackLabel"); name_label.set_alignment (0.0, 0.5); @@ -127,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 (); @@ -232,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); } } @@ -284,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 @@ -381,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 (); @@ -432,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 */ @@ -483,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; } @@ -573,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); @@ -615,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; @@ -660,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) { @@ -728,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; } } @@ -795,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; } @@ -881,7 +914,7 @@ TimeAxisView::reset_height() set_height_pixels (height); for (vector::iterator i = children.begin(); i != children.end(); ++i) { - (*i)->set_height ((TrackHeight)(*i)->height); + (*i)->set_height_pixels ((TrackHeight)(*i)->height); } } @@ -935,12 +968,10 @@ 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 @@ -956,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 @@ -1034,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; +}