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