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)); |
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) |
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 |
|
|
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); |
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); |
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() |
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 |
} |
} |
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 |
); |
); |
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 |
|
} |