1 /* SpiralSynth
2 * Copyright (C) 2000 David Griffiths <dave@blueammonite.f9.co.uk>
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 "MixerGUI.h"
20
MixerGUI(Mixer * o)21 MixerGUI::MixerGUI(Mixer *o)
22 {
23 m_mix=o;
24 if (!m_mix) cerr<<"WARNING: Mixer not correctly set up"<<endl;
25 }
26
27 void MixerGUI::CreateGUI(int xoff=0, int yoff=0, char *name)
28 {
29 Fl_Group* o = GUIMixGroup = new Fl_Group(xoff, yoff, 100, 110, name);
30 o->type(1);
31 o->box(FL_UP_BOX);
32 o->labeltype(FL_ENGRAVED_LABEL);
33 o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
34 o->user_data((void*)(this));
35
36 Balance = new Fl_Knob(xoff+55, yoff+35, 40, 40, "Amount");
37 Balance->color(SynthInfo::GUI_COLOUR);
38 Balance->type(Fl_Knob::LINELIN);
39 Balance->labelsize(10);
40 Balance->maximum(0.002);
41 Balance->step(0.00001);
42 Balance->value(0.001);
43 Balance->callback((Fl_Callback*)cb_Balance);
44
45 Add = new Fl_Check_Button(xoff, yoff+15, 55, 30, "Add");
46 Add->type(102);
47 Add->down_box(FL_DIAMOND_DOWN_BOX);
48 Add->selection_color(SynthInfo::GUI_COLOUR);
49 Add->set();
50 Add->callback((Fl_Callback*)cb_Add);
51
52 XMod = new Fl_Check_Button(xoff, yoff+40, 55, 30, "XM");
53 XMod->type(102);
54 XMod->down_box(FL_DIAMOND_DOWN_BOX);
55 XMod->selection_color(SynthInfo::GUI_COLOUR);
56 XMod->callback((Fl_Callback*)cb_XMod);
57
58 Ring = new Fl_Check_Button(xoff, yoff+65, 55, 30, "Ring");
59 Ring->type(102);
60 Ring->down_box(FL_DIAMOND_DOWN_BOX);
61 Ring->selection_color(SynthInfo::GUI_COLOUR);
62 Ring->callback((Fl_Callback*)cb_Ring);
63
64 o->end();
65
66 }
67
UpdateValues()68 void MixerGUI::UpdateValues()
69 {
70 Balance->value(m_mix->GetAmount());
71
72 Add->value(0);
73 XMod->value(0);
74 Ring->value(0);
75
76 switch(m_mix->GetType())
77 {
78 case Mixer::ADD: Add->value(1); break;
79 case Mixer::XMOD: XMod->value(1); break;
80 case Mixer::RING: Ring->value(1); break;
81 case Mixer::NONE: break;
82 }
83
84 }
85
86 //// Callbacks ////
87
cb_Balance_i(Fl_Knob * o,void * v)88 inline void MixerGUI::cb_Balance_i(Fl_Knob* o, void* v)
89 { m_mix->SetAmount(o->value()); }
cb_Balance(Fl_Knob * o,void * v)90 void MixerGUI::cb_Balance(Fl_Knob* o, void* v)
91 { ((MixerGUI*)(o->parent()->user_data()))->cb_Balance_i(o,v); }
92
cb_Add_i(Fl_Check_Button * o,void * v)93 inline void MixerGUI::cb_Add_i(Fl_Check_Button* o, void* v)
94 { m_mix->SetType(Mixer::ADD); }
cb_Add(Fl_Check_Button * o,void * v)95 void MixerGUI::cb_Add(Fl_Check_Button* o, void* v)
96 { ((MixerGUI*)(o->parent()->user_data()))->cb_Add_i(o,v); }
97
cb_XMod_i(Fl_Check_Button * o,void * v)98 inline void MixerGUI::cb_XMod_i(Fl_Check_Button* o, void* v)
99 { m_mix->SetType(Mixer::XMOD); }
cb_XMod(Fl_Check_Button * o,void * v)100 void MixerGUI::cb_XMod(Fl_Check_Button* o, void* v)
101 { ((MixerGUI*)(o->parent()->user_data()))->cb_XMod_i(o,v); }
102
cb_Ring_i(Fl_Check_Button * o,void * v)103 inline void MixerGUI::cb_Ring_i(Fl_Check_Button* o, void* v)
104 { m_mix->SetType(Mixer::RING); }
cb_Ring(Fl_Check_Button * o,void * v)105 void MixerGUI::cb_Ring(Fl_Check_Button* o, void* v)
106 { ((MixerGUI*)(o->parent()->user_data()))->cb_Ring_i(o,v); }
107
108