change selection behaviour for track header context click
[ardour.git] / gtk2_ardour / io_selector.h
index abc902ba4c1c4a1968e5ad5e9212edb45259f3ce..957db11a2b2cc8d6c5a6cbf0c73604989f2ebf71 100644 (file)
@@ -15,7 +15,6 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #ifndef __ardour_ui_io_selector_h__
@@ -29,10 +28,20 @@ using __gnu_cxx::slist;
 #endif
 
 #include <string>
-#include <gtkmm.h>
+
+#include <glibmm/thread.h>
+
+#include <gtkmm/box.h>
+#include <gtkmm/frame.h>
+#include <gtkmm/button.h>
+#include <gtkmm/scrolledwindow.h>
+#include <gtkmm/notebook.h>
+#include <gtkmm/treeview.h>
+#include <gtkmm/liststore.h>
 
 #include <ardour_dialog.h>
 
+
 namespace ARDOUR {
        class IO;
        class Session;
@@ -43,7 +52,7 @@ namespace ARDOUR {
 
 class IOSelector : public Gtk::VBox {
   public:
-       IOSelector (ARDOUR::Session&, ARDOUR::IO&, bool for_input);
+       IOSelector (ARDOUR::Session&, boost::shared_ptr<ARDOUR::IO>, bool for_input);
        ~IOSelector ();
 
        void redisplay ();
@@ -57,15 +66,31 @@ class IOSelector : public Gtk::VBox {
 
   protected:
        ARDOUR::Session& session;
-
+       
   private:
-       ARDOUR::IO& io;
+       boost::shared_ptr<ARDOUR::IO> io;
        bool for_input;
        ARDOUR::Port *selected_port;
+       sigc::connection page_selection_connection;
 
        Gtk::VBox main_box;
        Gtk::HBox port_and_selector_box;
 
+       /* column model */
+
+       struct PortDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
+
+           PortDisplayModelColumns() { 
+                   add (displayed_name);
+                   add (full_name);
+           }
+
+           Gtk::TreeModelColumn<Glib::ustring>       displayed_name;
+           Gtk::TreeModelColumn<Glib::ustring>       full_name;
+       };
+
+       PortDisplayModelColumns port_display_columns;
+
        /* client/port selection */
 
        Gtk::Notebook notebook;
@@ -84,45 +109,42 @@ class IOSelector : public Gtk::VBox {
        Gtk::Button clear_connections_button;
        Gtk::ScrolledWindow port_display_scroller;
 
-       PBD::Lock port_display_lock;
+       Glib::Mutex port_display_lock;
        slist<Gtk::TreeView *> port_displays;
        void display_ports ();
 
        void rescan ();
        void clear_connections ();
 
-       void port_selection_changed();
+       bool port_selection_changed(GdkEventButton *, Gtk::TreeView*);
 
        void ports_changed (ARDOUR::IOChange, void *);
        void name_changed (void*);
 
        void add_port ();
        void remove_port ();
-       gint remove_port_when_idle (ARDOUR::Port *);
+       void set_button_sensitivity ();
 
-       gint port_column_button_release (GdkEventButton*, Gtk::TreeView*);
-       gint connection_click (GdkEventButton *, Gtk::TreeView*);
+       gint connection_button_release (GdkEventButton *, Gtk::TreeView*);
        
-       void select_clist(Gtk::TreeView*);
-       void select_next_clist ();
+       void select_treeview(Gtk::TreeView*);
+       void select_next_treeview ();
 };
 
 class IOSelectorWindow : public ArdourDialog
 {
   public:
-       IOSelectorWindow (ARDOUR::Session&, ARDOUR::IO&, bool for_input, bool can_cancel=false);
+       IOSelectorWindow (ARDOUR::Session&, boost::shared_ptr<ARDOUR::IO>, bool for_input, bool can_cancel=false);
        ~IOSelectorWindow ();
 
        IOSelector& selector() { return _selector; }
 
   protected:
-       bool on_map (GdkEventAny *);
+       void on_map ();
        
   private:
        IOSelector _selector;
 
-       Gtk::VBox vbox;
-
        /* overall operation buttons */
 
        Gtk::Button ok_button;
@@ -139,7 +161,7 @@ class IOSelectorWindow : public ArdourDialog
 class PortInsertUI : public Gtk::VBox
 {
   public: 
-       PortInsertUI (ARDOUR::Session&, ARDOUR::PortInsert&);
+       PortInsertUI (ARDOUR::Session&, boost::shared_ptr<ARDOUR::PortInsert>);
        
        void redisplay ();
        void finished (IOSelector::Result);
@@ -155,10 +177,10 @@ class PortInsertUI : public Gtk::VBox
 class PortInsertWindow : public ArdourDialog
 {
   public: 
-       PortInsertWindow (ARDOUR::Session&, ARDOUR::PortInsert&, bool can_cancel=false);
+       PortInsertWindow (ARDOUR::Session&, boost::shared_ptr<ARDOUR::PortInsert>, bool can_cancel=false);
        
   protected:
-       bool on_map (GdkEventAny *);
+       void on_map ();
        
   private:
        
@@ -175,7 +197,8 @@ class PortInsertWindow : public ArdourDialog
        void cancel ();
        void accept ();
 
-       void plugin_going_away (ARDOUR::Redirect*);
+       void plugin_going_away ();
+       sigc::connection going_away_connection;
 };