/[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 1265 by persson, Sun Jul 29 13:44:59 2007 UTC revision 1396 by schoenebeck, Wed Oct 10 15:48:54 2007 UTC
# Line 19  Line 19 
19    
20  #include "dimregionedit.h"  #include "dimregionedit.h"
21    
22  #include <libintl.h>  #include "global.h"
 #define _(String) gettext(String)  
23    
24  DimRegionEdit::DimRegionEdit() :  DimRegionEdit::DimRegionEdit() :
25      eEG1PreAttack("Pre-attack", 0, 100, 2),      eEG1PreAttack("Pre-attack", 0, 100, 2),
# Line 499  void DimRegionEdit::addProp(BoolEntry& b Line 498  void DimRegionEdit::addProp(BoolEntry& b
498      table[pageno]->attach(boolentry.widget, 1, 3, rowno, rowno + 1,      table[pageno]->attach(boolentry.widget, 1, 3, rowno, rowno + 1,
499                            Gtk::FILL, Gtk::SHRINK);                            Gtk::FILL, Gtk::SHRINK);
500      rowno++;      rowno++;
501      boolentry.signal_changed_by_user().connect(dimreg_changed_signal.make_slot());      boolentry.signal_changed_by_user().connect(
502            sigc::bind(dimreg_changed_signal.make_slot(), sigc::ref(this->dimregion))
503        );
504  }  }
505    
506  void DimRegionEdit::addProp(BoolEntryPlus6& boolentry)  void DimRegionEdit::addProp(BoolEntryPlus6& boolentry)
# Line 507  void DimRegionEdit::addProp(BoolEntryPlu Line 508  void DimRegionEdit::addProp(BoolEntryPlu
508      table[pageno]->attach(boolentry.widget, 1, 3, rowno, rowno + 1,      table[pageno]->attach(boolentry.widget, 1, 3, rowno, rowno + 1,
509                            Gtk::FILL, Gtk::SHRINK);                            Gtk::FILL, Gtk::SHRINK);
510      rowno++;      rowno++;
511      boolentry.signal_changed_by_user().connect(dimreg_changed_signal.make_slot());      boolentry.signal_changed_by_user().connect(
512            sigc::bind(dimreg_changed_signal.make_slot(), sigc::ref(this->dimregion))
513        );
514  }  }
515    
516  void DimRegionEdit::addProp(LabelWidget& prop)  void DimRegionEdit::addProp(LabelWidget& prop)
# Line 517  void DimRegionEdit::addProp(LabelWidget& Line 520  void DimRegionEdit::addProp(LabelWidget&
520      table[pageno]->attach(prop.widget, 2, 3, rowno, rowno + 1,      table[pageno]->attach(prop.widget, 2, 3, rowno, rowno + 1,
521                            Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK);                            Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK);
522      rowno++;      rowno++;
523      prop.signal_changed_by_user().connect(dimreg_changed_signal.make_slot());      prop.signal_changed_by_user().connect(
524            sigc::bind(dimreg_changed_signal.make_slot(), sigc::ref(this->dimregion))
525        );
526  }  }
527    
528    
# Line 525  void DimRegionEdit::set_dim_region(gig:: Line 530  void DimRegionEdit::set_dim_region(gig::
530  {  {
531      dimregion = d;      dimregion = d;
532    
533        // disconnect connections to old dimregion, to avoid segfaults
534        connection_eVCFCutoffController.disconnect();
535        connection_eVCFVelocityCurve.disconnect();
536        connection_eVCFVelocityScale.disconnect();
537        connection_eVCFVelocityDynamicRange.disconnect();
538        connection_eVelocityResponseCurve.disconnect();
539        connection_eVelocityResponseDepth.disconnect();
540        connection_eVelocityResponseCurveScaling.disconnect();
541        connection_eReleaseVelocityResponseCurve.disconnect();
542        connection_eReleaseVelocityResponseDepth.disconnect();
543        connection_eGain.disconnect();
544    
545      set_sensitive(d);      set_sensitive(d);
546      if (!d) return;      if (!d) return;
547    
# Line 576  void DimRegionEdit::set_dim_region(gig:: Line 593  void DimRegionEdit::set_dim_region(gig::
593      eVCFEnabled.set_ptr(&d->VCFEnabled);      eVCFEnabled.set_ptr(&d->VCFEnabled);
594      eVCFType.set_ptr(&d->VCFType);      eVCFType.set_ptr(&d->VCFType);
595      eVCFCutoffController.set_ptr(&d->VCFCutoffController);      eVCFCutoffController.set_ptr(&d->VCFCutoffController);
596        connection_eVCFCutoffController =
597            eVCFCutoffController.signal_value_changed().connect(
598                sigc::mem_fun(d, &gig::DimensionRegion::SetVCFCutoffController)
599            );
600      eVCFCutoffControllerInvert.set_ptr(&d->VCFCutoffControllerInvert);      eVCFCutoffControllerInvert.set_ptr(&d->VCFCutoffControllerInvert);
601      eVCFCutoff.set_ptr(&d->VCFCutoff);      eVCFCutoff.set_ptr(&d->VCFCutoff);
602      eVCFVelocityCurve.set_ptr(&d->VCFVelocityCurve);      eVCFVelocityCurve.set_ptr(&d->VCFVelocityCurve);
603        connection_eVCFVelocityCurve =
604            eVCFVelocityCurve.signal_value_changed().connect(
605                sigc::mem_fun(d, &gig::DimensionRegion::SetVCFVelocityCurve)
606            );
607      eVCFVelocityScale.set_ptr(&d->VCFVelocityScale);      eVCFVelocityScale.set_ptr(&d->VCFVelocityScale);
608        connection_eVCFVelocityScale =
609            eVCFVelocityScale.signal_value_changed().connect(
610                sigc::mem_fun(d, &gig::DimensionRegion::SetVCFVelocityScale)
611            );
612      eVCFVelocityDynamicRange.set_ptr(&d->VCFVelocityDynamicRange);      eVCFVelocityDynamicRange.set_ptr(&d->VCFVelocityDynamicRange);
613        connection_eVCFVelocityDynamicRange =
614            eVCFVelocityDynamicRange.signal_value_changed().connect(
615                sigc::mem_fun(d, &gig::DimensionRegion::SetVCFVelocityDynamicRange)
616            );
617      eVCFResonance.set_ptr(&d->VCFResonance);      eVCFResonance.set_ptr(&d->VCFResonance);
618      eVCFResonanceDynamic.set_ptr(&d->VCFResonanceDynamic);      eVCFResonanceDynamic.set_ptr(&d->VCFResonanceDynamic);
619      eVCFResonanceController.set_ptr(&d->VCFResonanceController);      eVCFResonanceController.set_ptr(&d->VCFResonanceController);
620      eVCFKeyboardTracking.set_ptr(&d->VCFKeyboardTracking);      eVCFKeyboardTracking.set_ptr(&d->VCFKeyboardTracking);
621      eVCFKeyboardTrackingBreakpoint.set_ptr(&d->VCFKeyboardTrackingBreakpoint);      eVCFKeyboardTrackingBreakpoint.set_ptr(&d->VCFKeyboardTrackingBreakpoint);
622      eVelocityResponseCurve.set_ptr(&d->VelocityResponseCurve);      eVelocityResponseCurve.set_ptr(&d->VelocityResponseCurve);
623        connection_eVelocityResponseCurve =
624            eVelocityResponseCurve.signal_value_changed().connect(
625                sigc::mem_fun(d, &gig::DimensionRegion::SetVelocityResponseCurve)
626            );
627      eVelocityResponseDepth.set_ptr(&d->VelocityResponseDepth);      eVelocityResponseDepth.set_ptr(&d->VelocityResponseDepth);
628        connection_eVelocityResponseDepth =
629            eVelocityResponseDepth.signal_value_changed().connect(
630                sigc::mem_fun(d, &gig::DimensionRegion::SetVelocityResponseDepth)
631            );
632      eVelocityResponseCurveScaling.set_ptr(&d->VelocityResponseCurveScaling);      eVelocityResponseCurveScaling.set_ptr(&d->VelocityResponseCurveScaling);
633        connection_eVelocityResponseCurveScaling =
634            eVelocityResponseCurveScaling.signal_value_changed().connect(
635                sigc::mem_fun(d, &gig::DimensionRegion::SetVelocityResponseCurveScaling)
636            );
637      eReleaseVelocityResponseCurve.set_ptr(&d->ReleaseVelocityResponseCurve);      eReleaseVelocityResponseCurve.set_ptr(&d->ReleaseVelocityResponseCurve);
638        connection_eReleaseVelocityResponseCurve =
639            eReleaseVelocityResponseCurve.signal_value_changed().connect(
640                sigc::mem_fun(d, &gig::DimensionRegion::SetReleaseVelocityResponseCurve)
641            );
642      eReleaseVelocityResponseDepth.set_ptr(&d->ReleaseVelocityResponseDepth);      eReleaseVelocityResponseDepth.set_ptr(&d->ReleaseVelocityResponseDepth);
643        connection_eReleaseVelocityResponseDepth =
644            eReleaseVelocityResponseDepth.signal_value_changed().connect(
645                sigc::mem_fun(d, &gig::DimensionRegion::SetReleaseVelocityResponseDepth)
646            );
647      eReleaseTriggerDecay.set_ptr(&d->ReleaseTriggerDecay);      eReleaseTriggerDecay.set_ptr(&d->ReleaseTriggerDecay);
648    
649      eCrossfade_in_start.set_ptr(0);      eCrossfade_in_start.set_ptr(0);
# Line 616  void DimRegionEdit::set_dim_region(gig:: Line 669  void DimRegionEdit::set_dim_region(gig::
669      eUnityNote.set_ptr(&d->UnityNote);      eUnityNote.set_ptr(&d->UnityNote);
670      eFineTune.set_ptr(&d->FineTune);      eFineTune.set_ptr(&d->FineTune);
671      eGain.set_ptr(&d->Gain);      eGain.set_ptr(&d->Gain);
672        connection_eGain =
673            eGain.signal_value_changed().connect(
674                sigc::mem_fun(d, &gig::DimensionRegion::SetGain)
675            );
676      eGainPlus6.set_ptr(&d->Gain);      eGainPlus6.set_ptr(&d->Gain);
677    
678      eSampleLoopEnabled.set_active(d->SampleLoops);      eSampleLoopEnabled.set_active(d->SampleLoops);
# Line 791  void DimRegionEdit::loop_enabled_toggled Line 848  void DimRegionEdit::loop_enabled_toggled
848              loop.LoopStart  = 0;              loop.LoopStart  = 0;
849              loop.LoopLength =              loop.LoopLength =
850                  (dimregion->pSample) ? dimregion->pSample->GetSize() : 0;                  (dimregion->pSample) ? dimregion->pSample->GetSize() : 0;
851                dimreg_to_be_changed_signal.emit(dimregion);
852              dimregion->AddSampleLoop(&loop);              dimregion->AddSampleLoop(&loop);
853              dimreg_changed_signal();              dimreg_changed_signal.emit(dimregion);
854          }          }
855      } else {      } else {
856          if (dimregion->SampleLoops) {          if (dimregion->SampleLoops) {
857                dimreg_to_be_changed_signal.emit(dimregion);
858              // delete ALL existing sample loops              // delete ALL existing sample loops
859              while (dimregion->SampleLoops) {              while (dimregion->SampleLoops) {
860                  dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);                  dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);
861              }              }
862              dimreg_changed_signal();              dimreg_changed_signal.emit(dimregion);
863          }          }
864      }      }
865      updateLoopElements();      updateLoopElements();
# Line 812  void DimRegionEdit::updateLoopElements() Line 871  void DimRegionEdit::updateLoopElements()
871      eSampleLoopStart.set_sensitive(active);      eSampleLoopStart.set_sensitive(active);
872      eSampleLoopLength.set_sensitive(active);      eSampleLoopLength.set_sensitive(active);
873      eSampleLoopType.set_sensitive(active);      eSampleLoopType.set_sensitive(active);
874      eSampleLoopInfinite.set_sensitive(active);      eSampleLoopInfinite.set_sensitive(active && dimregion && dimregion->pSample);
875      eSampleLoopStart.set_ptr(0);      eSampleLoopStart.set_ptr(0);
876      eSampleLoopLength.set_ptr(0);      eSampleLoopLength.set_ptr(0);
877      eSampleLoopPlayCount.set_ptr(0);      eSampleLoopPlayCount.set_ptr(0);
# Line 853  void DimRegionEdit::updateLoopElements() Line 912  void DimRegionEdit::updateLoopElements()
912    
913  void DimRegionEdit::loop_infinite_toggled() {  void DimRegionEdit::loop_infinite_toggled() {
914      eSampleLoopPlayCount.set_sensitive(      eSampleLoopPlayCount.set_sensitive(
915            dimregion && dimregion->pSample &&
916          !eSampleLoopInfinite.get_active() &&          !eSampleLoopInfinite.get_active() &&
917           eSampleLoopEnabled.get_active()           eSampleLoopEnabled.get_active()
918      );      );
# Line 865  void DimRegionEdit::loop_infinite_toggle Line 925  void DimRegionEdit::loop_infinite_toggle
925  bool DimRegionEdit::set_sample(gig::Sample* sample)  bool DimRegionEdit::set_sample(gig::Sample* sample)
926  {  {
927      if (dimregion) {      if (dimregion) {
928            //TODO: we should better move the code from MainWindow::on_sample_label_drop_drag_data_received() here
929    
930            // currently commented because we're sending a similar signal in MainWindow::on_sample_label_drop_drag_data_received()
931            //dimreg_to_be_changed_signal.emit(dimregion);
932    
933            gig::Sample* oldref = dimregion->pSample;
934          dimregion->pSample = sample;          dimregion->pSample = sample;
935    
936          // copy sample information from Sample to DimensionRegion          // copy sample information from Sample to DimensionRegion
# Line 894  bool DimRegionEdit::set_sample(gig::Samp Line 960  bool DimRegionEdit::set_sample(gig::Samp
960          eSampleLoopEnabled.set_active(dimregion->SampleLoops);          eSampleLoopEnabled.set_active(dimregion->SampleLoops);
961          updateLoopElements();          updateLoopElements();
962    
963          dimreg_changed_signal();          sample_ref_changed_signal.emit(oldref, sample);
964            // currently commented because we're sending a similar signal in MainWindow::on_sample_label_drop_drag_data_received()
965            //dimreg_changed_signal.emit(dimregion);
966          return true;          return true;
967      }      }
968      return false;      return false;
969  }  }
970    
971    sigc::signal<void, gig::DimensionRegion*>& DimRegionEdit::signal_dimreg_to_be_changed() {
972        return dimreg_to_be_changed_signal;
973    }
974    
975    sigc::signal<void, gig::DimensionRegion*>& DimRegionEdit::signal_dimreg_changed() {
976        return dimreg_changed_signal;
977    }
978    
979    sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/>& DimRegionEdit::signal_sample_ref_changed() {
980        return sample_ref_changed_signal;
981    }

Legend:
Removed from v.1265  
changed lines
  Added in v.1396

  ViewVC Help
Powered by ViewVC