lots of MIDI editing stuff. to be explained on the website when its done
[ardour.git] / gtk2_ardour / port_matrix_body.h
index 753f4f70969dd6e6a80b7a20e95cb585e4ae4d77..bbc72ddc7e80cda3707f24d62316d8f39234622f 100644 (file)
 #ifndef __gtk_ardour_port_matrix_body_h__
 #define __gtk_ardour_port_matrix_body_h__
 
-#include "port_matrix_column_labels.h"
-#include "port_matrix_row_labels.h"
-#include "port_matrix_grid.h"
+#include <gtkmm/eventbox.h>
+#include "port_group.h"
+#include "port_matrix_types.h"
 
 class PortMatrix;
+class PortMatrixColumnLabels;
+class PortMatrixRowLabels;
+class PortMatrixGrid;
 
 /** The main body of the port matrix.  It is made up of three parts:
  *  column labels, grid and row labels, each drawn using cairo.
- *  This class handles the arrangement of these parts.
  */
 class PortMatrixBody : public Gtk::EventBox
 {
 public:
-       enum Arrangement {
-               TOP_AND_RIGHT,
-               BOTTOM_AND_LEFT
-       };
+       PortMatrixBody (PortMatrix *);
+       ~PortMatrixBody ();
 
-       PortMatrixBody (PortMatrix *, Arrangement);
-
-       /** @return bundles to offer for columns */
-       std::vector<boost::shared_ptr<ARDOUR::Bundle> > const & column_bundles () {
-               return _column_bundles;
-       }
-
-       /** @return bundles to offer for rows */
-       std::vector<boost::shared_ptr<ARDOUR::Bundle> > const & row_bundles () {
-               return _row_bundles;
-       }
-       
-       void setup (
-               std::vector<boost::shared_ptr<ARDOUR::Bundle> > const &,
-               std::vector<boost::shared_ptr<ARDOUR::Bundle> > const &
-               );
+       void setup ();
 
        uint32_t full_scroll_width ();
        uint32_t alloc_scroll_width ();
        uint32_t full_scroll_height ();
        uint32_t alloc_scroll_height ();
 
+       uint32_t xoffset () const {
+               return _xoffset;
+       }
        void set_xoffset (uint32_t);
+       uint32_t yoffset () const {
+               return _yoffset;
+       }
        void set_yoffset (uint32_t);
 
        void rebuild_and_draw_grid ();
+       
+       void set_mouseover (PortMatrixNode const &);
+       PortMatrixNode mouseover () const {
+               return _mouseover;
+       }
+
+       void highlight_associated_channels (int, ARDOUR::BundleChannel);
+       void component_size_changed ();
+       std::pair<uint32_t, uint32_t> max_size () const;
 
 protected:
        bool on_expose_event (GdkEventExpose *);
        void on_size_request (Gtk::Requisition *);
        void on_size_allocate (Gtk::Allocation &);
        bool on_button_press_event (GdkEventButton *);
-
+       bool on_button_release_event (GdkEventButton *);
+       bool on_leave_notify_event (GdkEventCrossing *);
+       bool on_motion_notify_event (GdkEventMotion *);
+       
 private:
        void compute_rectangles ();
        void rebuild_and_draw_column_labels ();
        void rebuild_and_draw_row_labels ();
-       
-       PortMatrix* _port_matrix;
-       PortMatrixColumnLabels _column_labels;
-       PortMatrixRowLabels _row_labels;
-       PortMatrixGrid _grid;
+       void update_bundles ();
+       void set_cairo_clip (cairo_t *, Gdk::Rectangle const &) const;
+
+       PortMatrix* _matrix;
+       PortMatrixColumnLabels* _column_labels;
+       PortMatrixRowLabels* _row_labels;
+       PortMatrixGrid* _grid;
 
-       Arrangement _arrangement;
        uint32_t _alloc_width; ///< allocated width
        uint32_t _alloc_height; ///< allocated height
        Gdk::Rectangle _column_labels_rect;
@@ -90,10 +94,8 @@ private:
        uint32_t _xoffset;
        uint32_t _yoffset;
 
-       /// bundles to offer for columns
-       std::vector<boost::shared_ptr<ARDOUR::Bundle> > _column_bundles;
-       /// bundles to offer for rows
-       std::vector<boost::shared_ptr<ARDOUR::Bundle> > _row_bundles;
+       PortMatrixNode _mouseover;
+       bool _mouse_over_grid;
 
        std::list<sigc::connection> _bundle_connections;
 };