From 35fc23bec8a792efddca55a383daa312c88a7025 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Sun, 9 Mar 2008 12:56:17 -0500 Subject: [PATCH] Add an option to add a new take. --- Audio_Track.H | 8 ++++++++ Track.H | 20 ++++++++++++++++++++ Track_Header.C | 13 ++++++++++--- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/Audio_Track.H b/Audio_Track.H index fdc8e39..62ffd85 100644 --- a/Audio_Track.H +++ b/Audio_Track.H @@ -33,6 +33,14 @@ public: { } + + Track * clone_empty ( void ) + { + Audio_Track *t = new Audio_Track( x(), y(), w(), h() ); + + return t; + } + const char *class_name ( void ) { return "Audio_Track"; } int handle ( int m ); diff --git a/Track.H b/Track.H index e479e13..a9ea564 100644 --- a/Track.H +++ b/Track.H @@ -94,6 +94,13 @@ public: log_create(); } +/* const Track & operator= ( const Track & rhs ) */ +/* { */ +/* if ( *this = rhs ) */ +/* return; */ + +/* } */ + virtual ~Track ( ) { /* FIXME: what to do with regions? */ @@ -102,6 +109,9 @@ public: log_destroy(); } + + + static Track_Widget *pushed ( void ) { return _pushed; }; static Track_Widget *belowmouse ( void ) { return _belowmouse; }; @@ -126,6 +136,16 @@ public: Track_Widget * overlaps ( Track_Widget *r ); + virtual Track * clone ( void ) + { + assert( 0 ); + } + + virtual Track * clone_empty ( void ) + { + return NULL; + } + virtual void snap ( Track_Widget *r ); virtual int handle ( int m ); virtual void draw ( void ); diff --git a/Track_Header.C b/Track_Header.C index 66e96aa..be177ff 100644 --- a/Track_Header.C +++ b/Track_Header.C @@ -60,10 +60,14 @@ Track_Header::cb_button ( Fl_Widget *w ) { int v = take_menu->value(); - if ( v == 0 ) + switch ( v ) { - show_all_takes( take_menu->menu()[ v ].value() ); - return; + case 0: /* show all takes */ + show_all_takes( take_menu->menu()[ v ].value() ); + return; + case 1: /* new */ + track( track()->clone_empty() ); + return; } const char *s = take_menu->menu()[ v ].text; @@ -147,7 +151,10 @@ Track_Header::Track_Header ( int X, int Y, int W, int H, const char *L ) : o->color( FL_LIGHT1 ); o->align( FL_ALIGN_LEFT | FL_ALIGN_INSIDE ); o->callback( cb_button, this ); + o->add( "Show all takes", 0, 0, 0, FL_MENU_TOGGLE ); + o->add( "New", 0, 0, 0, FL_MENU_DIVIDER ); + } o->end(); }