/* SpiralSound * Copyleft (C) 2001 David Griffiths * * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "ControllerPlugin.h" #include "ControllerPluginGUI.h" #include #include "SpiralIcon.xpm" extern "C" { SpiralPlugin* CreateInstance() { return new ControllerPlugin; } char** GetIcon() { return SpiralIcon_xpm; } int GetID() { return 0x0003; } string GetGroupName() { return "Control"; } } /////////////////////////////////////////////////////// ControllerPlugin::ControllerPlugin() : m_Num(4) { m_Version=5; m_PluginInfo.Name="CV Control"; m_PluginInfo.Width=240; m_PluginInfo.Height=224; m_PluginInfo.NumInputs=0; m_PluginInfo.NumOutputs=4; m_PluginInfo.PortTips.push_back("CV 1"); m_PluginInfo.PortTips.push_back("CV 2"); m_PluginInfo.PortTips.push_back("CV 3"); m_PluginInfo.PortTips.push_back("CV 4"); for (int n=0; nRegister("Number",&m_GUIArgs.Number); m_AudioCH->Register("Value",&m_GUIArgs.Value); m_AudioCH->Register("Min",&m_GUIArgs.Min); m_AudioCH->Register("Max",&m_GUIArgs.Max); m_AudioCH->RegisterData("Name",ChannelHandler::INPUT,m_GUIArgs.Name,256); } ControllerPlugin::~ControllerPlugin() { } PluginInfo &ControllerPlugin::Initialise(const HostInfo *Host) { return SpiralPlugin::Initialise(Host); } SpiralGUIType *ControllerPlugin::CreateGUI() { return new ControllerPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, this,m_AudioCH,m_HostInfo); } void ControllerPlugin::Execute() { for(int c=0; cBUFSIZE; n++) { SetOutput(c,n,m_ChannelVal[c]); } } } void ControllerPlugin::ExecuteCommands() { if (m_AudioCH->IsCommandWaiting()) { switch (m_AudioCH->GetCommand()) { case (SETNUM) : SetNum(m_GUIArgs.Number); break; case (SETALL) : SetAll(m_GUIArgs.Number, m_GUIArgs.Name, m_GUIArgs.Max, m_GUIArgs.Value, m_GUIArgs.Min); break; case (SETNAME) : SetName(m_GUIArgs.Number, m_GUIArgs.Name); break; case (SETMAX) : SetMax(m_GUIArgs.Number, m_GUIArgs.Max); break; case (SETCHANNEL) : SetChannel(m_GUIArgs.Number, m_GUIArgs.Value); break; case (SETMIN) : SetMin(m_GUIArgs.Number, m_GUIArgs.Min); break; } } } void ControllerPlugin::SetNum(int n) { // once to clear the connections with the current info UpdatePluginInfoWithHost(); if (m_Num::iterator i=m_PluginInfo.PortTips.end(); m_PluginInfo.PortTips.erase(i--); RemoveOutput(); m_PluginInfo.NumOutputs--; } m_Num=n; m_PluginInfo.NumOutputs=n; // do the actual update UpdatePluginInfoWithHost(); } // use with caution void ControllerPlugin::Clear() { m_PluginInfo.PortTips.clear(); RemoveAllOutputs(); m_PluginInfo.NumOutputs=0; } void ControllerPlugin::StreamOut(ostream &s) { s<>version; switch (version) { case 5: { Clear(); s>>m_Num; string name; for (int n=0; n>size; s.ignore(1); if (size > 0) { s.get(Buf,size+1); m_Names[n]=Buf; } else { m_Names[n] = ""; } s>>m_MinVal[n]; s>>m_MaxVal[n]; s>>m_ChannelVal[n]; } // add the channels one by one for (int n=0; n>m_Num; string name; for (int n=0; n>m_Names[n]; s>>m_MinVal[n]; s>>m_MaxVal[n]; s>>m_ChannelVal[n]; } // add the channels one by one for (int n=0; n>m_Num; for (int n=0; n>m_ChannelVal[n]; } char Buf[4096]; int size,dummy; s>>dummy; s>>m_Num; for (int n=0; n>size; s.ignore(1); s.get(Buf,size+1); m_Names[n]=Buf; s>>m_MinVal[n]; s>>m_MaxVal[n]; s>>m_ChannelVal[n]; } // add the channels one by one for (int n=0; n