From 50437bff22279473cd364d007d5e474af2a542bc Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 17 Jul 2009 22:54:45 +0000 Subject: Various tweaks to the port matrix: open to full size; remove buttons and move their functionality into a context menu; set maximum size hint to stop port matrix windows being resized beyond their useful size; remove visibility checkbuttons - visibility now controlled through menu or by clicking on group names; port groups fold down to a small tab when hidden; don't swap the orientation of the matrix once it has been opened. git-svn-id: svn://localhost/ardour2/branches/3.0@5373 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/io_selector.cc | 107 +++++++++------------------------------------ 1 file changed, 20 insertions(+), 87 deletions(-) (limited to 'gtk2_ardour/io_selector.cc') diff --git a/gtk2_ardour/io_selector.cc b/gtk2_ardour/io_selector.cc index 4333efd8ea..3c1e4c91ed 100644 --- a/gtk2_ardour/io_selector.cc +++ b/gtk2_ardour/io_selector.cc @@ -181,100 +181,22 @@ IOSelector::list_is_global (int dim) const } IOSelectorWindow::IOSelectorWindow (ARDOUR::Session& session, boost::shared_ptr io, bool can_cancel) - : ArdourDialog ("I/O selector") - , _selector (session, io) - , add_button (_("Add Port")) - , disconnect_button (_("Disconnect All")) - , ok_button (can_cancel ? _("OK"): _("Close")) - , cancel_button (_("Cancel")) - , rescan_button (_("Rescan")) - + : _selector (session, io) { - /* XXX: what's this for? */ - add_events (Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK); - set_name ("IOSelectorWindow2"); + set_title (_("I/O selector")); - /* Disconnect All button */ - disconnect_button.set_name ("IOSelectorButton"); - disconnect_button.set_image (*Gtk::manage (new Gtk::Image (Gtk::Stock::DISCONNECT, Gtk::ICON_SIZE_BUTTON))); - disconnect_button.signal_clicked().connect (sigc::mem_fun (_selector, &IOSelector::disassociate_all)); - get_action_area()->pack_start (disconnect_button, false, false); - - /* Add Port button */ - 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::bind (sigc::mem_fun (_selector, &IOSelector::add_channel), boost::shared_ptr ())); - - /* Rescan button */ - rescan_button.set_name ("IOSelectorButton"); - 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, &IOSelectorWindow::rescan)); - get_action_area()->pack_start (rescan_button, false, false); - - io->PortCountChanged.connect (sigc::hide (mem_fun (*this, &IOSelectorWindow::ports_changed))); - - /* Cancel button */ - if (can_cancel) { - cancel_button.set_name ("IOSelectorButton"); - cancel_button.set_image (*Gtk::manage (new Gtk::Image (Gtk::Stock::CANCEL, Gtk::ICON_SIZE_BUTTON))); - get_action_area()->pack_start (cancel_button, false, false); - } else { - cancel_button.hide(); - } - cancel_button.signal_clicked().connect (mem_fun(*this, &IOSelectorWindow::cancel)); - - /* OK button */ - ok_button.set_name ("IOSelectorButton"); - if (!can_cancel) { - ok_button.set_image (*Gtk::manage (new Gtk::Image (Gtk::Stock::CLOSE, Gtk::ICON_SIZE_BUTTON))); - } - ok_button.signal_clicked().connect (mem_fun(*this, &IOSelectorWindow::accept)); - get_action_area()->pack_start (ok_button, false, false); - - get_vbox()->set_spacing (8); - - get_vbox()->pack_start (_selector, true, true); + add (_selector); set_position (Gtk::WIN_POS_MOUSE); io_name_changed (this); - ports_changed (); show_all (); signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), this)); -} - -void -IOSelectorWindow::ports_changed () -{ - /* XXX make this insensitive based on port connectivity, not - port counts. - */ - - add_button.set_sensitive (true); -} - -void -IOSelectorWindow::rescan () -{ - _selector.setup_ports (_selector.other()); -} -void -IOSelectorWindow::cancel () -{ - _selector.Finished (IOSelector::Cancelled); - hide (); -} - -void -IOSelectorWindow::accept () -{ - _selector.Finished (IOSelector::Accepted); - hide (); + resize (32768, 32768); } void @@ -300,6 +222,21 @@ IOSelectorWindow::io_name_changed (void* src) set_title (title); } +void +IOSelectorWindow::on_realize () +{ + Window::on_realize (); + + pair const m = _selector.max_size (); + + GdkGeometry g; + g.max_width = m.first; + g.max_height = m.second; + + set_geometry_hints (*this, g, Gdk::HINT_MAX_SIZE); +} + + PortInsertUI::PortInsertUI (ARDOUR::Session& sess, boost::shared_ptr pi) : input_selector (sess, pi->input()) , output_selector (sess, pi->output()) @@ -330,8 +267,7 @@ PortInsertWindow::PortInsertWindow (ARDOUR::Session& sess, boost::shared_ptrpack_start (rescan_button, false, false); if (can_cancel) { cancel_button.set_image (*Gtk::manage (new Gtk::Image (Gtk::Stock::CANCEL, Gtk::ICON_SIZE_BUTTON))); get_action_area()->pack_start (cancel_button, false, false); -- cgit v1.2.3