/[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 1322 by schoenebeck, Tue Sep 4 11:04:56 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(
503            sigc::bind(dimreg_changed_signal.make_slot(), sigc::ref(this->dimregion))
504        );
505    }
506    
507    void DimRegionEdit::addProp(BoolEntryPlus6& boolentry)
508    {
509        table[pageno]->attach(boolentry.widget, 1, 3, rowno, rowno + 1,
510                              Gtk::FILL, Gtk::SHRINK);
511        rowno++;
512        boolentry.signal_changed_by_user().connect(
513            sigc::bind(dimreg_changed_signal.make_slot(), sigc::ref(this->dimregion))
514        );
515  }  }
516    
517  void DimRegionEdit::addProp(LabelWidget& prop)  void DimRegionEdit::addProp(LabelWidget& prop)
# Line 508  void DimRegionEdit::addProp(LabelWidget& Line 521  void DimRegionEdit::addProp(LabelWidget&
521      table[pageno]->attach(prop.widget, 2, 3, rowno, rowno + 1,      table[pageno]->attach(prop.widget, 2, 3, rowno, rowno + 1,
522                            Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK);                            Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK);
523      rowno++;      rowno++;
524        prop.signal_changed_by_user().connect(
525            sigc::bind(dimreg_changed_signal.make_slot(), sigc::ref(this->dimregion))
526        );
527  }  }
528    
529    
# Line 518  void DimRegionEdit::set_dim_region(gig:: Line 534  void DimRegionEdit::set_dim_region(gig::
534      set_sensitive(d);      set_sensitive(d);
535      if (!d) return;      if (!d) return;
536    
     update_gui = false;  
537      wSample->set_text(d->pSample ? d->pSample->pInfo->Name.c_str() : "NULL");      wSample->set_text(d->pSample ? d->pSample->pInfo->Name.c_str() : "NULL");
538      eEG1PreAttack.set_ptr(&d->EG1PreAttack);      eEG1PreAttack.set_ptr(&d->EG1PreAttack);
539      eEG1Attack.set_ptr(&d->EG1Attack);      eEG1Attack.set_ptr(&d->EG1Attack);
# Line 583  void DimRegionEdit::set_dim_region(gig:: Line 598  void DimRegionEdit::set_dim_region(gig::
598      eReleaseVelocityResponseCurve.set_ptr(&d->ReleaseVelocityResponseCurve);      eReleaseVelocityResponseCurve.set_ptr(&d->ReleaseVelocityResponseCurve);
599      eReleaseVelocityResponseDepth.set_ptr(&d->ReleaseVelocityResponseDepth);      eReleaseVelocityResponseDepth.set_ptr(&d->ReleaseVelocityResponseDepth);
600      eReleaseTriggerDecay.set_ptr(&d->ReleaseTriggerDecay);      eReleaseTriggerDecay.set_ptr(&d->ReleaseTriggerDecay);
601    
602        eCrossfade_in_start.set_ptr(0);
603        eCrossfade_in_end.set_ptr(0);
604        eCrossfade_out_start.set_ptr(0);
605        eCrossfade_out_end.set_ptr(0);
606      eCrossfade_in_start.set_ptr(&d->Crossfade.in_start);      eCrossfade_in_start.set_ptr(&d->Crossfade.in_start);
607      eCrossfade_in_end.set_ptr(&d->Crossfade.in_end);      eCrossfade_in_end.set_ptr(&d->Crossfade.in_end);
608      eCrossfade_out_start.set_ptr(&d->Crossfade.out_start);      eCrossfade_out_start.set_ptr(&d->Crossfade.out_start);
609      eCrossfade_out_end.set_ptr(&d->Crossfade.out_end);      eCrossfade_out_end.set_ptr(&d->Crossfade.out_end);
610    
611      ePitchTrack.set_ptr(&d->PitchTrack);      ePitchTrack.set_ptr(&d->PitchTrack);
612      eDimensionBypass.set_ptr(&d->DimensionBypass);      eDimensionBypass.set_ptr(&d->DimensionBypass);
613      ePan.set_ptr(&d->Pan);      ePan.set_ptr(&d->Pan);
# Line 607  void DimRegionEdit::set_dim_region(gig:: Line 628  void DimRegionEdit::set_dim_region(gig::
628      updateLoopElements();      updateLoopElements();
629    
630      VCFEnabled_toggled();      VCFEnabled_toggled();
   
     update_gui = true;  
631  }  }
632    
633  void DimRegionEdit::VCFEnabled_toggled()  void DimRegionEdit::VCFEnabled_toggled()
# Line 778  void DimRegionEdit::loop_enabled_toggled Line 797  void DimRegionEdit::loop_enabled_toggled
797              loop.LoopStart  = 0;              loop.LoopStart  = 0;
798              loop.LoopLength =              loop.LoopLength =
799                  (dimregion->pSample) ? dimregion->pSample->GetSize() : 0;                  (dimregion->pSample) ? dimregion->pSample->GetSize() : 0;
800                dimreg_to_be_changed_signal.emit(dimregion);
801              dimregion->AddSampleLoop(&loop);              dimregion->AddSampleLoop(&loop);
802                dimreg_changed_signal.emit(dimregion);
803          }          }
804      } else {      } else {
805          // delete ALL existing sample loops          if (dimregion->SampleLoops) {
806          while (dimregion->SampleLoops)              dimreg_to_be_changed_signal.emit(dimregion);
807              dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);              // delete ALL existing sample loops
808                while (dimregion->SampleLoops) {
809                    dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);
810                }
811                dimreg_changed_signal.emit(dimregion);
812            }
813      }      }
814      updateLoopElements();      updateLoopElements();
815  }  }
# Line 794  void DimRegionEdit::updateLoopElements() Line 820  void DimRegionEdit::updateLoopElements()
820      eSampleLoopStart.set_sensitive(active);      eSampleLoopStart.set_sensitive(active);
821      eSampleLoopLength.set_sensitive(active);      eSampleLoopLength.set_sensitive(active);
822      eSampleLoopType.set_sensitive(active);      eSampleLoopType.set_sensitive(active);
823      eSampleLoopInfinite.set_sensitive(active);      eSampleLoopInfinite.set_sensitive(active && dimregion && dimregion->pSample);
824        eSampleLoopStart.set_ptr(0);
825        eSampleLoopLength.set_ptr(0);
826        eSampleLoopPlayCount.set_ptr(0);
827    
828      if (dimregion && dimregion->SampleLoops) {      if (dimregion && dimregion->SampleLoops) {
829          eSampleLoopStart.set_ptr(&dimregion->pSampleLoops[0].LoopStart);          eSampleLoopStart.set_ptr(&dimregion->pSampleLoops[0].LoopStart);
830          eSampleLoopLength.set_ptr(&dimregion->pSampleLoops[0].LoopLength);          eSampleLoopLength.set_ptr(&dimregion->pSampleLoops[0].LoopLength);
831          eSampleLoopType.set_ptr(&dimregion->pSampleLoops[0].LoopType);          eSampleLoopType.set_ptr(&dimregion->pSampleLoops[0].LoopType);
         eSampleLoopPlayCount.set_ptr(  
             (dimregion->pSample) ? &dimregion->pSample->LoopPlayCount : NULL  
         );  
832          eSampleLoopInfinite.set_active(          eSampleLoopInfinite.set_active(
833              dimregion->pSample && !dimregion->pSample->LoopPlayCount              dimregion->pSample && !dimregion->pSample->LoopPlayCount
834          );          );
835            // updated enabled state of loop play count widget
836            loop_infinite_toggled();
837    
838            eSampleLoopPlayCount.set_ptr(
839                (dimregion->pSample) ? &dimregion->pSample->LoopPlayCount : 0
840            );
841    
842          // sample loop shall never be longer than the actual sample size          // sample loop shall never be longer than the actual sample size
843          eSampleLoopStart.set_upper(          eSampleLoopStart.set_upper(
844              (dimregion->pSample)              (dimregion->pSample)
845                  ? dimregion->pSample->GetSize() -                  ? dimregion->pSample->SamplesTotal -
846                    dimregion->pSampleLoops[0].LoopLength                    dimregion->pSampleLoops[0].LoopLength
847                  : 0                  : 0
848          );          );
849          eSampleLoopLength.set_upper(          eSampleLoopLength.set_upper(
850              (dimregion->pSample)              (dimregion->pSample)
851                  ? dimregion->pSample->GetSize() -                  ? dimregion->pSample->SamplesTotal -
852                    dimregion->pSampleLoops[0].LoopStart                    dimregion->pSampleLoops[0].LoopStart
853                  : 0                  : 0
854          );          );
855      } else { // no sample loop(s)      } else { // no sample loop(s)
856          eSampleLoopStart.set_ptr(NULL);          eSampleLoopType.set_ptr(0);
857          eSampleLoopLength.set_ptr(NULL);          // updated enabled state of loop play count widget
858          eSampleLoopType.set_ptr(NULL);          loop_infinite_toggled();
         eSampleLoopPlayCount.set_ptr(NULL);  
859      }      }
     // updated enabled state of loop play count widget  
     loop_infinite_toggled();  
860  }  }
861    
862  void DimRegionEdit::loop_infinite_toggled() {  void DimRegionEdit::loop_infinite_toggled() {
863      eSampleLoopPlayCount.set_sensitive(      eSampleLoopPlayCount.set_sensitive(
864            dimregion && dimregion->pSample &&
865          !eSampleLoopInfinite.get_active() &&          !eSampleLoopInfinite.get_active() &&
866           eSampleLoopEnabled.get_active()           eSampleLoopEnabled.get_active()
867      );      );
# Line 838  void DimRegionEdit::loop_infinite_toggle Line 870  void DimRegionEdit::loop_infinite_toggle
870      else if (!eSampleLoopPlayCount.get_value())      else if (!eSampleLoopPlayCount.get_value())
871          eSampleLoopPlayCount.set_value(1);          eSampleLoopPlayCount.set_value(1);
872  }  }
873    
874    bool DimRegionEdit::set_sample(gig::Sample* sample)
875    {
876        if (dimregion) {
877            //TODO: we should better move the code from MainWindow::on_sample_label_drop_drag_data_received() here
878    
879            // currently commented because we're sending a similar signal in MainWindow::on_sample_label_drop_drag_data_received()
880            //dimreg_to_be_changed_signal.emit(dimregion);
881    
882            gig::Sample* oldref = dimregion->pSample;
883            dimregion->pSample = sample;
884    
885            // copy sample information from Sample to DimensionRegion
886    
887            dimregion->UnityNote = sample->MIDIUnityNote;
888            dimregion->FineTune = sample->FineTune;
889    
890            int loops = sample->Loops ? 1 : 0;
891            while (dimregion->SampleLoops > loops) {
892                dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);
893            }
894            while (dimregion->SampleLoops < sample->Loops) {
895                DLS::sample_loop_t loop;
896                dimregion->AddSampleLoop(&loop);
897            }
898            if (loops) {
899                dimregion->pSampleLoops[0].Size = sizeof(DLS::sample_loop_t);
900                dimregion->pSampleLoops[0].LoopType = sample->LoopType;
901                dimregion->pSampleLoops[0].LoopStart = sample->LoopStart;
902                dimregion->pSampleLoops[0].LoopLength = sample->LoopEnd - sample->LoopStart + 1;
903            }
904    
905            // update ui
906            wSample->set_text(dimregion->pSample->pInfo->Name);
907            eUnityNote.set_ptr(&dimregion->UnityNote);
908            eFineTune.set_ptr(&dimregion->FineTune);
909            eSampleLoopEnabled.set_active(dimregion->SampleLoops);
910            updateLoopElements();
911    
912            sample_ref_changed_signal.emit(oldref, sample);
913            // currently commented because we're sending a similar signal in MainWindow::on_sample_label_drop_drag_data_received()
914            //dimreg_changed_signal.emit(dimregion);
915            return true;
916        }
917        return false;
918    }
919    
920    sigc::signal<void, gig::DimensionRegion*> DimRegionEdit::signal_dimreg_to_be_changed() {
921        return dimreg_to_be_changed_signal;
922    }
923    
924    sigc::signal<void, gig::DimensionRegion*> DimRegionEdit::signal_dimreg_changed() {
925        return dimreg_changed_signal;
926    }
927    
928    sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/> DimRegionEdit::signal_sample_ref_changed() {
929        return sample_ref_changed_signal;
930    }

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

  ViewVC Help
Powered by ViewVC