/[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 1153 by schoenebeck, Mon Apr 9 21:05:01 2007 UTC revision 1156 by schoenebeck, Wed Apr 11 21:36:30 2007 UTC
# Line 105  DimRegionEdit::DimRegionEdit() : Line 105  DimRegionEdit::DimRegionEdit() :
105      eFineTune("FineTune", -49, 50),      eFineTune("FineTune", -49, 50),
106      eGain("Gain", -96, 0, 2, -655360),      eGain("Gain", -96, 0, 2, -655360),
107      eGainPlus6("Gain +6dB", eGain, 6 * -655360),      eGainPlus6("Gain +6dB", eGain, 6 * -655360),
108      eSampleLoops("SampleLoops", 0, 1)      eSampleLoopEnabled("Enabled"),
109        eSampleLoopStart("Loop Start Positon"),
110        eSampleLoopLength("Loop Size"),
111        eSampleLoopType("Loop Type"),
112        eSampleLoopInfinite("Infinite Loop"),
113        eSampleLoopPlayCount("Playback Count")
114  {  {
115      for (int i = 0 ; i < 7 ; i++) {      for (int i = 0 ; i < 7 ; i++) {
116          table[i] = new Gtk::Table(3, 1);          table[i] = new Gtk::Table(3, 1);
# Line 125  DimRegionEdit::DimRegionEdit() : Line 130  DimRegionEdit::DimRegionEdit() :
130          _("if true: sample will be pitched according to the key position "          _("if true: sample will be pitched according to the key position "
131            "(this would be disabled for drums for example)")            "(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;
# Line 140  DimRegionEdit::DimRegionEdit() : Line 166  DimRegionEdit::DimRegionEdit() :
166      addProp(ePan);      addProp(ePan);
167      addProp(eChannelOffset);      addProp(eChannelOffset);
168      addHeader("Loops:");      addHeader("Loops:");
169      addProp(eSampleLoops);      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:");      addHeader("Crossfade:");
185      addProp(eCrossfade_in_start);      addProp(eCrossfade_in_start);
186      addProp(eCrossfade_in_end);      addProp(eCrossfade_in_end);
# Line 382  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        eSampleLoopEnabled.signal_toggled().connect(
426            sigc::mem_fun(*this, &DimRegionEdit::loop_enabled_toggled));
427        eSampleLoopStart.signal_value_changed().connect(
428            sigc::mem_fun(*this, &DimRegionEdit::updateLoopElements));
429        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");      append_page(*table[0], "Sample");
435      append_page(*table[1], "Amplitude (1)");      append_page(*table[1], "Amplitude (1)");
436      append_page(*table[2], "Amplitude (2)");      append_page(*table[2], "Amplitude (2)");
# Line 457  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    
# Line 544  void DimRegionEdit::set_dim_region(gig:: Line 595  void DimRegionEdit::set_dim_region(gig::
595      eFineTune.set_ptr(&d->FineTune);      eFineTune.set_ptr(&d->FineTune);
596      eGain.set_ptr(&d->Gain);      eGain.set_ptr(&d->Gain);
597      eGainPlus6.set_ptr(&d->Gain);      eGainPlus6.set_ptr(&d->Gain);
598      eSampleLoops.set_ptr(&d->SampleLoops);  
599        eSampleLoopEnabled.set_active(d->SampleLoops);
600        updateLoopElements();
601    
602      VCFEnabled_toggled();      VCFEnabled_toggled();
603    
# Line 700  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.1153  
changed lines
  Added in v.1156

  ViewVC Help
Powered by ViewVC