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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1118 by schoenebeck, Sat Mar 24 13:48:16 2007 UTC revision 1156 by schoenebeck, Wed Apr 11 21:36:30 2007 UTC
# Line 19  Line 19 
19    
20  #include "dimregionedit.h"  #include "dimregionedit.h"
21    
22  bool update_gui;  #include <libintl.h>
23    #define _(String) gettext(String)
 namespace {  
     uint8_t& access_UnityNote(gig::DimensionRegion* dimreg)  
     {  
         return dimreg->UnityNote;  
     }  
     int16_t& access_FineTune(gig::DimensionRegion* dimreg)  
     {  
         return dimreg->FineTune;  
     }  
     uint32_t& access_SampleLoops(gig::DimensionRegion* dimreg)  
     {  
         return dimreg->SampleLoops;  
     }  
     uint8_t& access_Crossfade_in_start(gig::DimensionRegion* dimreg)  
     {  
         return dimreg->Crossfade.in_start;  
     }  
     uint8_t& access_Crossfade_in_end(gig::DimensionRegion* dimreg)  
     {  
         return dimreg->Crossfade.in_end;  
     }  
     uint8_t& access_Crossfade_out_start(gig::DimensionRegion* dimreg)  
     {  
         return dimreg->Crossfade.out_start;  
     }  
     uint8_t& access_Crossfade_out_end(gig::DimensionRegion* dimreg)  
     {  
         return dimreg->Crossfade.out_end;  
     }  
 }  
24    
25  DimRegionEdit::DimRegionEdit() :  DimRegionEdit::DimRegionEdit() :
26      eEG1PreAttack("PreAttack", &gig::DimensionRegion::EG1PreAttack, 0, 100, 2),      eEG1PreAttack("PreAttack", 0, 100, 2),
27      eEG1Attack("Attack", &gig::DimensionRegion::EG1Attack, 0, 60, 3),      eEG1Attack("Attack", 0, 60, 3),
28      eEG1Decay1("Decay1", &gig::DimensionRegion::EG1Decay1, 0.005, 60, 3),      eEG1Decay1("Decay1", 0.005, 60, 3),
29      eEG1Decay2("Decay2", &gig::DimensionRegion::EG1Decay2, 0, 60, 3),      eEG1Decay2("Decay2", 0, 60, 3),
30      eEG1InfiniteSustain("InfiniteSustain",      eEG1InfiniteSustain("InfiniteSustain"),
31                          &gig::DimensionRegion::EG1InfiniteSustain),      eEG1Sustain("Sustain", 0, 100, 2),
32      eEG1Sustain("Sustain", &gig::DimensionRegion::EG1Sustain, 0, 100, 2),      eEG1Release("Release", 0, 60, 3),
33      eEG1Release("Release", &gig::DimensionRegion::EG1Release, 0, 60, 3),      eEG1Hold("Hold"),
34      eEG1Hold("Hold", &gig::DimensionRegion::EG1Hold),      eEG1Controller("Controller"),
35      eEG1Controller("Controller", &gig::DimensionRegion::EG1Controller),      eEG1ControllerInvert("ControllerInvert"),
36      eEG1ControllerInvert("ControllerInvert",      eEG1ControllerAttackInfluence("ControllerAttackInfluence", 0, 3),
37                           &gig::DimensionRegion::EG1ControllerInvert),      eEG1ControllerDecayInfluence("ControllerDecayInfluence", 0, 3),
38      eEG1ControllerAttackInfluence("ControllerAttackInfluence",      eEG1ControllerReleaseInfluence("ControllerReleaseInfluence", 0, 3),
39                                    &gig::DimensionRegion::EG1ControllerAttackInfluence,      eLFO1Frequency("Frequency", 0.1, 10, 2),
40                                    0, 3),      eLFO1InternalDepth("InternalDepth", 0, 1200),
41      eEG1ControllerDecayInfluence("ControllerDecayInfluence",      eLFO1ControlDepth("ControlDepth", 0, 1200),
42                                   &gig::DimensionRegion::EG1ControllerDecayInfluence,      eLFO1Controller("Controller"),
43                                   0, 3),      eLFO1FlipPhase("FlipPhase"),
44      eEG1ControllerReleaseInfluence("ControllerReleaseInfluence",      eLFO1Sync("Sync"),
45                                     &gig::DimensionRegion::EG1ControllerReleaseInfluence,      eEG2PreAttack("PreAttack", 0, 100, 2),
46                                     0, 3),      eEG2Attack("Attack", 0, 60, 3),
47      eLFO1Frequency("Frequency", &gig::DimensionRegion::LFO1Frequency,      eEG2Decay1("Decay1", 0.005, 60, 3),
48                     0.1, 10, 2),      eEG2Decay2("Decay2", 0, 60, 3),
49      eLFO1InternalDepth("InternalDepth",      eEG2InfiniteSustain("InfiniteSustain"),
50                         &gig::DimensionRegion::LFO1InternalDepth, 0, 1200),      eEG2Sustain("Sustain", 0, 100, 2),
51      eLFO1ControlDepth("ControlDepth", &gig::DimensionRegion::LFO1ControlDepth,      eEG2Release("Release", 0, 60, 3),
52                        0, 1200),      eEG2Controller("Controller"),
53      eLFO1Controller("Controller", &gig::DimensionRegion::LFO1Controller),      eEG2ControllerInvert("ControllerInvert"),
54      eLFO1FlipPhase("FlipPhase", &gig::DimensionRegion::LFO1FlipPhase),      eEG2ControllerAttackInfluence("ControllerAttackInfluence", 0, 3),
55      eLFO1Sync("Sync", &gig::DimensionRegion::LFO1Sync),      eEG2ControllerDecayInfluence("ControllerDecayInfluence", 0, 3),
56      eEG2PreAttack("PreAttack", &gig::DimensionRegion::EG2PreAttack, 0, 100, 2),      eEG2ControllerReleaseInfluence("ControllerReleaseInfluence", 0, 3),
57      eEG2Attack("Attack", &gig::DimensionRegion::EG2Attack, 0, 60, 3),      eLFO2Frequency("Frequency", 0.1, 10, 2),
58      eEG2Decay1("Decay1", &gig::DimensionRegion::EG2Decay1, 0.005, 60, 3),      eLFO2InternalDepth("InternalDepth", 0, 1200),
59      eEG2Decay2("Decay2", &gig::DimensionRegion::EG2Decay2, 0, 60, 3),      eLFO2ControlDepth("ControlDepth", 0, 1200),
60      eEG2InfiniteSustain("InfiniteSustain",      eLFO2Controller("Controller"),
61                          &gig::DimensionRegion::EG2InfiniteSustain),      eLFO2FlipPhase("FlipPhase"),
62      eEG2Sustain("Sustain", &gig::DimensionRegion::EG2Sustain, 0, 100, 2),      eLFO2Sync("Sync"),
63      eEG2Release("Release", &gig::DimensionRegion::EG2Release, 0, 60, 3),      eEG3Attack("Attack", 0, 10, 3),
64      eEG2Controller("Controller", &gig::DimensionRegion::EG2Controller),      eEG3Depth("Depth", -1200, 1200),
65      eEG2ControllerInvert("ControllerInvert",      eLFO3Frequency("Frequency", 0.1, 10, 2),
66                           &gig::DimensionRegion::EG2ControllerInvert),      eLFO3InternalDepth("InternalDepth", 0, 1200),
67      eEG2ControllerAttackInfluence("ControllerAttackInfluence",      eLFO3ControlDepth("ControlDepth", 0, 1200),
68                                    &gig::DimensionRegion::EG2ControllerAttackInfluence,      eLFO3Controller("Controller"),
69                                    0, 3),      eLFO3Sync("Sync"),
70      eEG2ControllerDecayInfluence("ControllerDecayInfluence",      eVCFEnabled("Enabled"),
71                                   &gig::DimensionRegion::EG2ControllerDecayInfluence,      eVCFType("Type"),
72                                   0, 3),      eVCFCutoffController("CutoffController"),
73      eEG2ControllerReleaseInfluence("ControllerReleaseInfluence",      eVCFCutoffControllerInvert("CutoffControllerInvert"),
74                                     &gig::DimensionRegion::EG2ControllerReleaseInfluence,      eVCFCutoff("Cutoff"),
75                                     0, 3),      eVCFVelocityCurve("VelocityCurve"),
76      eLFO2Frequency("Frequency", &gig::DimensionRegion::LFO2Frequency,      eVCFVelocityScale("VelocityScale"),
77                     0.1, 10, 2),      eVCFVelocityDynamicRange("VelocityDynamicRange", 0, 4),
78      eLFO2InternalDepth("InternalDepth",      eVCFResonance("Resonance"),
79                         &gig::DimensionRegion::LFO2InternalDepth, 0, 1200),      eVCFResonanceDynamic("ResonanceDynamic"),
80      eLFO2ControlDepth("ControlDepth",      eVCFResonanceController("ResonanceController"),
81                        &gig::DimensionRegion::LFO2ControlDepth, 0, 1200),      eVCFKeyboardTracking("KeyboardTracking"),
82      eLFO2Controller("Controller", &gig::DimensionRegion::LFO2Controller),      eVCFKeyboardTrackingBreakpoint("KeyboardTrackingBreakpoint"),
83      eLFO2FlipPhase("FlipPhase", &gig::DimensionRegion::LFO2FlipPhase),      eVelocityResponseCurve("VelocityResponseCurve"),
84      eLFO2Sync("Sync", &gig::DimensionRegion::LFO2Sync),      eVelocityResponseDepth("VelocityResponseDepth", 0, 4),
85      eEG3Attack("Attack", &gig::DimensionRegion::EG3Attack, 0, 10, 3),      eVelocityResponseCurveScaling("VelocityResponseCurveScaling"),
86      eEG3Depth("Depth", &gig::DimensionRegion::EG3Depth, -1200, 1200),      eReleaseVelocityResponseCurve("ReleaseVelocityResponseCurve"),
87      eLFO3Frequency("Frequency", &gig::DimensionRegion::LFO3Frequency,      eReleaseVelocityResponseDepth("ReleaseVelocityResponseDepth", 0, 4),
88                     0.1, 10, 2),      eReleaseTriggerDecay("ReleaseTriggerDecay", 0, 8),
89      eLFO3InternalDepth("InternalDepth",      eCrossfade_in_start("Crossfade.in_start"),
90                         &gig::DimensionRegion::LFO3InternalDepth, 0, 1200),      eCrossfade_in_end("Crossfade.in_end"),
91      eLFO3ControlDepth("ControlDepth", &gig::DimensionRegion::LFO3ControlDepth,      eCrossfade_out_start("Crossfade.out_start"),
92                        0, 1200),      eCrossfade_out_end("Crossfade.out_end"),
93      eLFO3Controller("Controller", &gig::DimensionRegion::LFO3Controller),      ePitchTrack("PitchTrack"),
94      eLFO3Sync("Sync", &gig::DimensionRegion::LFO3Sync),      eDimensionBypass("DimensionBypass"),
95      eVCFEnabled("Enabled", &gig::DimensionRegion::VCFEnabled),      ePan("Pan", -64, 63),
96      eVCFType("Type", &gig::DimensionRegion::VCFType),      eSelfMask("SelfMask"),
97      eVCFCutoffController("CutoffController",      eAttenuationController("AttenuationController"),
98                           &gig::DimensionRegion::VCFCutoffController),      eInvertAttenuationController("InvertAttenuationController"),
99      eVCFCutoffControllerInvert("CutoffControllerInvert",      eAttenuationControllerThreshold("AttenuationControllerThreshold"),
100                                 &gig::DimensionRegion::VCFCutoffControllerInvert),      eChannelOffset("ChannelOffset", 0, 9),
101      eVCFCutoff("Cutoff", &gig::DimensionRegion::VCFCutoff),      eSustainDefeat("SustainDefeat"),
102      eVCFVelocityCurve("VelocityCurve", &gig::DimensionRegion::VCFVelocityCurve),      eMSDecode("MSDecode"),
103      eVCFVelocityScale("VelocityScale", &gig::DimensionRegion::VCFVelocityScale),      eSampleStartOffset("SampleStartOffset", 0, 2000),
104      eVCFVelocityDynamicRange("VelocityDynamicRange",      eUnityNote("UnityNote"),
105                               &gig::DimensionRegion::VCFVelocityDynamicRange,      eFineTune("FineTune", -49, 50),
106                               0, 4),      eGain("Gain", -96, 0, 2, -655360),
107      eVCFResonance("Resonance", &gig::DimensionRegion::VCFResonance),      eGainPlus6("Gain +6dB", eGain, 6 * -655360),
108      eVCFResonanceDynamic("ResonanceDynamic",      eSampleLoopEnabled("Enabled"),
109                           &gig::DimensionRegion::VCFResonanceDynamic),      eSampleLoopStart("Loop Start Positon"),
110      eVCFResonanceController("ResonanceController",      eSampleLoopLength("Loop Size"),
111                              &gig::DimensionRegion::VCFResonanceController),      eSampleLoopType("Loop Type"),
112      eVCFKeyboardTracking("KeyboardTracking",      eSampleLoopInfinite("Infinite Loop"),
113                           &gig::DimensionRegion::VCFKeyboardTracking),      eSampleLoopPlayCount("Playback Count")
     eVCFKeyboardTrackingBreakpoint("KeyboardTrackingBreakpoint",  
                                    &gig::DimensionRegion::VCFKeyboardTrackingBreakpoint),  
     eVelocityResponseCurve("VelocityResponseCurve",  
                            &gig::DimensionRegion::VelocityResponseCurve),  
     eVelocityResponseDepth("VelocityResponseDepth",  
                            &gig::DimensionRegion::VelocityResponseDepth, 0, 4),  
     eVelocityResponseCurveScaling("VelocityResponseCurveScaling",  
                                   &gig::DimensionRegion::VelocityResponseCurveScaling),  
     eReleaseVelocityResponseCurve("ReleaseVelocityResponseCurve",  
                                   &gig::DimensionRegion::ReleaseVelocityResponseCurve),  
     eReleaseVelocityResponseDepth("ReleaseVelocityResponseDepth",  
                                   &gig::DimensionRegion::ReleaseVelocityResponseDepth,  
                                   0, 4),  
     eReleaseTriggerDecay("ReleaseTriggerDecay",  
                          &gig::DimensionRegion::ReleaseTriggerDecay, 0, 8),  
     eCrossfade_in_start("Crossfade.in_start", &access_Crossfade_in_start),  
     eCrossfade_in_end("Crossfade.in_end", &access_Crossfade_in_end),  
     eCrossfade_out_start("Crossfade.out_start", &access_Crossfade_out_start),  
     eCrossfade_out_end("Crossfade.out_end", &access_Crossfade_out_end),  
     ePitchTrack("PitchTrack", &gig::DimensionRegion::PitchTrack),  
     eDimensionBypass("DimensionBypass", &gig::DimensionRegion::DimensionBypass),  
     ePan("Pan", &gig::DimensionRegion::Pan, -64, 63),  
     eSelfMask("SelfMask", &gig::DimensionRegion::SelfMask),  
     eAttenuationController("AttenuationController",  
                            &gig::DimensionRegion::AttenuationController),  
     eInvertAttenuationController("InvertAttenuationController",  
                                  &gig::DimensionRegion::InvertAttenuationController),  
     eAttenuationControllerThreshold("AttenuationControllerThreshold",  
                                     &gig::DimensionRegion::AttenuationControllerThreshold),  
     eChannelOffset("ChannelOffset", &gig::DimensionRegion::ChannelOffset, 0, 9),  
     eSustainDefeat("SustainDefeat", &gig::DimensionRegion::SustainDefeat),  
     eMSDecode("MSDecode", &gig::DimensionRegion::MSDecode),  
     eSampleStartOffset("SampleStartOffset",  
                        &gig::DimensionRegion::SampleStartOffset, 0, 2000),  
     eUnityNote("UnityNote", &access_UnityNote),  
     eFineTune("FineTune", &access_FineTune, -49, 50),  
     eGain("Gain", -96, 0, 2),  
     eGainPlus6("Gain +6dB", eGain),  
     eSampleLoops("SampleLoops", &access_SampleLoops, 0, 1)  
114  {  {
115      for (int i = 0 ; i < 5 ; i++) {      for (int i = 0 ; i < 7 ; i++) {
116          table[i] = new Gtk::Table(3, 1);          table[i] = new Gtk::Table(3, 1);
117          table[i]->set_col_spacings(5);          table[i]->set_col_spacings(7);
118      }      }
119    
120        // set tooltips
121        eUnityNote.set_tip(
122            _("note this sample is associated with (a.k.a. 'root note')")
123        );
124        eSampleStartOffset.set_tip(_("sample position at which playback should be started"));
125        ePan.set_tip(_("stereo balance (left/right)"));
126        eChannelOffset.set_tip(
127            _("output channel where the audio signal should be routed to (0 - 9)")
128        );
129        ePitchTrack.set_tip(
130            _("if true: sample will be pitched according to the key position "
131              "(this would be disabled for drums for example)")
132        );
133        eSampleLoopEnabled.set_tip(_("if enabled: repeats to playback the sample"));
134        eSampleLoopStart.set_tip(
135            _("start position within the sample (in sample points) of the area to "
136              "be looped")
137        );
138        eSampleLoopLength.set_tip(
139            _("duration (in sample points) of the area to be looped")
140        );
141        eSampleLoopType.set_tip(
142            _("direction in which the loop area in the sample should be played back")
143        );
144        eSampleLoopInfinite.set_tip(
145            _("whether the loop area should be played back forever\n"
146              "Caution: this setting is stored on Sample side, thus is shared "
147              "among all dimension regions that use this sample!")
148        );
149        eSampleLoopPlayCount.set_tip(
150            _("how many times the loop area should be played back\n"
151              "Caution: this setting is stored on Sample side, thus is shared "
152              "among all dimension regions that use this sample!")
153        );
154    
155      pageno = 0;      pageno = 0;
156      rowno = 0;      rowno = 0;
157      firstRowInBlock = 0;      firstRowInBlock = 0;
158    
159        addHeader(_("Mandatory Settings:"));
160      addString("Sample", lSample, wSample);      addString("Sample", lSample, wSample);
161      //TODO: the following would break drag&drop:   wSample->property_editable().set_value(false);  or this:    wSample->set_editable(false);      //TODO: the following would break drag&drop:   wSample->property_editable().set_value(false);  or this:    wSample->set_editable(false);
162      tooltips.set_tip(*wSample, "drop a sample here");      tooltips.set_tip(*wSample, _("drop a sample here"));
163      addHeader("EG1");      addProp(eUnityNote);
164        addHeader(_("Optional Settings:"));
165        addProp(eSampleStartOffset);
166        addProp(ePan);
167        addProp(eChannelOffset);
168        addHeader("Loops:");
169        addProp(eSampleLoopEnabled);
170        addProp(eSampleLoopStart);
171        addProp(eSampleLoopLength);
172        {
173            char* choices[] = { "normal", "bidirectional", "backward", 0 };
174            static const uint32_t values[] = {
175                gig::loop_type_normal,
176                gig::loop_type_bidirectional,
177                gig::loop_type_backward
178            };
179            eSampleLoopType.set_choices(choices, values);
180        }
181        addProp(eSampleLoopType);
182        addProp(eSampleLoopInfinite);
183        addProp(eSampleLoopPlayCount);
184        addHeader("Crossfade:");
185        addProp(eCrossfade_in_start);
186        addProp(eCrossfade_in_end);
187        addProp(eCrossfade_out_start);
188        addProp(eCrossfade_out_end);
189    
190        nextPage();
191    
192        addHeader(_("General Amplitude Settings:"));
193        addProp(eGain);
194        addProp(eGainPlus6);
195        addProp(eAttenuationController);
196        addProp(eInvertAttenuationController);
197        addProp(eAttenuationControllerThreshold);
198        addHeader(_("Amplitude Envelope (EG1):"));
199      addProp(eEG1PreAttack);      addProp(eEG1PreAttack);
200      addProp(eEG1Attack);      addProp(eEG1Attack);
201      addProp(eEG1Decay1);      addProp(eEG1Decay1);
# Line 207  DimRegionEdit::DimRegionEdit() : Line 209  DimRegionEdit::DimRegionEdit() :
209      addProp(eEG1ControllerAttackInfluence);      addProp(eEG1ControllerAttackInfluence);
210      addProp(eEG1ControllerDecayInfluence);      addProp(eEG1ControllerDecayInfluence);
211      addProp(eEG1ControllerReleaseInfluence);      addProp(eEG1ControllerReleaseInfluence);
212      addHeader("LFO1");  
213        nextPage();
214    
215        addHeader(_("Amplitude Oscillator (LFO1):"));
216      addProp(eLFO1Frequency);      addProp(eLFO1Frequency);
217      addProp(eLFO1InternalDepth);      addProp(eLFO1InternalDepth);
218      addProp(eLFO1ControlDepth);      addProp(eLFO1ControlDepth);
# Line 228  DimRegionEdit::DimRegionEdit() : Line 233  DimRegionEdit::DimRegionEdit() :
233      addProp(eLFO1Sync);      addProp(eLFO1Sync);
234    
235      nextPage();      nextPage();
     addHeader("EG2");  
     addProp(eEG2PreAttack);  
     addProp(eEG2Attack);  
     addProp(eEG2Decay1);  
     addProp(eEG2Decay2);  
     addProp(eEG2InfiniteSustain);  
     addProp(eEG2Sustain);  
     addProp(eEG2Release);  
     addProp(eEG2Controller);  
     addProp(eEG2ControllerInvert);  
     addProp(eEG2ControllerAttackInfluence);  
     addProp(eEG2ControllerDecayInfluence);  
     addProp(eEG2ControllerReleaseInfluence);  
     addHeader("LFO2");  
     addProp(eLFO2Frequency);  
     addProp(eLFO2InternalDepth);  
     addProp(eLFO2ControlDepth);  
     {  
         char* choices[] = { "internal", "modwheel", "foot",  
                             "internal+modwheel", "internal+foot", 0 };  
         static const gig::lfo2_ctrl_t values[] = {  
             gig::lfo2_ctrl_internal,  
             gig::lfo2_ctrl_modwheel,  
             gig::lfo2_ctrl_foot,  
             gig::lfo2_ctrl_internal_modwheel,  
             gig::lfo2_ctrl_internal_foot  
         };  
         eLFO2Controller.set_choices(choices, values);  
     }  
     addProp(eLFO2Controller);  
     addProp(eLFO2FlipPhase);  
     addProp(eLFO2Sync);  
   
     nextPage();  
236    
237      addHeader("EG3");      addHeader(_("General Filter Settings:"));
     addProp(eEG3Attack);  
     addProp(eEG3Depth);  
     addHeader("LFO3");  
     addProp(eLFO3Frequency);  
     addProp(eLFO3InternalDepth);  
     addProp(eLFO3ControlDepth);  
     {  
         char* choices[] = { "internal", "modwheel", "aftertouch",  
                             "internal+modwheel", "internal+aftertouch", 0 };  
         static const gig::lfo3_ctrl_t values[] = {  
             gig::lfo3_ctrl_internal,  
             gig::lfo3_ctrl_modwheel,  
             gig::lfo3_ctrl_aftertouch,  
             gig::lfo3_ctrl_internal_modwheel,  
             gig::lfo3_ctrl_internal_aftertouch  
         };  
         eLFO3Controller.set_choices(choices, values);  
     }  
     addProp(eLFO3Controller);  
     addProp(eLFO3Sync);  
     addHeader("VCF");  
238      addProp(eVCFEnabled);      addProp(eVCFEnabled);
239      {      {
240          char* choices[] = { "lowpass", "lowpassturbo", "bandpass",          char* choices[] = { "lowpass", "lowpassturbo", "bandpass",
# Line 352  DimRegionEdit::DimRegionEdit() : Line 302  DimRegionEdit::DimRegionEdit() :
302    
303      nextPage();      nextPage();
304    
305        addHeader(_("Filter Cutoff Envelope (EG2):"));
306        addProp(eEG2PreAttack);
307        addProp(eEG2Attack);
308        addProp(eEG2Decay1);
309        addProp(eEG2Decay2);
310        addProp(eEG2InfiniteSustain);
311        addProp(eEG2Sustain);
312        addProp(eEG2Release);
313        addProp(eEG2Controller);
314        addProp(eEG2ControllerInvert);
315        addProp(eEG2ControllerAttackInfluence);
316        addProp(eEG2ControllerDecayInfluence);
317        addProp(eEG2ControllerReleaseInfluence);
318        addHeader(_("Filter Cutoff Oscillator (LFO2):"));
319        addProp(eLFO2Frequency);
320        addProp(eLFO2InternalDepth);
321        addProp(eLFO2ControlDepth);
322        {
323            char* choices[] = { "internal", "modwheel", "foot",
324                                "internal+modwheel", "internal+foot", 0 };
325            static const gig::lfo2_ctrl_t values[] = {
326                gig::lfo2_ctrl_internal,
327                gig::lfo2_ctrl_modwheel,
328                gig::lfo2_ctrl_foot,
329                gig::lfo2_ctrl_internal_modwheel,
330                gig::lfo2_ctrl_internal_foot
331            };
332            eLFO2Controller.set_choices(choices, values);
333        }
334        addProp(eLFO2Controller);
335        addProp(eLFO2FlipPhase);
336        addProp(eLFO2Sync);
337    
338        nextPage();
339    
340        addHeader(_("General Pitch Settings:"));
341        addProp(eFineTune);
342        addProp(ePitchTrack);
343        addHeader(_("Pitch Envelope (EG3):"));
344        addProp(eEG3Attack);
345        addProp(eEG3Depth);
346        addHeader(_("Pitch Oscillator (LFO3):"));
347        addProp(eLFO3Frequency);
348        addProp(eLFO3InternalDepth);
349        addProp(eLFO3ControlDepth);
350        {
351            char* choices[] = { "internal", "modwheel", "aftertouch",
352                                "internal+modwheel", "internal+aftertouch", 0 };
353            static const gig::lfo3_ctrl_t values[] = {
354                gig::lfo3_ctrl_internal,
355                gig::lfo3_ctrl_modwheel,
356                gig::lfo3_ctrl_aftertouch,
357                gig::lfo3_ctrl_internal_modwheel,
358                gig::lfo3_ctrl_internal_aftertouch
359            };
360            eLFO3Controller.set_choices(choices, values);
361        }
362        addProp(eLFO3Controller);
363        addProp(eLFO3Sync);
364    
365        nextPage();
366    
367      eVelocityResponseCurve.set_choices(curve_type_texts, curve_type_values);      eVelocityResponseCurve.set_choices(curve_type_texts, curve_type_values);
368      addProp(eVelocityResponseCurve);      addProp(eVelocityResponseCurve);
369      addProp(eVelocityResponseDepth);      addProp(eVelocityResponseDepth);
# Line 361  DimRegionEdit::DimRegionEdit() : Line 373  DimRegionEdit::DimRegionEdit() :
373      addProp(eReleaseVelocityResponseCurve);      addProp(eReleaseVelocityResponseCurve);
374      addProp(eReleaseVelocityResponseDepth);      addProp(eReleaseVelocityResponseDepth);
375      addProp(eReleaseTriggerDecay);      addProp(eReleaseTriggerDecay);
     addProp(eCrossfade_in_start);  
     addProp(eCrossfade_in_end);  
     addProp(eCrossfade_out_start);  
     addProp(eCrossfade_out_end);  
     addProp(ePitchTrack);  
376      {      {
377          char* choices[] = { "none", "effect4depth", "effect5depth", 0 };          char* choices[] = { "none", "effect4depth", "effect5depth", 0 };
378          static const gig::dim_bypass_ctrl_t values[] = {          static const gig::dim_bypass_ctrl_t values[] = {
# Line 376  DimRegionEdit::DimRegionEdit() : Line 383  DimRegionEdit::DimRegionEdit() :
383          eDimensionBypass.set_choices(choices, values);          eDimensionBypass.set_choices(choices, values);
384      }      }
385      addProp(eDimensionBypass);      addProp(eDimensionBypass);
     addProp(ePan);  
386      addProp(eSelfMask);      addProp(eSelfMask);
     addProp(eAttenuationController);  
     addProp(eInvertAttenuationController);  
     addProp(eAttenuationControllerThreshold);  
     addProp(eChannelOffset);  
387      addProp(eSustainDefeat);      addProp(eSustainDefeat);
   
     nextPage();  
388      addProp(eMSDecode);      addProp(eMSDecode);
389      addProp(eSampleStartOffset);  
     addProp(eUnityNote);  
     addProp(eFineTune);  
     addProp(eGain);  
     addProp(eGainPlus6);  
     addProp(eSampleLoops);  
390      nextPage();      nextPage();
391    
392    
393      eEG1InfiniteSustain.signal_toggled().connect(      eEG1InfiniteSustain.signal_toggled().connect(
394          sigc::mem_fun(*this, &DimRegionEdit::EG1InfiniteSustain_toggled) );          sigc::mem_fun(*this, &DimRegionEdit::EG1InfiniteSustain_toggled) );
395      eEG2InfiniteSustain.signal_toggled().connect(      eEG2InfiniteSustain.signal_toggled().connect(
# Line 426  DimRegionEdit::DimRegionEdit() : Line 422  DimRegionEdit::DimRegionEdit() :
422      eCrossfade_out_end.signal_value_changed().connect(      eCrossfade_out_end.signal_value_changed().connect(
423          sigc::mem_fun(*this, &DimRegionEdit::crossfade4_changed));          sigc::mem_fun(*this, &DimRegionEdit::crossfade4_changed));
424    
425      append_page(*table[0], "EG1");      eSampleLoopEnabled.signal_toggled().connect(
426      append_page(*table[1], "EG2");          sigc::mem_fun(*this, &DimRegionEdit::loop_enabled_toggled));
427      append_page(*table[2], "EG3");      eSampleLoopStart.signal_value_changed().connect(
428      append_page(*table[3], "Velocity");          sigc::mem_fun(*this, &DimRegionEdit::updateLoopElements));
429      append_page(*table[4], "Misc");      eSampleLoopLength.signal_value_changed().connect(
430            sigc::mem_fun(*this, &DimRegionEdit::updateLoopElements));
431        eSampleLoopInfinite.signal_toggled().connect(
432            sigc::mem_fun(*this, &DimRegionEdit::loop_infinite_toggled));
433    
434        append_page(*table[0], "Sample");
435        append_page(*table[1], "Amplitude (1)");
436        append_page(*table[2], "Amplitude (2)");
437        append_page(*table[3], "Filter (1)");
438        append_page(*table[4], "Filter (2)");
439        append_page(*table[5], "Pitch");
440        append_page(*table[6], "Misc");
441  }  }
442    
443  DimRegionEdit::~DimRegionEdit()  DimRegionEdit::~DimRegionEdit()
# Line 499  void DimRegionEdit::addProp(LabelWidget& Line 506  void DimRegionEdit::addProp(LabelWidget&
506    
507  void DimRegionEdit::set_dim_region(gig::DimensionRegion* d)  void DimRegionEdit::set_dim_region(gig::DimensionRegion* d)
508  {  {
509        dimregion = d;
510    
511      set_sensitive(d);      set_sensitive(d);
512      if (!d) return;      if (!d) return;
513    
514      update_gui = false;      update_gui = false;
515      wSample->set_text(d->pSample ? d->pSample->pInfo->Name.c_str() : "NULL");      wSample->set_text(d->pSample ? d->pSample->pInfo->Name.c_str() : "NULL");
516      eEG1PreAttack.set_dimreg(d);      eEG1PreAttack.set_ptr(&d->EG1PreAttack);
517      eEG1Attack.set_dimreg(d);      eEG1Attack.set_ptr(&d->EG1Attack);
518      eEG1Decay1.set_dimreg(d);      eEG1Decay1.set_ptr(&d->EG1Decay1);
519      eEG1Decay2.set_dimreg(d);      eEG1Decay2.set_ptr(&d->EG1Decay2);
520      eEG1InfiniteSustain.set_dimreg(d);      eEG1InfiniteSustain.set_ptr(&d->EG1InfiniteSustain);
521      eEG1Sustain.set_dimreg(d);      eEG1Sustain.set_ptr(&d->EG1Sustain);
522      eEG1Release.set_dimreg(d);      eEG1Release.set_ptr(&d->EG1Release);
523      eEG1Hold.set_dimreg(d);      eEG1Hold.set_ptr(&d->EG1Hold);
524      eEG1Controller.set_dimreg(d);      eEG1Controller.set_ptr(&d->EG1Controller);
525      eEG1ControllerInvert.set_dimreg(d);      eEG1ControllerInvert.set_ptr(&d->EG1ControllerInvert);
526      eEG1ControllerAttackInfluence.set_dimreg(d);      eEG1ControllerAttackInfluence.set_ptr(&d->EG1ControllerAttackInfluence);
527      eEG1ControllerDecayInfluence.set_dimreg(d);      eEG1ControllerDecayInfluence.set_ptr(&d->EG1ControllerDecayInfluence);
528      eEG1ControllerReleaseInfluence.set_dimreg(d);      eEG1ControllerReleaseInfluence.set_ptr(&d->EG1ControllerReleaseInfluence);
529      eLFO1Frequency.set_dimreg(d);      eLFO1Frequency.set_ptr(&d->LFO1Frequency);
530      eLFO1InternalDepth.set_dimreg(d);      eLFO1InternalDepth.set_ptr(&d->LFO1InternalDepth);
531      eLFO1ControlDepth.set_dimreg(d);      eLFO1ControlDepth.set_ptr(&d->LFO1ControlDepth);
532      eLFO1Controller.set_dimreg(d);      eLFO1Controller.set_ptr(&d->LFO1Controller);
533      eLFO1FlipPhase.set_dimreg(d);      eLFO1FlipPhase.set_ptr(&d->LFO1FlipPhase);
534      eLFO1Sync.set_dimreg(d);      eLFO1Sync.set_ptr(&d->LFO1Sync);
535      eEG2PreAttack.set_dimreg(d);      eEG2PreAttack.set_ptr(&d->EG2PreAttack);
536      eEG2Attack.set_dimreg(d);      eEG2Attack.set_ptr(&d->EG2Attack);
537      eEG2Decay1.set_dimreg(d);      eEG2Decay1.set_ptr(&d->EG2Decay1);
538      eEG2Decay2.set_dimreg(d);      eEG2Decay2.set_ptr(&d->EG2Decay2);
539      eEG2InfiniteSustain.set_dimreg(d);      eEG2InfiniteSustain.set_ptr(&d->EG2InfiniteSustain);
540      eEG2Sustain.set_dimreg(d);      eEG2Sustain.set_ptr(&d->EG2Sustain);
541      eEG2Release.set_dimreg(d);      eEG2Release.set_ptr(&d->EG2Release);
542      eEG2Controller.set_dimreg(d);      eEG2Controller.set_ptr(&d->EG2Controller);
543      eEG2ControllerInvert.set_dimreg(d);      eEG2ControllerInvert.set_ptr(&d->EG2ControllerInvert);
544      eEG2ControllerAttackInfluence.set_dimreg(d);      eEG2ControllerAttackInfluence.set_ptr(&d->EG2ControllerAttackInfluence);
545      eEG2ControllerDecayInfluence.set_dimreg(d);      eEG2ControllerDecayInfluence.set_ptr(&d->EG2ControllerDecayInfluence);
546      eEG2ControllerReleaseInfluence.set_dimreg(d);      eEG2ControllerReleaseInfluence.set_ptr(&d->EG2ControllerReleaseInfluence);
547      eLFO2Frequency.set_dimreg(d);      eLFO2Frequency.set_ptr(&d->LFO2Frequency);
548      eLFO2InternalDepth.set_dimreg(d);      eLFO2InternalDepth.set_ptr(&d->LFO2InternalDepth);
549      eLFO2ControlDepth.set_dimreg(d);      eLFO2ControlDepth.set_ptr(&d->LFO2ControlDepth);
550      eLFO2Controller.set_dimreg(d);      eLFO2Controller.set_ptr(&d->LFO2Controller);
551      eLFO2FlipPhase.set_dimreg(d);      eLFO2FlipPhase.set_ptr(&d->LFO2FlipPhase);
552      eLFO2Sync.set_dimreg(d);      eLFO2Sync.set_ptr(&d->LFO2Sync);
553      eEG3Attack.set_dimreg(d);      eEG3Attack.set_ptr(&d->EG3Attack);
554      eEG3Depth.set_dimreg(d);      eEG3Depth.set_ptr(&d->EG3Depth);
555      eLFO3Frequency.set_dimreg(d);      eLFO3Frequency.set_ptr(&d->LFO3Frequency);
556      eLFO3InternalDepth.set_dimreg(d);      eLFO3InternalDepth.set_ptr(&d->LFO3InternalDepth);
557      eLFO3ControlDepth.set_dimreg(d);      eLFO3ControlDepth.set_ptr(&d->LFO3ControlDepth);
558      eLFO3Controller.set_dimreg(d);      eLFO3Controller.set_ptr(&d->LFO3Controller);
559      eLFO3Sync.set_dimreg(d);      eLFO3Sync.set_ptr(&d->LFO3Sync);
560      eVCFEnabled.set_dimreg(d);      eVCFEnabled.set_ptr(&d->VCFEnabled);
561      eVCFType.set_dimreg(d);      eVCFType.set_ptr(&d->VCFType);
562      eVCFCutoffController.set_dimreg(d);      eVCFCutoffController.set_ptr(&d->VCFCutoffController);
563      eVCFCutoffControllerInvert.set_dimreg(d);      eVCFCutoffControllerInvert.set_ptr(&d->VCFCutoffControllerInvert);
564      eVCFCutoff.set_dimreg(d);      eVCFCutoff.set_ptr(&d->VCFCutoff);
565      eVCFVelocityCurve.set_dimreg(d);      eVCFVelocityCurve.set_ptr(&d->VCFVelocityCurve);
566      eVCFVelocityScale.set_dimreg(d);      eVCFVelocityScale.set_ptr(&d->VCFVelocityScale);
567      eVCFVelocityDynamicRange.set_dimreg(d);      eVCFVelocityDynamicRange.set_ptr(&d->VCFVelocityDynamicRange);
568      eVCFResonance.set_dimreg(d);      eVCFResonance.set_ptr(&d->VCFResonance);
569      eVCFResonanceDynamic.set_dimreg(d);      eVCFResonanceDynamic.set_ptr(&d->VCFResonanceDynamic);
570      eVCFResonanceController.set_dimreg(d);      eVCFResonanceController.set_ptr(&d->VCFResonanceController);
571      eVCFKeyboardTracking.set_dimreg(d);      eVCFKeyboardTracking.set_ptr(&d->VCFKeyboardTracking);
572      eVCFKeyboardTrackingBreakpoint.set_dimreg(d);      eVCFKeyboardTrackingBreakpoint.set_ptr(&d->VCFKeyboardTrackingBreakpoint);
573      eVelocityResponseCurve.set_dimreg(d);      eVelocityResponseCurve.set_ptr(&d->VelocityResponseCurve);
574      eVelocityResponseDepth.set_dimreg(d);      eVelocityResponseDepth.set_ptr(&d->VelocityResponseDepth);
575      eVelocityResponseCurveScaling.set_dimreg(d);      eVelocityResponseCurveScaling.set_ptr(&d->VelocityResponseCurveScaling);
576      eReleaseVelocityResponseCurve.set_dimreg(d);      eReleaseVelocityResponseCurve.set_ptr(&d->ReleaseVelocityResponseCurve);
577      eReleaseVelocityResponseDepth.set_dimreg(d);      eReleaseVelocityResponseDepth.set_ptr(&d->ReleaseVelocityResponseDepth);
578      eReleaseTriggerDecay.set_dimreg(d);      eReleaseTriggerDecay.set_ptr(&d->ReleaseTriggerDecay);
579      eCrossfade_in_start.set_dimreg(d);      eCrossfade_in_start.set_ptr(&d->Crossfade.in_start);
580      eCrossfade_in_end.set_dimreg(d);      eCrossfade_in_end.set_ptr(&d->Crossfade.in_end);
581      eCrossfade_out_start.set_dimreg(d);      eCrossfade_out_start.set_ptr(&d->Crossfade.out_start);
582      eCrossfade_out_end.set_dimreg(d);      eCrossfade_out_end.set_ptr(&d->Crossfade.out_end);
583      ePitchTrack.set_dimreg(d);      ePitchTrack.set_ptr(&d->PitchTrack);
584      eDimensionBypass.set_dimreg(d);      eDimensionBypass.set_ptr(&d->DimensionBypass);
585      ePan.set_dimreg(d);      ePan.set_ptr(&d->Pan);
586      eSelfMask.set_dimreg(d);      eSelfMask.set_ptr(&d->SelfMask);
587      eAttenuationController.set_dimreg(d);      eAttenuationController.set_ptr(&d->AttenuationController);
588      eInvertAttenuationController.set_dimreg(d);      eInvertAttenuationController.set_ptr(&d->InvertAttenuationController);
589      eAttenuationControllerThreshold.set_dimreg(d);      eAttenuationControllerThreshold.set_ptr(&d->AttenuationControllerThreshold);
590      eChannelOffset.set_dimreg(d);      eChannelOffset.set_ptr(&d->ChannelOffset);
591      eSustainDefeat.set_dimreg(d);      eSustainDefeat.set_ptr(&d->SustainDefeat);
592      eMSDecode.set_dimreg(d);      eMSDecode.set_ptr(&d->MSDecode);
593      eSampleStartOffset.set_dimreg(d);      eSampleStartOffset.set_ptr(&d->SampleStartOffset);
594      eUnityNote.set_dimreg(d);      eUnityNote.set_ptr(&d->UnityNote);
595      eFineTune.set_dimreg(d);      eFineTune.set_ptr(&d->FineTune);
596      eGain.set_dimreg(d);      eGain.set_ptr(&d->Gain);
597      eGainPlus6.set_dimreg(d);      eGainPlus6.set_ptr(&d->Gain);
598      eSampleLoops.set_dimreg(d);  
599        eSampleLoopEnabled.set_active(d->SampleLoops);
600        updateLoopElements();
601    
602      VCFEnabled_toggled();      VCFEnabled_toggled();
603    
# Line 742  void DimRegionEdit::crossfade4_changed() Line 753  void DimRegionEdit::crossfade4_changed()
753    
754      if (c4 < c3) eCrossfade_out_start.set_value(c4);      if (c4 < c3) eCrossfade_out_start.set_value(c4);
755  }  }
756    
757    void DimRegionEdit::loop_enabled_toggled()
758    {
759        const bool active = eSampleLoopEnabled.get_active();
760        if (active) {
761            // create a new sample loop in case there is none yet
762            if (!dimregion->SampleLoops) {
763                DLS::sample_loop_t loop;
764                loop.LoopType   = gig::loop_type_normal;
765                // loop the whole sample by default
766                loop.LoopStart  = 0;
767                loop.LoopLength =
768                    (dimregion->pSample) ? dimregion->pSample->GetSize() : 0;
769                dimregion->AddSampleLoop(&loop);
770            }
771        } else {
772            // delete ALL existing sample loops
773            while (dimregion->SampleLoops)
774                dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);
775        }
776        updateLoopElements();
777    }
778    
779    void DimRegionEdit::updateLoopElements()
780    {
781        const bool active = eSampleLoopEnabled.get_active();
782        eSampleLoopStart.set_sensitive(active);
783        eSampleLoopLength.set_sensitive(active);
784        eSampleLoopType.set_sensitive(active);
785        eSampleLoopInfinite.set_sensitive(active);
786        if (dimregion && dimregion->SampleLoops) {
787            eSampleLoopStart.set_ptr(&dimregion->pSampleLoops[0].LoopStart);
788            eSampleLoopLength.set_ptr(&dimregion->pSampleLoops[0].LoopLength);
789            eSampleLoopType.set_ptr(&dimregion->pSampleLoops[0].LoopType);
790            eSampleLoopPlayCount.set_ptr(
791                (dimregion->pSample) ? &dimregion->pSample->LoopPlayCount : NULL
792            );
793            eSampleLoopInfinite.set_active(
794                dimregion->pSample && !dimregion->pSample->LoopPlayCount
795            );
796            // sample loop shall never be longer than the actual sample size
797            eSampleLoopStart.set_upper(
798                (dimregion->pSample)
799                    ? dimregion->pSample->GetSize() -
800                      dimregion->pSampleLoops[0].LoopLength
801                    : 0
802            );
803            eSampleLoopLength.set_upper(
804                (dimregion->pSample)
805                    ? dimregion->pSample->GetSize() -
806                      dimregion->pSampleLoops[0].LoopStart
807                    : 0
808            );
809        } else { // no sample loop(s)
810            eSampleLoopStart.set_ptr(NULL);
811            eSampleLoopLength.set_ptr(NULL);
812            eSampleLoopType.set_ptr(NULL);
813            eSampleLoopPlayCount.set_ptr(NULL);
814        }
815    }
816    
817    void DimRegionEdit::loop_infinite_toggled() {
818        eSampleLoopPlayCount.set_sensitive(!eSampleLoopInfinite.get_active());
819        if (eSampleLoopInfinite.get_active()) eSampleLoopPlayCount.set_value(0);
820    }

Legend:
Removed from v.1118  
changed lines
  Added in v.1156

  ViewVC Help
Powered by ViewVC