+ set_height (height);
+
+ for (vector<TimeAxisView*>::iterator i = children.begin(); i != children.end(); ++i) {
+ (*i)->set_height ((*i)->height);
+ }
+}
+
+void
+TimeAxisView::compute_controls_size_info ()
+{
+ Gtk::Window window (Gtk::WINDOW_TOPLEVEL);
+ Gtk::Table two_row_table (2, 8);
+ Gtk::Table one_row_table (1, 8);
+ Button* buttons[5];
+ const int border_width = 2;
+ const int extra_height = (2 * border_width) + 2 // 2 pixels for the controls frame
+ + 10; // resizer button
+
+ window.add (one_row_table);
+
+ one_row_table.set_border_width (border_width);
+ one_row_table.set_row_spacings (0);
+ one_row_table.set_col_spacings (0);
+ one_row_table.set_homogeneous (true);
+
+ two_row_table.set_border_width (border_width);
+ two_row_table.set_row_spacings (0);
+ two_row_table.set_col_spacings (0);
+ two_row_table.set_homogeneous (true);
+
+ for (int i = 0; i < 5; ++i) {
+ buttons[i] = manage (new Button (X_("f")));
+ buttons[i]->set_name ("TrackMuteButton");
+ }
+
+ 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 ();
+ Gtk::Requisition req(one_row_table.size_request ());
+
+
+ // height required to show 1 row of buttons
+
+ hSmaller = req.height + extra_height;
+
+ window.remove ();
+ window.add (two_row_table);
+
+ two_row_table.attach (*buttons[1], 5, 6, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
+ two_row_table.attach (*buttons[2], 6, 7, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
+ two_row_table.attach (*buttons[3], 7, 8, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
+ 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 ();
+ req = two_row_table.size_request ();
+
+ // height required to show all normal buttons
+
+ hNormal = req.height + extra_height;
+
+ // these heights are all just larger than normal. no more
+ // elements are visible (yet).
+
+ hLarger = hNormal + 50;
+ hLarge = hNormal + 150;
+ hLargest = hNormal + 250;
+
+ // height required to show track name
+
+ hSmall = 27;
+}
+
+void
+TimeAxisView::show_name_label ()
+{
+ if (!(name_packing & NameLabelPacked)) {
+ name_hbox.pack_start (name_label, true, true);
+ name_packing = NamePackingBits (name_packing | NameLabelPacked);
+ name_hbox.show ();
+ name_label.show ();
+ }
+}
+
+void
+TimeAxisView::show_name_entry ()
+{
+ if (!(name_packing & NameEntryPacked)) {
+ name_hbox.pack_start (name_entry, true, true);
+ name_packing = NamePackingBits (name_packing | NameEntryPacked);
+ name_hbox.show ();
+ name_entry.show ();
+ }
+}
+
+void
+TimeAxisView::hide_name_label ()
+{
+ if (name_packing & NameLabelPacked) {
+ name_hbox.remove (name_label);
+ name_packing = NamePackingBits (name_packing & ~NameLabelPacked);
+ }
+}
+
+void
+TimeAxisView::hide_name_entry ()
+{
+ if (name_packing & NameEntryPacked) {
+ name_hbox.remove (name_entry);
+ name_packing = NamePackingBits (name_packing & ~NameEntryPacked);
+ }
+}
+
+void
+TimeAxisView::color_handler ()
+{
+ for (list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i) {
+
+ (*i)->rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_SelectionRect.get();
+ (*i)->rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+
+ (*i)->start_trim->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+ (*i)->start_trim->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+
+ (*i)->end_trim->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+ (*i)->end_trim->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+ }
+
+ for (list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i) {
+
+ (*i)->rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_SelectionRect.get();
+ (*i)->rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+
+ (*i)->start_trim->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+ (*i)->start_trim->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+
+ (*i)->end_trim->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+ (*i)->end_trim->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+ }
+}
+
+TimeAxisView*
+TimeAxisView::covers_y_position (double y)
+{
+ if (hidden()) {
+ return 0;
+ }
+
+ if (y_position <= y && y < (y_position + height)) {
+ return this;
+ }