remove "New Return" menu option from processor box; make return toggle processor...
[ardour.git] / gtk2_ardour / port_matrix_component.h
index d28299b8efd2ef432689979651565a8759141e49..196a24b0c01333987d88a7e156a906a1e42bf3b7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2002-2009 Paul Davis 
+    Copyright (C) 2002-2009 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 
 #include <stdint.h>
 #include <gtkmm/eventbox.h>
+#include <boost/shared_ptr.hpp>
 
 class PortMatrix;
 class PortMatrixBody;
 class PortMatrixNode;
+class PortGroup;
+class PortGroupList;
+
+namespace ARDOUR {
+       class BundleChannel;
+}
 
 /** One component of the PortMatrix.  This is a cairo-rendered
  *  Pixmap.
@@ -40,8 +47,11 @@ public:
        virtual double parent_to_component_x (double x) const = 0;
        virtual double component_to_parent_y (double y) const = 0;
        virtual double parent_to_component_y (double y) const = 0;
-       virtual void mouseover_changed (PortMatrixNode const &) = 0;
+       virtual void mouseover_changed (std::list<PortMatrixNode> const &) = 0;
        virtual void draw_extra (cairo_t *) = 0;
+       virtual void button_press (double, double, int, uint32_t, guint) {}
+       virtual void button_release (double, double, int, uint32_t, guint) {}
+       virtual void motion (double, double) {}
 
        void set_show_ports (bool);
        void setup ();
@@ -51,7 +61,7 @@ public:
        void require_render () {
                _render_required = true;
        }
-       
+
        void require_rebuild () {
                _dimension_computation_required = true;
                _render_required = true;
@@ -65,14 +75,9 @@ public:
                return _parent_rectangle;
        }
 
-       /** @return width of columns in the grid */
-       static uint32_t column_width () {
-               return 32;
-       }
-
-       /** @return height of rows in the grid */
-       static uint32_t row_height () {
-               return 32;
+       /** @return grid spacing */
+       static uint32_t grid_spacing () {
+               return 24;
        }
 
 protected:
@@ -99,7 +104,7 @@ protected:
 
        /** @return space around the connection indicator */
        static uint32_t connection_indicator_pad () {
-               return 8;
+               return 6;
        }
 
        static uint32_t mouseover_line_width () {
@@ -163,9 +168,12 @@ protected:
                        return Gdk::Color ("#444444");
                }
        }
-       
+
        void set_source_rgb (cairo_t *, Gdk::Color const &);
        void set_source_rgba (cairo_t *, Gdk::Color const &, double);
+       uint32_t group_size (boost::shared_ptr<const PortGroup>) const;
+       uint32_t channel_to_position (ARDOUR::BundleChannel, boost::shared_ptr<const PortGroup>) const;
+       virtual ARDOUR::BundleChannel position_to_channel (double, double, boost::shared_ptr<const PortGroup>) const;
 
        /** Render the complete component to a cairo context. */
        virtual void render (cairo_t *) = 0;
@@ -180,7 +188,7 @@ protected:
        uint32_t _height; ///< full height of the contents
        Gdk::Rectangle _parent_rectangle;
 
-private:       
+private:
        GdkPixmap* _pixmap; ///< pixmap
        bool _render_required; ///< true if the rendered pixmap is out of date
        bool _dimension_computation_required; ///< true if the dimensions are out of date