/* Copyright (C) 2006,2007 John Anderson This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License 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; void Group::add( Control & control ) { _controls.push_back( &control ); } 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. generated using 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 ) { 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() ); } } Control::Control( int id, int ordinal, std::string name, Group & group ) : _id( id ) , _ordinal( ordinal ) , _name( name ) , _group( group ) , _in_use( false ) , _in_use_timeout( 250 ) { } /** generated with controls[1].each do |x| puts <