From caa305ed2b5f2b5ed976a1e0b18b3794c2ab2465 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 30 Sep 2008 14:18:15 +0000 Subject: [PATCH] more tweaks to the IO Selector git-svn-id: svn://localhost/ardour2/branches/3.0@3840 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour.menus | 1 + gtk2_ardour/ardour3_ui_dark.rc.in | 12 +++ gtk2_ardour/ardour3_ui_light.rc.in | 13 ++- gtk2_ardour/bundle_manager.cc | 2 +- gtk2_ardour/editor_route_list.cc | 2 +- gtk2_ardour/io_selector.cc | 99 +++++++------------ gtk2_ardour/io_selector.h | 6 +- gtk2_ardour/port_matrix.cc | 148 ++++++++++++++++++----------- gtk2_ardour/port_matrix.h | 12 ++- gtk2_ardour/utils.cc | 6 +- 10 files changed, 169 insertions(+), 132 deletions(-) diff --git a/gtk2_ardour/ardour.menus b/gtk2_ardour/ardour.menus index ed4ea0c2a6..13468a5633 100644 --- a/gtk2_ardour/ardour.menus +++ b/gtk2_ardour/ardour.menus @@ -402,6 +402,7 @@ + diff --git a/gtk2_ardour/ardour3_ui_dark.rc.in b/gtk2_ardour/ardour3_ui_dark.rc.in index 2d18c277e9..c819a886c3 100644 --- a/gtk2_ardour/ardour3_ui_dark.rc.in +++ b/gtk2_ardour/ardour3_ui_dark.rc.in @@ -1202,6 +1202,16 @@ style "ardour_button" ="default_button" ythickness = 1 } +style "odd_port_groups" +{ + fg[NORMAL] = { 0.6, 0.6, 0.6 } +} + +style "even_port_groups" +{ + fg[NORMAL] = { 0.3, 0.3, 0.3 } +} + #--------------------------------------------------------------- class "GtkWidget" style:highest "default_base" @@ -1578,4 +1588,6 @@ widget "*ChannelCountSelector" style:highest "medium_bold_entry" widget "*ChannelCountSelector.GtkArrow" style:highest "default_generic" widget "*RegionListWholeFile" style:highest "treeview_parent_node" widget "*EditorHScrollbar" style:highest "editor_hscrollbar" +widget "*OddPortGroups" style:highest "odd_port_groups" +widget "*EvenPortGroups" style:highest "even_port_groups" diff --git a/gtk2_ardour/ardour3_ui_light.rc.in b/gtk2_ardour/ardour3_ui_light.rc.in index 5a5ab6cc3f..ec1cb5275d 100644 --- a/gtk2_ardour/ardour3_ui_light.rc.in +++ b/gtk2_ardour/ardour3_ui_light.rc.in @@ -1199,6 +1199,16 @@ style "ardour_button" ="default_button" ythickness = 1 } +style "odd_port_groups" +{ + fg[NORMAL] = { 0.6, 0.6, 0.6 } +} + +style "even_port_groups" +{ + fg[NORMAL] = { 0.3, 0.3, 0.3 } +} + #--------------------------------------------------------------- class "GtkWidget" style:highest "default_base" @@ -1575,4 +1585,5 @@ widget "*ChannelCountSelector" style:highest "medium_bold_entry" widget "*ChannelCountSelector.GtkArrow" style:highest "default_generic" widget "*RegionListWholeFile" style:highest "treeview_parent_node" widget "*EditorHScrollbar" style:highest "editor_hscrollbar" - +widget "*OddPortGroups" style:highest "odd_port_groups" +widget "*EvenPortGroups" style:highest "even_port_groups" diff --git a/gtk2_ardour/bundle_manager.cc b/gtk2_ardour/bundle_manager.cc index 8486c5c30f..0ba8d8eb96 100644 --- a/gtk2_ardour/bundle_manager.cc +++ b/gtk2_ardour/bundle_manager.cc @@ -81,7 +81,7 @@ std::string BundleEditorMatrix::row_name (int r) const { std::stringstream s; - s << r; + s << r + 1; // 1-based counting return s.str(); } diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc index 8fdc1ce110..43e064b702 100644 --- a/gtk2_ardour/editor_route_list.cc +++ b/gtk2_ardour/editor_route_list.cc @@ -103,7 +103,7 @@ Editor::handle_new_route (Session::RouteList& routes) row = *(route_display_model->append ()); #endif - cerr << route->name() << " marked for display ? " << tv->marked_for_display() << endl; + // cerr << route->name() << " marked for display ? " << tv->marked_for_display() << endl; row[route_display_columns.text] = route->name(); row[route_display_columns.visible] = tv->marked_for_display(); diff --git a/gtk2_ardour/io_selector.cc b/gtk2_ardour/io_selector.cc index c2e78485f8..94da96573c 100644 --- a/gtk2_ardour/io_selector.cc +++ b/gtk2_ardour/io_selector.cc @@ -53,12 +53,6 @@ IOSelector::IOSelector (ARDOUR::Session& session, boost::shared_ptr } else { _io->input_changed.connect (mem_fun(*this, &IOSelector::ports_changed)); } - - /* this got lost in a merge from 2.0 */ - - // set_button_sensitivity (); - // io->name_changed.connect (mem_fun(*this, &IOSelector::name_changed)); - } void @@ -210,55 +204,6 @@ IOSelector::row_descriptor () const return _("port"); } -#if 0 -void -IOSelector::set_button_sensitivity () -{ - if (for_input) { - - if (io->input_maximum() < 0 || io->input_maximum() > (int) io->n_inputs()) { - add_port_button.set_sensitive (true); - } else { - add_port_button.set_sensitive (false); - } - - } else { - - if (io->output_maximum() < 0 || io->output_maximum() > (int) io->n_outputs()) { - add_port_button.set_sensitive (true); - } else { - add_port_button.set_sensitive (false); - } - - } - - if (for_input) { - if (io->n_inputs() && (io->input_minimum() < 0 || io->input_minimum() < (int) io->n_inputs())) { - remove_port_button.set_sensitive (true); - } else { - remove_port_button.set_sensitive (false); - } - - } else { - if (io->n_outputs() && (io->output_minimum() < 0 || io->output_minimum() < (int) io->n_outputs())) { - remove_port_button.set_sensitive (true); - } else { - remove_port_button.set_sensitive (false); - } - } -} -#endif - -#if 0 -void -IOSelector::name_changed (void* src) -{ - ENSURE_GUI_THREAD(bind (mem_fun(*this, &IOSelector::name_changed), src)); - - display_ports (); -} -#endif - IOSelectorWindow::IOSelectorWindow ( ARDOUR::Session& session, boost::shared_ptr io, bool for_input, bool can_cancel ) @@ -273,20 +218,19 @@ IOSelectorWindow::IOSelectorWindow ( add_events (Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK); set_name ("IOSelectorWindow2"); - string title; - if (for_input) { - title = string_compose(_("%1 input"), io->name()); - } else { - title = string_compose(_("%1 output"), io->name()); - } + // io->name_changed.connect (mem_fun(*this, &IOSelectorWindow::io_name_changed)); if (_selector.maximum_rows() > _selector.n_rows()) { add_button.set_name ("IOSelectorButton"); add_button.set_image (*Gtk::manage (new Gtk::Image (Gtk::Stock::ADD, Gtk::ICON_SIZE_BUTTON))); get_action_area()->pack_start (add_button, false, false); add_button.signal_clicked().connect (sigc::mem_fun (_selector, &IOSelector::add_row)); + } + + if (!for_input) { + io->output_changed.connect (mem_fun(*this, &IOSelectorWindow::ports_changed)); } else { - add_button.hide (); + io->input_changed.connect (mem_fun(*this, &IOSelectorWindow::ports_changed)); } rescan_button.set_name ("IOSelectorButton"); @@ -314,12 +258,14 @@ IOSelectorWindow::IOSelectorWindow ( cancel_button.signal_clicked().connect (mem_fun(*this, &IOSelectorWindow::cancel)); rescan_button.signal_clicked().connect (mem_fun(*this, &IOSelectorWindow::rescan)); - set_title (title); set_position (Gtk::WIN_POS_MOUSE); + io_name_changed (this); + ports_changed (IOChange (0), this); + show_all (); - signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), reinterpret_cast (this))); + signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), this)); } IOSelectorWindow::~IOSelectorWindow() @@ -327,6 +273,16 @@ IOSelectorWindow::~IOSelectorWindow() } +void +IOSelectorWindow::ports_changed (ARDOUR::IOChange change, void *src) +{ + if (_selector.maximum_rows() > _selector.n_rows()) { + add_button.set_sensitive (true); + } else { + add_button.set_sensitive (false); + } +} + void IOSelectorWindow::rescan () { @@ -354,6 +310,21 @@ IOSelectorWindow::on_map () Window::on_map (); } +void +IOSelectorWindow::io_name_changed (void* src) +{ + ENSURE_GUI_THREAD(bind (mem_fun(*this, &IOSelectorWindow::io_name_changed), src)); + + string title; + + if (!_selector.offering_input()) { + title = string_compose(_("%1 input"), _selector.io()->name()); + } else { + title = string_compose(_("%1 output"), _selector.io()->name()); + } + + set_title (title); +} PortInsertUI::PortInsertUI (ARDOUR::Session& sess, boost::shared_ptr pi) : input_selector (sess, pi->io(), true), diff --git a/gtk2_ardour/io_selector.h b/gtk2_ardour/io_selector.h index c31354a5a7..e720a630b3 100644 --- a/gtk2_ardour/io_selector.h +++ b/gtk2_ardour/io_selector.h @@ -36,10 +36,11 @@ class IOSelector : public PortMatrix { void add_row (); void remove_row (int); std::string row_descriptor () const; + boost::shared_ptr const io() { return _io; } private: boost::shared_ptr _io; - + void ports_changed (ARDOUR::IOChange, void*); }; @@ -67,6 +68,9 @@ class IOSelectorWindow : public ArdourDialog void rescan (); void cancel (); void accept (); + + void ports_changed (ARDOUR::IOChange change, void *src); + void io_name_changed (void *src); }; diff --git a/gtk2_ardour/port_matrix.cc b/gtk2_ardour/port_matrix.cc index f0a26d9840..e8297b6193 100644 --- a/gtk2_ardour/port_matrix.cc +++ b/gtk2_ardour/port_matrix.cc @@ -41,6 +41,8 @@ #include "gui_thread.h" #include "i18n.h" +using namespace Gtk; + /** Add a port to a group. * @param p Port name, with or without prefix. */ @@ -81,7 +83,7 @@ PortGroupUI::PortGroupUI (PortMatrix& m, PortGroup& g) for (int i = 0; i < rows; ++i) { for (uint32_t j = 0; j < _port_group.ports.size(); ++j) { - Gtk::CheckButton* b = new Gtk::CheckButton; + CheckButton* b = new CheckButton; b->signal_toggled().connect ( sigc::bind (sigc::mem_fun (*this, &PortGroupUI::port_checkbutton_toggled), b, i, j) @@ -118,7 +120,6 @@ void PortGroupUI::visibility_checkbutton_toggled () { _port_group.visible = _visibility_checkbutton.get_active (); - setup_visibility (); } /** @return Width and height of a single checkbutton in a port group table */ @@ -143,14 +144,14 @@ PortGroupUI::unit_size () const } /** @return Table widget containing the port checkbuttons */ -Gtk::Widget& +Widget& PortGroupUI::get_table () { return _table_box; } /** @return Checkbutton used to toggle visibility */ -Gtk::Widget& +Widget& PortGroupUI::get_visibility_checkbutton () { return _visibility_checkbutton; @@ -159,7 +160,7 @@ PortGroupUI::get_visibility_checkbutton () /** Handle a toggle of a port check button */ void -PortGroupUI::port_checkbutton_toggled (Gtk::CheckButton* b, int r, int c) +PortGroupUI::port_checkbutton_toggled (CheckButton* b, int r, int c) { if (_ignore_check_button_toggle == false) { _port_matrix.set_state (r, _port_group.prefix + _port_group.ports[c], b->get_active()); @@ -183,9 +184,9 @@ PortGroupUI::setup_visibility () } RotatedLabelSet::RotatedLabelSet (PortGroupList& g) - : Glib::ObjectBase ("RotatedLabelSet"), Gtk::Widget (), _port_group_list (g), _base_width (128) + : Glib::ObjectBase ("RotatedLabelSet"), Widget (), _port_group_list (g), _base_width (128) { - set_flags (Gtk::NO_WINDOW); + set_flags (NO_WINDOW); set_angle (30); } @@ -209,9 +210,9 @@ RotatedLabelSet::set_angle (int degrees) } void -RotatedLabelSet::on_size_request (Gtk::Requisition* requisition) +RotatedLabelSet::on_size_request (Requisition* requisition) { - *requisition = Gtk::Requisition (); + *requisition = Requisition (); if (_pango_layout == 0) { return; @@ -238,7 +239,7 @@ RotatedLabelSet::on_size_request (Gtk::Requisition* requisition) } void -RotatedLabelSet::on_size_allocate (Gtk::Allocation& allocation) +RotatedLabelSet::on_size_allocate (Allocation& allocation) { set_allocation (allocation); @@ -252,15 +253,15 @@ RotatedLabelSet::on_size_allocate (Gtk::Allocation& allocation) void RotatedLabelSet::on_realize () { - Gtk::Widget::on_realize (); + Widget::on_realize (); - Glib::RefPtr style = get_style (); + Glib::RefPtr