fix stupid button sensitivity issue in IO Selector
authorPaul Davis <paul@linuxaudiosystems.com>
Sun, 12 Nov 2006 00:40:14 +0000 (00:40 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Sun, 12 Nov 2006 00:40:14 +0000 (00:40 +0000)
git-svn-id: svn://localhost/ardour2/trunk@1113 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/io_selector.cc
gtk2_ardour/io_selector.h

index 3a744ea7271b07a3d9cd16079c21264b51d63483..866d1f7134e2f9ff026eee9133032b88b091dd4c 100644 (file)
@@ -184,40 +184,7 @@ IOSelector::IOSelector (Session& sess, boost::shared_ptr<IO> ior, bool input)
        port_button_box.set_border_width (5);
 
        port_button_box.pack_start (add_port_button, false, false);
-
-       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);
-               }
-                       
-       }
-
        port_button_box.pack_start (remove_port_button, false, false);
-
-       if (for_input) {
-               if (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->output_minimum() < 0 || io->output_minimum() < (int) io->n_outputs()) {
-                       remove_port_button.set_sensitive (true);
-               } else {
-                       remove_port_button.set_sensitive (false);
-               }
-       }
-
        port_button_box.pack_start (clear_connections_button, false, false);
 
        port_and_button_box.set_border_width (5);
@@ -255,6 +222,44 @@ IOSelector::~IOSelector ()
 {
 }
 
+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);
+               }
+       }
+}
+
+
 void
 IOSelector::name_changed (void* src)
 {
@@ -551,14 +556,6 @@ IOSelector::add_port ()
                        msg.run ();
                }
 
-               if (io->input_maximum() >= 0 && io->input_maximum() <= (int) io->n_inputs()) {
-                       add_port_button.set_sensitive (false);
-               }
-               
-               if (io->input_minimum() < (int) io->n_inputs()) {
-                       remove_port_button.set_sensitive (true);
-               }
-
        } else {
 
                try {
@@ -569,11 +566,9 @@ IOSelector::add_port ()
                        MessageDialog msg (0, _("There are no more JACK ports available."));
                        msg.run ();
                }
-
-               if (io->output_maximum() >= 0 && io->output_maximum() <= (int) io->n_outputs()) {
-                       add_port_button.set_sensitive (false);
-               }
        }
+               
+       set_button_sensitivity ();
 }
 
 void
@@ -587,26 +582,14 @@ IOSelector::remove_port ()
                if ((nports = io->n_inputs()) > 0) {
                        io->remove_input_port (io->input(nports-1), this);
                }
-               if (io->input_minimum() == (int) io->n_inputs()) {
-                       remove_port_button.set_sensitive (false);
-               }
+
        } else {
                if ((nports = io->n_outputs()) > 0) {
                        io->remove_output_port (io->output(nports-1), this);
                }
        }
-}
-
-gint
-IOSelector::remove_port_when_idle (Port *port)
-{
-       if (for_input) {
-               io->remove_input_port (port, this);
-       } else {
-               io->remove_output_port (port, this);
-       }
-
-       return FALSE;
+       
+       set_button_sensitivity ();
 }
 
 gint
index 745677bfa10818f4eb3bf8c3d8d58acaa2552796..288edd0be552f0d9d5f1aacff5202ebd8d32ab0f 100644 (file)
@@ -124,7 +124,7 @@ class IOSelector : public Gtk::VBox {
 
        void add_port ();
        void remove_port ();
-       gint remove_port_when_idle (ARDOUR::Port *);
+       void set_button_sensitivity ();
 
        gint connection_button_release (GdkEventButton *, Gtk::TreeView*);