diff options
author | John Anderson <ardour@semiosix.com> | 2007-02-14 19:56:16 +0000 |
---|---|---|
committer | John Anderson <ardour@semiosix.com> | 2007-02-14 19:56:16 +0000 |
commit | e878b365193ad9315e557a8245b767d8a0fe568d (patch) | |
tree | d03d6b7bc7bb57c7c55d370010b8c6e6bb6619ae /libs/surfaces/mackie/surface.h | |
parent | 92c09a6d91fa90bbfaec4d94e2c6e6c11f1e49a3 (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.h | 85 |
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 |