Fix scope error with newer GCC.
[spiralsynthmodular.git] / SpiralSynthModular.h
blobe006e75509a61d600f938ecc00c540939e39d2ef
1 /* SpiralSynthModular
2 * Copyleft (C) 2002 David Griffiths <dave@pawfal.org>
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.
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.
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.
19 #ifndef SPIRALSYNTHMODULAR
20 #define SPIRALSYNTHMODULAR
22 #include <FL/Fl.H>
23 #include <FL/x.H>
24 #include <FL/Fl_Double_Window.H>
25 #include <FL/Fl_Group.H>
26 #include <FL/Fl_Box.H>
27 #include <FL/Fl_Button.H>
28 #include <FL/Fl_Pixmap.H>
29 #include <FL/Fl_Scroll.H>
30 #include <FL/Fl_Pack.H>
31 #include <FL/Fl_Tile.H>
32 #include <FL/Fl_Tabs.H>
33 #include <FL/Fl_Menu_Bar.H>
34 #include <sstream>
35 #include <iostream>
36 #include <fstream>
37 #include <map>
38 #include "GUI/Widgets/Fl_DeviceGUI.h"
39 #include "GUI/Widgets/Fl_CommentGUI.h"
40 #include "GUI/Widgets/Fl_Canvas.h"
41 #include "SpiralSound/Plugins/SpiralPlugin.h"
42 #include "SpiralSound/ChannelHandler.h"
43 #include "SettingsWindow.h"
45 const static string VER_STRING = "0.2.3.cvs";
47 typedef Fl_Double_Window SpiralWindowType;
48 // typedef Fl_Window SpiralWindowType;
50 class SettingsWindow;
52 class DeviceWin
54 public:
55 DeviceWin() : m_DeviceGUI(NULL) {}
56 ~DeviceWin();
58 int m_PluginID;
59 SpiralPlugin* m_Device;
60 Fl_DeviceGUI* m_DeviceGUI;
63 class Fl_ToolButton : public Fl_Button
65 public:
66 Fl_ToolButton(int x, int y, int w, int h, const char *n=NULL) :
67 Fl_Button(x,y,w,h,n) {}
68 virtual void draw() { draw_label(); }
71 class DeviceGroup
73 public:
74 DeviceGroup() { devicecount = 0; }
76 int devicecount;
77 fstream devices;
78 map<int,int> m_DeviceIds;//old ID, new ID
81 class SynthModular
83 public:
84 SynthModular();
85 ~SynthModular();
87 SpiralWindowType * CreateWindow();
88 void LoadPlugins(string pluginPath);
89 void Update();
90 void AddDevice(int n, int x, int y);
91 void AddComment(int n);
92 void ClearUp();
93 void UpdateHostInfo();
94 bool CallbackMode() { return m_CallbackUpdateMode; }
95 bool IsBlockingOutputPluginReady() { return m_BlockingOutputPluginIsReady; }
96 void UpdatePluginGUIs();
97 void LoadPatch(const char *fn);
99 void FreezeAll()
101 m_CH.Set("Frozen",true);
102 m_CH.Wait();
105 void ThawAll()
107 m_CH.Set("Frozen",false);
110 void PauseAudio()
112 m_Info.PAUSED = true;
115 void ResumeAudio()
117 m_Info.PAUSED = false;
120 void ResetAudio()
122 if (! m_ResetingAudioThread)
124 FreezeAll();
126 m_ResetingAudioThread = true;
128 ThawAll();
132 // only for audio thread
133 bool IsFrozen() { return m_Frozen; }
135 iostream &StreamPatchIn(iostream &s, bool paste, bool merge);
136 private:
138 vector<string> BuildPluginList(const string &Path);
140 DeviceWin* NewDeviceWin(int n, int x, int y);
141 DeviceWin* NewComment(int n, int x, int y);
143 HostInfo m_Info;
144 bool m_ResetingAudioThread, m_HostNeedsUpdate, m_Frozen;
147 static DeviceGUIInfo BuildDeviceGUIInfo(PluginInfo &PInfo);
149 // currently static, to allow the callback
150 // cb_UpdatePluginInfo to access the map.
151 static map<int,DeviceWin*> m_DeviceWinMap;
153 int m_NextID;
154 static bool m_CallbackUpdateMode;
155 static bool m_BlockingOutputPluginIsReady;
156 string m_FilePath, m_MergeFilePath;
158 // Main GUI stuff
159 void CreateGUI (int xoff=0, int yoff=0, char *name="");
160 Fl_Menu_Bar *m_MainMenu;
161 Fl_Pack *m_Topbar, *m_ToolbarPanel, *m_Toolbar;
162 Fl_Group *m_GroupFiller;
163 Fl_Button *m_Load, *m_Save, *m_New, *m_Options, *m_NewComment;
164 Fl_Pack *m_PlayResetGroup;
165 Fl_Button *m_PlayPause, *m_Reset;
166 Fl_Tabs *m_GroupTab;
167 Fl_Canvas *m_Canvas;
168 Fl_Scroll *m_CanvasScroll;
169 map<string,Fl_Pack*> m_PluginGroupMap;
170 SettingsWindow *m_SettingsWindow;
171 SpiralWindowType* m_TopWindow;
172 vector<Fl_Button*> m_DeviceVec;
173 ChannelHandler m_CH; // used for threadsafe communication
174 DeviceGroup m_Copied;
176 inline void cb_NewComment_i(Fl_Button* o, void* v);
177 static void cb_NewComment(Fl_Button* o, void* v);
178 // File menu - and associated buttons, etc.
179 inline void cb_New_i (Fl_Widget *o, void *v);
180 static void cb_New (Fl_Widget *o, void *v);
181 inline void cb_Load_i (Fl_Widget *o, void *v);
182 static void cb_Load (Fl_Widget *o, void *v);
183 inline void cb_Save_i (Fl_Widget *o, void *v);
184 static void cb_Save (Fl_Widget *o, void *v);
185 inline void cb_Merge_i (Fl_Widget *o, void *v);
186 static void cb_Merge (Fl_Widget *o, void *v);
187 inline void cb_Close_i (Fl_Widget *o, void *v);
188 static void cb_Close (Fl_Widget *o, void *v);
189 // Edit menu
190 inline void cb_Cut_i (Fl_Widget *o, void *v);
191 static void cb_Cut (Fl_Widget *o, void *v);
192 inline void cb_Copy_i (Fl_Widget *o, void *v);
193 static void cb_Copy (Fl_Widget *o, void *v);
194 inline void cb_Paste_i (Fl_Widget *o, void *v);
195 static void cb_Paste (Fl_Widget *o, void *v);
196 inline void cb_Delete_i (Fl_Widget *o, void *v);
197 static void cb_Delete (Fl_Widget *o, void *v);
198 inline void cb_Options_i (Fl_Widget *o, void *v);
199 static void cb_Options (Fl_Widget *o, void *v);
200 // Plugin Menu
201 inline void cb_NewDevice_i (Fl_Button *o, void *v);
202 static void cb_NewDevice (Fl_Button *o, void *v);
203 inline void cb_NewDeviceFromMenu_i (Fl_Widget *o, void *v);
204 static void cb_NewDeviceFromMenu (Fl_Widget *o, void *v);
205 inline void cb_NewDeviceFromCanvasMenu_i (Fl_Canvas *o, void *v);
206 static void cb_NewDeviceFromCanvasMenu (Fl_Canvas *o, void *v);
207 // Audio Menu
208 inline void cb_PlayPause_i (Fl_Widget *o, void *v);
209 static void cb_PlayPause (Fl_Widget *o, void *v);
210 inline void cb_Reset_i (Fl_Widget *o, void *v);
211 static void cb_Reset (Fl_Widget *o, void *v);
213 inline void cb_Connection_i(Fl_Canvas* o, void* v);
214 static void cb_Connection(Fl_Canvas* o, void* v);
215 inline void cb_Unconnect_i(Fl_Canvas* o, void* v);
216 static void cb_Unconnect(Fl_Canvas* o, void* v);
217 inline void cb_GroupTab_i(Fl_Tabs* o, void* v);
218 static void cb_GroupTab(Fl_Tabs* o, void* v);
219 static void cb_Update(void* o, bool Mode);
220 static void cb_Blocking(void* o, bool Mode);
221 static void cb_UpdatePluginInfo(int ID, void *PluginInfo);
222 inline void cb_ChangeBufferAndSampleRate_i(long int NewBufferSize, long int NewSamplerate);
223 static void cb_ChangeBufferAndSampleRate(long unsigned int NewBufferSize, long unsigned int NewSamplerate, void *o)
225 ((SynthModular*)o)->cb_ChangeBufferAndSampleRate_i(NewBufferSize, NewSamplerate);
227 friend istream &operator>>(istream &s, SynthModular &o);
228 friend ostream &operator<<(ostream &s, SynthModular &o);
231 iostream &operator>>(iostream &s, SynthModular &o);
232 ostream &operator<<(ostream &s, SynthModular &o);
234 #endif