WIP
This commit is contained in:
parent
0207dc9507
commit
16772b7e3b
|
@ -124,6 +124,17 @@ public:
|
|||
log_create();
|
||||
}
|
||||
|
||||
Control_Point ( const Control_Point &rhs )
|
||||
{
|
||||
_offset = rhs._offset;
|
||||
_y = rhs._y;
|
||||
}
|
||||
|
||||
Track_Widget *clone ( const Track_Widget *r )
|
||||
{
|
||||
return new Control_Point( *(Control_Point*)r );
|
||||
}
|
||||
|
||||
~Control_Point ( )
|
||||
{
|
||||
// if ( _label ) delete[] _label;
|
||||
|
|
|
@ -107,6 +107,12 @@ Region::Region ( const Region & rhs )
|
|||
log_create();
|
||||
}
|
||||
|
||||
Track_Widget *
|
||||
Region::clone ( const Track_Widget *r )
|
||||
{
|
||||
return new Region( *(Region*)r );
|
||||
}
|
||||
|
||||
/* */
|
||||
Region::Region ( Audio_File *c )
|
||||
{
|
||||
|
|
|
@ -171,7 +171,7 @@ class Region : public Region_Base
|
|||
init();
|
||||
}
|
||||
|
||||
bool current ( void ) const { return this == Track::belowmouse(); }
|
||||
bool current ( void ) const { return this == belowmouse(); }
|
||||
|
||||
public:
|
||||
|
||||
|
@ -185,6 +185,9 @@ public:
|
|||
return (Loggable *)r;
|
||||
}
|
||||
|
||||
|
||||
Track_Widget *clone ( const Track_Widget *r );
|
||||
|
||||
~Region ( )
|
||||
{
|
||||
log_destroy();
|
||||
|
|
|
@ -123,6 +123,17 @@ public:
|
|||
log_create();
|
||||
}
|
||||
|
||||
Tempo_Point ( const Tempo_Point &rhs )
|
||||
{
|
||||
_offset = rhs._offset;
|
||||
_tempo = rhs._tempo;
|
||||
}
|
||||
|
||||
Track_Widget *clone ( const Track_Widget *r )
|
||||
{
|
||||
return new Tempo_Point( *(Tempo_Point*)r );
|
||||
}
|
||||
|
||||
~Tempo_Point ( )
|
||||
{
|
||||
if ( _label ) delete[] _label;
|
||||
|
|
|
@ -27,6 +27,12 @@ struct time_sig
|
|||
int beats_per_bar;
|
||||
int beat_type;
|
||||
|
||||
time_sig ( )
|
||||
{
|
||||
beats_per_bar = 0;
|
||||
beat_type = 0;
|
||||
}
|
||||
|
||||
time_sig ( int bpb, int note )
|
||||
{
|
||||
beats_per_bar = bpb;
|
||||
|
@ -118,7 +124,6 @@ protected:
|
|||
}
|
||||
|
||||
|
||||
|
||||
public:
|
||||
|
||||
/* for loggable */
|
||||
|
@ -140,6 +145,17 @@ public:
|
|||
log_create();
|
||||
}
|
||||
|
||||
Time_Point ( const Time_Point &rhs )
|
||||
{
|
||||
_offset = rhs._offset;
|
||||
_time = rhs._time;
|
||||
}
|
||||
|
||||
Track_Widget *clone ( const Track_Widget *r )
|
||||
{
|
||||
return new Time_Point( *(Time_Point*)r );
|
||||
}
|
||||
|
||||
~Time_Point ( )
|
||||
{
|
||||
if ( _label ) delete[] _label;
|
||||
|
|
|
@ -26,8 +26,6 @@
|
|||
|
||||
|
||||
queue <Track_Widget *> Track::_delete_queue;
|
||||
Track_Widget *Track::_pushed = NULL;
|
||||
Track_Widget *Track::_belowmouse = NULL;
|
||||
|
||||
Track::Track ( int X, int Y, int W, int H ) : Fl_Widget( X, Y, W, H )
|
||||
{
|
||||
|
@ -87,11 +85,11 @@ Track::draw ( void )
|
|||
fl_clip_box( x(), y(), w(), h(), X, Y, W, H );
|
||||
|
||||
|
||||
if ( pushed() && pushed()->track() == this )
|
||||
if ( Track_Widget::pushed() && Track_Widget::pushed()->track() == this )
|
||||
{
|
||||
/* make sure the pushed widget is above all others */
|
||||
remove( pushed() );
|
||||
add( pushed() );
|
||||
/* make sure the Track_Widget::pushed widget is above all others */
|
||||
remove( Track_Widget::pushed() );
|
||||
add( Track_Widget::pushed() );
|
||||
}
|
||||
|
||||
int xfades = 0;
|
||||
|
@ -338,9 +336,9 @@ Track::handle ( int m )
|
|||
{
|
||||
case FL_DND_ENTER:
|
||||
printf( "enter\n" );
|
||||
if ( pushed() && pushed()->track()->class_name() == class_name() )
|
||||
if ( Track_Widget::pushed() && Track_Widget::pushed()->track()->class_name() == class_name() )
|
||||
{
|
||||
add( pushed() );
|
||||
add( Track_Widget::pushed() );
|
||||
redraw();
|
||||
}
|
||||
case FL_DND_LEAVE:
|
||||
|
@ -349,11 +347,11 @@ Track::handle ( int m )
|
|||
{
|
||||
Track_Widget *r = event_widget();
|
||||
|
||||
if ( r != belowmouse() )
|
||||
if ( r != Track_Widget::belowmouse() )
|
||||
{
|
||||
if ( belowmouse() )
|
||||
belowmouse()->handle( FL_LEAVE );
|
||||
_belowmouse = r;
|
||||
if ( Track_Widget::belowmouse() )
|
||||
Track_Widget::belowmouse()->handle( FL_LEAVE );
|
||||
Track_Widget::belowmouse( r );
|
||||
|
||||
if ( r )
|
||||
r->handle( FL_ENTER );
|
||||
|
@ -363,17 +361,24 @@ Track::handle ( int m )
|
|||
}
|
||||
default:
|
||||
{
|
||||
Track_Widget *r = pushed() ? pushed() : event_widget();
|
||||
Track_Widget *r = Track_Widget::pushed() ? Track_Widget::pushed() : event_widget();
|
||||
|
||||
if ( r )
|
||||
{
|
||||
int retval = r->dispatch( m );
|
||||
|
||||
if ( retval && m == FL_PUSH )
|
||||
_pushed = r;
|
||||
{
|
||||
Track_Widget::original( r );
|
||||
Track_Widget::pushed( r->clone( r ) );
|
||||
}
|
||||
|
||||
if ( retval && m == FL_RELEASE )
|
||||
_pushed = NULL;
|
||||
{
|
||||
/* FIXME: copy here */
|
||||
Track_Widget::pushed( NULL );
|
||||
Track_Widget::original( NULL );
|
||||
}
|
||||
|
||||
Loggable::block_start();
|
||||
|
||||
|
@ -384,12 +389,12 @@ Track::handle ( int m )
|
|||
_delete_queue.pop();
|
||||
|
||||
|
||||
if ( pushed() == t )
|
||||
_pushed = NULL;
|
||||
if ( belowmouse() == t )
|
||||
if ( Track_Widget::pushed() == t )
|
||||
Track_Widget::pushed( NULL );
|
||||
if ( Track_Widget::belowmouse() == t )
|
||||
{
|
||||
belowmouse()->handle( FL_LEAVE );
|
||||
_belowmouse = NULL;
|
||||
Track_Widget::belowmouse()->handle( FL_LEAVE );
|
||||
Track_Widget::belowmouse( NULL );
|
||||
}
|
||||
|
||||
delete t;
|
||||
|
|
|
@ -46,8 +46,6 @@ class Track : public Fl_Widget, public Loggable
|
|||
char *_name;
|
||||
|
||||
static queue <Track_Widget *> _delete_queue;
|
||||
static Track_Widget *_pushed;
|
||||
static Track_Widget *_belowmouse;
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -91,9 +89,6 @@ public:
|
|||
Track ( int X, int Y, int W, int H );
|
||||
virtual ~Track ( );
|
||||
|
||||
static Track_Widget *pushed ( void ) { return _pushed; };
|
||||
static Track_Widget *belowmouse ( void ) { return _belowmouse; };
|
||||
|
||||
const char * name ( void ) const { return _name; }
|
||||
void name ( char *s ) { if ( _name ) free( _name ); _name = s; label( _name ); }
|
||||
|
||||
|
|
|
@ -17,10 +17,21 @@
|
|||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
/*******************************************************************************/
|
||||
|
||||
/* TODO:
|
||||
|
||||
What if we solve the continuous-modification/sync issue by making a
|
||||
copy of the 'pushed' widget, and operating on that instead (hiding
|
||||
the original), then when the widget is released, copy its data into
|
||||
the original?
|
||||
|
||||
*/
|
||||
#include "Track_Widget.H"
|
||||
|
||||
list <Track_Widget *> Track_Widget::_selection;
|
||||
Track_Widget * Track_Widget::_current;
|
||||
Track_Widget * Track_Widget::_current = NULL;
|
||||
Track_Widget * Track_Widget::_pushed = NULL;
|
||||
Track_Widget * Track_Widget::_original = NULL;
|
||||
Track_Widget * Track_Widget::_belowmouse = NULL;
|
||||
|
||||
void
|
||||
Track_Widget::draw_label ( const char *label, Fl_Align align, Fl_Color color )
|
||||
|
|
|
@ -41,8 +41,15 @@ class Track_Widget : public Loggable
|
|||
{
|
||||
|
||||
static list <Track_Widget *> _selection; /* all the widgets making up the selection */
|
||||
|
||||
/* FIXME: is this not the same as /pushed/? */
|
||||
static Track_Widget * _current; /* the widget initiating events that affect the selection */
|
||||
|
||||
/* these are actually managed in the Track classes */
|
||||
static Track_Widget * _pushed; /* the widget receiving drag events (a copy) */
|
||||
static Track_Widget * _original; /* the original of the /pushed/ widget */
|
||||
static Track_Widget * _belowmouse; /* the widget below the mouse cursor */
|
||||
|
||||
protected:
|
||||
|
||||
Track *_track; /* track this region belongs to */
|
||||
|
@ -77,6 +84,15 @@ public:
|
|||
_selection.remove( this );
|
||||
}
|
||||
|
||||
|
||||
Track_Widget ( const Track_Widget &rhs )
|
||||
{
|
||||
_offset = rhs._offset;
|
||||
_track = rhs._track;
|
||||
}
|
||||
|
||||
virtual Track_Widget *clone ( const Track_Widget *r ) = 0;
|
||||
|
||||
bool selected ( void )
|
||||
{
|
||||
return ::find( _selection.begin(), _selection.end(), this ) != _selection.end();
|
||||
|
@ -107,7 +123,17 @@ public:
|
|||
delete _selection.front();
|
||||
}
|
||||
|
||||
static Track_Widget *current ( void ) { return _current; }
|
||||
static Track_Widget *current ( void ) { return Track_Widget::_current; }
|
||||
|
||||
static Track_Widget *pushed ( void ) { return Track_Widget::_pushed; }
|
||||
static Track_Widget *original ( void ) { return Track_Widget::_original; }
|
||||
static Track_Widget *belowmouse ( void ) { return Track_Widget::_belowmouse; }
|
||||
|
||||
static void pushed ( Track_Widget *w ) { Track_Widget::_pushed = w; }
|
||||
static void original ( Track_Widget *w ) { Track_Widget::_original = w; }
|
||||
static void belowmouse ( Track_Widget *w ) { Track_Widget::_belowmouse = w; }
|
||||
|
||||
// static void pushed ( Track_Widget *w ) { Track_Widget::_pushed = w; }
|
||||
|
||||
void
|
||||
offset ( nframes_t where )
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
|
||||
#include "Loggable.H"
|
||||
#include "Track_Header.H"
|
||||
#include "const.h"
|
||||
// #include "const.h"
|
||||
|
||||
Timeline *timeline;
|
||||
|
||||
|
|
Loading…
Reference in New Issue