diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-12-08 16:07:28 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-12-08 16:07:28 +0000 |
commit | 3be16e8afbd891c0bfe7227158384ed0d127597f (patch) | |
tree | 73a8f761fc13cbd0613d3923a34748bb9aa761d2 /gtk2_ardour/port_matrix.h | |
parent | a9bb336fc44ab4937978f5a0308e440ed632ea50 (diff) |
partial patch/partial by-hand merge of 2.X commits 3169&3170 to 3.X codebase
git-svn-id: svn://localhost/ardour2/branches/3.0@4300 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/port_matrix.h')
-rw-r--r-- | gtk2_ardour/port_matrix.h | 116 |
1 files changed, 3 insertions, 113 deletions
diff --git a/gtk2_ardour/port_matrix.h b/gtk2_ardour/port_matrix.h index 89208f357a..b9a5f7e4c6 100644 --- a/gtk2_ardour/port_matrix.h +++ b/gtk2_ardour/port_matrix.h @@ -28,6 +28,8 @@ #include <gtkmm/scrolledwindow.h> #include "ardour_dialog.h" +#include "port_group.h" +#include "matrix.h" namespace ARDOUR { class Session; @@ -35,118 +37,6 @@ namespace ARDOUR { class PortInsert; } -class PortMatrix; - -/// A list of port names, grouped by some aspect of their type e.g. busses, tracks, system -class PortGroup -{ - public: - /** PortGroup constructor. - * @param n Name. - * @param p Port name prefix. - * @param v true if group should be visible in the UI, otherwise false. - */ - PortGroup (std::string const & n, std::string const & p, bool v) : name (n), prefix (p), visible (v) {} - - void add (std::string const & p); - - std::string name; ///< name for the group - std::string prefix; ///< prefix (before colon) e.g. "ardour:" - std::vector<std::string> ports; ///< port names - bool visible; ///< true if the group is visible in the UI -}; - -/// The UI for a PortGroup -class PortGroupUI -{ - public: - PortGroupUI (PortMatrix&, PortGroup&); - - Gtk::Widget& get_table (); - Gtk::Widget& get_visibility_checkbutton (); - std::pair<int, int> unit_size () const; - PortGroup& port_group () { return _port_group; } - void setup_visibility (); - - private: - void port_checkbutton_toggled (Gtk::CheckButton*, int, int); - bool port_checkbutton_release (GdkEventButton* ev, Gtk::CheckButton* b, int r, int c); - void visibility_checkbutton_toggled (); - - PortMatrix& _port_matrix; ///< the PortMatrix that we are working for - PortGroup& _port_group; ///< the PortGroup that we are representing - bool _ignore_check_button_toggle; - Gtk::Table _table; - Gtk::EventBox _table_box; - std::vector<std::vector<Gtk::CheckButton* > > _port_checkbuttons; - Gtk::CheckButton _visibility_checkbutton; -}; - -/// A list of PortGroups -class PortGroupList : public std::list<PortGroup*> -{ - public: - enum Mask { - BUSS = 0x1, - TRACK = 0x2, - SYSTEM = 0x4, - OTHER = 0x8 - }; - - PortGroupList (ARDOUR::Session &, ARDOUR::DataType, bool, Mask); - - void refresh (); - int n_visible_ports () const; - std::string get_port_by_index (int, bool with_prefix = true) const; - void set_type (ARDOUR::DataType); - void set_offer_inputs (bool); - - private: - ARDOUR::Session& _session; - ARDOUR::DataType _type; - bool _offer_inputs; - - PortGroup buss; - PortGroup track; - PortGroup system; - PortGroup other; -}; - - -/// A widget which provides a set of rotated text labels -class RotatedLabelSet : public Gtk::Widget { - public: - RotatedLabelSet (PortGroupList&); - virtual ~RotatedLabelSet (); - - void set_angle (int); - void set_base_width (int); - void update_visibility (); - - protected: - virtual void on_size_request (Gtk::Requisition*); - virtual void on_size_allocate (Gtk::Allocation&); - virtual void on_realize (); - virtual void on_unrealize (); - virtual bool on_expose_event (GdkEventExpose*); - - Glib::RefPtr<Gdk::Window> _gdk_window; - - private: - std::pair<int, int> setup_layout (std::string const &); - - PortGroupList& _port_group_list; ///< list of ports to display - int _angle_degrees; ///< label rotation angle in degrees - double _angle_radians; ///< label rotation angle in radians - int _base_width; ///< width of labels; see set_base_width() for more details - Glib::RefPtr<Pango::Context> _pango_context; - Glib::RefPtr<Pango::Layout> _pango_layout; - Glib::RefPtr<Gdk::GC> _gc; - Gdk::Color _fg_colour; - Gdk::Color _bg_colour; -}; - - class PortMatrix : public Gtk::VBox { public: PortMatrix (ARDOUR::Session&, ARDOUR::DataType, bool, PortGroupList::Mask); @@ -184,10 +74,10 @@ class PortMatrix : public Gtk::VBox { private: PortGroupList _port_group_list; ARDOUR::DataType _type; + Matrix matrix; std::vector<PortGroupUI*> _port_group_ui; std::vector<Gtk::EventBox*> _row_labels; Gtk::VBox* _row_labels_vbox; - RotatedLabelSet _column_labels; Gtk::HBox _overall_hbox; Gtk::VBox _side_vbox; Gtk::HBox _port_group_hbox; |