Don't resize the editor_mixer when changing tracks, gcc 4.1 fix, reorder editor notep...
[ardour.git] / gtk2_ardour / panner_ui.cc
index 42525466c606501019facb607b4ae4dfe53ea9f4..142552bb390e371d6b569f4597cead004e1bfecb 100644 (file)
@@ -22,9 +22,9 @@
 
 #include <ardour/io.h>
 #include <ardour/dB.h>
-#include <gtkmmext/utils.h>
-#include <gtkmmext/stop_signal.h>
-#include <gtkmmext/barcontroller.h>
+#include <gtkmm2ext/utils.h>
+#include <gtkmm2ext/stop_signal.h>
+#include <gtkmm2ext/barcontroller.h>
 #include <midi++/manager.h>
 #include <pbd/fastlog.h>
 
@@ -41,9 +41,9 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
-using namespace Gtkmmext;
+using namespace Gtkmm2ext;
 using namespace Gtk;
-using namespace SigC;
+using namespace sigc;
 
 /* XPM */
 static const gchar * forwdblarrow_xpm[] = {
@@ -85,8 +85,11 @@ static const gchar * revdblarrow_xpm[] = {
 PannerUI::PannerUI (IO& io, Session& s)
        : _io (io),
          _session (s),
-         panning_up_arrow (GTK_ARROW_UP, GTK_SHADOW_OUT),
-         panning_down_arrow (GTK_ARROW_DOWN, GTK_SHADOW_OUT),
+         hAdjustment(0.0, 0.0, 0.0),
+         vAdjustment(0.0, 0.0, 0.0),
+         panning_viewport(hAdjustment, vAdjustment),
+         panning_up_arrow (Gtk::ARROW_UP, Gtk::SHADOW_OUT),
+         panning_down_arrow (Gtk::ARROW_DOWN, Gtk::SHADOW_OUT),
          panning_link_button (_("link"))
        
 {
@@ -94,8 +97,8 @@ PannerUI::PannerUI (IO& io, Session& s)
        pan_menu = 0;
        in_pan_update = false;
 
-       pan_bar_packer.set_usize (-1, 61);
-       panning_viewport.set_usize (61, 61);
+       pan_bar_packer.set_size_request (-1, 61);
+       panning_viewport.set_size_request (61, 61);
 
        panning_viewport.set_name (X_("BaseFrame"));
 
@@ -114,15 +117,15 @@ PannerUI::PannerUI (IO& io, Session& s)
           we need a pixmap in the button just to get started.
        */
 
-       panning_link_direction_button.add (*(manage (new Pixmap (forwdblarrow_xpm))));
+       panning_link_direction_button.add (*(manage (new Image (Gdk::Pixbuf::create_from_xpm_data(forwdblarrow_xpm)))));
 
-       panning_link_direction_button.clicked.connect
-               (slot (*this, &PannerUI::panning_link_direction_clicked));
+       panning_link_direction_button.signal_clicked().connect
+               (mem_fun(*this, &PannerUI::panning_link_direction_clicked));
 
-       panning_link_button.button_press_event.connect
-               (slot (*this, &PannerUI::panning_link_button_press));
-       panning_link_button.button_release_event.connect
-               (slot (*this, &PannerUI::panning_link_button_release));
+       panning_link_button.signal_button_press_event().connect
+               (mem_fun(*this, &PannerUI::panning_link_button_press));
+       panning_link_button.signal_button_release_event().connect
+               (mem_fun(*this, &PannerUI::panning_link_button_release));
 
        panning_up.set_border_width (3);
        panning_down.set_border_width (3);
@@ -134,18 +137,16 @@ PannerUI::PannerUI (IO& io, Session& s)
        panning_down_arrow.set_name (X_("PanScrollerArrow"));
 
        pan_vbox.set_spacing (4);
-       pan_vbox.pack_start (panning_viewport, false, false);
-       pan_vbox.pack_start (panning_link_box, false, false);
+       pan_vbox.pack_start (panning_viewport, Gtk::PACK_SHRINK);
+       pan_vbox.pack_start (panning_link_box, Gtk::PACK_SHRINK);
 
        pack_start (pan_vbox, true, false);
-       pan_vbox.show_all ();
-       show ();
 
        panner = 0;
 
-       _io.panner().Changed.connect (slot (*this, &PannerUI::panner_changed));
-       _io.panner().LinkStateChanged.connect (slot (*this, &PannerUI::update_pan_linkage));
-       _io.panner().StateChanged.connect (slot (*this, &PannerUI::update_pan_state));
+       _io.panner().Changed.connect (mem_fun(*this, &PannerUI::panner_changed));
+       _io.panner().LinkStateChanged.connect (mem_fun(*this, &PannerUI::update_pan_linkage));
+       _io.panner().StateChanged.connect (mem_fun(*this, &PannerUI::update_pan_state));
 
        pan_changed (0);
        update_pan_sensitive ();
@@ -183,7 +184,7 @@ PannerUI::panning_link_direction_clicked()
 void
 PannerUI::update_pan_linkage ()
 {
-       ENSURE_GUI_THREAD(slot (*this, &PannerUI::update_pan_linkage));
+       ENSURE_GUI_THREAD(mem_fun(*this, &PannerUI::update_pan_linkage));
        
        bool x = _io.panner().linked();
        bool bx = panning_link_button.get_active();
@@ -199,10 +200,10 @@ PannerUI::update_pan_linkage ()
 
        switch (_io.panner().link_direction()) {
        case Panner::SameDirection:
-               static_cast<Pixmap*> (panning_link_direction_button.get_child())->set (forwdblarrow_xpm);
+               panning_link_direction_button.set_image (*(manage (new Image (Gdk::Pixbuf::create_from_xpm_data (forwdblarrow_xpm)))));
                break;
        default:
-               static_cast<Pixmap*> (panning_link_direction_button.get_child())->set (revdblarrow_xpm);
+               panning_link_direction_button.set_image (*(manage (new Image (Gdk::Pixbuf::create_from_xpm_data (revdblarrow_xpm)))));
                break;
        }
 }
@@ -212,22 +213,22 @@ PannerUI::set_width (Width w)
 {
        switch (w) {
        case Wide:
-               panning_viewport.set_usize (61, 61);
+               panning_viewport.set_size_request (61, 61);
                if (panner) {
-                       panner->set_usize (61, 61);
+                       panner->set_size_request (61, 61);
                }
                for (vector<BarController*>::iterator i = pan_bars.begin(); i != pan_bars.end(); ++i) {
-                               (*i)->set_usize (61, 15);
+                               (*i)->set_size_request (61, 15);
                }
                static_cast<Gtk::Label*> (panning_link_button.get_child())->set_text (_("link"));
                break;
        case Narrow:
-               panning_viewport.set_usize (31, 61);
+               panning_viewport.set_size_request (31, 61);
                if (panner) {
-                       panner->set_usize (31, 61);
+                       panner->set_size_request (31, 61);
                }
                for (vector<BarController*>::iterator i = pan_bars.begin(); i != pan_bars.end(); ++i) {
-                               (*i)->set_usize (31, 15);
+                               (*i)->set_size_request (31, 15);
                }
                static_cast<Gtk::Label*> (panning_link_button.get_child())->set_text (_("L"));
                break;
@@ -258,21 +259,10 @@ PannerUI::~PannerUI ()
 }
 
 
-gint
-PannerUI::entry_focus_event (GdkEventFocus* ev)
-{
-       if (ev->in) {
-               ARDOUR_UI::instance()->allow_focus (true);
-       } else {
-               ARDOUR_UI::instance()->allow_focus (false);
-       }
-       return TRUE;
-}
-
 void
 PannerUI::panner_changed ()
 {
-       ENSURE_GUI_THREAD (slot (*this, &PannerUI::panner_changed));
+       ENSURE_GUI_THREAD (mem_fun(*this, &PannerUI::panner_changed));
        setup_pan ();
 }
 
@@ -280,7 +270,7 @@ void
 PannerUI::update_pan_state ()
 {
        /* currently nothing to do */
-       // ENSURE_GUI_THREAD (slot (*this, &PannerUI::update_panner_state));
+       // ENSURE_GUI_THREAD (mem_fun(*this, &PannerUI::update_panner_state));
 }
 
 void
@@ -319,41 +309,39 @@ PannerUI::setup_pan ()
                        _io.panner()[asz]->get_position (x);
 
                        pan_adjustments.push_back (new Adjustment (x, 0, 1.0, 0.05, 0.1));
-                       pan_adjustments.back()->value_changed.connect (bind (slot (*this, &PannerUI::pan_adjustment_changed), (uint32_t) asz));
+                       pan_adjustments.back()->signal_value_changed().connect (bind (mem_fun(*this, &PannerUI::pan_adjustment_changed), (uint32_t) asz));
 
-                       _io.panner()[asz]->Changed.connect (bind (slot (*this, &PannerUI::pan_value_changed), (uint32_t) asz));
+                       _io.panner()[asz]->Changed.connect (bind (mem_fun(*this, &PannerUI::pan_value_changed), (uint32_t) asz));
 
                        bc = new BarController (*pan_adjustments[asz], 
                                                &_io.panner()[asz]->midi_control(),
-                                               bind (slot (*this, &PannerUI::pan_printer), pan_adjustments[asz]));
+                                               bind (mem_fun(*this, &PannerUI::pan_printer), pan_adjustments[asz]));
                        
                        if (_session.midi_port()) {
                                _io.panner()[asz]->reset_midi_control (_session.midi_port(), true);
                        }
                        
                        bc->set_name ("PanSlider");
-                       bc->set_shadow_type (GTK_SHADOW_NONE);
+                       bc->set_shadow_type (Gtk::SHADOW_NONE);
                        bc->set_style (BarController::Line);
-                       bc->get_spin_button().focus_in_event.connect (slot (*this, &PannerUI::entry_focus_event));
-                       bc->get_spin_button().focus_out_event.connect (slot (*this, &PannerUI::entry_focus_event));
 
-                       bc->StartGesture.connect (bind (slot (_io, &IO::start_pan_touch), (uint32_t) asz));
-                       bc->StopGesture.connect (bind (slot (_io, &IO::end_pan_touch), (uint32_t) asz));
+                       bc->StartGesture.connect (bind (mem_fun (_io, &IO::start_pan_touch), (uint32_t) asz));
+                       bc->StopGesture.connect (bind (mem_fun (_io, &IO::end_pan_touch), (uint32_t) asz));
 
                        char buf[64];
                        snprintf (buf, sizeof (buf), _("panner for channel %u"), asz + 1);
                        ARDOUR_UI::instance()->tooltips().set_tip (bc->event_widget(), buf);
 
-                       bc->event_widget().button_release_event.connect
-                               (bind (slot (*this, &PannerUI::pan_button_event), (uint32_t) asz));
+                       bc->event_widget().signal_button_release_event().connect
+                               (bind (mem_fun(*this, &PannerUI::pan_button_event), (uint32_t) asz));
 
                        pan_bars.push_back (bc);
                        switch (_width) {
                        case Wide:
-                               pan_bars.back()->set_usize (61, 15);
+                               pan_bars.back()->set_size_request (61, 15);
                                break;
                        case Narrow:
-                               pan_bars.back()->set_usize (31, 15);
+                               pan_bars.back()->set_size_request (31, 15);
                                break;
                        }
 
@@ -392,7 +380,7 @@ PannerUI::setup_pan ()
                
                update_pan_sensitive ();
                panner->reset (_io.n_inputs());
-               panner->set_usize (w, 61);
+               panner->set_size_request (w, 61);
 
                /* and finally, add it to the panner frame */
 
@@ -434,19 +422,19 @@ PannerUI::build_pan_menu (uint32_t which)
        
        /* set state first, connect second */
 
-       (dynamic_cast<CheckMenuItem*> (items.back()))->set_active (_io.panner()[which]->muted());
-       (dynamic_cast<CheckMenuItem*> (items.back()))->toggled.connect
-               (bind (slot (*this, &PannerUI::pan_mute), which));
+       (dynamic_cast<CheckMenuItem*> (&items.back()))->set_active (_io.panner()[which]->muted());
+       (dynamic_cast<CheckMenuItem*> (&items.back()))->signal_toggled().connect
+               (bind (mem_fun(*this, &PannerUI::pan_mute), which));
 
-       items.push_back (CheckMenuElem (_("Bypass"), slot (*this, &PannerUI::pan_bypass_toggle)));
-       bypass_menu_item = static_cast<CheckMenuItem*> (items.back());
+       items.push_back (CheckMenuElem (_("Bypass"), mem_fun(*this, &PannerUI::pan_bypass_toggle)));
+       bypass_menu_item = static_cast<CheckMenuItem*> (&items.back());
 
        /* set state first, connect second */
 
        bypass_menu_item->set_active (_io.panner().bypassed());
-       bypass_menu_item->toggled.connect (slot (*this, &PannerUI::pan_bypass_toggle));
+       bypass_menu_item->signal_toggled().connect (mem_fun(*this, &PannerUI::pan_bypass_toggle));
 
-       items.push_back (MenuElem (_("Reset"), slot (*this, &PannerUI::pan_reset)));
+       items.push_back (MenuElem (_("Reset"), mem_fun(*this, &PannerUI::pan_reset)));
        items.push_back (SeparatorElem());
        items.push_back (MenuElem (_("Reset all")));
 }
@@ -567,7 +555,7 @@ PannerUI::pan_adjustment_changed (uint32_t which)
 void
 PannerUI::pan_value_changed (uint32_t which)
 {
-       ENSURE_GUI_THREAD (bind (slot (*this, &PannerUI::pan_value_changed), which));
+       ENSURE_GUI_THREAD (bind (mem_fun(*this, &PannerUI::pan_value_changed), which));
                                                           
        if (which < _io.panner().size()) {
                float xpos;