| @@ -34,7 +34,7 @@ decl {\#include <FL/Fl.H>} {} | |||||
| decl {extern char *user_config_dir;} {global | decl {extern char *user_config_dir;} {global | ||||
| } | } | ||||
| class TLE {open | |||||
| class TLE {open selected | |||||
| } { | } { | ||||
| decl {Fl_Color system_colors[3];} {public | decl {Fl_Color system_colors[3];} {public | ||||
| } | } | ||||
| @@ -114,7 +114,7 @@ free( path );} {} | |||||
| label {Non-DAW - Timeline} open | label {Non-DAW - Timeline} open | ||||
| xywh {577 94 1024 768} type Double resizable xclass {Non-DAW} visible | xywh {577 94 1024 768} type Double resizable xclass {Non-DAW} visible | ||||
| } { | } { | ||||
| Fl_Menu_Bar menubar {open | |||||
| Fl_Menu_Bar menubar { | |||||
| xywh {0 0 1024 25} | xywh {0 0 1024 25} | ||||
| } { | } { | ||||
| Submenu {} { | Submenu {} { | ||||
| @@ -158,7 +158,7 @@ Loggable::compact();} | |||||
| printf( "dropped %d buffers\\n", engine->dropped() ); | printf( "dropped %d buffers\\n", engine->dropped() ); | ||||
| exit( 0 );} selected | |||||
| exit( 0 );} | |||||
| xywh {40 40 40 25} shortcut 0x40071 | xywh {40 40 40 25} shortcut 0x40071 | ||||
| } | } | ||||
| } | } | ||||
| @@ -72,9 +72,18 @@ Tempo_Point::~Tempo_Point ( ) | |||||
| } | } | ||||
| int | int | ||||
| Tempo_Point::handle ( int m ) | Tempo_Point::handle ( int m ) | ||||
| { | { | ||||
| if ( m == FL_PUSH && Fl::event_button3() && ! ( Fl::event_state() & ( FL_ALT | FL_CTRL | FL_SHIFT ) ) ) | |||||
| { | |||||
| float t = _tempo; | |||||
| edit( &t ); | |||||
| tempo( t ); | |||||
| return 0; | |||||
| } | |||||
| int r = Sequence_Widget::handle( m ); | int r = Sequence_Widget::handle( m ); | ||||
| if ( m == FL_RELEASE ) | if ( m == FL_RELEASE ) | ||||
| @@ -84,3 +93,73 @@ Tempo_Point::handle ( int m ) | |||||
| } | } | ||||
| return r; | return r; | ||||
| } | } | ||||
| #include <FL/Fl_Float_Input.H> | |||||
| #include <FL/Fl_Menu_Window.H> | |||||
| class Tempo_Point_Editor : public Fl_Menu_Window | |||||
| { | |||||
| float *_tempo; | |||||
| Fl_Float_Input *_fi; | |||||
| bool _sucess; | |||||
| public: | |||||
| Tempo_Point_Editor ( int X, int Y, float *tempo ) : Fl_Menu_Window( X, Y, 75, 58, "Edit Tempo" ) | |||||
| { | |||||
| _sucess = false; | |||||
| _tempo = tempo; | |||||
| set_modal(); | |||||
| Fl_Float_Input *fi = _fi = new Fl_Float_Input( 12, 0 + 24, 50, 24, "Tempo:" ); | |||||
| fi->align( FL_ALIGN_TOP ); | |||||
| fi->when( FL_WHEN_ENTER_KEY ); | |||||
| fi->callback( &Tempo_Point_Editor::enter_cb, (void*)this ); | |||||
| char pat[10]; | |||||
| snprintf( pat, sizeof( pat ), "%.1f", *tempo ); | |||||
| fi->value( pat ); | |||||
| end(); | |||||
| show(); | |||||
| while ( shown() ) | |||||
| Fl::wait(); | |||||
| } | |||||
| static void | |||||
| enter_cb ( Fl_Widget *w, void *v ) | |||||
| { | |||||
| ((Tempo_Point_Editor*)v)->enter_cb(); | |||||
| } | |||||
| void | |||||
| enter_cb ( void ) | |||||
| { | |||||
| sscanf( _fi->value(), "%f", _tempo ); | |||||
| _sucess = true; | |||||
| hide(); | |||||
| } | |||||
| bool | |||||
| sucess ( void ) | |||||
| { | |||||
| return _sucess; | |||||
| } | |||||
| }; | |||||
| bool | |||||
| Tempo_Point::edit ( float *tempo ) | |||||
| { | |||||
| Tempo_Point_Editor ti( Fl::event_x(), Fl::event_y(), tempo ); | |||||
| return ti.sucess(); | |||||
| } | |||||
| @@ -48,6 +48,8 @@ protected: | |||||
| public: | public: | ||||
| static bool edit ( float *tempo ); | |||||
| LOG_CREATE_FUNC( Tempo_Point ); | LOG_CREATE_FUNC( Tempo_Point ); | ||||
| Tempo_Point ( nframes_t when, float bpm ); | Tempo_Point ( nframes_t when, float bpm ); | ||||
| @@ -69,7 +71,7 @@ public: | |||||
| float tempo ( void ) const | float tempo ( void ) const | ||||
| { return _tempo; } | { return _tempo; } | ||||
| void tempo ( float v ) | void tempo ( float v ) | ||||
| { _tempo = v; } | |||||
| { if ( v != _tempo ) { _tempo = v; _make_label(); timeline->redraw(); } } | |||||
| int handle ( int m ); | int handle ( int m ); | ||||
| }; | }; | ||||
| @@ -69,4 +69,33 @@ public: | |||||
| sort(); | sort(); | ||||
| } | } | ||||
| int | |||||
| handle ( int m ) | |||||
| { | |||||
| int r = Sequence::handle( m ); | |||||
| if ( r ) | |||||
| return r; | |||||
| switch ( m ) | |||||
| { | |||||
| case FL_PUSH: | |||||
| if ( Fl::event_button1() ) | |||||
| { | |||||
| static float t = 120.0f; | |||||
| if ( Tempo_Point::edit( &t ) ) | |||||
| { | |||||
| add( new Tempo_Point( timeline->x_to_offset( Fl::event_x() ), t ) ); | |||||
| timeline->redraw(); | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| default: | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| }; | }; | ||||