summaryrefslogtreecommitdiff
path: root/libs/surfaces/mackie/surface.h
diff options
context:
space:
mode:
authorJohn Anderson <ardour@semiosix.com>2007-02-14 19:56:16 +0000
committerJohn Anderson <ardour@semiosix.com>2007-02-14 19:56:16 +0000
commite878b365193ad9315e557a8245b767d8a0fe568d (patch)
treed03d6b7bc7bb57c7c55d370010b8c6e6bb6619ae /libs/surfaces/mackie/surface.h
parent92c09a6d91fa90bbfaec4d94e2c6e6c11f1e49a3 (diff)
merge r1449 from surfaces branch to include mackie surface and tranzport updates. Thanks to Gerd Flaig for the merge command: svn merge svn+ssh://ardoursvn@ardour.org/ardour2/trunk@1449 svn+ssh://ardoursvn@ardour.org/ardour2/branches/surfaces.
git-svn-id: svn://localhost/ardour2/trunk@1460 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/surfaces/mackie/surface.h')
-rw-r--r--libs/surfaces/mackie/surface.h85
1 files changed, 85 insertions, 0 deletions
diff --git a/libs/surfaces/mackie/surface.h b/libs/surfaces/mackie/surface.h
new file mode 100644
index 0000000000..28bbaf8c2b
--- /dev/null
+++ b/libs/surfaces/mackie/surface.h
@@ -0,0 +1,85 @@
+#ifndef mackie_surface_h
+#define mackie_surface_h
+
+#include "controls.h"
+#include "types.h"
+
+namespace Mackie
+{
+
+class MackieButtonHandler;
+
+/**
+ This represents an entire control surface, made up of Groups,
+ Strips and Controls. There are several collections for
+ ease of addressing in different ways, but only one collection
+ has definitive ownership.
+
+ It handles mapping button ids to press_ and release_ calls.
+
+ There are various emulations of the Mackie around, so specific
+ emulations will inherit from this to change button mapping, or
+ have 7 fader channels instead of 8, or whatever.
+
+ Currently there are BcfSurface and MackieSurface.
+
+ TODO maybe make Group inherit from Control, for ease of ownership.
+*/
+class Surface
+{
+public:
+ Surface( uint32_t max_strips );
+ virtual ~Surface();
+
+ /// Calls the virtual initialisation methods. This *must* be called after
+ /// construction, because c++ is too dumb to call virtual methods from
+ /// inside a constructor
+ void init();
+
+ typedef std::vector<Control*> Controls;
+
+ /// This collection has ownership of all the controls
+ Controls controls;
+
+ /**
+ These are alternative addressing schemes
+ They use maps because the indices aren't always
+ 0-based.
+ */
+ std::map<int,Control*> faders;
+ std::map<int,Control*> pots;
+ std::map<int,Control*> buttons;
+ std::map<int,Control*> leds;
+
+ /// no strip controls in here because they usually
+ /// have the same names.
+ std::map<std::string,Control*> controls_by_name;
+
+ /// The collection of all numbered strips. No master
+ /// strip in here.
+ typedef std::vector<Strip*> Strips;
+ Strips strips;
+
+ /// This collection owns the groups
+ typedef std::map<std::string,Group*> Groups;
+ Groups groups;
+
+ uint32_t max_strips() const
+ {
+ return _max_strips;
+ }
+
+ /// map button ids to calls to press_ and release_ in mbh
+ virtual void handle_button( MackieButtonHandler & mbh, ButtonState bs, Button & button ) = 0;
+
+protected:
+ virtual void init_controls() = 0;
+ virtual void init_strips( uint32_t max_strips, uint32_t unit_strips );
+
+private:
+ uint32_t _max_strips;
+};
+
+}
+
+#endif