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

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

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

revision 1225 by schoenebeck, Sun Jun 10 10:56:11 2007 UTC revision 1303 by persson, Sun Aug 26 09:29:52 2007 UTC
# Line 413  DimRegionEdit::DimRegionEdit() : Line 413  DimRegionEdit::DimRegionEdit() :
413      eVCFResonanceController.signal_changed().connect(      eVCFResonanceController.signal_changed().connect(
414          sigc::mem_fun(*this, &DimRegionEdit::VCFResonanceController_changed) );          sigc::mem_fun(*this, &DimRegionEdit::VCFResonanceController_changed) );
415    
416      eCrossfade_in_start.signal_value_changed().connect(      eCrossfade_in_start.signal_changed_by_user().connect(
417          sigc::mem_fun(*this, &DimRegionEdit::crossfade1_changed));          sigc::mem_fun(*this, &DimRegionEdit::crossfade1_changed));
418      eCrossfade_in_end.signal_value_changed().connect(      eCrossfade_in_end.signal_changed_by_user().connect(
419          sigc::mem_fun(*this, &DimRegionEdit::crossfade2_changed));          sigc::mem_fun(*this, &DimRegionEdit::crossfade2_changed));
420      eCrossfade_out_start.signal_value_changed().connect(      eCrossfade_out_start.signal_changed_by_user().connect(
421          sigc::mem_fun(*this, &DimRegionEdit::crossfade3_changed));          sigc::mem_fun(*this, &DimRegionEdit::crossfade3_changed));
422      eCrossfade_out_end.signal_value_changed().connect(      eCrossfade_out_end.signal_changed_by_user().connect(
423          sigc::mem_fun(*this, &DimRegionEdit::crossfade4_changed));          sigc::mem_fun(*this, &DimRegionEdit::crossfade4_changed));
424    
425      eSampleLoopEnabled.signal_toggled().connect(      eSampleLoopEnabled.signal_toggled().connect(
426          sigc::mem_fun(*this, &DimRegionEdit::loop_enabled_toggled));          sigc::mem_fun(*this, &DimRegionEdit::loop_enabled_toggled));
427      eSampleLoopStart.signal_value_changed().connect(      eSampleLoopStart.signal_changed_by_user().connect(
428          sigc::mem_fun(*this, &DimRegionEdit::updateLoopElements));          sigc::mem_fun(*this, &DimRegionEdit::updateLoopElements));
429      eSampleLoopLength.signal_value_changed().connect(      eSampleLoopLength.signal_changed_by_user().connect(
430          sigc::mem_fun(*this, &DimRegionEdit::updateLoopElements));          sigc::mem_fun(*this, &DimRegionEdit::updateLoopElements));
431      eSampleLoopInfinite.signal_toggled().connect(      eSampleLoopInfinite.signal_toggled().connect(
432          sigc::mem_fun(*this, &DimRegionEdit::loop_infinite_toggled));          sigc::mem_fun(*this, &DimRegionEdit::loop_infinite_toggled));
# Line 499  void DimRegionEdit::addProp(BoolEntry& b Line 499  void DimRegionEdit::addProp(BoolEntry& b
499      table[pageno]->attach(boolentry.widget, 1, 3, rowno, rowno + 1,      table[pageno]->attach(boolentry.widget, 1, 3, rowno, rowno + 1,
500                            Gtk::FILL, Gtk::SHRINK);                            Gtk::FILL, Gtk::SHRINK);
501      rowno++;      rowno++;
502        boolentry.signal_changed_by_user().connect(dimreg_changed_signal.make_slot());
503    }
504    
505    void DimRegionEdit::addProp(BoolEntryPlus6& boolentry)
506    {
507        table[pageno]->attach(boolentry.widget, 1, 3, rowno, rowno + 1,
508                              Gtk::FILL, Gtk::SHRINK);
509        rowno++;
510        boolentry.signal_changed_by_user().connect(dimreg_changed_signal.make_slot());
511  }  }
512    
513  void DimRegionEdit::addProp(LabelWidget& prop)  void DimRegionEdit::addProp(LabelWidget& prop)
# Line 508  void DimRegionEdit::addProp(LabelWidget& Line 517  void DimRegionEdit::addProp(LabelWidget&
517      table[pageno]->attach(prop.widget, 2, 3, rowno, rowno + 1,      table[pageno]->attach(prop.widget, 2, 3, rowno, rowno + 1,
518                            Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK);                            Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK);
519      rowno++;      rowno++;
520        prop.signal_changed_by_user().connect(dimreg_changed_signal.make_slot());
521  }  }
522    
523    
# Line 518  void DimRegionEdit::set_dim_region(gig:: Line 528  void DimRegionEdit::set_dim_region(gig::
528      set_sensitive(d);      set_sensitive(d);
529      if (!d) return;      if (!d) return;
530    
     update_gui = false;  
531      wSample->set_text(d->pSample ? d->pSample->pInfo->Name.c_str() : "NULL");      wSample->set_text(d->pSample ? d->pSample->pInfo->Name.c_str() : "NULL");
532      eEG1PreAttack.set_ptr(&d->EG1PreAttack);      eEG1PreAttack.set_ptr(&d->EG1PreAttack);
533      eEG1Attack.set_ptr(&d->EG1Attack);      eEG1Attack.set_ptr(&d->EG1Attack);
# Line 583  void DimRegionEdit::set_dim_region(gig:: Line 592  void DimRegionEdit::set_dim_region(gig::
592      eReleaseVelocityResponseCurve.set_ptr(&d->ReleaseVelocityResponseCurve);      eReleaseVelocityResponseCurve.set_ptr(&d->ReleaseVelocityResponseCurve);
593      eReleaseVelocityResponseDepth.set_ptr(&d->ReleaseVelocityResponseDepth);      eReleaseVelocityResponseDepth.set_ptr(&d->ReleaseVelocityResponseDepth);
594      eReleaseTriggerDecay.set_ptr(&d->ReleaseTriggerDecay);      eReleaseTriggerDecay.set_ptr(&d->ReleaseTriggerDecay);
595    
596        eCrossfade_in_start.set_ptr(0);
597        eCrossfade_in_end.set_ptr(0);
598        eCrossfade_out_start.set_ptr(0);
599        eCrossfade_out_end.set_ptr(0);
600      eCrossfade_in_start.set_ptr(&d->Crossfade.in_start);      eCrossfade_in_start.set_ptr(&d->Crossfade.in_start);
601      eCrossfade_in_end.set_ptr(&d->Crossfade.in_end);      eCrossfade_in_end.set_ptr(&d->Crossfade.in_end);
602      eCrossfade_out_start.set_ptr(&d->Crossfade.out_start);      eCrossfade_out_start.set_ptr(&d->Crossfade.out_start);
603      eCrossfade_out_end.set_ptr(&d->Crossfade.out_end);      eCrossfade_out_end.set_ptr(&d->Crossfade.out_end);
604    
605      ePitchTrack.set_ptr(&d->PitchTrack);      ePitchTrack.set_ptr(&d->PitchTrack);
606      eDimensionBypass.set_ptr(&d->DimensionBypass);      eDimensionBypass.set_ptr(&d->DimensionBypass);
607      ePan.set_ptr(&d->Pan);      ePan.set_ptr(&d->Pan);
# Line 607  void DimRegionEdit::set_dim_region(gig:: Line 622  void DimRegionEdit::set_dim_region(gig::
622      updateLoopElements();      updateLoopElements();
623    
624      VCFEnabled_toggled();      VCFEnabled_toggled();
   
     update_gui = true;  
625  }  }
626    
627  void DimRegionEdit::VCFEnabled_toggled()  void DimRegionEdit::VCFEnabled_toggled()
# Line 779  void DimRegionEdit::loop_enabled_toggled Line 792  void DimRegionEdit::loop_enabled_toggled
792              loop.LoopLength =              loop.LoopLength =
793                  (dimregion->pSample) ? dimregion->pSample->GetSize() : 0;                  (dimregion->pSample) ? dimregion->pSample->GetSize() : 0;
794              dimregion->AddSampleLoop(&loop);              dimregion->AddSampleLoop(&loop);
795                dimreg_changed_signal();
796          }          }
797      } else {      } else {
798          // delete ALL existing sample loops          if (dimregion->SampleLoops) {
799          while (dimregion->SampleLoops)              // delete ALL existing sample loops
800              dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);              while (dimregion->SampleLoops) {
801                    dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);
802                }
803                dimreg_changed_signal();
804            }
805      }      }
806      updateLoopElements();      updateLoopElements();
807  }  }
# Line 794  void DimRegionEdit::updateLoopElements() Line 812  void DimRegionEdit::updateLoopElements()
812      eSampleLoopStart.set_sensitive(active);      eSampleLoopStart.set_sensitive(active);
813      eSampleLoopLength.set_sensitive(active);      eSampleLoopLength.set_sensitive(active);
814      eSampleLoopType.set_sensitive(active);      eSampleLoopType.set_sensitive(active);
815      eSampleLoopInfinite.set_sensitive(active);      eSampleLoopInfinite.set_sensitive(active && dimregion && dimregion->pSample);
816        eSampleLoopStart.set_ptr(0);
817        eSampleLoopLength.set_ptr(0);
818        eSampleLoopPlayCount.set_ptr(0);
819    
820      if (dimregion && dimregion->SampleLoops) {      if (dimregion && dimregion->SampleLoops) {
821          eSampleLoopStart.set_ptr(&dimregion->pSampleLoops[0].LoopStart);          eSampleLoopStart.set_ptr(&dimregion->pSampleLoops[0].LoopStart);
822          eSampleLoopLength.set_ptr(&dimregion->pSampleLoops[0].LoopLength);          eSampleLoopLength.set_ptr(&dimregion->pSampleLoops[0].LoopLength);
823          eSampleLoopType.set_ptr(&dimregion->pSampleLoops[0].LoopType);          eSampleLoopType.set_ptr(&dimregion->pSampleLoops[0].LoopType);
         eSampleLoopPlayCount.set_ptr(  
             (dimregion->pSample) ? &dimregion->pSample->LoopPlayCount : NULL  
         );  
824          eSampleLoopInfinite.set_active(          eSampleLoopInfinite.set_active(
825              dimregion->pSample && !dimregion->pSample->LoopPlayCount              dimregion->pSample && !dimregion->pSample->LoopPlayCount
826          );          );
827            // updated enabled state of loop play count widget
828            loop_infinite_toggled();
829    
830            eSampleLoopPlayCount.set_ptr(
831                (dimregion->pSample) ? &dimregion->pSample->LoopPlayCount : 0
832            );
833    
834          // sample loop shall never be longer than the actual sample size          // sample loop shall never be longer than the actual sample size
835          eSampleLoopStart.set_upper(          eSampleLoopStart.set_upper(
836              (dimregion->pSample)              (dimregion->pSample)
837                  ? dimregion->pSample->GetSize() -                  ? dimregion->pSample->SamplesTotal -
838                    dimregion->pSampleLoops[0].LoopLength                    dimregion->pSampleLoops[0].LoopLength
839                  : 0                  : 0
840          );          );
841          eSampleLoopLength.set_upper(          eSampleLoopLength.set_upper(
842              (dimregion->pSample)              (dimregion->pSample)
843                  ? dimregion->pSample->GetSize() -                  ? dimregion->pSample->SamplesTotal -
844                    dimregion->pSampleLoops[0].LoopStart                    dimregion->pSampleLoops[0].LoopStart
845                  : 0                  : 0
846          );          );
847      } else { // no sample loop(s)      } else { // no sample loop(s)
848          eSampleLoopStart.set_ptr(NULL);          eSampleLoopType.set_ptr(0);
849          eSampleLoopLength.set_ptr(NULL);          // updated enabled state of loop play count widget
850          eSampleLoopType.set_ptr(NULL);          loop_infinite_toggled();
         eSampleLoopPlayCount.set_ptr(NULL);  
851      }      }
     // updated enabled state of loop play count widget  
     loop_infinite_toggled();  
852  }  }
853    
854  void DimRegionEdit::loop_infinite_toggled() {  void DimRegionEdit::loop_infinite_toggled() {
855      eSampleLoopPlayCount.set_sensitive(      eSampleLoopPlayCount.set_sensitive(
856            dimregion && dimregion->pSample &&
857          !eSampleLoopInfinite.get_active() &&          !eSampleLoopInfinite.get_active() &&
858           eSampleLoopEnabled.get_active()           eSampleLoopEnabled.get_active()
859      );      );
# Line 838  void DimRegionEdit::loop_infinite_toggle Line 862  void DimRegionEdit::loop_infinite_toggle
862      else if (!eSampleLoopPlayCount.get_value())      else if (!eSampleLoopPlayCount.get_value())
863          eSampleLoopPlayCount.set_value(1);          eSampleLoopPlayCount.set_value(1);
864  }  }
865    
866    bool DimRegionEdit::set_sample(gig::Sample* sample)
867    {
868        if (dimregion) {
869            dimregion->pSample = sample;
870    
871            // copy sample information from Sample to DimensionRegion
872    
873            dimregion->UnityNote = sample->MIDIUnityNote;
874            dimregion->FineTune = sample->FineTune;
875    
876            int loops = sample->Loops ? 1 : 0;
877            while (dimregion->SampleLoops > loops) {
878                dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);
879            }
880            while (dimregion->SampleLoops < sample->Loops) {
881                DLS::sample_loop_t loop;
882                dimregion->AddSampleLoop(&loop);
883            }
884            if (loops) {
885                dimregion->pSampleLoops[0].Size = sizeof(DLS::sample_loop_t);
886                dimregion->pSampleLoops[0].LoopType = sample->LoopType;
887                dimregion->pSampleLoops[0].LoopStart = sample->LoopStart;
888                dimregion->pSampleLoops[0].LoopLength = sample->LoopEnd - sample->LoopStart + 1;
889            }
890    
891            // update ui
892            wSample->set_text(dimregion->pSample->pInfo->Name);
893            eUnityNote.set_ptr(&dimregion->UnityNote);
894            eFineTune.set_ptr(&dimregion->FineTune);
895            eSampleLoopEnabled.set_active(dimregion->SampleLoops);
896            updateLoopElements();
897    
898            dimreg_changed_signal();
899            return true;
900        }
901        return false;
902    }

Legend:
Removed from v.1225  
changed lines
  Added in v.1303

  ViewVC Help
Powered by ViewVC