summaryrefslogtreecommitdiff
path: root/libs/surfaces/mackie/surface.h
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-06-02 21:41:35 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-06-02 21:41:35 +0000
commit449aab3c465bbbf66d221fac3d7ea559f1720357 (patch)
tree6843cc40c88250a132acac701271f1504cd2df04 /libs/surfaces/mackie/surface.h
parent9c0d7d72d70082a54f823cd44c0ccda5da64bb6f (diff)
rollback to 3428, before the mysterious removal of libs/* at 3431/3432
git-svn-id: svn://localhost/ardour2/branches/3.0@3435 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/surfaces/mackie/surface.h')
-rw-r--r--libs/surfaces/mackie/surface.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/libs/surfaces/mackie/surface.h b/libs/surfaces/mackie/surface.h
new file mode 100644
index 0000000000..0ccde75537
--- /dev/null
+++ b/libs/surfaces/mackie/surface.h
@@ -0,0 +1,94 @@
+#ifndef mackie_surface_h
+#define mackie_surface_h
+
+#include "controls.h"
+#include "types.h"
+#include <stdint.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:
+ /**
+ A Surface can be made up of multiple units. eg one Mackie MCU plus
+ one or more Mackie MCU extenders.
+
+ \param max_strips is the number of strips for the entire surface.
+ \param unit_strips is the number of strips per unit.
+ */
+ Surface( uint32_t max_strips, uint32_t unit_strips = 8 );
+ 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;
+ uint32_t _unit_strips;
+};
+
+}
+
+#endif