| @@ -0,0 +1,81 @@ | |||||
| /*******************************************************************************/ | |||||
| /* Copyright (C) 2008 Jonathan Moore Liles */ | |||||
| /* */ | |||||
| /* This program is free software; you can redistribute it and/or modify it */ | |||||
| /* under the terms of the GNU General Public License as published by the */ | |||||
| /* Free Software Foundation; either version 2 of the License, or (at your */ | |||||
| /* option) any later version. */ | |||||
| /* */ | |||||
| /* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||||
| /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||||
| /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||||
| /* more details. */ | |||||
| /* */ | |||||
| /* You should have received a copy of the GNU General Public License along */ | |||||
| /* with This program; see the file COPYING. If not,write to the Free Software */ | |||||
| /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||||
| /*******************************************************************************/ | |||||
| #pragma once | |||||
| #include "Track.H" | |||||
| class Audio_Track : public Track | |||||
| { | |||||
| public: | |||||
| Audio_Track ( int X, int Y, int W, int H ) : Track( X, Y, W, H ) | |||||
| { | |||||
| } | |||||
| /** event handler that supports DND of audio clips */ | |||||
| int | |||||
| handle ( int m ) | |||||
| { | |||||
| switch ( m ) | |||||
| { | |||||
| case FL_DND_DRAG: | |||||
| case FL_DND_ENTER: | |||||
| case FL_ENTER: | |||||
| return 1; | |||||
| case FL_DND_LEAVE: | |||||
| case FL_DND_RELEASE: | |||||
| return 1; | |||||
| case FL_PASTE: | |||||
| { | |||||
| const char *text = Fl::event_text(); | |||||
| char *file; | |||||
| if ( ! sscanf( text, "file://%a[^\r\n]\n", &file ) ) | |||||
| { | |||||
| printf( "invalid drop \"%s\"\n", text ); | |||||
| return 0; | |||||
| } | |||||
| printf( "pasted file \"%s\"\n", file ); | |||||
| Clip *c = Clip::from_file( file ); | |||||
| if ( ! c ) | |||||
| { | |||||
| free( file ); | |||||
| return 0; | |||||
| } | |||||
| Region *r = new Region( c ); | |||||
| r->offset( timeline.x_to_ts( Fl::event_x() ) ); | |||||
| this->add( r ); | |||||
| redraw(); | |||||
| return 1; | |||||
| } | |||||
| default: | |||||
| return Track::handle( m ); | |||||
| } | |||||
| } | |||||
| }; | |||||
| @@ -144,46 +144,6 @@ Track::handle ( int m ) | |||||
| switch ( m ) | switch ( m ) | ||||
| { | { | ||||
| case FL_DND_DRAG: | |||||
| case FL_DND_ENTER: | |||||
| case FL_ENTER: | |||||
| return 1; | |||||
| case FL_DND_LEAVE: | |||||
| case FL_DND_RELEASE: | |||||
| return 1; | |||||
| case FL_PASTE: | |||||
| { | |||||
| const char *text = Fl::event_text(); | |||||
| char *file; | |||||
| if ( ! sscanf( text, "file://%a[^\r\n]\n", &file ) ) | |||||
| { | |||||
| printf( "invalid drop \"%s\"\n", text ); | |||||
| return 0; | |||||
| } | |||||
| printf( "pasted file \"%s\"\n", file ); | |||||
| Clip *c = Clip::from_file( file ); | |||||
| if ( ! c ) | |||||
| { | |||||
| free( file ); | |||||
| return 0; | |||||
| } | |||||
| Region *r = new Region( c ); | |||||
| r->offset( timeline.x_to_ts( Fl::event_x() ) ); | |||||
| // r->position( Fl::event_x(), r->y() ); | |||||
| this->add( r ); | |||||
| redraw(); | |||||
| return 1; | |||||
| } | |||||
| case FL_MOVE: | case FL_MOVE: | ||||
| /* these aren't used, so don't bother doing lookups for them */ | /* these aren't used, so don't bother doing lookups for them */ | ||||
| return 1; | return 1; | ||||
| @@ -38,11 +38,11 @@ class Track : public Fl_Group | |||||
| { | { | ||||
| Track *_next; | Track *_next; | ||||
| Track *_prev; | Track *_prev; | ||||
| list <Track_Widget *> _widgets; | |||||
| char *_name; | char *_name; | ||||
| protected: | |||||
| list <Track_Widget *> _widgets; | |||||
| Track_Widget *event_widget ( void ); | Track_Widget *event_widget ( void ); | ||||
| public: | public: | ||||
| @@ -61,13 +61,13 @@ public: | |||||
| void prev ( Track *t ) { _prev = t; } | void prev ( Track *t ) { _prev = t; } | ||||
| void next ( Track *t ) { _next = t; } | void next ( Track *t ) { _next = t; } | ||||
| void sort ( void ); | |||||
| void draw ( void ); | void draw ( void ); | ||||
| void remove ( Track_Widget *r ); | void remove ( Track_Widget *r ); | ||||
| void add ( Track_Widget *r ); | void add ( Track_Widget *r ); | ||||
| void snap ( Track_Widget *r ); | |||||
| int handle ( int m ); | |||||
| void sort ( void ); | |||||
| virtual void snap ( Track_Widget *r ); | |||||
| virtual int handle ( int m ); | |||||
| }; | }; | ||||
| @@ -37,6 +37,7 @@ | |||||
| #include <string.h> | #include <string.h> | ||||
| #include "Track.H" | #include "Track.H" | ||||
| #include "Audio_Track.H" | |||||
| #include "Timeline.H" | #include "Timeline.H" | ||||
| #include "const.h" | #include "const.h" | ||||
| @@ -133,7 +134,7 @@ main ( int argc, char **argv ) | |||||
| tempo_track->end(); | tempo_track->end(); | ||||
| } | } | ||||
| Track *track1 = new Track( 40, 0, 800, 100 ); | |||||
| Track *track1 = new Audio_Track( 40, 0, 800, 100 ); | |||||
| // pack->type( Fl_Pack::VERTICAL ); | // pack->type( Fl_Pack::VERTICAL ); | ||||
| // pack->box( FL_DOWN_BOX ); | // pack->box( FL_DOWN_BOX ); | ||||
| @@ -159,7 +160,7 @@ main ( int argc, char **argv ) | |||||
| track1->end(); | track1->end(); | ||||
| Track *track2 = new Track( 40, 0, 5000, 100 ); | |||||
| Track *track2 = new Audio_Track( 40, 0, 5000, 100 ); | |||||
| // Region *wave2 = new Region( 0, 0, 350, 100, "bar" ); | // Region *wave2 = new Region( 0, 0, 350, 100, "bar" ); | ||||