@@ -53,12 +53,13 @@ m_Amped(false) | |||||
m_Version=4; | m_Version=4; | ||||
m_PluginInfo.Name="LADSPA"; | m_PluginInfo.Name="LADSPA"; | ||||
m_PluginInfo.Width=600; | |||||
m_PluginInfo.Height=300; | |||||
m_PluginInfo.Width=500; | |||||
m_PluginInfo.Height=320; | |||||
m_PluginInfo.NumInputs=0; | m_PluginInfo.NumInputs=0; | ||||
m_PluginInfo.NumOutputs=1; | m_PluginInfo.NumOutputs=1; | ||||
m_PluginInfo.PortTips.push_back("Nuffink yet"); | m_PluginInfo.PortTips.push_back("Nuffink yet"); | ||||
m_PluginIndex = 0; | |||||
m_MaxInputPortCount = m_LADSPAInfo.GetMaxInputPortCount(); | m_MaxInputPortCount = m_LADSPAInfo.GetMaxInputPortCount(); | ||||
m_InputPortCount = 0; | m_InputPortCount = 0; | ||||
@@ -72,19 +73,20 @@ m_Amped(false) | |||||
m_AudioCH->RegisterData("GetMaker",ChannelHandler::OUTPUT,m_Maker,256); | m_AudioCH->RegisterData("GetMaker",ChannelHandler::OUTPUT,m_Maker,256); | ||||
m_AudioCH->RegisterData("GetMaxInputPortCount",ChannelHandler::OUTPUT,&(m_MaxInputPortCount),sizeof(m_MaxInputPortCount)); | m_AudioCH->RegisterData("GetMaxInputPortCount",ChannelHandler::OUTPUT,&(m_MaxInputPortCount),sizeof(m_MaxInputPortCount)); | ||||
m_AudioCH->RegisterData("GetInputPortCount",ChannelHandler::OUTPUT,&(m_InputPortCount),sizeof(m_InputPortCount)); | m_AudioCH->RegisterData("GetInputPortCount",ChannelHandler::OUTPUT,&(m_InputPortCount),sizeof(m_InputPortCount)); | ||||
m_AudioCH->RegisterData("GetPluginIndex",ChannelHandler::OUTPUT,&(m_PluginIndex),sizeof(m_PluginIndex)); | |||||
m_OutData.InputPortNames = (char *)malloc(256 * m_MaxInputPortCount); | m_OutData.InputPortNames = (char *)malloc(256 * m_MaxInputPortCount); | ||||
m_OutData.InputPortRanges = (PortRange *)malloc(sizeof(PortRange) * m_MaxInputPortCount); | |||||
m_OutData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_MaxInputPortCount); | |||||
m_OutData.InputPortValues = (float *)calloc(m_MaxInputPortCount, sizeof(float)); | m_OutData.InputPortValues = (float *)calloc(m_MaxInputPortCount, sizeof(float)); | ||||
m_InData.InputPortRanges = (PortRange *)malloc(sizeof(PortRange) * m_MaxInputPortCount); | |||||
m_InData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_MaxInputPortCount); | |||||
if (m_OutData.InputPortNames && | if (m_OutData.InputPortNames && | ||||
m_OutData.InputPortRanges && | |||||
m_InData.InputPortRanges) { | |||||
m_OutData.InputPortSettings && | |||||
m_InData.InputPortSettings) { | |||||
m_AudioCH->RegisterData("GetInputPortNames", ChannelHandler::OUTPUT, m_OutData.InputPortNames, 256 * m_MaxInputPortCount); | m_AudioCH->RegisterData("GetInputPortNames", ChannelHandler::OUTPUT, m_OutData.InputPortNames, 256 * m_MaxInputPortCount); | ||||
m_AudioCH->RegisterData("GetInputPortRanges", ChannelHandler::OUTPUT, m_OutData.InputPortRanges, sizeof(PortRange) * m_MaxInputPortCount); | |||||
m_AudioCH->RegisterData("GetInputPortSettings", ChannelHandler::OUTPUT, m_OutData.InputPortSettings, sizeof(PortSettings) * m_MaxInputPortCount); | |||||
m_AudioCH->RegisterData("GetInputPortValues", ChannelHandler::OUTPUT, m_OutData.InputPortValues, sizeof(float) * m_MaxInputPortCount); | m_AudioCH->RegisterData("GetInputPortValues", ChannelHandler::OUTPUT, m_OutData.InputPortValues, sizeof(float) * m_MaxInputPortCount); | ||||
m_AudioCH->RegisterData("SetInputPortRanges", ChannelHandler::INPUT, m_InData.InputPortRanges, sizeof(PortRange) * m_MaxInputPortCount); | |||||
m_AudioCH->RegisterData("SetInputPortSettings", ChannelHandler::INPUT, m_InData.InputPortSettings, sizeof(PortSettings) * m_MaxInputPortCount); | |||||
} else { | } else { | ||||
cerr<<"Memory allocation error"<<endl; | cerr<<"Memory allocation error"<<endl; | ||||
} | } | ||||
@@ -94,9 +96,9 @@ LADSPAPlugin::~LADSPAPlugin() | |||||
{ | { | ||||
// Free allocated buffers | // Free allocated buffers | ||||
if (m_OutData.InputPortNames) free(m_OutData.InputPortNames); | if (m_OutData.InputPortNames) free(m_OutData.InputPortNames); | ||||
if (m_OutData.InputPortRanges) free(m_OutData.InputPortRanges); | |||||
if (m_OutData.InputPortSettings) free(m_OutData.InputPortSettings); | |||||
if (m_OutData.InputPortValues) free(m_OutData.InputPortValues); | if (m_OutData.InputPortValues) free(m_OutData.InputPortValues); | ||||
if (m_InData.InputPortRanges) free(m_InData.InputPortRanges); | |||||
if (m_InData.InputPortSettings) free(m_InData.InputPortSettings); | |||||
} | } | ||||
PluginInfo &LADSPAPlugin::Initialise(const HostInfo *Host) | PluginInfo &LADSPAPlugin::Initialise(const HostInfo *Host) | ||||
@@ -182,8 +184,8 @@ void LADSPAPlugin::ExecuteCommands() | |||||
{ | { | ||||
switch(m_AudioCH->GetCommand()) | switch(m_AudioCH->GetCommand()) | ||||
{ | { | ||||
case (SETRANGES) : | |||||
SetPortInfo(); | |||||
case (SETPORTSETTINGS) : | |||||
SetPortSettings(); | |||||
break; | break; | ||||
case (SELECTPLUGIN) : | case (SELECTPLUGIN) : | ||||
vector<LADSPAInfo::PluginEntry> pe = m_LADSPAInfo.GetPluginList(); | vector<LADSPAInfo::PluginEntry> pe = m_LADSPAInfo.GetPluginList(); | ||||
@@ -206,18 +208,24 @@ void LADSPAPlugin::StreamOut(ostream &s) | |||||
s<<m_PortMin.size()<<" "; | s<<m_PortMin.size()<<" "; | ||||
assert(m_PortMin.size()==m_PortMax.size()); | assert(m_PortMin.size()==m_PortMax.size()); | ||||
assert(m_PortMin.size()==m_PortClamp.size()); | assert(m_PortMin.size()==m_PortClamp.size()); | ||||
assert(m_PortMin.size()==m_PortDefault.size()); | |||||
for (vector<float>::iterator i=m_PortMin.begin(); | for (vector<float>::iterator i=m_PortMin.begin(); | ||||
i!=m_PortMin.end(); i++) | |||||
i!=m_PortMin.end(); i++) | |||||
{ | { | ||||
s<<*i<<" "; | s<<*i<<" "; | ||||
} | } | ||||
for (vector<float>::iterator i=m_PortMax.begin(); | for (vector<float>::iterator i=m_PortMax.begin(); | ||||
i!=m_PortMax.end(); i++) | |||||
i!=m_PortMax.end(); i++) | |||||
{ | { | ||||
s<<*i<<" "; | s<<*i<<" "; | ||||
} | } | ||||
for (vector<bool>::iterator i=m_PortClamp.begin(); | for (vector<bool>::iterator i=m_PortClamp.begin(); | ||||
i!=m_PortClamp.end(); i++) | |||||
i!=m_PortClamp.end(); i++) | |||||
{ | |||||
s<<*i<<" "; | |||||
} | |||||
for (vector<float>::iterator i=m_PortDefault.begin(); | |||||
i!=m_PortDefault.end(); i++) | |||||
{ | { | ||||
s<<*i<<" "; | s<<*i<<" "; | ||||
} | } | ||||
@@ -296,6 +304,7 @@ void LADSPAPlugin::StreamIn(istream &s) | |||||
s>>PortCount; | s>>PortCount; | ||||
float min,max; | float min,max; | ||||
bool clamp; | bool clamp; | ||||
float defolt; | |||||
for (int n=0; n<PortCount; n++) | for (int n=0; n<PortCount; n++) | ||||
{ | { | ||||
@@ -313,6 +322,11 @@ void LADSPAPlugin::StreamIn(istream &s) | |||||
s>>clamp; | s>>clamp; | ||||
m_PortClamp.push_back(clamp); | m_PortClamp.push_back(clamp); | ||||
} | } | ||||
for (int n=0; n<PortCount; n++) | |||||
{ | |||||
s>>defolt; | |||||
m_PortDefault.push_back(defolt); | |||||
} | |||||
UpdatePlugin(UniqueID, false); | UpdatePlugin(UniqueID, false); | ||||
} | } | ||||
@@ -555,6 +569,7 @@ bool LADSPAPlugin::UpdatePlugin(unsigned long UniqueID, bool PortClampReset) | |||||
m_PortMin.push_back(Min); | m_PortMin.push_back(Min); | ||||
m_PortMax.push_back(Max); | m_PortMax.push_back(Max); | ||||
m_PortClamp.push_back(true); | m_PortClamp.push_back(true); | ||||
m_PortDefault.push_back(0.0f); | |||||
} | } | ||||
} | } | ||||
@@ -582,9 +597,10 @@ bool LADSPAPlugin::UpdatePlugin(unsigned long UniqueID, bool PortClampReset) | |||||
lbl_start[lbl_length] = '\0'; | lbl_start[lbl_length] = '\0'; | ||||
lbl_start += 256; | lbl_start += 256; | ||||
m_OutData.InputPortRanges[n].Min = m_PortMin[n]; | |||||
m_OutData.InputPortRanges[n].Max = m_PortMax[n]; | |||||
m_OutData.InputPortRanges[n].Clamp = m_PortClamp[n]; | |||||
m_OutData.InputPortSettings[n].Min = m_PortMin[n]; | |||||
m_OutData.InputPortSettings[n].Max = m_PortMax[n]; | |||||
m_OutData.InputPortSettings[n].Clamp = m_PortClamp[n]; | |||||
m_OutData.InputPortSettings[n].Default = m_PortDefault[n]; | |||||
} | } | ||||
return true; | return true; | ||||
@@ -595,11 +611,12 @@ bool LADSPAPlugin::UpdatePlugin(unsigned long UniqueID, bool PortClampReset) | |||||
return false; | return false; | ||||
} | } | ||||
void LADSPAPlugin::SetPortInfo(void) | |||||
void LADSPAPlugin::SetPortSettings(void) | |||||
{ | { | ||||
for (unsigned long n = 0; n < m_InputPortCount; n++) { | for (unsigned long n = 0; n < m_InputPortCount; n++) { | ||||
m_PortMin[n] = m_InData.InputPortRanges[n].Min; | |||||
m_PortMax[n] = m_InData.InputPortRanges[n].Max; | |||||
m_PortClamp[n] = m_InData.InputPortRanges[n].Clamp; | |||||
m_PortMin[n] = m_InData.InputPortSettings[n].Min; | |||||
m_PortMax[n] = m_InData.InputPortSettings[n].Max; | |||||
m_PortClamp[n] = m_InData.InputPortSettings[n].Clamp; | |||||
m_PortDefault[n] = m_InData.InputPortSettings[n].Default; | |||||
} | } | ||||
} | } |
@@ -26,11 +26,12 @@ | |||||
static const unsigned int NUM_PORTS = 8; | static const unsigned int NUM_PORTS = 8; | ||||
struct PortRange | |||||
struct PortSettings | |||||
{ | { | ||||
float Min; | float Min; | ||||
float Max; | float Max; | ||||
bool Clamp; | bool Clamp; | ||||
float Default; | |||||
}; | }; | ||||
class LADSPAPlugin : public SpiralPlugin | class LADSPAPlugin : public SpiralPlugin | ||||
@@ -51,23 +52,27 @@ public: | |||||
const char *GetName() { return (const char *)m_Name; } | const char *GetName() { return (const char *)m_Name; } | ||||
const char *GetMaker() { return (const char *)m_Maker; } | const char *GetMaker() { return (const char *)m_Maker; } | ||||
unsigned long GetInputPortCount() { return m_InputPortCount; } | unsigned long GetInputPortCount() { return m_InputPortCount; } | ||||
const char *GetPortName(unsigned long p) { return (const char *)(m_OutData.InputPortNames + p * 256); } | |||||
PortRange GetPortRange(unsigned long p) | |||||
const char *GetPortName(unsigned long p) | |||||
{ | { | ||||
PortRange range; | |||||
range.Min = m_PortMin[p]; | |||||
range.Max = m_PortMax[p]; | |||||
range.Clamp = m_PortClamp[p]; | |||||
return range; | |||||
return (const char *)(m_OutData.InputPortNames + p * 256); | |||||
} | |||||
PortSettings GetPortSettings(unsigned long p) | |||||
{ | |||||
PortSettings settings; | |||||
settings.Min = m_PortMin[p]; | |||||
settings.Max = m_PortMax[p]; | |||||
settings.Clamp = m_PortClamp[p]; | |||||
settings.Default = m_PortDefault[p]; | |||||
return settings; | |||||
} | } | ||||
enum GUICommands{NONE,SETRANGES,SELECTPLUGIN}; | |||||
enum GUICommands{NONE,SETPORTSETTINGS,SELECTPLUGIN}; | |||||
private: | private: | ||||
void UpdatePortRange(void); | void UpdatePortRange(void); | ||||
bool UpdatePlugin(unsigned long UniqueID, bool PortClampReset=true); | bool UpdatePlugin(unsigned long UniqueID, bool PortClampReset=true); | ||||
void SetPortInfo(void); | |||||
void SetPortSettings(void); | |||||
void LoadPluginList(void); | void LoadPluginList(void); | ||||
@@ -81,12 +86,14 @@ private: | |||||
vector<float> m_PortMin; | vector<float> m_PortMin; | ||||
vector<float> m_PortMax; | vector<float> m_PortMax; | ||||
vector<bool> m_PortClamp; | vector<bool> m_PortClamp; | ||||
vector<float> m_PortDefault; | |||||
int m_Version; | int m_Version; | ||||
// our database of ladspa plugins | // our database of ladspa plugins | ||||
LADSPAInfo m_LADSPAInfo; | LADSPAInfo m_LADSPAInfo; | ||||
unsigned long m_PluginIndex; | |||||
unsigned long m_UniqueID; | unsigned long m_UniqueID; | ||||
float m_Gain; | float m_Gain; | ||||
@@ -100,7 +107,7 @@ private: | |||||
struct OutputChannelData | struct OutputChannelData | ||||
{ | { | ||||
char *InputPortNames; | char *InputPortNames; | ||||
PortRange *InputPortRanges; | |||||
PortSettings *InputPortSettings; | |||||
float *InputPortValues; | float *InputPortValues; | ||||
}; | }; | ||||
@@ -110,7 +117,7 @@ private: | |||||
unsigned long PluginIndex; | unsigned long PluginIndex; | ||||
float Gain; | float Gain; | ||||
bool Amped; | bool Amped; | ||||
PortRange *InputPortRanges; | |||||
PortSettings *InputPortSettings; | |||||
}; | }; | ||||
OutputChannelData m_OutData; | OutputChannelData m_OutData; | ||||
@@ -43,48 +43,69 @@ SpiralPluginGUI(w,h,o,ch) | |||||
int Width=20; | int Width=20; | ||||
int Height=100; | int Height=100; | ||||
m_Browser= new Fl_Hold_Browser(5,20,290,260,"LADSPA Plugins"); | |||||
m_Browser->callback((Fl_Callback*)cb_Select); | |||||
for (vector<LADSPAInfo::PluginEntry>::iterator i=PluginList.begin(); | |||||
i!=PluginList.end(); i++) | |||||
{ | |||||
m_Browser->add(i->Name.c_str()); | |||||
} | |||||
// Get maximum input port count | // Get maximum input port count | ||||
m_GUICH->GetData("GetMaxInputPortCount",&(m_InData.MaxInputPortCount)); | m_GUICH->GetData("GetMaxInputPortCount",&(m_InData.MaxInputPortCount)); | ||||
// Set up buffers for data transfer via ChannelHandler | // Set up buffers for data transfer via ChannelHandler | ||||
m_InData.InputPortNames = (char *)malloc(256 * m_InData.MaxInputPortCount); | m_InData.InputPortNames = (char *)malloc(256 * m_InData.MaxInputPortCount); | ||||
m_InData.InputPortRanges = (PortRange *)malloc(sizeof(PortRange) * m_InData.MaxInputPortCount); | |||||
m_InData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_InData.MaxInputPortCount); | |||||
m_InData.InputPortValues = (float *)calloc(m_InData.MaxInputPortCount, sizeof(float)); | m_InData.InputPortValues = (float *)calloc(m_InData.MaxInputPortCount, sizeof(float)); | ||||
if (!(m_InData.InputPortNames && m_InData.InputPortRanges)) { | |||||
if (!(m_InData.InputPortNames && m_InData.InputPortSettings)) { | |||||
cerr<<"Memory allocation error\n"<<endl; | cerr<<"Memory allocation error\n"<<endl; | ||||
} | } | ||||
m_InputScroll = new Fl_Scroll(300,80,290,150," Value Min Max Clamp?"); | |||||
m_InputScroll->align(FL_ALIGN_TOP_LEFT); | |||||
m_InputScroll->type(Fl_Scroll::VERTICAL); | |||||
m_InputScroll->box(FL_DOWN_BOX); | |||||
add(m_InputScroll); | |||||
m_InputPack = new Fl_Pack(300,85,300,100,""); | |||||
m_InputScroll->add(m_InputPack); | |||||
// Set up widgets | |||||
m_Browser = new Fl_Choice(60,20,420,20,"Plugin:"); | |||||
m_Browser->callback((Fl_Callback *)cb_Select); | |||||
m_Browser->add("(None)"); | |||||
for (vector<LADSPAInfo::PluginEntry>::iterator i=PluginList.begin(); | |||||
i!=PluginList.end(); i++) | |||||
{ | |||||
m_Browser->add(i->Name.c_str()); | |||||
} | |||||
m_Name = new Fl_Box(290,20,10,20,"None"); | |||||
m_Name->align(FL_ALIGN_RIGHT); | |||||
m_Name = new Fl_Box(10,45,480,20,"None"); | |||||
m_Name->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); | |||||
m_Name->labelcolor(GUI_COLOUR); | m_Name->labelcolor(GUI_COLOUR); | ||||
m_Name->labelsize(10); | m_Name->labelsize(10); | ||||
add(m_Name); | add(m_Name); | ||||
m_Maker = new Fl_Box(290,40,10,20,"None"); | |||||
m_Maker->align(FL_ALIGN_RIGHT); | |||||
m_Maker = new Fl_Box(10,65,480,20,"None"); | |||||
m_Maker->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); | |||||
m_Maker->labelcolor(GUI_COLOUR); | m_Maker->labelcolor(GUI_COLOUR); | ||||
m_Maker->labelsize(10); | m_Maker->labelsize(10); | ||||
add(m_Maker); | add(m_Maker); | ||||
m_OutputGain = new Fl_Knob(545,240,40,40,"Output Gain"); | |||||
m_InputScroll = new Fl_Scroll(10,105,480,150," Value Min Max Clamp? Default Port Name"); | |||||
m_InputScroll->labelsize(12); | |||||
m_InputScroll->align(FL_ALIGN_TOP_LEFT); | |||||
m_InputScroll->type(Fl_Scroll::VERTICAL); | |||||
m_InputScroll->box(FL_DOWN_BOX); | |||||
add(m_InputScroll); | |||||
m_InputPack = new Fl_Pack(20,115,460,20,""); | |||||
m_InputScroll->add(m_InputPack); | |||||
m_PowerAmp = new Fl_Button(125,277,100,25,"PowerAmp"); | |||||
m_PowerAmp->labelsize(10); | |||||
m_PowerAmp->value(0); | |||||
m_PowerAmp->type(1); | |||||
m_PowerAmp->callback((Fl_Callback*)cb_PowerAmp); | |||||
add(m_PowerAmp); | |||||
m_UpdateMinMax = new Fl_Button(230,277,100,25,"Update Settings"); | |||||
m_UpdateMinMax->labelsize(10); | |||||
m_UpdateMinMax->callback((Fl_Callback*)cb_MinMax); | |||||
add(m_UpdateMinMax); | |||||
m_UpdateInputs = new Fl_Button(335,277,100,25,"Refresh"); | |||||
m_UpdateInputs->labelsize(10); | |||||
m_UpdateInputs->value(1); | |||||
m_UpdateInputs->type(1); | |||||
add(m_UpdateInputs); | |||||
m_OutputGain = new Fl_Knob(440,265,40,40,"Output Gain"); | |||||
m_OutputGain->color(GUI_COLOUR); | m_OutputGain->color(GUI_COLOUR); | ||||
m_OutputGain->type(Fl_Knob::DOTLIN); | m_OutputGain->type(Fl_Knob::DOTLIN); | ||||
m_OutputGain->maximum(2); | m_OutputGain->maximum(2); | ||||
@@ -94,31 +115,13 @@ SpiralPluginGUI(w,h,o,ch) | |||||
m_OutputGain->callback((Fl_Callback*)cb_Gain); | m_OutputGain->callback((Fl_Callback*)cb_Gain); | ||||
add(m_OutputGain); | add(m_OutputGain); | ||||
m_UpdateInputs = new Fl_Button(480,252,50,25,"Refresh"); | |||||
m_UpdateInputs->labelsize(10); | |||||
m_UpdateInputs->value(1); | |||||
m_UpdateInputs->type(1); | |||||
add(m_UpdateInputs); | |||||
m_UpdateMinMax = new Fl_Button(400,252,85,25,"Update Min/Max"); | |||||
m_UpdateMinMax->labelsize(10); | |||||
m_UpdateMinMax->callback((Fl_Callback*)cb_MinMax); | |||||
add(m_UpdateMinMax); | |||||
m_PowerAmp = new Fl_Button(320,252,80,25,"PowerAmp"); | |||||
m_PowerAmp->labelsize(10); | |||||
m_PowerAmp->value(0); | |||||
m_PowerAmp->type(1); | |||||
m_PowerAmp->callback((Fl_Callback*)cb_PowerAmp); | |||||
add(m_PowerAmp); | |||||
end(); | end(); | ||||
} | } | ||||
LADSPAPluginGUI::~LADSPAPluginGUI(void) | LADSPAPluginGUI::~LADSPAPluginGUI(void) | ||||
{ | { | ||||
if (m_InData.InputPortNames) free(m_InData.InputPortNames); | if (m_InData.InputPortNames) free(m_InData.InputPortNames); | ||||
if (m_InData.InputPortRanges) free(m_InData.InputPortRanges); | |||||
if (m_InData.InputPortSettings) free(m_InData.InputPortSettings); | |||||
Fl::check(); | Fl::check(); | ||||
} | } | ||||
@@ -131,6 +134,23 @@ void LADSPAPluginGUI::UpdatePortDisplay(int n, float v) | |||||
m_PortOutput[n]->value(temp); | m_PortOutput[n]->value(temp); | ||||
} | } | ||||
void LADSPAPluginGUI::SetPortSettings(unsigned long n, float min, float max, bool clamp, float defolt) | |||||
{ | |||||
char temp[256]; | |||||
sprintf(temp,"%.4f",min); | |||||
m_PortMin[n]->value(temp); | |||||
sprintf(temp,"%.4f",max); | |||||
m_PortMax[n]->value(temp); | |||||
sprintf(temp, "%d",clamp); | |||||
m_PortClamp[n]->value(atoi(temp)); | |||||
sprintf(temp, "%.4f",defolt); | |||||
m_PortDefault[n]->value(temp); | |||||
} | |||||
/* | |||||
void LADSPAPluginGUI::SetMinMax(int n, float min, float max, bool clamp) | void LADSPAPluginGUI::SetMinMax(int n, float min, float max, bool clamp) | ||||
{ | { | ||||
char temp[256]; | char temp[256]; | ||||
@@ -150,7 +170,7 @@ void LADSPAPluginGUI::GetMinMax(int n, float &min, float &max, bool &clamp) | |||||
max = atof(m_PortMax[n]->value()); | max = atof(m_PortMax[n]->value()); | ||||
clamp = m_PortClamp[n]->value(); | clamp = m_PortClamp[n]->value(); | ||||
} | } | ||||
*/ | |||||
void LADSPAPluginGUI::SetName(const char *s) | void LADSPAPluginGUI::SetName(const char *s) | ||||
{ | { | ||||
m_Name->label(s); | m_Name->label(s); | ||||
@@ -171,7 +191,7 @@ void LADSPAPluginGUI::ClearPortInfo() | |||||
m_InputScroll->remove(m_InputPack); | m_InputScroll->remove(m_InputPack); | ||||
delete m_InputPack; | delete m_InputPack; | ||||
m_InputPack = new Fl_Pack(x()+300,y()+85,300,100,""); | |||||
m_InputPack = new Fl_Pack(x()+5,y()+110,460,20,""); | |||||
m_InputScroll->add(m_InputPack); | m_InputScroll->add(m_InputPack); | ||||
m_PortOutput.clear(); | m_PortOutput.clear(); | ||||
@@ -179,44 +199,57 @@ void LADSPAPluginGUI::ClearPortInfo() | |||||
m_PortMin.clear(); | m_PortMin.clear(); | ||||
m_PortMax.clear(); | m_PortMax.clear(); | ||||
m_PortClamp.clear(); | m_PortClamp.clear(); | ||||
m_PortDefault.clear(); | |||||
} | } | ||||
void LADSPAPluginGUI::AddPortInfo(const char *Info) | void LADSPAPluginGUI::AddPortInfo(const char *Info) | ||||
{ | { | ||||
Fl_Group* NewGroup = new Fl_Group(0,85,150,15,""); | |||||
Fl_Group* NewGroup = new Fl_Group(0,0,430,18,""); | |||||
NewGroup->box(FL_FLAT_BOX); | NewGroup->box(FL_FLAT_BOX); | ||||
m_InputPack->add(NewGroup); | m_InputPack->add(NewGroup); | ||||
m_PackVec.push_back(NewGroup); | m_PackVec.push_back(NewGroup); | ||||
Fl_Box* NewText = new Fl_Box(100,85,80,15,""); | |||||
NewText->label(Info); | |||||
NewText->labelsize(8); | |||||
NewText->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); | |||||
NewGroup->add(NewText); | |||||
Fl_Output* NewOutput = new Fl_Output(5,85,20,15,""); | |||||
// Value | |||||
Fl_Output* NewOutput = new Fl_Output(10,0,60,18,""); | |||||
NewOutput->value(0); | NewOutput->value(0); | ||||
NewOutput->textsize(10); | NewOutput->textsize(10); | ||||
NewGroup->add(NewOutput); | NewGroup->add(NewOutput); | ||||
m_PortOutput.push_back(NewOutput); | m_PortOutput.push_back(NewOutput); | ||||
Fl_Input* NewInput = new Fl_Input(26,85,20,15,""); | |||||
// Min | |||||
Fl_Input* NewInput = new Fl_Input(72,0,60,18,""); | |||||
NewInput->value(0); | NewInput->value(0); | ||||
NewInput->textsize(10); | NewInput->textsize(10); | ||||
NewGroup->add(NewInput); | NewGroup->add(NewInput); | ||||
m_PortMin.push_back(NewInput); | m_PortMin.push_back(NewInput); | ||||
NewInput = new Fl_Input(47,85,20,15,""); | |||||
// Max | |||||
NewInput = new Fl_Input(134,0,60,18,""); | |||||
NewInput->value(0); | NewInput->value(0); | ||||
NewInput->textsize(10); | NewInput->textsize(10); | ||||
NewGroup->add(NewInput); | NewGroup->add(NewInput); | ||||
m_PortMax.push_back(NewInput); | m_PortMax.push_back(NewInput); | ||||
Fl_Check_Button* NewCheckButton = new Fl_Check_Button(80,85,15,15,""); | |||||
// Clamp | |||||
Fl_Check_Button* NewCheckButton = new Fl_Check_Button(200,0,10,18,""); | |||||
NewCheckButton->value(0); | NewCheckButton->value(0); | ||||
NewGroup->add(NewCheckButton); | NewGroup->add(NewCheckButton); | ||||
m_PortClamp.push_back(NewCheckButton); | m_PortClamp.push_back(NewCheckButton); | ||||
// Fixed Value | |||||
NewInput = new Fl_Input(250,0,60,18,""); | |||||
NewInput->value(0); | |||||
NewInput->textsize(10); | |||||
NewGroup->add(NewInput); | |||||
m_PortDefault.push_back(NewInput); | |||||
// Port Name | |||||
Fl_Box* NewText = new Fl_Box(322,0,10,18,""); | |||||
NewText->label(Info); | |||||
NewText->labelsize(10); | |||||
NewText->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); | |||||
NewGroup->add(NewText); | |||||
NewGroup->redraw(); | NewGroup->redraw(); | ||||
m_InputPack->redraw(); | m_InputPack->redraw(); | ||||
m_InputScroll->redraw(); | m_InputScroll->redraw(); | ||||
@@ -234,13 +267,13 @@ void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o) | |||||
unsigned long n = Plugin->GetInputPortCount(); | unsigned long n = Plugin->GetInputPortCount(); | ||||
const char *name; | const char *name; | ||||
PortRange range; | |||||
PortSettings settings; | |||||
for (unsigned long p = 0; p < n; p++) { | for (unsigned long p = 0; p < n; p++) { | ||||
name = Plugin->GetPortName(p); | name = Plugin->GetPortName(p); | ||||
range = Plugin->GetPortRange(p); | |||||
settings = Plugin->GetPortSettings(p); | |||||
AddPortInfo(name); | AddPortInfo(name); | ||||
SetMinMax(p, range.Min, range.Max, range.Clamp); | |||||
SetPortSettings(p, settings.Min, settings.Max, settings.Clamp, settings.Default); | |||||
} | } | ||||
} | } | ||||
@@ -263,7 +296,7 @@ void LADSPAPluginGUI::cb_Gain(Fl_Knob* o, void* v) | |||||
((LADSPAPluginGUI*)(o->parent()))->cb_Gain_i(o,v); | ((LADSPAPluginGUI*)(o->parent()))->cb_Gain_i(o,v); | ||||
} | } | ||||
inline void LADSPAPluginGUI::cb_Select_i(Fl_Hold_Browser* o) | |||||
inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o) | |||||
{ | { | ||||
m_GUICH->Set("SetPluginIndex",o->value()-1); | m_GUICH->Set("SetPluginIndex",o->value()-1); | ||||
m_GUICH->SetCommand(LADSPAPlugin::SELECTPLUGIN); | m_GUICH->SetCommand(LADSPAPlugin::SELECTPLUGIN); | ||||
@@ -276,7 +309,7 @@ inline void LADSPAPluginGUI::cb_Select_i(Fl_Hold_Browser* o) | |||||
m_GUICH->GetData("GetMaker", m_InData.Maker); | m_GUICH->GetData("GetMaker", m_InData.Maker); | ||||
m_GUICH->GetData("GetInputPortCount", &(m_InData.InputPortCount)); | m_GUICH->GetData("GetInputPortCount", &(m_InData.InputPortCount)); | ||||
m_GUICH->GetData("GetInputPortNames", m_InData.InputPortNames); | m_GUICH->GetData("GetInputPortNames", m_InData.InputPortNames); | ||||
m_GUICH->GetData("GetInputPortRanges", m_InData.InputPortRanges); | |||||
m_GUICH->GetData("GetInputPortSettings", m_InData.InputPortSettings); | |||||
SetName((const char *)m_InData.Name); | SetName((const char *)m_InData.Name); | ||||
SetMaker((const char *)m_InData.Maker); | SetMaker((const char *)m_InData.Maker); | ||||
@@ -286,12 +319,13 @@ inline void LADSPAPluginGUI::cb_Select_i(Fl_Hold_Browser* o) | |||||
for (unsigned long n = 0; n < m_InData.InputPortCount; n++) { | for (unsigned long n = 0; n < m_InData.InputPortCount; n++) { | ||||
AddPortInfo((const char *)(m_InData.InputPortNames + n * 256)); | AddPortInfo((const char *)(m_InData.InputPortNames + n * 256)); | ||||
SetMinMax(n, m_InData.InputPortRanges[n].Min, | |||||
m_InData.InputPortRanges[n].Max, | |||||
m_InData.InputPortRanges[n].Clamp); | |||||
SetPortSettings(n, m_InData.InputPortSettings[n].Min, | |||||
m_InData.InputPortSettings[n].Max, | |||||
m_InData.InputPortSettings[n].Clamp, | |||||
m_InData.InputPortSettings[n].Default); | |||||
} | } | ||||
} | } | ||||
void LADSPAPluginGUI::cb_Select(Fl_Hold_Browser* o) | |||||
void LADSPAPluginGUI::cb_Select(Fl_Choice* o) | |||||
{ | { | ||||
((LADSPAPluginGUI*)(o->parent()))->cb_Select_i(o); | ((LADSPAPluginGUI*)(o->parent()))->cb_Select_i(o); | ||||
} | } | ||||
@@ -302,26 +336,33 @@ inline void LADSPAPluginGUI::cb_MinMax_i(Fl_Button* o, void* v) | |||||
for (vector<Fl_Input*>::iterator i=m_PortMin.begin(); | for (vector<Fl_Input*>::iterator i=m_PortMin.begin(); | ||||
i!=m_PortMin.end(); i++) | i!=m_PortMin.end(); i++) | ||||
{ | { | ||||
m_InData.InputPortRanges[n].Min = atof((*i)->value()); | |||||
m_InData.InputPortSettings[n].Min = atof((*i)->value()); | |||||
n++; | n++; | ||||
} | } | ||||
n=0; | n=0; | ||||
for (vector<Fl_Input*>::iterator i=m_PortMax.begin(); | for (vector<Fl_Input*>::iterator i=m_PortMax.begin(); | ||||
i!=m_PortMax.end(); i++) | i!=m_PortMax.end(); i++) | ||||
{ | { | ||||
m_InData.InputPortRanges[n].Max = atof((*i)->value()); | |||||
m_InData.InputPortSettings[n].Max = atof((*i)->value()); | |||||
n++; | n++; | ||||
} | } | ||||
n=0; | n=0; | ||||
for (vector<Fl_Check_Button*>::iterator i=m_PortClamp.begin(); | for (vector<Fl_Check_Button*>::iterator i=m_PortClamp.begin(); | ||||
i!=m_PortClamp.end(); i++) | i!=m_PortClamp.end(); i++) | ||||
{ | { | ||||
m_InData.InputPortRanges[n].Clamp = (bool)((*i)->value()); | |||||
m_InData.InputPortSettings[n].Clamp = (bool)((*i)->value()); | |||||
n++; | |||||
} | |||||
n=0; | |||||
for (vector<Fl_Input*>::iterator i=m_PortDefault.begin(); | |||||
i!=m_PortDefault.end(); i++) | |||||
{ | |||||
m_InData.InputPortSettings[n].Default = atof((*i)->value()); | |||||
n++; | n++; | ||||
} | } | ||||
m_GUICH->SetData("SetInputPortRanges", m_InData.InputPortRanges); | |||||
m_GUICH->SetCommand(LADSPAPlugin::SETRANGES); | |||||
m_GUICH->SetData("SetInputPortSettings", m_InData.InputPortSettings); | |||||
m_GUICH->SetCommand(LADSPAPlugin::SETPORTSETTINGS); | |||||
} | } | ||||
void LADSPAPluginGUI::cb_MinMax(Fl_Button* o, void* v) | void LADSPAPluginGUI::cb_MinMax(Fl_Button* o, void* v) | ||||
{ | { | ||||
@@ -25,7 +25,6 @@ | |||||
#include <FL/Fl_Button.H> | #include <FL/Fl_Button.H> | ||||
#include <FL/Fl_Check_Button.H> | #include <FL/Fl_Check_Button.H> | ||||
#include <FL/Fl_Box.H> | #include <FL/Fl_Box.H> | ||||
#include <FL/Fl_Hold_Browser.H> | |||||
#include <FL/Fl_Output.H> | #include <FL/Fl_Output.H> | ||||
#include <FL/Fl_Scroll.H> | #include <FL/Fl_Scroll.H> | ||||
#include "../Widgets/Fl_Knob.H" | #include "../Widgets/Fl_Knob.H" | ||||
@@ -64,13 +63,14 @@ public: | |||||
void ClearPortInfo(); | void ClearPortInfo(); | ||||
void AddPortInfo(const char *Info); | void AddPortInfo(const char *Info); | ||||
void UpdatePortDisplay(int n, float v); | void UpdatePortDisplay(int n, float v); | ||||
void SetMinMax(int n, float min, float max, bool clamp); | |||||
void GetMinMax(int n, float &min, float &max, bool &clamp); | |||||
void SetPortSettings(unsigned long n, float min, float max, bool clamp, float defolt); | |||||
// void SetMinMax(int n, float min, float max, bool clamp); | |||||
// void GetMinMax(int n, float &min, float &max, bool &clamp); | |||||
private: | private: | ||||
Fl_Scroll *m_InputScroll; | Fl_Scroll *m_InputScroll; | ||||
Fl_Pack *m_InputPack; | Fl_Pack *m_InputPack; | ||||
Fl_Hold_Browser *m_Browser; | |||||
Fl_Choice *m_Browser; | |||||
Fl_Knob *m_OutputGain; | Fl_Knob *m_OutputGain; | ||||
Fl_Box *m_Name; | Fl_Box *m_Name; | ||||
Fl_Box *m_Maker; | Fl_Box *m_Maker; | ||||
@@ -81,6 +81,7 @@ private: | |||||
std::vector<Fl_Input*> m_PortMin; | std::vector<Fl_Input*> m_PortMin; | ||||
std::vector<Fl_Input*> m_PortMax; | std::vector<Fl_Input*> m_PortMax; | ||||
std::vector<Fl_Check_Button*> m_PortClamp; | std::vector<Fl_Check_Button*> m_PortClamp; | ||||
std::vector<Fl_Input*> m_PortDefault; | |||||
std::vector<LADSPAInfo::PluginEntry> PluginList; | std::vector<LADSPAInfo::PluginEntry> PluginList; | ||||
@@ -90,8 +91,8 @@ private: | |||||
int inited; | int inited; | ||||
inline void cb_Select_i(Fl_Hold_Browser* o); | |||||
static void cb_Select(Fl_Hold_Browser* o); | |||||
inline void cb_Select_i(Fl_Choice* o); | |||||
static void cb_Select(Fl_Choice* o); | |||||
inline void cb_Gain_i(Fl_Knob* o, void* v); | inline void cb_Gain_i(Fl_Knob* o, void* v); | ||||
static void cb_Gain(Fl_Knob* o, void* v); | static void cb_Gain(Fl_Knob* o, void* v); | ||||
inline void cb_MinMax_i(Fl_Button* o, void* v); | inline void cb_MinMax_i(Fl_Button* o, void* v); | ||||
@@ -107,7 +108,7 @@ private: | |||||
unsigned long MaxInputPortCount; | unsigned long MaxInputPortCount; | ||||
unsigned long InputPortCount; | unsigned long InputPortCount; | ||||
char *InputPortNames; | char *InputPortNames; | ||||
PortRange *InputPortRanges; | |||||
PortSettings *InputPortSettings; | |||||
float *InputPortValues; | float *InputPortValues; | ||||
}; | }; | ||||