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