X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fmackie%2Fcontrols.cc;h=bbe1029f30080389740991e4ebe46302cea936ae;hb=0c448c387bf4fc11c1bc2494055303ed12a15208;hp=9369bb2b6214dafeba4c5f766d685e7a9f251c61;hpb=a202b08f653151ab4b54742fa177a639826cc360;p=ardour.git diff --git a/libs/surfaces/mackie/controls.cc b/libs/surfaces/mackie/controls.cc index 9369bb2b62..bbe1029f30 100644 --- a/libs/surfaces/mackie/controls.cc +++ b/libs/surfaces/mackie/controls.cc @@ -1,4 +1,4 @@ -/* + /* Copyright (C) 2006,2007 John Anderson This program is free software; you can redistribute it and/or modify @@ -15,232 +15,112 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "controls.h" -#include "types.h" -#include "mackie_midi_builder.h" #include #include #include -using namespace Mackie; -using namespace std; - -uint32_t Control::button_cnt = 0; -uint32_t Control::pot_cnt = 0; -uint32_t Control::fader_cnt = 0; -uint32_t Control::led_cnt = 0; -uint32_t Control::jog_cnt = 0; +#include "ardour/automation_control.h" -void Group::add( Control & control ) -{ - _controls.push_back( &control ); -} +#include "controls.h" +#include "types.h" +#include "surface.h" +#include "control_group.h" +#include "button.h" +#include "led.h" +#include "pot.h" +#include "fader.h" +#include "jog.h" +#include "meter.h" -Strip::Strip( const std::string & name, int index ) - : Group( name ) - , _solo( 0 ) - , _recenable( 0 ) - , _mute( 0 ) - , _select( 0 ) - , _vselect( 0 ) - , _fader_touch( 0 ) - , _vpot( 0 ) - , _gain( 0 ) - , _index( index ) -{ -} -/** - TODO could optimise this to use enum, but it's only - called during the protocol class instantiation. +using namespace std; +using namespace ArdourSurface; +using namespace Mackie; - generated using +using ARDOUR::AutomationControl; - irb -r controls.rb - sf=Surface.new - sf.parse - controls = sf.groups.find{|x| x[0] =~ /strip/}.each{|x| puts x[1]} - controls[1].each {|x| puts "\telse if ( control.name() == \"#{x.name}\" )\n\t{\n\t\t_#{x.name} = reinterpret_cast<#{x.class.name}*>(&control);\n\t}\n"} -*/ -void Strip::add( Control & control ) +void Group::add (Control& control) { - Group::add( control ); - if ( control.name() == "gain" ) - { - _gain = reinterpret_cast(&control); - } - else if ( control.name() == "vpot" ) - { - _vpot = reinterpret_cast(&control); - } - else if ( control.name() == "recenable" ) - { - _recenable = reinterpret_cast(&control); - } - else if ( control.name() == "solo" ) - { - _solo = reinterpret_cast(&control); - } - else if ( control.name() == "mute" ) - { - _mute = reinterpret_cast(&control); - } - else if ( control.name() == "select" ) - { - _select = reinterpret_cast(&control); - } - else if ( control.name() == "vselect" ) - { - _vselect = reinterpret_cast(&control); - } - else if ( control.name() == "fader_touch" ) - { - _fader_touch = reinterpret_cast(&control); - } - else if ( control.type() == Control::type_led || control.type() == Control::type_led_ring ) - { - // do nothing - cout << "Strip::add not adding " << control << endl; - } - else - { - ostringstream os; - os << "Strip::add: unknown control type " << control; - throw MackieControlException( os.str() ); - } + _controls.push_back (&control); } -Control::Control( int id, int ordinal, std::string name, Group & group ) -: _id( id ) -, _ordinal( ordinal ) -, _name( name ) -, _group( group ) -, _in_use( false ) +Control::Control (int id, std::string name, Group & group) + : _id (id) + , _name (name) + , _group (group) + , _in_use (false) { } -/** - generated with - -controls[1].each do |x| - puts < ac) { - if ( _select == 0 ) - throw MackieControlException( "select is null" ); - return *_select; + normal_ac = ac; } -Button & Strip::vselect() + +void +Control::set_value (float val) { - if ( _vselect == 0 ) - throw MackieControlException( "vselect is null" ); - return *_vselect; + if (normal_ac) { + normal_ac->set_value (normal_ac->interface_to_internal (val)); + } } -Button & Strip::fader_touch() + +float +Control::get_value () { - if ( _fader_touch == 0 ) - throw MackieControlException( "fader_touch is null" ); - return *_fader_touch; + if (!normal_ac) { + return 0.0f; + } + return normal_ac->internal_to_interface (normal_ac->get_value()); } -/** @return true if the control is in use, or false otherwise. - Buttons are `in use' when they are held down. - Faders with touch support are `in use' when they are being touched. - Pots, or faders without touch support, are `in use' from the first move - event until a timeout after the last move event. -*/ -bool -Control::in_use () const +void +Control::start_touch (double when) { - return _in_use; + if (normal_ac) { + return normal_ac->start_touch (when); + } } void -Control::set_in_use (bool in_use) +Control::stop_touch (bool mark, double when) { - _in_use = in_use; + if (normal_ac) { + return normal_ac->stop_touch (mark, when); + } } -ostream & Mackie::operator << ( ostream & os, const Mackie::Control & control ) +ostream & operator << (ostream & os, const ArdourSurface::Mackie::Control & control) { - os << typeid( control ).name(); + os << typeid (control).name(); os << " { "; os << "name: " << control.name(); os << ", "; - os << "id: " << "0x" << setw(4) << setfill('0') << hex << control.id() << setfill(' '); - os << ", "; - os << "type: " << "0x" << setw(2) << setfill('0') << hex << control.type() << setfill(' '); - os << ", "; - os << "raw_id: " << "0x" << setw(2) << setfill('0') << hex << control.raw_id() << setfill(' '); - os << ", "; - os << "ordinal: " << dec << control.ordinal(); + os << "id: " << "0x" << setw(2) << setfill('0') << hex << control.id() << setfill(' '); os << ", "; os << "group: " << control.group().name(); os << " }"; - - return os; -} -std::ostream & Mackie::operator << ( std::ostream & os, const Strip & strip ) -{ - os << typeid( strip ).name(); - os << " { "; - os << "has_solo: " << boolalpha << strip.has_solo(); - os << ", "; - os << "has_recenable: " << boolalpha << strip.has_recenable(); - os << ", "; - os << "has_mute: " << boolalpha << strip.has_mute(); - os << ", "; - os << "has_select: " << boolalpha << strip.has_select(); - os << ", "; - os << "has_vselect: " << boolalpha << strip.has_vselect(); - os << ", "; - os << "has_fader_touch: " << boolalpha << strip.has_fader_touch(); - os << ", "; - os << "has_vpot: " << boolalpha << strip.has_vpot(); - os << ", "; - os << "has_gain: " << boolalpha << strip.has_gain(); - os << " }"; - return os; } +