| @@ -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 ) | |||
| { | |||
| 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: | |||
| /* these aren't used, so don't bother doing lookups for them */ | |||
| return 1; | |||
| @@ -38,11 +38,11 @@ class Track : public Fl_Group | |||
| { | |||
| Track *_next; | |||
| Track *_prev; | |||
| list <Track_Widget *> _widgets; | |||
| char *_name; | |||
| protected: | |||
| list <Track_Widget *> _widgets; | |||
| Track_Widget *event_widget ( void ); | |||
| public: | |||
| @@ -61,13 +61,13 @@ public: | |||
| void prev ( Track *t ) { _prev = t; } | |||
| void next ( Track *t ) { _next = t; } | |||
| void sort ( void ); | |||
| void draw ( void ); | |||
| void remove ( 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 "Track.H" | |||
| #include "Audio_Track.H" | |||
| #include "Timeline.H" | |||
| #include "const.h" | |||
| @@ -133,7 +134,7 @@ main ( int argc, char **argv ) | |||
| 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->box( FL_DOWN_BOX ); | |||
| @@ -159,7 +160,7 @@ main ( int argc, char **argv ) | |||
| 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" ); | |||