4 * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include "bcdisplayinfo.h"
24 #include "bcsignals.h"
25 #include "filesystem.h"
28 #include "reverbwindow.h"
34 ReverbWindow::ReverbWindow(Reverb *reverb)
35 : PluginClientWindow(reverb,
42 this->reverb = reverb;
45 ReverbWindow::~ReverbWindow()
49 void ReverbWindow::create_objects()
51 int xs5 = xS(5), xs35 = xS(35), xs200 = xS(200);
52 int ys10 = yS(10), ys25 = yS(25), ys40 = yS(40);
53 int x = xs200, y = ys10;
54 add_tool(new BC_Title(xs5, y + ys10, _("Initial signal level:")));
55 add_tool(level_init = new ReverbLevelInit(reverb, x, y)); y += ys25;
56 add_tool(new BC_Title(xs5, y + ys10, _("ms before reflections:")));
57 add_tool(delay_init = new ReverbDelayInit(reverb, x + xs35, y)); y += ys25;
58 add_tool(new BC_Title(xs5, y + ys10, _("First reflection level:")));
59 add_tool(ref_level1 = new ReverbRefLevel1(reverb, x, y)); y += ys25;
60 add_tool(new BC_Title(xs5, y + ys10, _("Last reflection level:")));
61 add_tool(ref_level2 = new ReverbRefLevel2(reverb, x + xs35, y)); y += ys25;
62 add_tool(new BC_Title(xs5, y + ys10, _("Number of reflections:")));
63 add_tool(ref_total = new ReverbRefTotal(reverb, x, y)); y += ys25;
64 add_tool(new BC_Title(xs5, y + ys10, _("ms of reflections:")));
65 add_tool(ref_length = new ReverbRefLength(reverb, x + xs35, y)); y += ys25;
66 add_tool(new BC_Title(xs5, y + ys10, _("Start band for lowpass:")));
67 add_tool(lowpass1 = new ReverbLowPass1(reverb, x, y)); y += ys25;
68 add_tool(new BC_Title(xs5, y + ys10, _("End band for lowpass:")));
69 add_tool(lowpass2 = new ReverbLowPass2(reverb, x + xs35, y)); y += ys40;
79 ReverbLevelInit::ReverbLevelInit(Reverb *reverb, int x, int y)
82 reverb->config.level_init,
86 this->reverb = reverb;
88 ReverbLevelInit::~ReverbLevelInit()
91 int ReverbLevelInit::handle_event()
93 //printf("ReverbLevelInit::handle_event 1 %p\n", reverb);
94 reverb->config.level_init = get_value();
95 //printf("ReverbLevelInit::handle_event 1\n");
96 reverb->send_configure_change();
97 //printf("ReverbLevelInit::handle_event 2\n");
101 ReverbDelayInit::ReverbDelayInit(Reverb *reverb, int x, int y)
104 reverb->config.delay_init,
108 this->reverb = reverb;
110 ReverbDelayInit::~ReverbDelayInit()
113 int ReverbDelayInit::handle_event()
115 reverb->config.delay_init = get_value();
116 reverb->send_configure_change();
120 ReverbRefLevel1::ReverbRefLevel1(Reverb *reverb, int x, int y)
123 reverb->config.ref_level1,
127 this->reverb = reverb;
129 ReverbRefLevel1::~ReverbRefLevel1() {}
130 int ReverbRefLevel1::handle_event()
132 reverb->config.ref_level1 = get_value();
133 reverb->send_configure_change();
138 ReverbRefLevel2::ReverbRefLevel2(Reverb *reverb, int x, int y)
141 reverb->config.ref_level2,
145 this->reverb = reverb;
147 ReverbRefLevel2::~ReverbRefLevel2() {}
148 int ReverbRefLevel2::handle_event()
150 reverb->config.ref_level2 = get_value();
151 reverb->send_configure_change();
155 ReverbRefTotal::ReverbRefTotal(Reverb *reverb, int x, int y)
158 reverb->config.ref_total,
162 this->reverb = reverb;
164 ReverbRefTotal::~ReverbRefTotal() {}
165 int ReverbRefTotal::handle_event()
167 reverb->config.ref_total = get_value();
168 reverb->send_configure_change();
173 ReverbRefLength::ReverbRefLength(Reverb *reverb, int x, int y)
176 reverb->config.ref_length,
180 this->reverb = reverb;
182 ReverbRefLength::~ReverbRefLength() {}
183 int ReverbRefLength::handle_event()
185 reverb->config.ref_length = get_value();
186 reverb->send_configure_change();
190 ReverbLowPass1::ReverbLowPass1(Reverb *reverb, int x, int y)
193 reverb->config.lowpass1)
195 this->reverb = reverb;
197 ReverbLowPass1::~ReverbLowPass1() {}
198 int ReverbLowPass1::handle_event()
200 reverb->config.lowpass1 = get_value();
201 reverb->send_configure_change();
205 ReverbLowPass2::ReverbLowPass2(Reverb *reverb, int x, int y)
208 reverb->config.lowpass2)
210 this->reverb = reverb;
212 ReverbLowPass2::~ReverbLowPass2() {}
213 int ReverbLowPass2::handle_event()
215 reverb->config.lowpass2 = get_value();
216 reverb->send_configure_change();
220 // ReverbMenu::ReverbMenu(Reverb *reverb, ReverbWindow *window)
221 // : BC_MenuBar(0, 0, window->get_w())
223 // this->window = window;
224 // this->reverb = reverb;
227 // ReverbMenu::~ReverbMenu()
231 // //delete set_default;
232 // for(int i = 0; i < total_loads; i++)
234 // delete prev_load[i];
236 // delete prev_load_thread;
239 // void ReverbMenu::create_objects(BC_Hash *defaults)
241 // add_menu(filemenu = new BC_Menu(_("File")));
242 // filemenu->add_item(load = new ReverbLoad(reverb, this));
243 // filemenu->add_item(save = new ReverbSave(reverb, this));
244 // //filemenu->add_item(set_default = new ReverbSetDefault);
245 // load_defaults(defaults);
246 // prev_load_thread = new ReverbLoadPrevThread(reverb, this);
249 // int ReverbMenu::load_defaults(BC_Hash *defaults)
252 // total_loads = defaults->get("TOTAL_LOADS", 0);
253 // if(total_loads > 0)
255 // filemenu->add_item(new BC_MenuItem("-"));
256 // char string[1024], path[1024], filename[1024];
258 // for(int i = 0; i < total_loads; i++)
260 // sprintf(string, "LOADPREVIOUS%d", i);
261 // defaults->get(string, path);
262 // fs.extract_name(filename, path);
263 // //printf("ReverbMenu::load_defaults %s\n", path);
264 // filemenu->add_item(prev_load[i] = new ReverbLoadPrev(reverb, this, filename, path));
270 // int ReverbMenu::save_defaults(BC_Hash *defaults)
272 // if(total_loads > 0)
274 // defaults->update("TOTAL_LOADS", total_loads);
275 // char string[1024];
277 // for(int i = 0; i < total_loads; i++)
279 // sprintf(string, "LOADPREVIOUS%d", i);
280 // defaults->update(string, prev_load[i]->path);
286 // int ReverbMenu::add_load(char *path)
288 // if(total_loads == 0)
290 // filemenu->add_item(new BC_MenuItem("-"));
293 // // test for existing copy
295 // char text[1024], new_path[1024]; // get text and path
296 // fs.extract_name(text, path);
297 // strcpy(new_path, path);
299 // for(int i = 0; i < total_loads; i++)
301 // if(!strcmp(prev_load[i]->get_text(), text)) // already exists
302 // { // swap for top load
303 // for(int j = i; j > 0; j--) // move preceeding loads down
305 // prev_load[j]->set_text(prev_load[j - 1]->get_text());
306 // prev_load[j]->set_path(prev_load[j - 1]->path);
308 // prev_load[0]->set_text(text);
309 // prev_load[0]->set_path(new_path);
314 // // add another load
315 // if(total_loads < TOTAL_LOADS)
317 // filemenu->add_item(prev_load[total_loads] = new ReverbLoadPrev(reverb, this));
321 // // cycle loads down
322 // for(int i = total_loads - 1; i > 0; i--)
324 // // set menu item text
325 // prev_load[i]->set_text(prev_load[i - 1]->get_text());
327 // prev_load[i]->set_path(prev_load[i - 1]->path);
330 // // set up the new load
331 // prev_load[0]->set_text(text);
332 // prev_load[0]->set_path(new_path);
336 // ReverbLoad::ReverbLoad(Reverb *reverb, ReverbMenu *menu)
337 // : BC_MenuItem(_("Load..."))
339 // this->reverb = reverb;
340 // this->menu = menu;
341 // thread = new ReverbLoadThread(reverb, menu);
343 // ReverbLoad::~ReverbLoad()
347 // int ReverbLoad::handle_event()
353 // ReverbSave::ReverbSave(Reverb *reverb, ReverbMenu *menu)
354 // : BC_MenuItem(_("Save..."))
356 // this->reverb = reverb;
357 // this->menu = menu;
358 // thread = new ReverbSaveThread(reverb, menu);
360 // ReverbSave::~ReverbSave()
364 // int ReverbSave::handle_event()
370 // ReverbSetDefault::ReverbSetDefault()
371 // : BC_MenuItem(_("Set default"))
374 // int ReverbSetDefault::handle_event()
379 // ReverbLoadPrev::ReverbLoadPrev(Reverb *reverb, ReverbMenu *menu, char *filename, char *path)
380 // : BC_MenuItem(filename)
382 // this->reverb = reverb;
383 // this->menu = menu;
384 // strcpy(this->path, path);
386 // ReverbLoadPrev::ReverbLoadPrev(Reverb *reverb, ReverbMenu *menu)
389 // this->reverb = reverb;
390 // this->menu = menu;
392 // int ReverbLoadPrev::handle_event()
394 // menu->prev_load_thread->set_path(path);
395 // menu->prev_load_thread->start();
397 // int ReverbLoadPrev::set_path(char *path)
399 // strcpy(this->path, path);
403 // ReverbSaveThread::ReverbSaveThread(Reverb *reverb, ReverbMenu *menu)
406 // this->reverb = reverb;
407 // this->menu = menu;
409 // ReverbSaveThread::~ReverbSaveThread()
412 // void ReverbSaveThread::run()
416 // ReverbSaveDialog dialog(reverb);
417 // dialog.create_objects();
418 // result = dialog.run_window();
419 // // if(!result) strcpy(reverb->config_directory, dialog.get_path());
423 // result = reverb->save_to_file(reverb->config_directory);
424 // menu->add_load(reverb->config_directory);
428 // ReverbSaveDialog::ReverbSaveDialog(Reverb *reverb)
431 // reverb->config_directory,
433 // _("Select the reverb file to save as"), 0, 0)
435 // this->reverb = reverb;
437 // ReverbSaveDialog::~ReverbSaveDialog()
440 // int ReverbSaveDialog::ok_event()
445 // int ReverbSaveDialog::cancel_event()
453 // ReverbLoadThread::ReverbLoadThread(Reverb *reverb, ReverbMenu *menu)
456 // this->reverb = reverb;
457 // this->menu = menu;
459 // ReverbLoadThread::~ReverbLoadThread()
462 // void ReverbLoadThread::run()
466 // ReverbLoadDialog dialog(reverb);
467 // dialog.create_objects();
468 // result = dialog.run_window();
469 // // if(!result) strcpy(reverb->config_directory, dialog.get_path());
473 // result = reverb->load_from_file(reverb->config_directory);
476 // menu->add_load(reverb->config_directory);
477 // reverb->send_configure_change();
482 // ReverbLoadPrevThread::ReverbLoadPrevThread(Reverb *reverb, ReverbMenu *menu) : Thread()
484 // this->reverb = reverb;
485 // this->menu = menu;
487 // ReverbLoadPrevThread::~ReverbLoadPrevThread()
490 // void ReverbLoadPrevThread::run()
493 // strcpy(reverb->config_directory, path);
494 // result = reverb->load_from_file(path);
497 // menu->add_load(path);
498 // reverb->send_configure_change();
501 // int ReverbLoadPrevThread::set_path(char *path)
503 // strcpy(this->path, path);
511 // ReverbLoadDialog::ReverbLoadDialog(Reverb *reverb)
514 // reverb->config_directory,
516 // _("Select the reverb file to load from"), 0, 0)
518 // this->reverb = reverb;
520 // ReverbLoadDialog::~ReverbLoadDialog()
523 // int ReverbLoadDialog::ok_event()
528 // int ReverbLoadDialog::cancel_event()