summaryrefslogtreecommitdiff
path: root/gtk2_ardour/port_matrix.h
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-12-08 16:07:28 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-12-08 16:07:28 +0000
commit3be16e8afbd891c0bfe7227158384ed0d127597f (patch)
tree73a8f761fc13cbd0613d3923a34748bb9aa761d2 /gtk2_ardour/port_matrix.h
parenta9bb336fc44ab4937978f5a0308e440ed632ea50 (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.h116
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;