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 |
|
|
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); |
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); |
628 |
updateLoopElements(); |
updateLoopElements(); |
629 |
|
|
630 |
VCFEnabled_toggled(); |
VCFEnabled_toggled(); |
|
|
|
|
update_gui = true; |
|
631 |
} |
} |
632 |
|
|
633 |
void DimRegionEdit::VCFEnabled_toggled() |
void DimRegionEdit::VCFEnabled_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 |
} |
} |
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 |
); |
); |
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 |
|
} |