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