/[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 1262 by persson, Sun Jul 22 15:07:08 2007 UTC revision 1322 by schoenebeck, Tue Sep 4 11:04:56 2007 UTC
# 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(dimreg_changed_signal.make_slot());      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)  void DimRegionEdit::addProp(BoolEntryPlus6& boolentry)
# Line 507  void DimRegionEdit::addProp(BoolEntryPlu Line 509  void DimRegionEdit::addProp(BoolEntryPlu
509      table[pageno]->attach(boolentry.widget, 1, 3, rowno, rowno + 1,      table[pageno]->attach(boolentry.widget, 1, 3, rowno, rowno + 1,
510                            Gtk::FILL, Gtk::SHRINK);                            Gtk::FILL, Gtk::SHRINK);
511      rowno++;      rowno++;
512      boolentry.signal_changed_by_user().connect(dimreg_changed_signal.make_slot());      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 517  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(dimreg_changed_signal.make_slot());      prop.signal_changed_by_user().connect(
525            sigc::bind(dimreg_changed_signal.make_slot(), sigc::ref(this->dimregion))
526        );
527  }  }
528    
529    
# Line 791  void DimRegionEdit::loop_enabled_toggled Line 797  void DimRegionEdit::loop_enabled_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();              dimreg_changed_signal.emit(dimregion);
803          }          }
804      } else {      } else {
805          if (dimregion->SampleLoops) {          if (dimregion->SampleLoops) {
806                dimreg_to_be_changed_signal.emit(dimregion);
807              // delete ALL existing sample loops              // delete ALL existing sample loops
808              while (dimregion->SampleLoops) {              while (dimregion->SampleLoops) {
809                  dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);                  dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]);
810              }              }
811              dimreg_changed_signal();              dimreg_changed_signal.emit(dimregion);
812          }          }
813      }      }
814      updateLoopElements();      updateLoopElements();
# Line 812  void DimRegionEdit::updateLoopElements() Line 820  void DimRegionEdit::updateLoopElements()
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);      eSampleLoopStart.set_ptr(0);
825      eSampleLoopLength.set_ptr(0);      eSampleLoopLength.set_ptr(0);
826      eSampleLoopPlayCount.set_ptr(0);      eSampleLoopPlayCount.set_ptr(0);
# Line 834  void DimRegionEdit::updateLoopElements() Line 842  void DimRegionEdit::updateLoopElements()
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          );          );
# Line 853  void DimRegionEdit::updateLoopElements() Line 861  void DimRegionEdit::updateLoopElements()
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      );      );
# Line 861  void DimRegionEdit::loop_infinite_toggle Line 870  void DimRegionEdit::loop_infinite_toggle
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    }

Legend:
Removed from v.1262  
changed lines
  Added in v.1322

  ViewVC Help
Powered by ViewVC