| @@ -25,7 +25,6 @@ | |||||
| #include <FL/Fl_Menu_Item.H> | #include <FL/Fl_Menu_Item.H> | ||||
| #include <stdio.h> | #include <stdio.h> | ||||
| #include "Sequence.H" | #include "Sequence.H" | ||||
| #include "Audio_Region.H" | #include "Audio_Region.H" | ||||
| #include "Timeline.H" | #include "Timeline.H" | ||||
| @@ -210,7 +209,7 @@ Audio_Region::handle ( int m ) | |||||
| int ret; | int ret; | ||||
| if ( Sequence_Region::handle( m ) ) | |||||
| if ( m != FL_RELEASE && Sequence_Region::handle( m ) ) | |||||
| return 1; | return 1; | ||||
| Logger _log( this ); | Logger _log( this ); | ||||
| @@ -361,6 +360,8 @@ Audio_Region::handle ( int m ) | |||||
| copied = false; | copied = false; | ||||
| sequence()->handle_widget_change( _r->start, _r->length ); | |||||
| return 1; | return 1; | ||||
| } | } | ||||
| case FL_DRAG: | case FL_DRAG: | ||||
| @@ -25,6 +25,7 @@ | |||||
| #include "Track.H" | #include "Track.H" | ||||
| #include "Engine/Audio_File.H" // for ::from_file() | #include "Engine/Audio_File.H" // for ::from_file() | ||||
| #include "Transport.H" // for locate() | |||||
| Audio_Sequence::Audio_Sequence ( Track *track ) : Sequence( track ) | Audio_Sequence::Audio_Sequence ( Track *track ) : Sequence( track ) | ||||
| { | { | ||||
| @@ -116,6 +117,18 @@ deurlify ( char *url ) | |||||
| } | } | ||||
| void | |||||
| Audio_Sequence::handle_widget_change ( nframes_t start, nframes_t length ) | |||||
| { | |||||
| /* a region has changed. we may need to rebuffer... */ | |||||
| /* trigger rebuffer */ | |||||
| /* FIXME: we really only need to rebuffer *this* sequence! */ | |||||
| /* FIXME: how does this fit into the selection? */ | |||||
| if ( start > transport->frame || start + length > transport->frame ) | |||||
| transport->locate( transport->frame ); | |||||
| } | |||||
| void | void | ||||
| Audio_Sequence::draw ( void ) | Audio_Sequence::draw ( void ) | ||||
| { | { | ||||
| @@ -39,6 +39,8 @@ protected: | |||||
| } | } | ||||
| void handle_widget_change ( nframes_t start, nframes_t length ); | |||||
| public: | public: | ||||
| LOG_CREATE_FUNC( Audio_Sequence ); | LOG_CREATE_FUNC( Audio_Sequence ); | ||||
| @@ -231,6 +231,7 @@ protected: | |||||
| void log_start ( void ); | void log_start ( void ); | ||||
| void log_end ( void ); | void log_end ( void ); | ||||
| void log_create ( void ) const; | void log_create ( void ) const; | ||||
| void log_destroy ( void ) const; | void log_destroy ( void ) const; | ||||
| @@ -60,8 +60,14 @@ protected: | |||||
| std::list <Sequence_Widget *> _widgets; | std::list <Sequence_Widget *> _widgets; | ||||
| Sequence_Widget *event_widget ( void ); | Sequence_Widget *event_widget ( void ); | ||||
| public: | public: | ||||
| /* child classes should implement this if they need to take | |||||
| special action when a widget is changed/moved/resized. /start/ | |||||
| and /length/ define the affected region */ | |||||
| virtual void handle_widget_change ( nframes_t start, nframes_t length ) { (void)(start + length); } | |||||
| /* welcome to C++ */ | /* welcome to C++ */ | ||||
| LOG_NAME_FUNC( Sequence ); | LOG_NAME_FUNC( Sequence ); | ||||
| @@ -95,8 +95,6 @@ Sequence_Widget::end_drag ( void ) | |||||
| timeline->unlock(); | timeline->unlock(); | ||||
| /* TODO: perhaps trigger rebuffer here? */ | |||||
| delete _r; | delete _r; | ||||
| _r = &_range; | _r = &_range; | ||||