Browse Source

Try to use part of FLTK's DND system for inter-track region dragging.

tags/non-daw-v1.1.0
Jonathan Moore Liles 17 years ago
parent
commit
e0e6cb7379
8 changed files with 37 additions and 32 deletions
  1. +12
    -6
      Audio_Track.C
  2. +2
    -0
      Audio_Track.H
  3. +3
    -0
      Control_Track.H
  4. +4
    -6
      Region.C
  5. +0
    -6
      Timeline.C
  6. +12
    -5
      Track.C
  7. +3
    -9
      Track.H
  8. +1
    -0
      Track_Widget.C

+ 12
- 6
Audio_Track.C View File

@@ -55,18 +55,24 @@ Audio_Track::handle ( int m )
{
switch ( m )
{
case FL_DND_DRAG:
case FL_DND_ENTER:
case FL_ENTER:
// dump();
return 1;
case FL_DND_LEAVE:

case FL_DND_DRAG:
return Track::handle( m ) | 1;

/* case FL_DND_ENTER: */
/* case FL_DND_LEAVE: */

case FL_DND_RELEASE:
return 1;

case FL_PASTE:
{
const char *text = Fl::event_text();


if ( ! strcmp( text, "Region" ) )
return 0;

char *file;

if ( ! sscanf( text, "file://%a[^\r\n]\n", &file ) )


+ 2
- 0
Audio_Track.H View File

@@ -33,6 +33,8 @@ public:
{
}

const char *class_name ( void ) { return "Audio_Track"; }

int handle ( int m );
void dump ( void );
void remove_selected ( void );


+ 3
- 0
Control_Track.H View File

@@ -27,11 +27,14 @@ class Control_Track : public Track

public:


Control_Track ( int X, int Y, int W, int H ) : Track( X, Y, W, H )
{
color( fl_darker( FL_GREEN ) );
}

const char *class_name ( void ) { return "Control_Track"; }

void
draw ( void )
{


+ 4
- 6
Region.C View File

@@ -380,16 +380,14 @@ Region::handle ( int m )
{
if ( Y > y() + h() )
{
if ( _track->next() )
if ( Y > _track->next()->y() )
_track->next()->add( this );
Fl::copy( class_name(), strlen( class_name() ), 0 );
Fl::dnd();
}
else
if ( Y < y() )
{
if ( _track->prev() )
if ( Y < _track->prev()->y() + _track->prev()->h() )
_track->prev()->add( this );
Fl::copy( class_name(), strlen( class_name() ), 0 );
Fl::dnd();
}
}



+ 0
- 6
Timeline.C View File

@@ -151,17 +151,11 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi
o->type( Fl_Pack::VERTICAL );
o->spacing( 0 );

Track *l = NULL;
for ( int i = 8; i--; )
{
// Track_Header *t = new Track_Header( 0, 0, W, 75 );
Track_Header *t = new Track_Header( 0, 0, W, 30 );
Track *o = new Audio_Track( 0, 0, 1, 100 );
o->prev( l );
if ( l )
l->next( o );
l = o;
// o->end();

t->track( o );
t->add( new Audio_Track( 0, 0, 1, 100 ) );


+ 12
- 5
Track.C View File

@@ -26,6 +26,7 @@


queue <Track_Widget *> Track::_delete_queue;
Track_Widget *Track::pushed = NULL;

void
Track::sort ( void )
@@ -240,17 +241,23 @@ done:
int
Track::handle ( int m )
{
static Track_Widget *pushed;
// static Track_Widget *pushed;
static Track_Widget *belowmouse;

switch ( m )
{
case FL_ENTER:
case FL_LEAVE:
case FL_DND_ENTER:
printf( "enter\n" );
if ( pushed && pushed->track()->class_name() == class_name() )
{
printf( "%s -> %s\n", pushed->track()->class_name(), class_name() );
add( pushed );
redraw();
}
case FL_DND_LEAVE:
return 1;
case FL_MOVE:
{
/* these aren't used, so don't bother doing lookups for them */
Track_Widget *r = event_widget();

if ( r != belowmouse )
@@ -263,7 +270,7 @@ Track::handle ( int m )
r->handle( FL_ENTER );
}

return 1;
return 0;
}
default:
{


+ 3
- 9
Track.H View File

@@ -38,18 +38,18 @@ class Track_Widget;

class Track : public Fl_Group, public Loggable
{
Track *_next;
Track *_prev;

char *_name;

static queue <Track_Widget *> _delete_queue;
static Track_Widget *pushed;

protected:

list <Track_Widget *> _widgets;
Track_Widget *event_widget ( void );

const char *class_name ( void ) { return "Track"; }
virtual const char *class_name ( void ) { return "Track"; }


void set ( char ** ) { return; }
@@ -83,7 +83,6 @@ public:

Track ( int X, int Y, int W, int H ) : Fl_Group( X, Y, W, H )
{
_next = _prev = NULL;
_name = NULL;

box( FL_DOWN_BOX );
@@ -102,11 +101,6 @@ public:
log_destroy();
}

Track *next ( void ) const { return _next; }
Track *prev ( void ) const { return _prev; }
void prev ( Track *t ) { _prev = t; }
void next ( Track *t ) { _next = t; }

const char * name ( void ) const { return _name; }
void name ( char *s ) { if ( _name ) free( _name ); _name = s; }



+ 1
- 0
Track_Widget.C View File

@@ -169,6 +169,7 @@ Track_Widget::handle ( int m )

return 1;
case FL_DRAG:
case FL_DND_DRAG:
{
if ( ! _drag )
{


Loading…
Cancel
Save