diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C index 648d9d8..7ff53d0 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C @@ -130,7 +130,6 @@ SpiralPluginGUI(w,h,o,ch) m_Tab->value(m_SetupGroup); m_TabIndex = 1; - m_PortIndex = 0; end(); @@ -266,8 +265,16 @@ void LADSPAPluginGUI::AddPortInfo(const char *Info) int len = strlen(Info); len -= 5; // Get rid of (CV), (AU) bit len = len > 20 ? 20 : len; // Truncate to fit + char *label = (char *)malloc(len + 1); + if (label) + { + strncpy(label, Info, len); + label[len] = '\0'; + } + m_PortDefaultAdjustLabels.push_back(label); - Fl_Knob* NewKnob = new Fl_Knob(0,0,40,40,strndup(Info, len)); + Fl_Knob* NewKnob = new Fl_Knob(0,0,40,40,""); + NewKnob->label(m_PortDefaultAdjustLabels[m_PortDefaultAdjustLabels.size() - 1]); NewKnob->labelsize(10); NewKnob->color(GUI_COLOUR); NewKnob->maximum(1.0f); @@ -327,11 +334,11 @@ void LADSPAPluginGUI::UpdateDefaultAdjustControls(void) void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o) { LADSPAPlugin* Plugin = (LADSPAPlugin*)o; + SetPluginIndex(Plugin->GetPluginIndex()); SetName(Plugin->GetName()); SetMaker(Plugin->GetMaker()); SetTabIndex(Plugin->GetTabIndex()); SetUpdateInputs(Plugin->GetUpdateInputs()); - SetPluginIndex(Plugin->GetPluginIndex()); m_InputPortCount = Plugin->GetInputPortCount(); const char *name; @@ -407,49 +414,15 @@ void LADSPAPluginGUI::Update(void) if (state_changed) UpdateDefaultAdjustControls(); } -// **************************************************************************** -// ** Widget Callback Functions ** -// **************************************************************************** - -inline void LADSPAPluginGUI::cb_TabChange_i(Fl_Tabs *o) -{ - m_TabIndex = o->find(o->value()); - - m_GUICH->SetData("SetTabIndex", &m_TabIndex); - m_GUICH->SetCommand(LADSPAPlugin::SETTABINDEX); -} -void LADSPAPluginGUI::cb_TabChange(Fl_Tabs *o) -{ // GUI - ((LADSPAPluginGUI*)(o->parent()))->cb_TabChange_i(o); -} - -inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o) +void LADSPAPluginGUI::ClearPlugin(void) { - m_PluginIndex = o->value(); - - if (o->value() == 0) { - // "(None)" selected - m_GUICH->SetCommand(LADSPAPlugin::CLEARPLUGIN); - } else { - // Plugin selected - m_GUICH->SetData("SetPluginIndex",&m_PluginIndex); - m_GUICH->SetCommand(LADSPAPlugin::SELECTPLUGIN); - } + m_PluginIndex = 0; + m_InputPortCount = 0; + m_PortIndex = 0; -// Wait until next update for plugin to be loaded etc. + m_GUICH->SetCommand(LADSPAPlugin::CLEARPLUGIN); m_GUICH->Wait(); -// Now get the new values to populate GUI controls - m_GUICH->GetData("GetName", m_Name); - m_GUICH->GetData("GetMaker", m_Maker); - m_GUICH->GetData("GetInputPortCount", &(m_InputPortCount)); - m_GUICH->GetData("GetInputPortNames", m_InputPortNames); - m_GUICH->GetData("GetInputPortSettings", m_InputPortSettings); - m_GUICH->GetData("GetInputPortDefaults", m_InputPortDefaults); - - SetName((const char *)m_Name); - SetMaker((const char *)m_Maker); - // Clear out port info, and refresh m_InputScroll->remove(m_InputPack); delete m_InputPack; @@ -463,6 +436,27 @@ inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o) m_PortDefault.clear(); m_PortDefaultAdjust.clear(); + for (vector::iterator i = m_PortDefaultAdjustLabels.begin(); + i != m_PortDefaultAdjustLabels.end(); i++) + { + if (*i) free (*i); + } + m_PortDefaultAdjustLabels.clear(); +} + +void LADSPAPluginGUI::SelectPlugin(void) +{ +// Now get the new values to populate GUI controls + m_GUICH->GetData("GetName", m_Name); + m_GUICH->GetData("GetMaker", m_Maker); + m_GUICH->GetData("GetInputPortCount", &(m_InputPortCount)); + m_GUICH->GetData("GetInputPortNames", m_InputPortNames); + m_GUICH->GetData("GetInputPortSettings", m_InputPortSettings); + m_GUICH->GetData("GetInputPortDefaults", m_InputPortDefaults); + + SetName((const char *)m_Name); + SetMaker((const char *)m_Maker); + for (unsigned long p = 0; p < m_InputPortCount; p++) { AddPortInfo((const char *)(m_InputPortNames + p * 256)); SetPortSettings(p, m_InputPortSettings[p].Min, @@ -474,10 +468,41 @@ inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o) } UpdateDefaultAdjustControls(); - m_PortIndex = m_InputPortCount; +} + +// **************************************************************************** +// ** Widget Callback Functions ** +// **************************************************************************** + +inline void LADSPAPluginGUI::cb_TabChange_i(Fl_Tabs *o) +{ + m_TabIndex = o->find(o->value()); + + m_GUICH->SetData("SetTabIndex", &m_TabIndex); + m_GUICH->SetCommand(LADSPAPlugin::SETTABINDEX); +} +void LADSPAPluginGUI::cb_TabChange(Fl_Tabs *o) +{ // GUI + ((LADSPAPluginGUI*)(o->parent()))->cb_TabChange_i(o); +} + +inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o) +{ + ClearPlugin(); + + m_PluginIndex = o->value(); + + if (o->value() != 0) { + // Plugin selected + m_GUICH->SetData("SetPluginIndex",&m_PluginIndex); + m_GUICH->SetCommand(LADSPAPlugin::SELECTPLUGIN); + m_GUICH->Wait(); + + SelectPlugin(); + } - redraw(); +// redraw(); } void LADSPAPluginGUI::cb_Select(Fl_Choice* o) { // Group Tab GUI diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h index c45fc3c..73ecf6a 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h @@ -66,6 +66,8 @@ private: void SetPortSettings(unsigned long n, float min, float max, bool clamp, float defolt); void SetDefaultAdjust(unsigned long n); void UpdateDefaultAdjustControls(void); + void ClearPlugin(void); + void SelectPlugin(void); Fl_Box *m_NameLabel; Fl_Box *m_MakerLabel; @@ -84,6 +86,7 @@ private: std::vector m_PortClamp; std::vector m_PortDefault; std::vector m_PortDefaultAdjust; + std::vector m_PortDefaultAdjustLabels; std::vector m_PluginList;