/[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 1359 by schoenebeck, Sun Sep 30 18:30: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(
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 515  void DimRegionEdit::set_dim_region(gig:: Line 531  void DimRegionEdit::set_dim_region(gig::
531  {  {
532      dimregion = d;      dimregion = d;
533    
534        // disconnect connections to old dimregion, to avoid segfaults
535        connection_eVCFCutoffController.disconnect();
536        connection_eVCFVelocityCurve.disconnect();
537        connection_eVCFVelocityScale.disconnect();
538        connection_eVCFVelocityDynamicRange.disconnect();
539        connection_eVelocityResponseCurve.disconnect();
540        connection_eVelocityResponseDepth.disconnect();
541        connection_eVelocityResponseCurveScaling.disconnect();
542        connection_eReleaseVelocityResponseCurve.disconnect();
543        connection_eReleaseVelocityResponseDepth.disconnect();
544        connection_eGain.disconnect();
545    
546      set_sensitive(d);      set_sensitive(d);
547      if (!d) return;      if (!d) return;
548    
     update_gui = false;  
549      wSample->set_text(d->pSample ? d->pSample->pInfo->Name.c_str() : "NULL");      wSample->set_text(d->pSample ? d->pSample->pInfo->Name.c_str() : "NULL");
550      eEG1PreAttack.set_ptr(&d->EG1PreAttack);      eEG1PreAttack.set_ptr(&d->EG1PreAttack);
551      eEG1Attack.set_ptr(&d->EG1Attack);      eEG1Attack.set_ptr(&d->EG1Attack);
# Line 567  void DimRegionEdit::set_dim_region(gig:: Line 594  void DimRegionEdit::set_dim_region(gig::
594      eVCFEnabled.set_ptr(&d->VCFEnabled);      eVCFEnabled.set_ptr(&d->VCFEnabled);
595      eVCFType.set_ptr(&d->VCFType);      eVCFType.set_ptr(&d->VCFType);
596      eVCFCutoffController.set_ptr(&d->VCFCutoffController);      eVCFCutoffController.set_ptr(&d->VCFCutoffController);
597        connection_eVCFCutoffController =
598            eVCFCutoffController.signal_value_changed().connect(
599                sigc::mem_fun(d, &gig::DimensionRegion::SetVCFCutoffController)
600            );
601      eVCFCutoffControllerInvert.set_ptr(&d->VCFCutoffControllerInvert);      eVCFCutoffControllerInvert.set_ptr(&d->VCFCutoffControllerInvert);
602      eVCFCutoff.set_ptr(&d->VCFCutoff);      eVCFCutoff.set_ptr(&d->VCFCutoff);
603      eVCFVelocityCurve.set_ptr(&d->VCFVelocityCurve);      eVCFVelocityCurve.set_ptr(&d->VCFVelocityCurve);
604        connection_eVCFVelocityCurve =
605            eVCFVelocityCurve.signal_value_changed().connect(
606                sigc::mem_fun(d, &gig::DimensionRegion::SetVCFVelocityCurve)
607            );
608      eVCFVelocityScale.set_ptr(&d->VCFVelocityScale);      eVCFVelocityScale.set_ptr(&d->VCFVelocityScale);
609        connection_eVCFVelocityScale =
610            eVCFVelocityScale.signal_value_changed().connect(
611                sigc::mem_fun(d, &gig::DimensionRegion::SetVCFVelocityScale)
612            );
613      eVCFVelocityDynamicRange.set_ptr(&d->VCFVelocityDynamicRange);      eVCFVelocityDynamicRange.set_ptr(&d->VCFVelocityDynamicRange);
614        connection_eVCFVelocityDynamicRange =
615            eVCFVelocityDynamicRange.signal_value_changed().connect(
616                sigc::mem_fun(d, &gig::DimensionRegion::SetVCFVelocityDynamicRange)
617            );
618      eVCFResonance.set_ptr(&d->VCFResonance);      eVCFResonance.set_ptr(&d->VCFResonance);
619      eVCFResonanceDynamic.set_ptr(&d->VCFResonanceDynamic);      eVCFResonanceDynamic.set_ptr(&d->VCFResonanceDynamic);
620      eVCFResonanceController.set_ptr(&d->VCFResonanceController);      eVCFResonanceController.set_ptr(&d->VCFResonanceController);
621      eVCFKeyboardTracking.set_ptr(&d->VCFKeyboardTracking);      eVCFKeyboardTracking.set_ptr(&d->VCFKeyboardTracking);
622      eVCFKeyboardTrackingBreakpoint.set_ptr(&d->VCFKeyboardTrackingBreakpoint);      eVCFKeyboardTrackingBreakpoint.set_ptr(&d->VCFKeyboardTrackingBreakpoint);
623      eVelocityResponseCurve.set_ptr(&d->VelocityResponseCurve);      eVelocityResponseCurve.set_ptr(&d->VelocityResponseCurve);
624        connection_eVelocityResponseCurve =
625            eVelocityResponseCurve.signal_value_changed().connect(
626                sigc::mem_fun(d, &gig::DimensionRegion::SetVelocityResponseCurve)
627            );
628      eVelocityResponseDepth.set_ptr(&d->VelocityResponseDepth);      eVelocityResponseDepth.set_ptr(&d->VelocityResponseDepth);
629        connection_eVelocityResponseDepth =
630            eVelocityResponseDepth.signal_value_changed().connect(
631                sigc::mem_fun(d, &gig::DimensionRegion::SetVelocityResponseDepth)
632            );
633      eVelocityResponseCurveScaling.set_ptr(&d->VelocityResponseCurveScaling);      eVelocityResponseCurveScaling.set_ptr(&d->VelocityResponseCurveScaling);
634        connection_eVelocityResponseCurveScaling =
635            eVelocityResponseCurveScaling.signal_value_changed().connect(
636                sigc::mem_fun(d, &gig::DimensionRegion::SetVelocityResponseCurveScaling)
637            );
638      eReleaseVelocityResponseCurve.set_ptr(&d->ReleaseVelocityResponseCurve);      eReleaseVelocityResponseCurve.set_ptr(&d->ReleaseVelocityResponseCurve);
639        connection_eReleaseVelocityResponseCurve =
640            eReleaseVelocityResponseCurve.signal_value_changed().connect(
641                sigc::mem_fun(d, &gig::DimensionRegion::SetReleaseVelocityResponseCurve)
642            );
643      eReleaseVelocityResponseDepth.set_ptr(&d->ReleaseVelocityResponseDepth);      eReleaseVelocityResponseDepth.set_ptr(&d->ReleaseVelocityResponseDepth);
644        connection_eReleaseVelocityResponseDepth =
645            eReleaseVelocityResponseDepth.signal_value_changed().connect(
646                sigc::mem_fun(d, &gig::DimensionRegion::SetReleaseVelocityResponseDepth)
647            );
648      eReleaseTriggerDecay.set_ptr(&d->ReleaseTriggerDecay);      eReleaseTriggerDecay.set_ptr(&d->ReleaseTriggerDecay);
649    
650        eCrossfade_in_start.set_ptr(0);
651        eCrossfade_in_end.set_ptr(0);
652        eCrossfade_out_start.set_ptr(0);
653        eCrossfade_out_end.set_ptr(0);
654      eCrossfade_in_start.set_ptr(&d->Crossfade.in_start);      eCrossfade_in_start.set_ptr(&d->Crossfade.in_start);
655      eCrossfade_in_end.set_ptr(&d->Crossfade.in_end);      eCrossfade_in_end.set_ptr(&d->Crossfade.in_end);
656      eCrossfade_out_start.set_ptr(&d->Crossfade.out_start);      eCrossfade_out_start.set_ptr(&d->Crossfade.out_start);
657      eCrossfade_out_end.set_ptr(&d->Crossfade.out_end);      eCrossfade_out_end.set_ptr(&d->Crossfade.out_end);
658    
659      ePitchTrack.set_ptr(&d->PitchTrack);      ePitchTrack.set_ptr(&d->PitchTrack);
660      eDimensionBypass.set_ptr(&d->DimensionBypass);      eDimensionBypass.set_ptr(&d->DimensionBypass);
661      ePan.set_ptr(&d->Pan);      ePan.set_ptr(&d->Pan);
# Line 601  void DimRegionEdit::set_dim_region(gig:: Line 670  void DimRegionEdit::set_dim_region(gig::
670      eUnityNote.set_ptr(&d->UnityNote);      eUnityNote.set_ptr(&d->UnityNote);
671      eFineTune.set_ptr(&d->FineTune);      eFineTune.set_ptr(&d->FineTune);
672      eGain.set_ptr(&d->Gain);      eGain.set_ptr(&d->Gain);
673        connection_eGain =
674            eGain.signal_value_changed().connect(
675                sigc::mem_fun(d, &gig::DimensionRegion::SetGain)
676            );
677      eGainPlus6.set_ptr(&d->Gain);      eGainPlus6.set_ptr(&d->Gain);
678    
679      eSampleLoopEnabled.set_active(d->SampleLoops);      eSampleLoopEnabled.set_active(d->SampleLoops);
680      updateLoopElements();      updateLoopElements();
681    
682      VCFEnabled_toggled();      VCFEnabled_toggled();
   
     update_gui = true;  
683  }  }
684    
685  void DimRegionEdit::VCFEnabled_toggled()  void DimRegionEdit::VCFEnabled_toggled()
# Line 778  void DimRegionEdit::loop_enabled_toggled Line 849  void DimRegionEdit::loop_enabled_toggled
849              loop.LoopStart  = 0;              loop.LoopStart  = 0;
850              loop.LoopLength =              loop.LoopLength =
851                  (dimregion->pSample) ? dimregion->pSample->GetSize() : 0;                  (dimregion->pSample) ? dimregion->pSample->GetSize() : 0;
852                dimreg_to_be_changed_signal.emit(dimregion);
853              dimregion->AddSampleLoop(&loop);              dimregion->AddSampleLoop(&loop);
854                dimreg_changed_signal.emit(dimregion);
855          }          }
856      } else {      } else {
857          // delete ALL existing sample loops          if (dimregion->SampleLoops) {
858          while (dimregion->SampleLoops)              dimreg_to_be_changed_signal.emit(dimregion);
859              dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);              // delete ALL existing sample loops
860                while (dimregion->SampleLoops) {
861                    dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);
862                }
863                dimreg_changed_signal.emit(dimregion);
864            }
865      }      }
866      updateLoopElements();      updateLoopElements();
867  }  }
# Line 794  void DimRegionEdit::updateLoopElements() Line 872  void DimRegionEdit::updateLoopElements()
872      eSampleLoopStart.set_sensitive(active);      eSampleLoopStart.set_sensitive(active);
873      eSampleLoopLength.set_sensitive(active);      eSampleLoopLength.set_sensitive(active);
874      eSampleLoopType.set_sensitive(active);      eSampleLoopType.set_sensitive(active);
875      eSampleLoopInfinite.set_sensitive(active);      eSampleLoopInfinite.set_sensitive(active && dimregion && dimregion->pSample);
876        eSampleLoopStart.set_ptr(0);
877        eSampleLoopLength.set_ptr(0);
878        eSampleLoopPlayCount.set_ptr(0);
879    
880      if (dimregion && dimregion->SampleLoops) {      if (dimregion && dimregion->SampleLoops) {
881          eSampleLoopStart.set_ptr(&dimregion->pSampleLoops[0].LoopStart);          eSampleLoopStart.set_ptr(&dimregion->pSampleLoops[0].LoopStart);
882          eSampleLoopLength.set_ptr(&dimregion->pSampleLoops[0].LoopLength);          eSampleLoopLength.set_ptr(&dimregion->pSampleLoops[0].LoopLength);
883          eSampleLoopType.set_ptr(&dimregion->pSampleLoops[0].LoopType);          eSampleLoopType.set_ptr(&dimregion->pSampleLoops[0].LoopType);
         eSampleLoopPlayCount.set_ptr(  
             (dimregion->pSample) ? &dimregion->pSample->LoopPlayCount : NULL  
         );  
884          eSampleLoopInfinite.set_active(          eSampleLoopInfinite.set_active(
885              dimregion->pSample && !dimregion->pSample->LoopPlayCount              dimregion->pSample && !dimregion->pSample->LoopPlayCount
886          );          );
887            // updated enabled state of loop play count widget
888            loop_infinite_toggled();
889    
890            eSampleLoopPlayCount.set_ptr(
891                (dimregion->pSample) ? &dimregion->pSample->LoopPlayCount : 0
892            );
893    
894          // sample loop shall never be longer than the actual sample size          // sample loop shall never be longer than the actual sample size
895          eSampleLoopStart.set_upper(          eSampleLoopStart.set_upper(
896              (dimregion->pSample)              (dimregion->pSample)
897                  ? dimregion->pSample->GetSize() -                  ? dimregion->pSample->SamplesTotal -
898                    dimregion->pSampleLoops[0].LoopLength                    dimregion->pSampleLoops[0].LoopLength
899                  : 0                  : 0
900          );          );
901          eSampleLoopLength.set_upper(          eSampleLoopLength.set_upper(
902              (dimregion->pSample)              (dimregion->pSample)
903                  ? dimregion->pSample->GetSize() -                  ? dimregion->pSample->SamplesTotal -
904                    dimregion->pSampleLoops[0].LoopStart                    dimregion->pSampleLoops[0].LoopStart
905                  : 0                  : 0
906          );          );
907      } else { // no sample loop(s)      } else { // no sample loop(s)
908          eSampleLoopStart.set_ptr(NULL);          eSampleLoopType.set_ptr(0);
909          eSampleLoopLength.set_ptr(NULL);          // updated enabled state of loop play count widget
910          eSampleLoopType.set_ptr(NULL);          loop_infinite_toggled();
         eSampleLoopPlayCount.set_ptr(NULL);  
911      }      }
     // updated enabled state of loop play count widget  
     loop_infinite_toggled();  
912  }  }
913    
914  void DimRegionEdit::loop_infinite_toggled() {  void DimRegionEdit::loop_infinite_toggled() {
915      eSampleLoopPlayCount.set_sensitive(      eSampleLoopPlayCount.set_sensitive(
916            dimregion && dimregion->pSample &&
917          !eSampleLoopInfinite.get_active() &&          !eSampleLoopInfinite.get_active() &&
918           eSampleLoopEnabled.get_active()           eSampleLoopEnabled.get_active()
919      );      );
# Line 838  void DimRegionEdit::loop_infinite_toggle Line 922  void DimRegionEdit::loop_infinite_toggle
922      else if (!eSampleLoopPlayCount.get_value())      else if (!eSampleLoopPlayCount.get_value())
923          eSampleLoopPlayCount.set_value(1);          eSampleLoopPlayCount.set_value(1);
924  }  }
925    
926    bool DimRegionEdit::set_sample(gig::Sample* sample)
927    {
928        if (dimregion) {
929            //TODO: we should better move the code from MainWindow::on_sample_label_drop_drag_data_received() here
930    
931            // currently commented because we're sending a similar signal in MainWindow::on_sample_label_drop_drag_data_received()
932            //dimreg_to_be_changed_signal.emit(dimregion);
933    
934            gig::Sample* oldref = dimregion->pSample;
935            dimregion->pSample = sample;
936    
937            // copy sample information from Sample to DimensionRegion
938    
939            dimregion->UnityNote = sample->MIDIUnityNote;
940            dimregion->FineTune = sample->FineTune;
941    
942            int loops = sample->Loops ? 1 : 0;
943            while (dimregion->SampleLoops > loops) {
944                dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);
945            }
946            while (dimregion->SampleLoops < sample->Loops) {
947                DLS::sample_loop_t loop;
948                dimregion->AddSampleLoop(&loop);
949            }
950            if (loops) {
951                dimregion->pSampleLoops[0].Size = sizeof(DLS::sample_loop_t);
952                dimregion->pSampleLoops[0].LoopType = sample->LoopType;
953                dimregion->pSampleLoops[0].LoopStart = sample->LoopStart;
954                dimregion->pSampleLoops[0].LoopLength = sample->LoopEnd - sample->LoopStart + 1;
955            }
956    
957            // update ui
958            wSample->set_text(dimregion->pSample->pInfo->Name);
959            eUnityNote.set_ptr(&dimregion->UnityNote);
960            eFineTune.set_ptr(&dimregion->FineTune);
961            eSampleLoopEnabled.set_active(dimregion->SampleLoops);
962            updateLoopElements();
963    
964            sample_ref_changed_signal.emit(oldref, sample);
965            // currently commented because we're sending a similar signal in MainWindow::on_sample_label_drop_drag_data_received()
966            //dimreg_changed_signal.emit(dimregion);
967            return true;
968        }
969        return false;
970    }
971    
972    sigc::signal<void, gig::DimensionRegion*>& DimRegionEdit::signal_dimreg_to_be_changed() {
973        return dimreg_to_be_changed_signal;
974    }
975    
976    sigc::signal<void, gig::DimensionRegion*>& DimRegionEdit::signal_dimreg_changed() {
977        return dimreg_changed_signal;
978    }
979    
980    sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/>& DimRegionEdit::signal_sample_ref_changed() {
981        return sample_ref_changed_signal;
982    }

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

  ViewVC Help
Powered by ViewVC