1 /* SpiralLoops 2 * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 */ 18 19 #include <FL/Fl.H> 20 #include <FL/Fl_Double_Window.H> 21 #include <FL/Fl_Group.H> 22 #include <FL/Fl_Button.H> 23 #include <FL/Fl_Slider.H> 24 #include <FL/Fl_Check_Button.H> 25 #include <FL/Fl_Value_Output.H> 26 #include "Widgets/Fl_Knob.H" 27 #include "Widgets/Fl_Loop.h" 28 #include "Widgets/Fl_LED_Button.H" 29 #include "Widgets/Fl_Trigger.h" 30 31 #include "DelayGUI.h" 32 #include "ReverbGUI.h" 33 34 #include "GUIBase.h" 35 #include "../SpiralSound/Filter.h" 36 #include "../SpiralSound/Delay.h" 37 #include "../SpiralSound/Reverb.h" 38 #include <vector> 39 40 #ifndef LOOPGUI 41 #define LOOPGUI 42 43 class Loop; 44 45 class LoopGUI : public GUIBase 46 { 47 public: 48 LoopGUI(Loop *o, Delay *pDelay, Reverb* pReverb); 49 ~LoopGUI(); 50 51 virtual void CreateGUI(char *name=""); 52 virtual void UpdateValues(); 53 54 int GetPos(); 55 void SetMasterStatus(bool m); RefreshWave()56 void RefreshWave() {} 57 void CheckTriggers(float CurrentAngle, vector<int> &LoopTriggers); StopUpdate(bool s)58 void StopUpdate(bool s) {GUILoopGroup->StopUpdate(s);} Trigger()59 void Trigger() {Play->value(true);} 60 void UpdateDataPtr(); 61 void SetSnap(bool s); 62 void SetSnapAngle(int Angle); UpdatePos()63 void UpdatePos() { GUILoopGroup->DrawPosMarker(); } 64 65 private: 66 Loop *m_loop; 67 68 float m_LastAngle; 69 int m_SnapAngle; 70 71 Fl_Loop *GUILoopGroup; 72 Fl_Group *InnerGroup; 73 Fl_Slider *Cutoff; 74 Fl_Slider *Volume; 75 Fl_Knob *Balance; 76 Fl_Knob *Length; 77 Fl_Knob *Speed; 78 Fl_Knob *Resonance; 79 Fl_Value_Output *SpeedOutput; 80 Fl_Value_Output *LengthOutput; 81 Fl_Value_Output *MagicOutput; 82 Fl_Knob *WaveSize; 83 84 Fl_Button *Record; 85 Fl_Button *Load; 86 Fl_LED_Button *Play; 87 Fl_LED_Button *Master; 88 Fl_LED_Button *Update; 89 Fl_Button *Effects; 90 Fl_Button *Double; 91 Fl_Button *Match; 92 Fl_Button *Save; 93 94 DelayGUI *DelayWin; 95 ReverbGUI *ReverbWin; 96 Delay *m_DelayPtr; 97 Reverb *m_ReverbPtr; 98 99 vector<Fl_Trigger*> m_TriggerVec; 100 101 //// Callbacks //// 102 inline void cb_Loop_i(Fl_Loop* o, void* v); 103 static void cb_Loop(Fl_Loop* o, void* v); 104 inline void cb_Volume_i(Fl_Slider* o, void* v); 105 static void cb_Volume(Fl_Slider* o, void* v); 106 inline void cb_Cutoff_i(Fl_Slider* o, void* v); 107 static void cb_Cutoff(Fl_Slider* o, void* v); 108 inline void cb_Balance_i(Fl_Knob* o, void* v); 109 static void cb_Balance(Fl_Knob* o, void* v); 110 inline void cb_Length_i(Fl_Knob* o, void* v); 111 static void cb_Length(Fl_Knob* o, void* v); 112 inline void cb_Speed_i(Fl_Knob* o, void* v); 113 static void cb_Speed(Fl_Knob* o, void* v); 114 inline void cb_Resonance_i(Fl_Knob* o, void* v); 115 static void cb_Resonance(Fl_Knob* o, void* v); 116 inline void cb_Record_i(Fl_Button* o, void* v); 117 static void cb_Record(Fl_Button* o, void* v); 118 inline void cb_Load_i(Fl_Button* o, void* v); 119 static void cb_Load(Fl_Button* o, void* v); 120 inline void cb_Play_i(Fl_LED_Button* o, void* v); 121 static void cb_Play(Fl_LED_Button* o, void* v); 122 inline void cb_Master_i(Fl_LED_Button* o, void* v); 123 static void cb_Master(Fl_LED_Button* o, void* v); 124 inline void cb_Effects_i(Fl_Button* o, void* v); 125 static void cb_Effects(Fl_Button* o, void* v); 126 inline void cb_Update_i(Fl_LED_Button* o, void* v); 127 static void cb_Update(Fl_LED_Button* o, void* v); 128 inline void cb_Double_i(Fl_Button* o, void* v); 129 static void cb_Double(Fl_Button* o, void* v); 130 inline void cb_Match_i(Fl_Button* o, void* v); 131 static void cb_Match(Fl_Button* o, void* v); 132 inline void cb_Save_i(Fl_Button* o, void* v); 133 static void cb_Save(Fl_Button* o, void* v); 134 inline void cb_WaveSize_i(Fl_Knob* o, void* v); 135 static void cb_WaveSize(Fl_Knob* o, void* v); 136 137 inline void cb_Cut_i(Fl_Loop *o, int Start, int End); 138 static void cb_Cut(Fl_Loop *o, int Start, int End); 139 inline void cb_Copy_i(Fl_Loop *o, int Start, int End); 140 static void cb_Copy(Fl_Loop *o, int Start, int End); 141 inline void cb_Paste_i(Fl_Loop *o, int Start); 142 static void cb_Paste(Fl_Loop *o, int Start); 143 inline void cb_PasteMix_i(Fl_Loop *o, int Start); 144 static void cb_PasteMix(Fl_Loop *o, int Start); 145 inline void cb_ZeroRange_i(Fl_Loop *o, int Start, int End); 146 static void cb_ZeroRange(Fl_Loop *o, int Start, int End); 147 inline void cb_ReverseRange_i(Fl_Loop *o, int Start, int End); 148 static void cb_ReverseRange(Fl_Loop *o, int Start, int End); 149 inline void cb_Halve_i(Fl_Loop *o, int Start, int End); 150 static void cb_Halve(Fl_Loop *o, int Start, int End); 151 inline void cb_Hold_i(Fl_Loop *o, int Start, int End); 152 static void cb_Hold(Fl_Loop *o, int Start, int End); 153 inline void cb_SelectAll_i(Fl_Loop *o, int Start, int End); 154 static void cb_SelectAll(Fl_Loop *o, int Start, int End); 155 inline void cb_NewTrigger_i(Fl_Loop *o, int Start, int End); 156 static void cb_NewTrigger(Fl_Loop *o, int Start, int End); 157 inline void cb_Move_i(Fl_Loop *o, int Start, int End); 158 static void cb_Move(Fl_Loop *o, int Start, int End); 159 160 friend istream &operator>>(istream &s, LoopGUI &o); 161 friend ostream &operator<<(ostream &s, LoopGUI &o); 162 }; 163 164 istream &operator>>(istream &s, LoopGUI &o); 165 ostream &operator<<(ostream &s, LoopGUI &o); 166 167 #endif 168