diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-06-02 21:41:35 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-06-02 21:41:35 +0000 |
commit | 449aab3c465bbbf66d221fac3d7ea559f1720357 (patch) | |
tree | 6843cc40c88250a132acac701271f1504cd2df04 /libs/surfaces/mackie/surface.h | |
parent | 9c0d7d72d70082a54f823cd44c0ccda5da64bb6f (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.h | 94 |
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 |