@@ -22,11 +22,9 @@ | |||||
#include <iostream> | #include <iostream> | ||||
#include "../../SpiralSynthModularInfo.h" | #include "../../SpiralSynthModularInfo.h" | ||||
//#define IMG_BACKGROUND | |||||
#ifdef IMG_BACKGROUND | |||||
#include <png.h> | |||||
#endif | |||||
// no of calls to handle when dragged, before the widget is redrawn | |||||
// to allow the wire (connection currently being made) to be redrawn | |||||
static const int UPDATE_TICKS = 5; | |||||
//////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////// | ||||
@@ -35,7 +33,8 @@ Fl_Group(x,y,w,h,name), | |||||
cb_Connection(NULL), | cb_Connection(NULL), | ||||
cb_Unconnect(NULL), | cb_Unconnect(NULL), | ||||
cb_AddDevice(NULL), | cb_AddDevice(NULL), | ||||
m_ToolMenu(false) | |||||
m_ToolMenu(false), | |||||
m_UpdateTimer(0) | |||||
{ | { | ||||
m_IncompleteWire.OutputChild=-1; | m_IncompleteWire.OutputChild=-1; | ||||
m_IncompleteWire.OutputPort=-1; | m_IncompleteWire.OutputPort=-1; | ||||
@@ -44,55 +43,16 @@ m_ToolMenu(false) | |||||
m_BG=NULL; | m_BG=NULL; | ||||
m_BGData=NULL; | m_BGData=NULL; | ||||
#ifdef IMG_BACKGROUND | |||||
if (SpiralSynthModularInfo::BGIMG=="None") return; | |||||
FILE *fp=fopen(SpiralSynthModularInfo::BGIMG.c_str(),"rb"); | |||||
if (!fp) | |||||
{ | |||||
SpiralInfo::Alert("Couldn't open image ["+SpiralSynthModularInfo::BGIMG+"]"); | |||||
} | |||||
else | |||||
{ | |||||
png_structp png_ptr; | |||||
png_infop info_ptr; | |||||
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); | |||||
info_ptr = png_create_info_struct(png_ptr); | |||||
png_init_io(png_ptr, fp); | |||||
png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL); | |||||
fclose(fp); | |||||
m_BGData = new char[png_ptr->rowbytes*png_ptr->height]; | |||||
int p=0; | |||||
for (unsigned int row = 0; row < png_ptr->height; row++) | |||||
{ | |||||
for (unsigned int i=0; i<png_ptr->rowbytes; i++) | |||||
{ | |||||
m_BGData[p]=(char)info_ptr->row_pointers[row][i]; | |||||
p++; | |||||
} | |||||
} | |||||
#if FL_MAJOR_VERSION == 1 && FL_MINOR_VERSION == 0 | |||||
m_BG = new Fl_Image((unsigned char*)m_BGData, | |||||
(int)png_ptr->width, | |||||
(int)png_ptr->height,(int)png_ptr->rowbytes/(int)png_ptr->width); | |||||
#else | |||||
m_BG = new Fl_RGB_Image((unsigned char*)m_BGData,(int)png_ptr->width,(int)png_ptr->height); | |||||
#endif | |||||
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); | |||||
} | |||||
#endif | |||||
} | } | ||||
//////////////////////////////////////////////////////////////////////// | |||||
Fl_Canvas::~Fl_Canvas() | Fl_Canvas::~Fl_Canvas() | ||||
{ | { | ||||
#ifdef IMG_BACKGROUND | |||||
if (m_BGData) delete[] m_BGData; | |||||
#endif | |||||
} | } | ||||
//////////////////////////////////////////////////////////////////////// | |||||
void Fl_Canvas::draw() | void Fl_Canvas::draw() | ||||
{ | { | ||||
Fl_Widget*const* a = array(); | Fl_Widget*const* a = array(); | ||||
@@ -185,15 +145,22 @@ void Fl_Canvas::draw() | |||||
} | } | ||||
} | } | ||||
//////////////////////////////////////////////////////////////////////// | |||||
void Fl_Canvas::Poll() | void Fl_Canvas::Poll() | ||||
{ | { | ||||
// bit of a workaround... | |||||
if(m_IncompleteWire.InputChild!=-1 || m_IncompleteWire.OutputChild!=-1) | |||||
// bit of a workaround... | |||||
if (UserMakingConnection()) m_UpdateTimer++; | |||||
if (m_UpdateTimer>UPDATE_TICKS) | |||||
{ | { | ||||
m_UpdateTimer=0; | |||||
redraw(); | redraw(); | ||||
} | } | ||||
} | } | ||||
//////////////////////////////////////////////////////////////////////// | |||||
void Fl_Canvas::DrawWires() | void Fl_Canvas::DrawWires() | ||||
{ | { | ||||
for(vector<CanvasWire>::iterator i=m_WireVec.begin(); | for(vector<CanvasWire>::iterator i=m_WireVec.begin(); | ||||
@@ -233,6 +200,20 @@ void Fl_Canvas::DrawWires() | |||||
DestDevice->GetPortY(i->InputPort)); | DestDevice->GetPortY(i->InputPort)); | ||||
} | } | ||||
DrawIncompleteWire(); | |||||
} | |||||
//////////////////////////////////////////////////////////////////////// | |||||
bool Fl_Canvas::UserMakingConnection() | |||||
{ | |||||
return (m_IncompleteWire.InputChild!=-1 || m_IncompleteWire.OutputChild!=-1); | |||||
} | |||||
//////////////////////////////////////////////////////////////////////// | |||||
void Fl_Canvas::DrawIncompleteWire() | |||||
{ | |||||
// draw the wire we are currently connecting | // draw the wire we are currently connecting | ||||
if(m_IncompleteWire.InputChild!=-1) | if(m_IncompleteWire.InputChild!=-1) | ||||
{ | { | ||||
@@ -290,6 +271,9 @@ void Fl_Canvas::DrawWires() | |||||
Fl::event_y()); | Fl::event_y()); | ||||
} | } | ||||
} | } | ||||
//////////////////////////////////////////////////////////////////////// | |||||
void Fl_Canvas::ClearIncompleteWire() | void Fl_Canvas::ClearIncompleteWire() | ||||
{ | { | ||||
// Turn off both ports | // Turn off both ports | ||||
@@ -306,6 +290,8 @@ void Fl_Canvas::ClearIncompleteWire() | |||||
m_IncompleteWire.Clear(); | m_IncompleteWire.Clear(); | ||||
} | } | ||||
//////////////////////////////////////////////////////////////////////// | |||||
int Fl_Canvas::handle(int event) | int Fl_Canvas::handle(int event) | ||||
{ | { | ||||
if (Fl_Group::handle(event)) return 1; | if (Fl_Group::handle(event)) return 1; | ||||
@@ -313,6 +299,7 @@ int Fl_Canvas::handle(int event) | |||||
if (event==FL_PUSH) | if (event==FL_PUSH) | ||||
{ | { | ||||
ClearIncompleteWire(); | ClearIncompleteWire(); | ||||
redraw(); | |||||
} | } | ||||
if (Fl::event_button()==3) | if (Fl::event_button()==3) | ||||
@@ -325,7 +312,7 @@ int Fl_Canvas::handle(int event) | |||||
redraw(); | redraw(); | ||||
} | } | ||||
if (event==FL_DRAG) redraw(); | |||||
if (event==FL_DRAG) redraw(); | |||||
if (event==FL_RELEASE && Fl::event_button()==3) | if (event==FL_RELEASE && Fl::event_button()==3) | ||||
{ | { | ||||
@@ -345,6 +332,8 @@ int Fl_Canvas::handle(int event) | |||||
return 1; | return 1; | ||||
} | } | ||||
//////////////////////////////////////////////////////////////////////// | |||||
void Fl_Canvas::PortClicked(Fl_DeviceGUI* Device, int Type, int Port, bool Value) | void Fl_Canvas::PortClicked(Fl_DeviceGUI* Device, int Type, int Port, bool Value) | ||||
{ | { | ||||
// find out which child this comes from. | // find out which child this comes from. | ||||
@@ -461,6 +450,8 @@ void Fl_Canvas::PortClicked(Fl_DeviceGUI* Device, int Type, int Port, bool Value | |||||
} | } | ||||
} | } | ||||
//////////////////////////////////////////////////////////////////////// | |||||
void Fl_Canvas::ClearConnections(Fl_DeviceGUI* Device) | void Fl_Canvas::ClearConnections(Fl_DeviceGUI* Device) | ||||
{ | { | ||||
// find out which child this comes from. | // find out which child this comes from. | ||||
@@ -507,6 +498,8 @@ void Fl_Canvas::ClearConnections(Fl_DeviceGUI* Device) | |||||
} | } | ||||
} | } | ||||
} | } | ||||
//////////////////////////////////////////////////////////////////////// | |||||
void Fl_Canvas::RemoveDevice(Fl_DeviceGUI* Device) | void Fl_Canvas::RemoveDevice(Fl_DeviceGUI* Device) | ||||
{ | { | ||||
@@ -538,6 +531,8 @@ void Fl_Canvas::RemoveDevice(Fl_DeviceGUI* Device) | |||||
remove(child(ChildNum)); | remove(child(ChildNum)); | ||||
redraw(); | redraw(); | ||||
} | } | ||||
//////////////////////////////////////////////////////////////////////// | |||||
void Fl_Canvas::Clear() | void Fl_Canvas::Clear() | ||||
{ | { | ||||
@@ -554,6 +549,8 @@ void Fl_Canvas::Clear() | |||||
redraw(); | redraw(); | ||||
} | } | ||||
//////////////////////////////////////////////////////////////////////// | |||||
istream &operator>>(istream &s, Fl_Canvas &o) | istream &operator>>(istream &s, Fl_Canvas &o) | ||||
@@ -587,6 +584,8 @@ istream &operator>>(istream &s, Fl_Canvas &o) | |||||
return s; | return s; | ||||
} | } | ||||
//////////////////////////////////////////////////////////////////////// | |||||
ostream &operator<<(ostream &s, Fl_Canvas &o) | ostream &operator<<(ostream &s, Fl_Canvas &o) | ||||
{ | { | ||||
s<<o.m_WireVec.size()<<endl; | s<<o.m_WireVec.size()<<endl; | ||||
@@ -82,7 +82,9 @@ private: | |||||
void DrawWires(); | void DrawWires(); | ||||
void ClearIncompleteWire(); | void ClearIncompleteWire(); | ||||
void DrawIncompleteWire(); | |||||
bool UserMakingConnection(); | |||||
Fl_Image *m_BG; | Fl_Image *m_BG; | ||||
char *m_BGData; | char *m_BGData; | ||||
@@ -98,6 +100,7 @@ private: | |||||
vector< pair<string,int> > m_PluginNameList; | vector< pair<string,int> > m_PluginNameList; | ||||
GraphSort m_Graph; | GraphSort m_Graph; | ||||
int m_UpdateTimer; | |||||
friend istream &operator>>(istream &s, Fl_Canvas &o); | friend istream &operator>>(istream &s, Fl_Canvas &o); | ||||
friend ostream &operator<<(ostream &s, Fl_Canvas &o); | friend ostream &operator<<(ostream &s, Fl_Canvas &o); | ||||
@@ -136,3 +136,10 @@ void AmpPluginGUI::cb_pop(Fl_Button* o, void* v) { | |||||
((AmpPluginGUI*)(o->parent()))->cb_pop_i(o,v); | ((AmpPluginGUI*)(o->parent()))->cb_pop_i(o,v); | ||||
} | } | ||||
const string AmpPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "A CV controlled amplifer. You also can use this device to modify\n" | |||||
+ "the signal's DC offset (the up or down in the range of values).\n\n" | |||||
+ "Handy for fine tuning CV's by hand, or modulating complex\n" | |||||
+ "controls."; | |||||
} |
@@ -39,6 +39,9 @@ public: | |||||
virtual SpiralPlugin* GetPlugin() { return m_Plugin; } | virtual SpiralPlugin* GetPlugin() { return m_Plugin; } | ||||
AmpPlugin *m_Plugin; | AmpPlugin *m_Plugin; | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
Fl_Group *GUIFilterGroup; | Fl_Group *GUIFilterGroup; | ||||
@@ -270,3 +270,13 @@ void ControllerPluginGUI::StreamOut(ostream &s) | |||||
s<<(*i)->m_Chan->value()<<endl; | s<<(*i)->m_Chan->value()<<endl; | ||||
} | } | ||||
} | } | ||||
const string ControllerPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "This is a simple plugin to allow you to generate CV values\n" | |||||
+ "interatively with sliders in the plugin window. Useful if you\n" | |||||
+ "can't use Midi, or for controlling LADSPA plugins. The slider\n" | |||||
+ "ranges can be set, and titles can be given to each slider.\n" | |||||
+ "You can add or delete sliders from the plugin using the\n" | |||||
+ "+ or - buttons.\n"; | |||||
} |
@@ -42,7 +42,10 @@ public: | |||||
void StreamIn(istream &s); | void StreamIn(istream &s); | ||||
void StreamOut(ostream &s); | void StreamOut(ostream &s); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
void Clear(); | void Clear(); | ||||
@@ -70,3 +70,21 @@ inline void DelayPluginGUI::cb_Mix_i(Fl_Knob* o, void* v) | |||||
{ m_GUICH->Set("Mix",(float)o->value()); } | { m_GUICH->Set("Mix",(float)o->value()); } | ||||
void DelayPluginGUI::cb_Mix(Fl_Knob* o, void* v) | void DelayPluginGUI::cb_Mix(Fl_Knob* o, void* v) | ||||
{ ((DelayPluginGUI*)(o->parent()))->cb_Mix_i(o,v); } | { ((DelayPluginGUI*)(o->parent()))->cb_Mix_i(o,v); } | ||||
const string DelayPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "The delay plugins delays the input signal, and can\n" | |||||
+ "mix the current signal into the output, the amount\n" | |||||
+ "is set by the dial in the plugin window.\n" | |||||
+ "\n" | |||||
+ "The delay time and read head position can be modified\n" | |||||
+ "by input CV's. The read head is the place in the buffer\n" | |||||
+ "the output sample is taken from, relative to the write\n" | |||||
+ "head.\n" | |||||
+ "\n" | |||||
+ "This plugin can be used as the base of a number of effects,\n" | |||||
+ "such as phasers, flangers and complex echos. If the output\n" | |||||
+ "is fed back into the input, you get a similar effect\n" | |||||
+ "to the echo, but you can add cool effects by routing\n" | |||||
+ "the signal back through a lowpass filter (for example).\n"; | |||||
} |
@@ -35,7 +35,10 @@ public: | |||||
DelayPluginGUI(int w, int h, DelayPlugin *o,ChannelHandler *ch,const HostInfo *Info); | DelayPluginGUI(int w, int h, DelayPlugin *o,ChannelHandler *ch,const HostInfo *Info); | ||||
virtual void UpdateValues(SpiralPlugin *o); | virtual void UpdateValues(SpiralPlugin *o); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
Fl_Slider *m_Delay; | Fl_Slider *m_Delay; | ||||
@@ -133,3 +133,10 @@ inline void EchoPluginGUI::cb_pop_i(Fl_Button *o, void*) { | |||||
void EchoPluginGUI::cb_pop(Fl_Button* o, void* v) { | void EchoPluginGUI::cb_pop(Fl_Button* o, void* v) { | ||||
((EchoPluginGUI*)(o->parent()))->cb_pop_i(o,v); | ((EchoPluginGUI*)(o->parent()))->cb_pop_i(o,v); | ||||
} | } | ||||
const string EchoPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "This plugin is a fully operational delay with feedback\n" | |||||
+ "- providing a no-frills echo effect. The delay and\n" | |||||
+ "feedback controls can be modulated via CV inputs.\n"; | |||||
} |
@@ -38,6 +38,9 @@ public: | |||||
EchoPluginGUI(int w, int h, EchoPlugin *o,ChannelHandler *ch,const HostInfo *Info); | EchoPluginGUI(int w, int h, EchoPlugin *o,ChannelHandler *ch,const HostInfo *Info); | ||||
virtual void UpdateValues(SpiralPlugin *o); | virtual void UpdateValues(SpiralPlugin *o); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
@@ -4,7 +4,6 @@ for file in `cat PluginList.txt` | |||||
do | do | ||||
echo $file | echo $file | ||||
cd $file/ | cd $file/ | ||||
cvs edit Makefile.in | |||||
nedit Makefile.in | nedit Makefile.in | ||||
cd .. | cd .. | ||||
done | done |
@@ -70,3 +70,14 @@ inline void EnvFollowerPluginGUI::cb_Attack_i(Fl_Knob* o, void* v) | |||||
{ m_GUICH->Set("Attack",o->value()); } | { m_GUICH->Set("Attack",o->value()); } | ||||
void EnvFollowerPluginGUI::cb_Attack(Fl_Knob* o, void* v) | void EnvFollowerPluginGUI::cb_Attack(Fl_Knob* o, void* v) | ||||
{ ((EnvFollowerPluginGUI*)(o->parent()))->cb_Attack_i(o,v);} | { ((EnvFollowerPluginGUI*)(o->parent()))->cb_Attack_i(o,v);} | ||||
const string EnvFollowerPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "The Envelope Follower takes an audio signal input and\n" | |||||
+ "attempts to recreate the envelope that shaped it. This\n" | |||||
+ "is particually useful for extracting information from\n" | |||||
+ "samples, for use in a vocoder for example.\n" | |||||
+ "\n" | |||||
+ "The sensitivity of the EnvFollower can be set with the\n" | |||||
+ "Attack and Decay controls on the plugin window.\n"; | |||||
} |
@@ -37,6 +37,9 @@ public: | |||||
virtual void UpdateValues(SpiralPlugin *o); | virtual void UpdateValues(SpiralPlugin *o); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
Fl_Knob* m_Attack; | Fl_Knob* m_Attack; | ||||
@@ -273,3 +273,19 @@ void EnvelopePluginGUI::cb_pop(Fl_Button* o, void* v) { | |||||
((EnvelopePluginGUI*)(o->parent()))->cb_pop_i(o,v); | ((EnvelopePluginGUI*)(o->parent()))->cb_pop_i(o,v); | ||||
} | } | ||||
const string EnvelopePluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "An ADSR envelope. This plugin also has a built in\n" | |||||
+ "amplifier for signals, so data fed through the Input\n" | |||||
+ "and Output are amplified according to the envelope value.\n" | |||||
+ "The envelope is triggered with an input CV, and the output\n" | |||||
+ "CV is the value of the envelope at that time. The signal\n" | |||||
+ "level needed to trigger the envelope can be set using\n" | |||||
+ "the \"T\" slider, also the volume level of the output can\n" | |||||
+ "be set with the \"V\" slider.\n\n" | |||||
+ "This envelope can be used to mimic audio triggered effects\n" | |||||
+ "units, by feeding the audio signal into the trigger CV.\n" | |||||
+ "In fact, the envelope plugin itself can be made into a\n" | |||||
+ "compressor, by feeding the audio signal into both inputs,\n" | |||||
+ "and tweaking the ADSR values. \n"; | |||||
} |
@@ -38,6 +38,9 @@ public: | |||||
virtual void UpdateValues(SpiralPlugin *o); | virtual void UpdateValues(SpiralPlugin *o); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
Fl_Slider *Thresh; | Fl_Slider *Thresh; | ||||
@@ -69,3 +69,10 @@ inline void MixerPluginGUI::cb_Chan_i(Fl_Slider* o, void* v) | |||||
void MixerPluginGUI::cb_Chan(Fl_Slider* o, void* v) | void MixerPluginGUI::cb_Chan(Fl_Slider* o, void* v) | ||||
{ ((MixerPluginGUI*)(o->parent()))->cb_Chan_i(o,v);} | { ((MixerPluginGUI*)(o->parent()))->cb_Chan_i(o,v);} | ||||
const string MixerPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "A general purpose 4 channel mixer, not much else to say\n" | |||||
+ "really. Useful for mixing CV values as well as mono audio\n" | |||||
+ "signals. \n"; | |||||
} |
@@ -35,6 +35,9 @@ public: | |||||
virtual void UpdateValues(SpiralPlugin *o); | virtual void UpdateValues(SpiralPlugin *o); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
int Numbers[NUM_CHANNELS]; | int Numbers[NUM_CHANNELS]; | ||||
@@ -38,3 +38,8 @@ void NoteSnapPluginGUI::UpdateValues(SpiralPlugin *o) | |||||
{ | { | ||||
} | } | ||||
const string NoteSnapPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "Quantises the input value into a note frequency\n" | |||||
+ "(using the midi note data).\n"; | |||||
} |
@@ -37,6 +37,9 @@ public: | |||||
virtual void UpdateValues(SpiralPlugin *o); | virtual void UpdateValues(SpiralPlugin *o); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
//// Callbacks //// | //// Callbacks //// | ||||
@@ -53,3 +53,13 @@ inline void RingModPluginGUI::cb_Amount_i(Fl_Knob* o, void* v) | |||||
} | } | ||||
void RingModPluginGUI::cb_Amount(Fl_Knob* o, void* v) | void RingModPluginGUI::cb_Amount(Fl_Knob* o, void* v) | ||||
{ ((RingModPluginGUI*)(o->parent()))->cb_Amount_i(o,v); } | { ((RingModPluginGUI*)(o->parent()))->cb_Amount_i(o,v); } | ||||
const string RingModPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "A ring modulator, multiplies two inputs together.\n" | |||||
+ "An extra dial sets the amount of modulation. The\n" | |||||
+ "ring modulation effect creates an extra harmonic\n" | |||||
+ "in the signal, although this is often out of tune\n" | |||||
+ "with the other signals, its useful for creating bell\n" | |||||
+ "or struck metallic sounds.\n"; | |||||
} |
@@ -36,6 +36,9 @@ public: | |||||
virtual void UpdateValues(SpiralPlugin *o); | virtual void UpdateValues(SpiralPlugin *o); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
Fl_Group *GUIFilterGroup; | Fl_Group *GUIFilterGroup; | ||||
@@ -37,4 +37,11 @@ SpiralPluginGUI(w,h,o,ch) | |||||
void SampleHoldPluginGUI::UpdateValues(SpiralPlugin *o) | void SampleHoldPluginGUI::UpdateValues(SpiralPlugin *o) | ||||
{ | { | ||||
} | } | ||||
const string SampleHoldPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "Holds the input value until the clock input is triggered.\n" | |||||
+ "Useful for wacky 60's computer sounds...\n" | |||||
+ "\n" | |||||
+ "Author: Yves Usson\n"; | |||||
} |
@@ -37,6 +37,9 @@ public: | |||||
virtual void UpdateValues(SpiralPlugin *o); | virtual void UpdateValues(SpiralPlugin *o); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
//// Callbacks //// | //// Callbacks //// | ||||
@@ -104,3 +104,11 @@ void ScopePluginGUI::cb_Bypass_i(Fl_Button* o, void* v) | |||||
{m_Bypass=o->value();} | {m_Bypass=o->value();} | ||||
void ScopePluginGUI::cb_Bypass(Fl_Button* o, void* v) | void ScopePluginGUI::cb_Bypass(Fl_Button* o, void* v) | ||||
{((ScopePluginGUI*)(o->parent()))->cb_Bypass_i(o,v);} | {((ScopePluginGUI*)(o->parent()))->cb_Bypass_i(o,v);} | ||||
const string ScopePluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "The Scope lets you see a visual representation of the\n" | |||||
+ "data flowing through it. It does nothing to the signal,\n" | |||||
+ "but its very useful for checking the layouts, looking at\n" | |||||
+ "CV value etc.\n"; | |||||
} |
@@ -58,6 +58,9 @@ public: | |||||
virtual void draw(); | virtual void draw(); | ||||
void Display(const float *data); | void Display(const float *data); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
bool m_Bypass; | bool m_Bypass; | ||||
@@ -73,3 +73,18 @@ inline void SmoothPluginGUI::cb_Up_i(Fl_Knob* o, void* v) | |||||
void SmoothPluginGUI::cb_Up(Fl_Knob* o, void* v) | void SmoothPluginGUI::cb_Up(Fl_Knob* o, void* v) | ||||
{ ((SmoothPluginGUI*)(o->parent()))->cb_Up_i(o,v);} | { ((SmoothPluginGUI*)(o->parent()))->cb_Up_i(o,v);} | ||||
const string SmoothPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "This device is used for smoothing out the signal fed\n" | |||||
+ "through it. It's primary use is for smoothing out the\n" | |||||
+ "frequency CV sent to the oscillator to achieve portmento\n" | |||||
+ "or sliding between notes.\n" | |||||
+ "It can also be used as a primitive filter for audio\n" | |||||
+ "signals, but its mainly used on CVs.\n" | |||||
+ "\n" | |||||
+ "The controls on the plugin window allow you to alter\n" | |||||
+ "the speed of the sliding, up and down are seperated,\n" | |||||
+ "so going up the keyboard can have a different effect\n" | |||||
+ "to going down :) \n"; | |||||
} |
@@ -37,6 +37,9 @@ public: | |||||
virtual void UpdateValues(SpiralPlugin *o); | virtual void UpdateValues(SpiralPlugin *o); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
Fl_Knob* m_Up; | Fl_Knob* m_Up; | ||||
@@ -38,3 +38,9 @@ void SplitterPluginGUI::UpdateValues(SpiralPlugin *o) | |||||
{ | { | ||||
} | } | ||||
const string SplitterPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "The simplest plugin - the splitter simply takes the input,\n" | |||||
+ "and duplicates it into it's outputs. Simple, but difficult\n" | |||||
+ "to do without.\n"; | |||||
} |
@@ -37,6 +37,9 @@ public: | |||||
virtual void UpdateValues(SpiralPlugin *o); | virtual void UpdateValues(SpiralPlugin *o); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
//// Callbacks //// | //// Callbacks //// | ||||
@@ -91,3 +91,12 @@ inline void StereoMixerPluginGUI::cb_Pan_i(Fl_Knob* o, void* v) { | |||||
void StereoMixerPluginGUI::cb_Pan(Fl_Knob* o, void* v) { | void StereoMixerPluginGUI::cb_Pan(Fl_Knob* o, void* v) { | ||||
((StereoMixerPluginGUI*)(o->parent()))->cb_Pan_i(o,v); | ((StereoMixerPluginGUI*)(o->parent()))->cb_Pan_i(o,v); | ||||
} | } | ||||
const string StereoMixerPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "A more advanced version of the 4 channel mixer,\n" | |||||
+ "this one has a stereo output. CV's are provided\n" | |||||
+ "for control of the panning of each of the inputs.\n" | |||||
+ "The panning can also be set with the knobs on the\n" | |||||
+ "plugin window. \n"; | |||||
} |
@@ -35,6 +35,9 @@ public: | |||||
StereoMixerPluginGUI(int w, int h, StereoMixerPlugin *o,ChannelHandler *ch,const HostInfo *Info); | StereoMixerPluginGUI(int w, int h, StereoMixerPlugin *o,ChannelHandler *ch,const HostInfo *Info); | ||||
virtual void UpdateValues(SpiralPlugin *o); | virtual void UpdateValues(SpiralPlugin *o); | ||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
int Numbers[NUM_CHANNELS]; | int Numbers[NUM_CHANNELS]; | ||||