Fix up mouseover handling in the port matrix.
[ardour.git] / gtk2_ardour / panner_ui.cc
index 3368905ad3f4d1a791152bef7dab15b22d062545..728dfcbcfe246b66abf359ab4e92c67f07782b88 100644 (file)
@@ -124,6 +124,7 @@ PannerUI::PannerUI (Session& s)
        pack_start (pan_vbox, true, true);
 
        panner = 0;
+       big_window = 0;
 
        set_width(Narrow);
 }
@@ -133,15 +134,11 @@ PannerUI::set_io (boost::shared_ptr<IO> io)
 {
        connections.clear ();
        
-       if (pan_astyle_menu) {
-               delete pan_astyle_menu;
-               pan_astyle_menu = 0;
-       }
-       if (pan_astate_menu) {
-               delete pan_astate_menu;
-               pan_astate_menu = 0;
-       }
+       delete pan_astyle_menu;
+       pan_astyle_menu = 0;
+
+       delete pan_astate_menu;
+       pan_astate_menu = 0;
                        
        _io = io;
  
@@ -149,10 +146,8 @@ PannerUI::set_io (boost::shared_ptr<IO> io)
        connections.push_back (_io->panner().LinkStateChanged.connect (mem_fun(*this, &PannerUI::update_pan_linkage)));
        connections.push_back (_io->panner().StateChanged.connect (mem_fun(*this, &PannerUI::update_pan_state)));
  
-       if (panner) {
-               delete panner;
-               panner = 0;
-       }
+       delete panner;
+       panner = 0;
  
        setup_pan ();
 
@@ -304,21 +299,11 @@ PannerUI::~PannerUI ()
                delete (*i);
        }
 
-       if (panner) {
-               delete panner;
-       }
-
-       if (pan_menu) {
-               delete pan_menu;
-       }
-       
-       if (pan_astyle_menu) {
-               delete pan_astyle_menu;
-       }
-       
-       if (pan_astate_menu) {
-               delete pan_astate_menu;
-       }
+       delete panner;
+       delete big_window;
+       delete pan_menu;
+       delete pan_astyle_menu;
+       delete pan_astate_menu;
 }
 
 
@@ -437,10 +422,17 @@ PannerUI::setup_pan ()
                        panner = new Panner2d (_io->panner(), 61);
                        panner->set_name ("MixerPanZone");
                        panner->show ();
+
+                       panner->signal_button_press_event().connect
+                               (bind (mem_fun(*this, &PannerUI::pan_button_event), (uint32_t) 0), false);
                }
                
                update_pan_sensitive ();
                panner->reset (_io->n_inputs().n_audio());
+               if (big_window) {
+                       big_window->reset (_io->n_inputs().n_audio());
+               }
                panner->set_size_request (-1, 61);
 
                /* and finally, add it to the panner frame */
@@ -455,6 +447,16 @@ bool
 PannerUI::pan_button_event (GdkEventButton* ev, uint32_t which)
 {
        switch (ev->button) {
+       case 1:
+               if (panner && ev->type == GDK_2BUTTON_PRESS) {
+                       if (!big_window) {
+                               big_window = new Panner2dWindow (panner->get_panner(), 400, _io->n_inputs().n_audio());
+                       }
+                       big_window->show ();
+                       return true;
+               }
+               break;
+
        case 3:
                if (pan_menu == 0) {
                        pan_menu = manage (new Menu);
@@ -688,7 +690,7 @@ PannerUI::pan_printer (char *buf, uint32_t len, Adjustment* adj)
 }
 
 void
-PannerUI::update_pan_sensitive ()
+PannerUI::update_pan_sensitive () 
 {
        bool sensitive = !(_io->panner().automation_state() & Play);
 
@@ -705,6 +707,9 @@ PannerUI::update_pan_sensitive ()
                if (panner) {
                        panner->set_sensitive (sensitive);
                }
+               if (big_window) {
+                       big_window->set_sensitive (sensitive);
+               }
                break;
        }
 }