X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fglobal_port_matrix.cc;h=0f107452a541554f6922b9b069df1faed7890765;hb=ccf58b8de23619db9983a45f696fd97e13a15cce;hp=10a28b128d7a3666f4bf0d25bd294152e925e395;hpb=eef922383510830de4efa8a3096fce011b2e6b9f;p=ardour.git diff --git a/gtk2_ardour/global_port_matrix.cc b/gtk2_ardour/global_port_matrix.cc index 10a28b128d..0f107452a5 100644 --- a/gtk2_ardour/global_port_matrix.cc +++ b/gtk2_ardour/global_port_matrix.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2009 Paul Davis + Copyright (C) 2009 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,14 +20,19 @@ #include #include #include "global_port_matrix.h" -#include "i18n.h" +#include "utils.h" + #include "ardour/bundle.h" #include "ardour/session.h" #include "ardour/audioengine.h" #include "ardour/port.h" -GlobalPortMatrix::GlobalPortMatrix (ARDOUR::Session& s, ARDOUR::DataType t) - : PortMatrix (s, t) +#include "i18n.h" + +using namespace std; + +GlobalPortMatrix::GlobalPortMatrix (Gtk::Window* p, ARDOUR::Session& s, ARDOUR::DataType t) + : PortMatrix (p, s, t) { setup_all_ports (); } @@ -36,7 +41,7 @@ void GlobalPortMatrix::setup_ports (int dim) { _ports[dim].suspend_signals (); - _ports[dim].gather (_session, dim == IN); + _ports[dim].gather (_session, dim == IN, false); _ports[dim].resume_signals (); } @@ -71,13 +76,15 @@ GlobalPortMatrix::set_state (ARDOUR::BundleChannel c[2], bool s) } } -PortMatrix::State +PortMatrixNode::State GlobalPortMatrix::get_state (ARDOUR::BundleChannel c[2]) const { ARDOUR::Bundle::PortList const & in_ports = c[IN].bundle->channel_ports (c[IN].channel); ARDOUR::Bundle::PortList const & out_ports = c[OUT].bundle->channel_ports (c[OUT].channel); if (in_ports.empty() || out_ports.empty()) { - return NOT_ASSOCIATED; + /* we're looking at a bundle with no parts associated with this channel, + so nothing to connect */ + return PortMatrixNode::UNKNOWN; } for (ARDOUR::Bundle::PortList::const_iterator i = in_ports.begin(); i != in_ports.end(); ++i) { @@ -88,50 +95,41 @@ GlobalPortMatrix::get_state (ARDOUR::BundleChannel c[2]) const /* we don't know the state of connections between two non-Ardour ports */ if (!p && !q) { - return UNKNOWN; + return PortMatrixNode::UNKNOWN; } if (p && p->connected_to (*j) == false) { - return NOT_ASSOCIATED; + return PortMatrixNode::NOT_ASSOCIATED; } else if (q && q->connected_to (*i) == false) { - return NOT_ASSOCIATED; + return PortMatrixNode::NOT_ASSOCIATED; } } } - return ASSOCIATED; + return PortMatrixNode::ASSOCIATED; } - GlobalPortMatrixWindow::GlobalPortMatrixWindow (ARDOUR::Session& s, ARDOUR::DataType t) - : _port_matrix (s, t) + : _port_matrix (this, s, t) { switch (t) { case ARDOUR::DataType::AUDIO: - set_title (_("Audio Connections Manager")); + set_title (_("Audio Connection Manager")); break; case ARDOUR::DataType::MIDI: - set_title (_("MIDI Connections Manager")); + set_title (_("MIDI Connection Manager")); break; } - Gtk::HBox* buttons_hbox = Gtk::manage (new Gtk::HBox); - - _rescan_button.set_label (_("Rescan")); - _rescan_button.set_image (*Gtk::manage (new Gtk::Image (Gtk::Stock::REFRESH, Gtk::ICON_SIZE_BUTTON))); - _rescan_button.signal_clicked().connect (sigc::mem_fun (*this, &GlobalPortMatrixWindow::rescan)); - buttons_hbox->pack_start (_rescan_button, Gtk::PACK_SHRINK); - - Gtk::VBox* vbox = Gtk::manage (new Gtk::VBox); - vbox->pack_start (_port_matrix); - vbox->pack_start (*buttons_hbox, Gtk::PACK_SHRINK); - add (*vbox); + add (_port_matrix); show_all (); } void -GlobalPortMatrixWindow::rescan () +GlobalPortMatrixWindow::on_show () { - _port_matrix.setup_all_ports (); + Gtk::Window::on_show (); + pair const pm_max = _port_matrix.max_size (); + resize_window_to_proportion_of_monitor (this, pm_max.first, pm_max.second); }