Fix formatting samplecnt_t (aka int64_t aka long long int)
[ardour.git] / gtk2_ardour / port_matrix_body.h
1 /*
2  * Copyright (C) 2009 Carl Hetherington <carl@carlh.net>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18
19 #ifndef __gtk_ardour_port_matrix_body_h__
20 #define __gtk_ardour_port_matrix_body_h__
21
22 #include <gtkmm/eventbox.h>
23 #include "port_group.h"
24 #include "port_matrix_types.h"
25
26 class PortMatrix;
27 class PortMatrixColumnLabels;
28 class PortMatrixRowLabels;
29 class PortMatrixGrid;
30 class PortMatrixComponent;
31
32 /** The main body of the port matrix.  It is made up of three parts:
33  *  column labels, grid and row labels, each drawn using cairo.
34  */
35 class PortMatrixBody : public Gtk::EventBox
36 {
37 public:
38         PortMatrixBody (PortMatrix *);
39         ~PortMatrixBody ();
40
41         void setup ();
42
43         uint32_t full_scroll_width ();
44         uint32_t alloc_scroll_width ();
45         uint32_t full_scroll_height ();
46         uint32_t alloc_scroll_height ();
47
48         uint32_t xoffset () const {
49                 return _xoffset;
50         }
51         void set_xoffset (uint32_t);
52         uint32_t yoffset () const {
53                 return _yoffset;
54         }
55         void set_yoffset (uint32_t);
56
57         void rebuild_and_draw_grid ();
58
59         void set_mouseover (PortMatrixNode const &);
60         void set_mouseover (std::list<PortMatrixNode> const &);
61         std::list<PortMatrixNode> mouseover () const {
62                 return _mouseover;
63         }
64
65         void highlight_associated_channels (int, ARDOUR::BundleChannel);
66         void component_size_changed ();
67         std::pair<uint32_t, uint32_t> max_size () const;
68
69         uint32_t column_labels_border_x () const;
70         uint32_t column_labels_height () const;
71
72         sigc::signal<void> DimensionsChanged;
73
74 protected:
75         bool on_expose_event (GdkEventExpose *);
76         void on_size_request (Gtk::Requisition *);
77         void on_size_allocate (Gtk::Allocation &);
78         bool on_button_press_event (GdkEventButton *);
79         bool on_button_release_event (GdkEventButton *);
80         bool on_leave_notify_event (GdkEventCrossing *);
81         bool on_motion_notify_event (GdkEventMotion *);
82
83 private:
84         void compute_rectangles ();
85         void rebuild_and_draw_column_labels ();
86         void rebuild_and_draw_row_labels ();
87         void update_bundles ();
88         void set_cairo_clip (cairo_t *, Gdk::Rectangle const &) const;
89
90         PortMatrix* _matrix;
91         PortMatrixColumnLabels* _column_labels;
92         PortMatrixRowLabels* _row_labels;
93         PortMatrixGrid* _grid;
94         std::list<PortMatrixComponent*> _components;
95
96         uint32_t _alloc_width; ///< allocated width
97         uint32_t _alloc_height; ///< allocated height
98         uint32_t _xoffset;
99         uint32_t _yoffset;
100         uint32_t _column_labels_border_x;
101         uint32_t _column_labels_height;
102
103         std::list<PortMatrixNode> _mouseover;
104         bool _ignore_component_size_changed;
105
106         PBD::ScopedConnectionList _bundle_connections;
107 };
108
109 #endif