/[svn]/gigedit/trunk/src/dimregionedit.cpp
ViewVC logotype

Annotation of /gigedit/trunk/src/dimregionedit.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1118 - (hide annotations) (download)
Sat Mar 24 13:48:16 2007 UTC (17 years, 1 month ago) by schoenebeck
File size: 29199 byte(s)
- just added a tooltip to the sample entry field

1 persson 1100 /*
2     * Copyright (C) 2006, 2007 Andreas Persson
3     *
4     * This program is free software; you can redistribute it and/or
5     * modify it under the terms of the GNU General Public License as
6     * published by the Free Software Foundation; either version 2, or (at
7     * your option) any later version.
8     *
9     * This program is distributed in the hope that it will be useful, but
10     * WITHOUT ANY WARRANTY; without even the implied warranty of
11     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12     * General Public License for more details.
13     *
14     * You should have received a copy of the GNU General Public License
15     * along with program; see the file COPYING. If not, write to the Free
16     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
17     * 02110-1301 USA.
18     */
19    
20     #include "dimregionedit.h"
21    
22     bool update_gui;
23    
24     namespace {
25     uint8_t& access_UnityNote(gig::DimensionRegion* dimreg)
26     {
27     return dimreg->UnityNote;
28     }
29     int16_t& access_FineTune(gig::DimensionRegion* dimreg)
30     {
31     return dimreg->FineTune;
32     }
33     uint32_t& access_SampleLoops(gig::DimensionRegion* dimreg)
34     {
35     return dimreg->SampleLoops;
36     }
37     uint8_t& access_Crossfade_in_start(gig::DimensionRegion* dimreg)
38     {
39     return dimreg->Crossfade.in_start;
40     }
41     uint8_t& access_Crossfade_in_end(gig::DimensionRegion* dimreg)
42     {
43     return dimreg->Crossfade.in_end;
44     }
45     uint8_t& access_Crossfade_out_start(gig::DimensionRegion* dimreg)
46     {
47     return dimreg->Crossfade.out_start;
48     }
49     uint8_t& access_Crossfade_out_end(gig::DimensionRegion* dimreg)
50     {
51     return dimreg->Crossfade.out_end;
52     }
53     }
54    
55     DimRegionEdit::DimRegionEdit() :
56     eEG1PreAttack("PreAttack", &gig::DimensionRegion::EG1PreAttack, 0, 100, 2),
57     eEG1Attack("Attack", &gig::DimensionRegion::EG1Attack, 0, 60, 3),
58     eEG1Decay1("Decay1", &gig::DimensionRegion::EG1Decay1, 0.005, 60, 3),
59     eEG1Decay2("Decay2", &gig::DimensionRegion::EG1Decay2, 0, 60, 3),
60     eEG1InfiniteSustain("InfiniteSustain",
61     &gig::DimensionRegion::EG1InfiniteSustain),
62     eEG1Sustain("Sustain", &gig::DimensionRegion::EG1Sustain, 0, 100, 2),
63     eEG1Release("Release", &gig::DimensionRegion::EG1Release, 0, 60, 3),
64     eEG1Hold("Hold", &gig::DimensionRegion::EG1Hold),
65     eEG1Controller("Controller", &gig::DimensionRegion::EG1Controller),
66     eEG1ControllerInvert("ControllerInvert",
67     &gig::DimensionRegion::EG1ControllerInvert),
68     eEG1ControllerAttackInfluence("ControllerAttackInfluence",
69     &gig::DimensionRegion::EG1ControllerAttackInfluence,
70     0, 3),
71     eEG1ControllerDecayInfluence("ControllerDecayInfluence",
72     &gig::DimensionRegion::EG1ControllerDecayInfluence,
73     0, 3),
74     eEG1ControllerReleaseInfluence("ControllerReleaseInfluence",
75     &gig::DimensionRegion::EG1ControllerReleaseInfluence,
76     0, 3),
77     eLFO1Frequency("Frequency", &gig::DimensionRegion::LFO1Frequency,
78     0.1, 10, 2),
79     eLFO1InternalDepth("InternalDepth",
80     &gig::DimensionRegion::LFO1InternalDepth, 0, 1200),
81     eLFO1ControlDepth("ControlDepth", &gig::DimensionRegion::LFO1ControlDepth,
82     0, 1200),
83     eLFO1Controller("Controller", &gig::DimensionRegion::LFO1Controller),
84     eLFO1FlipPhase("FlipPhase", &gig::DimensionRegion::LFO1FlipPhase),
85     eLFO1Sync("Sync", &gig::DimensionRegion::LFO1Sync),
86     eEG2PreAttack("PreAttack", &gig::DimensionRegion::EG2PreAttack, 0, 100, 2),
87     eEG2Attack("Attack", &gig::DimensionRegion::EG2Attack, 0, 60, 3),
88     eEG2Decay1("Decay1", &gig::DimensionRegion::EG2Decay1, 0.005, 60, 3),
89     eEG2Decay2("Decay2", &gig::DimensionRegion::EG2Decay2, 0, 60, 3),
90     eEG2InfiniteSustain("InfiniteSustain",
91     &gig::DimensionRegion::EG2InfiniteSustain),
92     eEG2Sustain("Sustain", &gig::DimensionRegion::EG2Sustain, 0, 100, 2),
93     eEG2Release("Release", &gig::DimensionRegion::EG2Release, 0, 60, 3),
94     eEG2Controller("Controller", &gig::DimensionRegion::EG2Controller),
95     eEG2ControllerInvert("ControllerInvert",
96     &gig::DimensionRegion::EG2ControllerInvert),
97     eEG2ControllerAttackInfluence("ControllerAttackInfluence",
98     &gig::DimensionRegion::EG2ControllerAttackInfluence,
99     0, 3),
100     eEG2ControllerDecayInfluence("ControllerDecayInfluence",
101     &gig::DimensionRegion::EG2ControllerDecayInfluence,
102     0, 3),
103     eEG2ControllerReleaseInfluence("ControllerReleaseInfluence",
104     &gig::DimensionRegion::EG2ControllerReleaseInfluence,
105     0, 3),
106     eLFO2Frequency("Frequency", &gig::DimensionRegion::LFO2Frequency,
107     0.1, 10, 2),
108     eLFO2InternalDepth("InternalDepth",
109     &gig::DimensionRegion::LFO2InternalDepth, 0, 1200),
110     eLFO2ControlDepth("ControlDepth",
111     &gig::DimensionRegion::LFO2ControlDepth, 0, 1200),
112     eLFO2Controller("Controller", &gig::DimensionRegion::LFO2Controller),
113     eLFO2FlipPhase("FlipPhase", &gig::DimensionRegion::LFO2FlipPhase),
114     eLFO2Sync("Sync", &gig::DimensionRegion::LFO2Sync),
115     eEG3Attack("Attack", &gig::DimensionRegion::EG3Attack, 0, 10, 3),
116     eEG3Depth("Depth", &gig::DimensionRegion::EG3Depth, -1200, 1200),
117     eLFO3Frequency("Frequency", &gig::DimensionRegion::LFO3Frequency,
118     0.1, 10, 2),
119     eLFO3InternalDepth("InternalDepth",
120     &gig::DimensionRegion::LFO3InternalDepth, 0, 1200),
121     eLFO3ControlDepth("ControlDepth", &gig::DimensionRegion::LFO3ControlDepth,
122     0, 1200),
123     eLFO3Controller("Controller", &gig::DimensionRegion::LFO3Controller),
124     eLFO3Sync("Sync", &gig::DimensionRegion::LFO3Sync),
125     eVCFEnabled("Enabled", &gig::DimensionRegion::VCFEnabled),
126     eVCFType("Type", &gig::DimensionRegion::VCFType),
127     eVCFCutoffController("CutoffController",
128     &gig::DimensionRegion::VCFCutoffController),
129     eVCFCutoffControllerInvert("CutoffControllerInvert",
130     &gig::DimensionRegion::VCFCutoffControllerInvert),
131     eVCFCutoff("Cutoff", &gig::DimensionRegion::VCFCutoff),
132     eVCFVelocityCurve("VelocityCurve", &gig::DimensionRegion::VCFVelocityCurve),
133     eVCFVelocityScale("VelocityScale", &gig::DimensionRegion::VCFVelocityScale),
134     eVCFVelocityDynamicRange("VelocityDynamicRange",
135     &gig::DimensionRegion::VCFVelocityDynamicRange,
136     0, 4),
137     eVCFResonance("Resonance", &gig::DimensionRegion::VCFResonance),
138     eVCFResonanceDynamic("ResonanceDynamic",
139     &gig::DimensionRegion::VCFResonanceDynamic),
140     eVCFResonanceController("ResonanceController",
141     &gig::DimensionRegion::VCFResonanceController),
142     eVCFKeyboardTracking("KeyboardTracking",
143     &gig::DimensionRegion::VCFKeyboardTracking),
144     eVCFKeyboardTrackingBreakpoint("KeyboardTrackingBreakpoint",
145     &gig::DimensionRegion::VCFKeyboardTrackingBreakpoint),
146     eVelocityResponseCurve("VelocityResponseCurve",
147     &gig::DimensionRegion::VelocityResponseCurve),
148     eVelocityResponseDepth("VelocityResponseDepth",
149     &gig::DimensionRegion::VelocityResponseDepth, 0, 4),
150     eVelocityResponseCurveScaling("VelocityResponseCurveScaling",
151     &gig::DimensionRegion::VelocityResponseCurveScaling),
152     eReleaseVelocityResponseCurve("ReleaseVelocityResponseCurve",
153     &gig::DimensionRegion::ReleaseVelocityResponseCurve),
154     eReleaseVelocityResponseDepth("ReleaseVelocityResponseDepth",
155     &gig::DimensionRegion::ReleaseVelocityResponseDepth,
156     0, 4),
157     eReleaseTriggerDecay("ReleaseTriggerDecay",
158     &gig::DimensionRegion::ReleaseTriggerDecay, 0, 8),
159     eCrossfade_in_start("Crossfade.in_start", &access_Crossfade_in_start),
160     eCrossfade_in_end("Crossfade.in_end", &access_Crossfade_in_end),
161     eCrossfade_out_start("Crossfade.out_start", &access_Crossfade_out_start),
162     eCrossfade_out_end("Crossfade.out_end", &access_Crossfade_out_end),
163     ePitchTrack("PitchTrack", &gig::DimensionRegion::PitchTrack),
164     eDimensionBypass("DimensionBypass", &gig::DimensionRegion::DimensionBypass),
165     ePan("Pan", &gig::DimensionRegion::Pan, -64, 63),
166     eSelfMask("SelfMask", &gig::DimensionRegion::SelfMask),
167     eAttenuationController("AttenuationController",
168     &gig::DimensionRegion::AttenuationController),
169     eInvertAttenuationController("InvertAttenuationController",
170     &gig::DimensionRegion::InvertAttenuationController),
171     eAttenuationControllerThreshold("AttenuationControllerThreshold",
172     &gig::DimensionRegion::AttenuationControllerThreshold),
173     eChannelOffset("ChannelOffset", &gig::DimensionRegion::ChannelOffset, 0, 9),
174     eSustainDefeat("SustainDefeat", &gig::DimensionRegion::SustainDefeat),
175     eMSDecode("MSDecode", &gig::DimensionRegion::MSDecode),
176     eSampleStartOffset("SampleStartOffset",
177     &gig::DimensionRegion::SampleStartOffset, 0, 2000),
178     eUnityNote("UnityNote", &access_UnityNote),
179     eFineTune("FineTune", &access_FineTune, -49, 50),
180     eGain("Gain", -96, 0, 2),
181 persson 1117 eGainPlus6("Gain +6dB", eGain),
182 persson 1100 eSampleLoops("SampleLoops", &access_SampleLoops, 0, 1)
183     {
184     for (int i = 0 ; i < 5 ; i++) {
185     table[i] = new Gtk::Table(3, 1);
186     table[i]->set_col_spacings(5);
187     }
188    
189     pageno = 0;
190     rowno = 0;
191     firstRowInBlock = 0;
192    
193     addString("Sample", lSample, wSample);
194     //TODO: the following would break drag&drop: wSample->property_editable().set_value(false); or this: wSample->set_editable(false);
195 schoenebeck 1118 tooltips.set_tip(*wSample, "drop a sample here");
196 persson 1100 addHeader("EG1");
197     addProp(eEG1PreAttack);
198     addProp(eEG1Attack);
199     addProp(eEG1Decay1);
200     addProp(eEG1Decay2);
201     addProp(eEG1InfiniteSustain);
202     addProp(eEG1Sustain);
203     addProp(eEG1Release);
204     addProp(eEG1Hold);
205     addProp(eEG1Controller);
206     addProp(eEG1ControllerInvert);
207     addProp(eEG1ControllerAttackInfluence);
208     addProp(eEG1ControllerDecayInfluence);
209     addProp(eEG1ControllerReleaseInfluence);
210     addHeader("LFO1");
211     addProp(eLFO1Frequency);
212     addProp(eLFO1InternalDepth);
213     addProp(eLFO1ControlDepth);
214     {
215     char* choices[] = { "internal", "modwheel", "breath",
216     "internal+modwheel", "internal+breath", 0 };
217     static const gig::lfo1_ctrl_t values[] = {
218     gig::lfo1_ctrl_internal,
219     gig::lfo1_ctrl_modwheel,
220     gig::lfo1_ctrl_breath,
221     gig::lfo1_ctrl_internal_modwheel,
222     gig::lfo1_ctrl_internal_breath
223     };
224     eLFO1Controller.set_choices(choices, values);
225     }
226     addProp(eLFO1Controller);
227     addProp(eLFO1FlipPhase);
228     addProp(eLFO1Sync);
229    
230     nextPage();
231     addHeader("EG2");
232     addProp(eEG2PreAttack);
233     addProp(eEG2Attack);
234     addProp(eEG2Decay1);
235     addProp(eEG2Decay2);
236     addProp(eEG2InfiniteSustain);
237     addProp(eEG2Sustain);
238     addProp(eEG2Release);
239     addProp(eEG2Controller);
240     addProp(eEG2ControllerInvert);
241     addProp(eEG2ControllerAttackInfluence);
242     addProp(eEG2ControllerDecayInfluence);
243     addProp(eEG2ControllerReleaseInfluence);
244     addHeader("LFO2");
245     addProp(eLFO2Frequency);
246     addProp(eLFO2InternalDepth);
247     addProp(eLFO2ControlDepth);
248     {
249     char* choices[] = { "internal", "modwheel", "foot",
250     "internal+modwheel", "internal+foot", 0 };
251     static const gig::lfo2_ctrl_t values[] = {
252     gig::lfo2_ctrl_internal,
253     gig::lfo2_ctrl_modwheel,
254     gig::lfo2_ctrl_foot,
255     gig::lfo2_ctrl_internal_modwheel,
256     gig::lfo2_ctrl_internal_foot
257     };
258     eLFO2Controller.set_choices(choices, values);
259     }
260     addProp(eLFO2Controller);
261     addProp(eLFO2FlipPhase);
262     addProp(eLFO2Sync);
263    
264     nextPage();
265    
266     addHeader("EG3");
267     addProp(eEG3Attack);
268     addProp(eEG3Depth);
269     addHeader("LFO3");
270     addProp(eLFO3Frequency);
271     addProp(eLFO3InternalDepth);
272     addProp(eLFO3ControlDepth);
273     {
274     char* choices[] = { "internal", "modwheel", "aftertouch",
275     "internal+modwheel", "internal+aftertouch", 0 };
276     static const gig::lfo3_ctrl_t values[] = {
277     gig::lfo3_ctrl_internal,
278     gig::lfo3_ctrl_modwheel,
279     gig::lfo3_ctrl_aftertouch,
280     gig::lfo3_ctrl_internal_modwheel,
281     gig::lfo3_ctrl_internal_aftertouch
282     };
283     eLFO3Controller.set_choices(choices, values);
284     }
285     addProp(eLFO3Controller);
286     addProp(eLFO3Sync);
287     addHeader("VCF");
288     addProp(eVCFEnabled);
289     {
290     char* choices[] = { "lowpass", "lowpassturbo", "bandpass",
291     "highpass", "bandreject", 0 };
292     static const gig::vcf_type_t values[] = {
293     gig::vcf_type_lowpass,
294     gig::vcf_type_lowpassturbo,
295     gig::vcf_type_bandpass,
296     gig::vcf_type_highpass,
297     gig::vcf_type_bandreject
298     };
299     eVCFType.set_choices(choices, values);
300     }
301     addProp(eVCFType);
302     {
303     char* choices[] = { "none", "none2", "modwheel", "effect1", "effect2",
304     "breath", "foot", "sustainpedal", "softpedal",
305     "genpurpose7", "genpurpose8", "aftertouch", 0 };
306     static const gig::vcf_cutoff_ctrl_t values[] = {
307     gig::vcf_cutoff_ctrl_none,
308     gig::vcf_cutoff_ctrl_none2,
309     gig::vcf_cutoff_ctrl_modwheel,
310     gig::vcf_cutoff_ctrl_effect1,
311     gig::vcf_cutoff_ctrl_effect2,
312     gig::vcf_cutoff_ctrl_breath,
313     gig::vcf_cutoff_ctrl_foot,
314     gig::vcf_cutoff_ctrl_sustainpedal,
315     gig::vcf_cutoff_ctrl_softpedal,
316     gig::vcf_cutoff_ctrl_genpurpose7,
317     gig::vcf_cutoff_ctrl_genpurpose8,
318     gig::vcf_cutoff_ctrl_aftertouch
319     };
320     eVCFCutoffController.set_choices(choices, values);
321     }
322     addProp(eVCFCutoffController);
323     addProp(eVCFCutoffControllerInvert);
324     addProp(eVCFCutoff);
325     char* curve_type_texts[] = { "nonlinear", "linear", "special", 0 };
326     static const gig::curve_type_t curve_type_values[] = {
327     gig::curve_type_nonlinear,
328     gig::curve_type_linear,
329     gig::curve_type_special
330     };
331     eVCFVelocityCurve.set_choices(curve_type_texts, curve_type_values);
332     addProp(eVCFVelocityCurve);
333     addProp(eVCFVelocityScale);
334     addProp(eVCFVelocityDynamicRange);
335     addProp(eVCFResonance);
336     addProp(eVCFResonanceDynamic);
337     {
338     char* choices[] = { "none", "genpurpose3", "genpurpose4",
339     "genpurpose5", "genpurpose6", 0 };
340     static const gig::vcf_res_ctrl_t values[] = {
341     gig::vcf_res_ctrl_none,
342     gig::vcf_res_ctrl_genpurpose3,
343     gig::vcf_res_ctrl_genpurpose4,
344     gig::vcf_res_ctrl_genpurpose5,
345     gig::vcf_res_ctrl_genpurpose6
346     };
347     eVCFResonanceController.set_choices(choices, values);
348     }
349     addProp(eVCFResonanceController);
350     addProp(eVCFKeyboardTracking);
351     addProp(eVCFKeyboardTrackingBreakpoint);
352    
353     nextPage();
354    
355     eVelocityResponseCurve.set_choices(curve_type_texts, curve_type_values);
356     addProp(eVelocityResponseCurve);
357     addProp(eVelocityResponseDepth);
358     addProp(eVelocityResponseCurveScaling);
359     eReleaseVelocityResponseCurve.set_choices(curve_type_texts,
360     curve_type_values);
361     addProp(eReleaseVelocityResponseCurve);
362     addProp(eReleaseVelocityResponseDepth);
363     addProp(eReleaseTriggerDecay);
364     addProp(eCrossfade_in_start);
365     addProp(eCrossfade_in_end);
366     addProp(eCrossfade_out_start);
367     addProp(eCrossfade_out_end);
368     addProp(ePitchTrack);
369     {
370     char* choices[] = { "none", "effect4depth", "effect5depth", 0 };
371     static const gig::dim_bypass_ctrl_t values[] = {
372     gig::dim_bypass_ctrl_none,
373     gig::dim_bypass_ctrl_94,
374     gig::dim_bypass_ctrl_95
375     };
376     eDimensionBypass.set_choices(choices, values);
377     }
378     addProp(eDimensionBypass);
379     addProp(ePan);
380     addProp(eSelfMask);
381     addProp(eAttenuationController);
382     addProp(eInvertAttenuationController);
383     addProp(eAttenuationControllerThreshold);
384     addProp(eChannelOffset);
385     addProp(eSustainDefeat);
386    
387     nextPage();
388     addProp(eMSDecode);
389     addProp(eSampleStartOffset);
390     addProp(eUnityNote);
391     addProp(eFineTune);
392     addProp(eGain);
393 persson 1117 addProp(eGainPlus6);
394 persson 1100 addProp(eSampleLoops);
395     nextPage();
396    
397     eEG1InfiniteSustain.signal_toggled().connect(
398     sigc::mem_fun(*this, &DimRegionEdit::EG1InfiniteSustain_toggled) );
399     eEG2InfiniteSustain.signal_toggled().connect(
400     sigc::mem_fun(*this, &DimRegionEdit::EG2InfiniteSustain_toggled) );
401     eEG1Controller.signal_changed().connect(
402     sigc::mem_fun(*this, &DimRegionEdit::EG1Controller_changed) );
403     eEG2Controller.signal_changed().connect(
404     sigc::mem_fun(*this, &DimRegionEdit::EG2Controller_changed) );
405     eLFO1Controller.signal_changed().connect(
406     sigc::mem_fun(*this, &DimRegionEdit::LFO1Controller_changed) );
407     eLFO2Controller.signal_changed().connect(
408     sigc::mem_fun(*this, &DimRegionEdit::LFO2Controller_changed) );
409     eLFO3Controller.signal_changed().connect(
410     sigc::mem_fun(*this, &DimRegionEdit::LFO3Controller_changed) );
411     eAttenuationController.signal_changed().connect(
412     sigc::mem_fun(*this, &DimRegionEdit::AttenuationController_changed) );
413     eVCFEnabled.signal_toggled().connect(
414     sigc::mem_fun(*this, &DimRegionEdit::VCFEnabled_toggled) );
415     eVCFCutoffController.signal_changed().connect(
416     sigc::mem_fun(*this, &DimRegionEdit::VCFCutoffController_changed) );
417     eVCFResonanceController.signal_changed().connect(
418     sigc::mem_fun(*this, &DimRegionEdit::VCFResonanceController_changed) );
419    
420     eCrossfade_in_start.signal_value_changed().connect(
421     sigc::mem_fun(*this, &DimRegionEdit::crossfade1_changed));
422     eCrossfade_in_end.signal_value_changed().connect(
423     sigc::mem_fun(*this, &DimRegionEdit::crossfade2_changed));
424     eCrossfade_out_start.signal_value_changed().connect(
425     sigc::mem_fun(*this, &DimRegionEdit::crossfade3_changed));
426     eCrossfade_out_end.signal_value_changed().connect(
427     sigc::mem_fun(*this, &DimRegionEdit::crossfade4_changed));
428    
429     append_page(*table[0], "EG1");
430     append_page(*table[1], "EG2");
431     append_page(*table[2], "EG3");
432     append_page(*table[3], "Velocity");
433     append_page(*table[4], "Misc");
434     }
435    
436     DimRegionEdit::~DimRegionEdit()
437     {
438     }
439    
440     void DimRegionEdit::addString(char* labelText, Gtk::Label*& label,
441     Gtk::Entry*& widget)
442     {
443     label = new Gtk::Label(Glib::ustring(labelText) + ":");
444     label->set_alignment(Gtk::ALIGN_LEFT);
445    
446     table[pageno]->attach(*label, 1, 2, rowno, rowno + 1,
447     Gtk::FILL, Gtk::SHRINK);
448    
449     widget = new Gtk::Entry();
450    
451     table[pageno]->attach(*widget, 2, 3, rowno, rowno + 1,
452     Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK);
453    
454     rowno++;
455     }
456    
457     void DimRegionEdit::addHeader(char* text)
458     {
459     if (firstRowInBlock < rowno - 1)
460     {
461     Gtk::Label* filler = new Gtk::Label(" ");
462     table[pageno]->attach(*filler, 0, 1, firstRowInBlock, rowno,
463     Gtk::FILL, Gtk::SHRINK);
464     }
465     Glib::ustring str = "<b>";
466     str += text;
467     str += "</b>";
468     Gtk::Label* label = new Gtk::Label(str);
469     label->set_use_markup();
470     label->set_alignment(Gtk::ALIGN_LEFT);
471     table[pageno]->attach(*label, 0, 3, rowno, rowno + 1,
472     Gtk::FILL, Gtk::SHRINK);
473     rowno++;
474     firstRowInBlock = rowno;
475     }
476    
477     void DimRegionEdit::nextPage()
478     {
479     if (firstRowInBlock < rowno - 1)
480     {
481     Gtk::Label* filler = new Gtk::Label(" ");
482     table[pageno]->attach(*filler, 0, 1, firstRowInBlock, rowno,
483     Gtk::FILL, Gtk::SHRINK);
484     }
485     pageno++;
486     rowno = 0;
487     firstRowInBlock = 0;
488     }
489    
490     void DimRegionEdit::addProp(LabelWidget& prop)
491     {
492     table[pageno]->attach(prop.label, 1, 2, rowno, rowno + 1,
493     Gtk::FILL, Gtk::SHRINK);
494     table[pageno]->attach(prop.widget, 2, 3, rowno, rowno + 1,
495     Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK);
496     rowno++;
497     }
498    
499    
500     void DimRegionEdit::set_dim_region(gig::DimensionRegion* d)
501     {
502 persson 1104 set_sensitive(d);
503     if (!d) return;
504    
505 persson 1100 update_gui = false;
506     wSample->set_text(d->pSample ? d->pSample->pInfo->Name.c_str() : "NULL");
507     eEG1PreAttack.set_dimreg(d);
508     eEG1Attack.set_dimreg(d);
509     eEG1Decay1.set_dimreg(d);
510     eEG1Decay2.set_dimreg(d);
511     eEG1InfiniteSustain.set_dimreg(d);
512     eEG1Sustain.set_dimreg(d);
513     eEG1Release.set_dimreg(d);
514     eEG1Hold.set_dimreg(d);
515     eEG1Controller.set_dimreg(d);
516     eEG1ControllerInvert.set_dimreg(d);
517     eEG1ControllerAttackInfluence.set_dimreg(d);
518     eEG1ControllerDecayInfluence.set_dimreg(d);
519     eEG1ControllerReleaseInfluence.set_dimreg(d);
520     eLFO1Frequency.set_dimreg(d);
521     eLFO1InternalDepth.set_dimreg(d);
522     eLFO1ControlDepth.set_dimreg(d);
523     eLFO1Controller.set_dimreg(d);
524     eLFO1FlipPhase.set_dimreg(d);
525     eLFO1Sync.set_dimreg(d);
526     eEG2PreAttack.set_dimreg(d);
527     eEG2Attack.set_dimreg(d);
528     eEG2Decay1.set_dimreg(d);
529     eEG2Decay2.set_dimreg(d);
530     eEG2InfiniteSustain.set_dimreg(d);
531     eEG2Sustain.set_dimreg(d);
532     eEG2Release.set_dimreg(d);
533     eEG2Controller.set_dimreg(d);
534     eEG2ControllerInvert.set_dimreg(d);
535     eEG2ControllerAttackInfluence.set_dimreg(d);
536     eEG2ControllerDecayInfluence.set_dimreg(d);
537     eEG2ControllerReleaseInfluence.set_dimreg(d);
538     eLFO2Frequency.set_dimreg(d);
539     eLFO2InternalDepth.set_dimreg(d);
540     eLFO2ControlDepth.set_dimreg(d);
541     eLFO2Controller.set_dimreg(d);
542     eLFO2FlipPhase.set_dimreg(d);
543     eLFO2Sync.set_dimreg(d);
544     eEG3Attack.set_dimreg(d);
545     eEG3Depth.set_dimreg(d);
546     eLFO3Frequency.set_dimreg(d);
547     eLFO3InternalDepth.set_dimreg(d);
548     eLFO3ControlDepth.set_dimreg(d);
549     eLFO3Controller.set_dimreg(d);
550     eLFO3Sync.set_dimreg(d);
551     eVCFEnabled.set_dimreg(d);
552     eVCFType.set_dimreg(d);
553     eVCFCutoffController.set_dimreg(d);
554     eVCFCutoffControllerInvert.set_dimreg(d);
555     eVCFCutoff.set_dimreg(d);
556     eVCFVelocityCurve.set_dimreg(d);
557     eVCFVelocityScale.set_dimreg(d);
558     eVCFVelocityDynamicRange.set_dimreg(d);
559     eVCFResonance.set_dimreg(d);
560     eVCFResonanceDynamic.set_dimreg(d);
561     eVCFResonanceController.set_dimreg(d);
562     eVCFKeyboardTracking.set_dimreg(d);
563     eVCFKeyboardTrackingBreakpoint.set_dimreg(d);
564     eVelocityResponseCurve.set_dimreg(d);
565     eVelocityResponseDepth.set_dimreg(d);
566     eVelocityResponseCurveScaling.set_dimreg(d);
567     eReleaseVelocityResponseCurve.set_dimreg(d);
568     eReleaseVelocityResponseDepth.set_dimreg(d);
569     eReleaseTriggerDecay.set_dimreg(d);
570     eCrossfade_in_start.set_dimreg(d);
571     eCrossfade_in_end.set_dimreg(d);
572     eCrossfade_out_start.set_dimreg(d);
573     eCrossfade_out_end.set_dimreg(d);
574     ePitchTrack.set_dimreg(d);
575     eDimensionBypass.set_dimreg(d);
576     ePan.set_dimreg(d);
577     eSelfMask.set_dimreg(d);
578     eAttenuationController.set_dimreg(d);
579     eInvertAttenuationController.set_dimreg(d);
580     eAttenuationControllerThreshold.set_dimreg(d);
581     eChannelOffset.set_dimreg(d);
582     eSustainDefeat.set_dimreg(d);
583     eMSDecode.set_dimreg(d);
584     eSampleStartOffset.set_dimreg(d);
585     eUnityNote.set_dimreg(d);
586     eFineTune.set_dimreg(d);
587     eGain.set_dimreg(d);
588 persson 1117 eGainPlus6.set_dimreg(d);
589 persson 1100 eSampleLoops.set_dimreg(d);
590    
591     VCFEnabled_toggled();
592    
593     update_gui = true;
594     }
595    
596     void DimRegionEdit::VCFEnabled_toggled()
597     {
598     bool sensitive = eVCFEnabled.get_active();
599     eVCFType.set_sensitive(sensitive);
600     eVCFCutoffController.set_sensitive(sensitive);
601     eVCFVelocityCurve.set_sensitive(sensitive);
602     eVCFVelocityScale.set_sensitive(sensitive);
603     eVCFVelocityDynamicRange.set_sensitive(sensitive);
604     eVCFResonance.set_sensitive(sensitive);
605     eVCFResonanceController.set_sensitive(sensitive);
606     eVCFKeyboardTracking.set_sensitive(sensitive);
607     eVCFKeyboardTrackingBreakpoint.set_sensitive(sensitive);
608     eEG2PreAttack.set_sensitive(sensitive);
609     eEG2Attack.set_sensitive(sensitive);
610     eEG2Decay1.set_sensitive(sensitive);
611     eEG2InfiniteSustain.set_sensitive(sensitive);
612     eEG2Sustain.set_sensitive(sensitive);
613     eEG2Release.set_sensitive(sensitive);
614     eEG2Controller.set_sensitive(sensitive);
615     eEG2ControllerAttackInfluence.set_sensitive(sensitive);
616     eEG2ControllerDecayInfluence.set_sensitive(sensitive);
617     eEG2ControllerReleaseInfluence.set_sensitive(sensitive);
618     eLFO2Frequency.set_sensitive(sensitive);
619     eLFO2InternalDepth.set_sensitive(sensitive);
620     eLFO2ControlDepth.set_sensitive(sensitive);
621     eLFO2Controller.set_sensitive(sensitive);
622     eLFO2FlipPhase.set_sensitive(sensitive);
623     eLFO2Sync.set_sensitive(sensitive);
624     if (sensitive) {
625     VCFCutoffController_changed();
626     VCFResonanceController_changed();
627     EG2InfiniteSustain_toggled();
628     EG2Controller_changed();
629     LFO2Controller_changed();
630     } else {
631     eVCFCutoffControllerInvert.set_sensitive(false);
632     eVCFCutoff.set_sensitive(false);
633     eVCFResonanceDynamic.set_sensitive(false);
634     eVCFResonance.set_sensitive(false);
635     eEG2Decay2.set_sensitive(false);
636     eEG2ControllerInvert.set_sensitive(false);
637     eLFO2InternalDepth.set_sensitive(false);
638     eLFO2ControlDepth.set_sensitive(false);
639     }
640     }
641    
642     void DimRegionEdit::VCFCutoffController_changed()
643     {
644     int rowno = eVCFCutoffController.get_active_row_number();
645     bool hasController = rowno != 0 && rowno != 1;
646    
647     eVCFCutoffControllerInvert.set_sensitive(hasController);
648     eVCFCutoff.set_sensitive(!hasController);
649     eVCFResonanceDynamic.set_sensitive(!hasController);
650     eVCFVelocityScale.label.set_text(hasController ? "MinimumCutoff:" :
651     "VelocityScale:");
652     }
653    
654     void DimRegionEdit::VCFResonanceController_changed()
655     {
656     bool hasController = eVCFResonanceController.get_active_row_number() != 0;
657     eVCFResonance.set_sensitive(!hasController);
658     }
659    
660     void DimRegionEdit::EG1InfiniteSustain_toggled()
661     {
662     bool infSus = eEG1InfiniteSustain.get_active();
663     eEG1Decay2.set_sensitive(!infSus);
664     }
665    
666     void DimRegionEdit::EG2InfiniteSustain_toggled()
667     {
668     bool infSus = eEG2InfiniteSustain.get_active();
669     eEG2Decay2.set_sensitive(!infSus);
670     }
671    
672     void DimRegionEdit::EG1Controller_changed()
673     {
674     bool hasController = eEG1Controller.get_active_row_number() != 0;
675     eEG1ControllerInvert.set_sensitive(hasController);
676     }
677    
678     void DimRegionEdit::EG2Controller_changed()
679     {
680     bool hasController = eEG2Controller.get_active_row_number() != 0;
681     eEG2ControllerInvert.set_sensitive(hasController);
682     }
683    
684     void DimRegionEdit::AttenuationController_changed()
685     {
686     bool hasController = eAttenuationController.get_active_row_number() != 0;
687     eInvertAttenuationController.set_sensitive(hasController);
688     }
689    
690     void DimRegionEdit::LFO1Controller_changed()
691     {
692     int rowno = eLFO1Controller.get_active_row_number();
693     eLFO1ControlDepth.set_sensitive(rowno != 0);
694     eLFO1InternalDepth.set_sensitive(rowno != 1 && rowno != 2);
695     }
696    
697     void DimRegionEdit::LFO2Controller_changed()
698     {
699     int rowno = eLFO2Controller.get_active_row_number();
700     eLFO2ControlDepth.set_sensitive(rowno != 0);
701     eLFO2InternalDepth.set_sensitive(rowno != 1 && rowno != 2);
702     }
703    
704     void DimRegionEdit::LFO3Controller_changed()
705     {
706     int rowno = eLFO3Controller.get_active_row_number();
707     eLFO3ControlDepth.set_sensitive(rowno != 0);
708     eLFO3InternalDepth.set_sensitive(rowno != 1 && rowno != 2);
709     }
710    
711     void DimRegionEdit::crossfade1_changed()
712     {
713     double c1 = eCrossfade_in_start.get_value();
714     double c2 = eCrossfade_in_end.get_value();
715     if (c1 > c2) eCrossfade_in_end.set_value(c1);
716     }
717    
718     void DimRegionEdit::crossfade2_changed()
719     {
720     double c1 = eCrossfade_in_start.get_value();
721     double c2 = eCrossfade_in_end.get_value();
722     double c3 = eCrossfade_out_start.get_value();
723    
724     if (c2 < c1) eCrossfade_in_start.set_value(c2);
725     if (c2 > c3) eCrossfade_out_start.set_value(c2);
726     }
727    
728     void DimRegionEdit::crossfade3_changed()
729     {
730     double c2 = eCrossfade_in_end.get_value();
731     double c3 = eCrossfade_out_start.get_value();
732     double c4 = eCrossfade_out_end.get_value();
733    
734     if (c3 < c2) eCrossfade_in_end.set_value(c3);
735     if (c3 > c4) eCrossfade_out_end.set_value(c3);
736     }
737    
738     void DimRegionEdit::crossfade4_changed()
739     {
740     double c3 = eCrossfade_out_start.get_value();
741     double c4 = eCrossfade_out_end.get_value();
742    
743     if (c4 < c3) eCrossfade_out_start.set_value(c4);
744     }

  ViewVC Help
Powered by ViewVC