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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

1 /*
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 eGainPlus6("Gain +6dB", eGain),
182 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 tooltips.set_tip(*wSample, "drop a sample here");
196 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 addProp(eGainPlus6);
394 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 set_sensitive(d);
503 if (!d) return;
504
505 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 eGainPlus6.set_dimreg(d);
589 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