X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fport_matrix_body.h;h=23d07c6ff3f9c083e0f73f333278df9f0260a4e1;hb=a26e6fed50c1e255dac1eeb4518bab97c647ba99;hp=503bb3ab6248efa7fee913ca337fb436d0409403;hpb=61db2175eb8b8fffd0c1796ace78ac33c9e1adf0;p=ardour.git diff --git a/gtk2_ardour/port_matrix_body.h b/gtk2_ardour/port_matrix_body.h index 503bb3ab62..23d07c6ff3 100644 --- a/gtk2_ardour/port_matrix_body.h +++ b/gtk2_ardour/port_matrix_body.h @@ -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 @@ -20,75 +20,91 @@ #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 +#include "port_group.h" +#include "port_matrix_types.h" class PortMatrix; +class PortMatrixColumnLabels; +class PortMatrixRowLabels; +class PortMatrixGrid; +class PortMatrixComponent; /** 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: PortMatrixBody (PortMatrix *); + ~PortMatrixBody (); - /** @return bundles to offer for columns */ - std::vector > const & column_bundles () { - return _column_bundles; - } - - /** @return bundles to offer for rows */ - std::vector > const & row_bundles () { - return _row_bundles; - } - - void setup ( - std::vector > const &, - std::vector > 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 repaint_grid (); + void rebuild_and_draw_grid (); + + void set_mouseover (PortMatrixNode const &); + void set_mouseover (std::list const &); + std::list mouseover () const { + return _mouseover; + } + + void highlight_associated_channels (int, ARDOUR::BundleChannel); + void component_size_changed (); + std::pair max_size () const; + + uint32_t column_labels_border_x () const; + uint32_t column_labels_height () const; + + sigc::signal DimensionsChanged; 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_divs (); - void repaint_column_labels (); - void repaint_row_labels (); - - PortMatrix* _port_matrix; - PortMatrixColumnLabels _column_labels; - PortMatrixRowLabels _row_labels; - PortMatrixGrid _grid; + void compute_rectangles (); + void rebuild_and_draw_column_labels (); + void rebuild_and_draw_row_labels (); + void update_bundles (); + void set_cairo_clip (cairo_t *, Gdk::Rectangle const &) const; + + PortMatrix* _matrix; + PortMatrixColumnLabels* _column_labels; + PortMatrixRowLabels* _row_labels; + PortMatrixGrid* _grid; + std::list _components; uint32_t _alloc_width; ///< allocated width uint32_t _alloc_height; ///< allocated height - uint32_t _alloc_xdiv; ///< position of the division between grid and row labels - uint32_t _alloc_ydiv; ///< position of the division between column labels and grid uint32_t _xoffset; uint32_t _yoffset; + uint32_t _column_labels_border_x; + uint32_t _column_labels_height; - /// bundles to offer for columns - std::vector > _column_bundles; - /// bundles to offer for rows - std::vector > _row_bundles; + std::list _mouseover; + bool _ignore_component_size_changed; - std::list _bundle_connections; + PBD::ScopedConnectionList _bundle_connections; }; #endif