Allow the user to add/edit tempo points.
This commit is contained in:
parent
595100be8e
commit
61f3d56611
|
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue