/[svn]/gigedit/trunk/src/gigedit/regionchooser.cpp
ViewVC logotype

Diff of /gigedit/trunk/src/gigedit/regionchooser.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1303 by persson, Sun Aug 26 09:29:52 2007 UTC revision 1396 by schoenebeck, Wed Oct 10 15:48:54 2007 UTC
# Line 22  Line 22 
22  #include <gtkmm/stock.h>  #include <gtkmm/stock.h>
23  #include <gtkmm/spinbutton.h>  #include <gtkmm/spinbutton.h>
24  #include <gtkmm/dialog.h>  #include <gtkmm/dialog.h>
 #include <libintl.h>  
25  #include <math.h>  #include <math.h>
26    
27  #define _(String) gettext(String)  #include "global.h"
28    
29  RegionChooser::RegionChooser()  RegionChooser::RegionChooser()
30  {  {
# Line 79  RegionChooser::RegionChooser() Line 78  RegionChooser::RegionChooser()
78      add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK |      add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK |
79                 Gdk::POINTER_MOTION_MASK | Gdk::POINTER_MOTION_HINT_MASK);                 Gdk::POINTER_MOTION_MASK | Gdk::POINTER_MOTION_HINT_MASK);
80    
81      dimensionManager.articulation_changed_signal.connect(      dimensionManager.region_to_be_changed_signal.connect(
82          sigc::mem_fun(*this, &RegionChooser::on_dimension_manager_changed)          region_to_be_changed_signal.make_slot()
83        );
84        dimensionManager.region_changed_signal.connect(
85            region_changed_signal.make_slot()
86        );
87        dimensionManager.region_changed_signal.connect(
88            sigc::hide(
89                sigc::mem_fun(*this, &RegionChooser::on_dimension_manager_changed)
90            )
91      );      );
92  }  }
93    
# Line 250  bool RegionChooser::on_button_release_ev Line 257  bool RegionChooser::on_button_release_ev
257    
258          if (resize.mode == resize.moving_high_limit) {          if (resize.mode == resize.moving_high_limit) {
259              if (resize.region->KeyRange.high != resize.pos - 1) {              if (resize.region->KeyRange.high != resize.pos - 1) {
260                  resize.region->KeyRange.high = resize.pos - 1;                  instrument_struct_to_be_changed_signal.emit(instrument);
261                  instrument_changed();                  resize.region->SetKeyRange(
262                        resize.region->KeyRange.low, // low
263                        resize.pos - 1 // high
264                    );
265                    instrument_changed.emit();
266                    instrument_struct_changed_signal.emit(instrument);
267              }              }
268          } else if (resize.mode == resize.moving_low_limit) {          } else if (resize.mode == resize.moving_low_limit) {
269              if (resize.region->KeyRange.low != resize.pos) {              if (resize.region->KeyRange.low != resize.pos) {
270                  resize.region->KeyRange.low = resize.pos;                  instrument_struct_to_be_changed_signal.emit(instrument);
271                  instrument_changed();                  resize.region->SetKeyRange(
272                        resize.pos, // low
273                        resize.region->KeyRange.high // high
274                    );
275                    instrument_changed.emit();
276                    instrument_struct_changed_signal.emit(instrument);
277              }              }
278          }          }
279    
# Line 269  bool RegionChooser::on_button_release_ev Line 286  bool RegionChooser::on_button_release_ev
286          move.active = false;          move.active = false;
287    
288          if (move.pos) {          if (move.pos) {
289              region->KeyRange.low += move.pos;              instrument_struct_to_be_changed_signal.emit(instrument);
290              region->KeyRange.high += move.pos;              region->SetKeyRange(
291                    region->KeyRange.low  + move.pos,
292              // find the r which is the first one to the right of region                  region->KeyRange.high + move.pos
293              // at its new position              );
294              gig::Region* r;              instrument_struct_changed_signal.emit(instrument);
             gig::Region* prev_region = 0;  
             for (r = instrument->GetFirstRegion() ; r ; r = instrument->GetNextRegion()) {  
                 if (r->KeyRange.low > region->KeyRange.low) break;  
                 prev_region = r;  
             }  
   
             // place region before r if it's not already there  
             if (prev_region != region) {  
                 instrument->MoveRegion(region, r);  
             }  
295          }          }
296    
297          if (is_in_resize_zone(event->x, event->y)) {          if (is_in_resize_zone(event->x, event->y)) {
# Line 608  bool RegionChooser::is_in_resize_zone(do Line 615  bool RegionChooser::is_in_resize_zone(do
615      return false;      return false;
616  }  }
617    
618  sigc::signal<void> RegionChooser::signal_region_selected()  sigc::signal<void>& RegionChooser::signal_region_selected()
619  {  {
620      return region_selected;      return region_selected;
621  }  }
622    
623  sigc::signal<void> RegionChooser::signal_instrument_changed()  sigc::signal<void>& RegionChooser::signal_instrument_changed()
624  {  {
625      return instrument_changed;      return instrument_changed;
626  }  }
# Line 645  void RegionChooser::show_region_properti Line 652  void RegionChooser::show_region_properti
652    
653  void RegionChooser::add_region()  void RegionChooser::add_region()
654  {  {
655      gig::Region* r;      instrument_struct_to_be_changed_signal.emit(instrument);
     for (r = instrument->GetFirstRegion() ; r ; r = instrument->GetNextRegion()) {  
         if (r->KeyRange.low > new_region_pos) break;  
     }  
656    
657      region = instrument->AddRegion();      region = instrument->AddRegion();
658      region->KeyRange.low = region->KeyRange.high = new_region_pos;      region->SetKeyRange(new_region_pos, new_region_pos);
659    
660        instrument_struct_changed_signal.emit(instrument);
661    
     instrument->MoveRegion(region, r);  
662      queue_draw();      queue_draw();
663      region_selected();      region_selected();
664      instrument_changed();      instrument_changed();
# Line 661  void RegionChooser::add_region() Line 666  void RegionChooser::add_region()
666    
667  void RegionChooser::delete_region()  void RegionChooser::delete_region()
668  {  {
669        instrument_struct_to_be_changed_signal.emit(instrument);
670      instrument->DeleteRegion(region);      instrument->DeleteRegion(region);
671        instrument_struct_changed_signal.emit(instrument);
672    
673      region = 0;      region = 0;
674      queue_draw();      queue_draw();
675      region_selected();      region_selected();
# Line 679  void RegionChooser::on_dimension_manager Line 687  void RegionChooser::on_dimension_manager
687      region_selected();      region_selected();
688      instrument_changed();      instrument_changed();
689  }  }
690    
691    sigc::signal<void, gig::Instrument*>& RegionChooser::signal_instrument_struct_to_be_changed() {
692        return instrument_struct_to_be_changed_signal;
693    }
694    
695    sigc::signal<void, gig::Instrument*>& RegionChooser::signal_instrument_struct_changed() {
696        return instrument_struct_changed_signal;
697    }
698    
699    sigc::signal<void, gig::Region*>& RegionChooser::signal_region_to_be_changed() {
700        return region_to_be_changed_signal;
701    }
702    
703    sigc::signal<void, gig::Region*>& RegionChooser::signal_region_changed_signal() {
704        return region_changed_signal;
705    }

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

  ViewVC Help
Powered by ViewVC