@@ -0,0 +1,113 @@ | |||
/*******************************************************************************/ | |||
/* 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. */ | |||
/*******************************************************************************/ | |||
#include "Control_Point.H" | |||
Control_Point::Control_Point ( Sequence *t, nframes_t when, float y ) | |||
{ | |||
_track = t; | |||
_y = y; | |||
_r->offset = when; | |||
_box_color = FL_WHITE; | |||
log_create(); | |||
} | |||
Control_Point::Control_Point ( const Control_Point &rhs ) | |||
{ | |||
_r->offset = rhs._r->offset; | |||
_y = rhs._y; | |||
} | |||
void | |||
Control_Point::get ( Log_Entry &e ) const | |||
{ | |||
Sequence_Point::get( e ); | |||
e.add( ":y", _y ); | |||
} | |||
void | |||
Control_Point::set ( Log_Entry &e ) | |||
{ | |||
for ( int i = 0; i < e.size(); ++i ) | |||
{ | |||
const char *s, *v; | |||
e.get( i, &s, &v ); | |||
if ( ! strcmp( s, ":y" ) ) | |||
_y = atof( v ); | |||
timeline->redraw(); | |||
// _make_label(); | |||
} | |||
Sequence_Point::set( e ); | |||
} | |||
void | |||
Control_Point::draw_box ( void ) | |||
{ | |||
if ( selected() ) | |||
{ | |||
fl_color( selection_color() ); | |||
fl_pie( x(), y(), w(), h(), 0, 360 ); | |||
} | |||
fl_color( box_color() ); | |||
fl_arc( x(), y(), w(), h(), 0, 360 ); | |||
} | |||
int | |||
Control_Point::handle ( int m ) | |||
{ | |||
int r = Sequence_Widget::handle( m ); | |||
switch ( m ) | |||
{ | |||
case FL_RELEASE: | |||
_track->sort(); | |||
redraw(); | |||
break; | |||
case FL_DRAG: | |||
{ | |||
track()->sort(); | |||
if ( selected() ) | |||
break; | |||
int Y = Fl::event_y() - parent()->y(); | |||
if ( Y >= 0 && Y < parent()->h() ) | |||
{ | |||
_y = (float)Y / parent()->h(); | |||
redraw(); | |||
} | |||
break; | |||
} | |||
} | |||
return r; | |||
} |
@@ -17,6 +17,7 @@ | |||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
/*******************************************************************************/ | |||
#pragma once | |||
#include "Sequence_Point.H" | |||
@@ -25,86 +26,33 @@ class Control_Point : public Sequence_Point | |||
{ | |||
float _y; | |||
/* void */ | |||
/* _make_label ( void ) */ | |||
/* { */ | |||
/* if ( ! _label ) */ | |||
/* _label = new char[40]; */ | |||
/* snprintf( _label, 40, "%.1f", _y ); */ | |||
/* } */ | |||
protected: | |||
// const char *class_name ( void ) { return "Control_Point"; } | |||
virtual void get ( Log_Entry &e ) const | |||
{ | |||
Sequence_Point::get( e ); | |||
e.add( ":y", _y ); | |||
} | |||
void | |||
set ( Log_Entry &e ) | |||
{ | |||
for ( int i = 0; i < e.size(); ++i ) | |||
{ | |||
const char *s, *v; | |||
e.get( i, &s, &v ); | |||
if ( ! strcmp( s, ":y" ) ) | |||
_y = atof( v ); | |||
timeline->redraw(); | |||
// _make_label(); | |||
} | |||
Sequence_Point::set( e ); | |||
} | |||
Control_Point ( ) | |||
{ | |||
_box_color = FL_WHITE; | |||
} | |||
virtual void get ( Log_Entry &e ) const; | |||
virtual void set ( Log_Entry &e ); | |||
public: | |||
/* Sequence_Widget * */ | |||
/* clone ( const Sequence_Widget *r ) */ | |||
/* { */ | |||
/* return new Control_Point( *(Control_Point*)r ); */ | |||
/* } */ | |||
/* for loggable */ | |||
LOG_CREATE_FUNC( Control_Point ); | |||
Control_Point ( Sequence *t, nframes_t when, float y ) | |||
{ | |||
_track = t; | |||
_y = y; | |||
_r->offset = when; | |||
_box_color = FL_WHITE; | |||
log_create(); | |||
} | |||
Control_Point ( const Control_Point &rhs ) | |||
{ | |||
_r->offset = rhs._r->offset; | |||
_y = rhs._y; | |||
} | |||
Sequence_Widget *clone ( const Sequence_Widget *r ) | |||
{ | |||
return new Control_Point( *(Control_Point*)r ); | |||
} | |||
Control_Point ( Sequence *t, nframes_t when, float y ); | |||
Control_Point ( const Control_Point &rhs ); | |||
~Control_Point ( ) | |||
{ | |||
// if ( _label ) delete[] _label; | |||
log_destroy(); | |||
} | |||
@@ -113,48 +61,12 @@ public: | |||
/* only for playback thread */ | |||
nframes_t when ( void ) const { return _range.offset; } | |||
int | |||
handle ( int m ) | |||
{ | |||
int r = Sequence_Widget::handle( m ); | |||
switch ( m ) | |||
{ | |||
case FL_RELEASE: | |||
_track->sort(); | |||
redraw(); | |||
break; | |||
case FL_DRAG: | |||
{ | |||
track()->sort(); | |||
if ( selected() ) | |||
break; | |||
int Y = Fl::event_y() - parent()->y(); | |||
if ( Y >= 0 && Y < parent()->h() ) | |||
{ | |||
_y = (float)Y / parent()->h(); | |||
redraw(); | |||
} | |||
break; | |||
} | |||
} | |||
return r; | |||
} | |||
/* int x ( void ) const { return line_x(); } */ | |||
int abs_w ( void ) const { return 6; } | |||
// int w ( void ) const { return 6; } | |||
int y ( void ) const { return parent()->y() + ((float)parent()->h() * _y); } | |||
int h ( void ) const { return 6; } | |||
virtual void draw_box ( void ); | |||
virtual int handle ( int m ); | |||
}; |
@@ -12,6 +12,7 @@ SRCS= \ | |||
Track.C \ | |||
Sequence_Widget.C \ | |||
Sequence_Point.C \ | |||
Control_Point.C \ | |||
Tempo_Point.C \ | |||
Time_Point.C \ | |||
Peaks.C \ | |||
@@ -155,8 +155,8 @@ public: | |||
static Fl_Boxtype _box; | |||
static Fl_Color _selection_color; | |||
static Fl_Color selection_color ( void ) { return _selection_color; } | |||
static void selection_color ( Fl_Color v ) { _selection_color = v; } | |||
Fl_Color selection_color ( void ) const { return _selection_color; } | |||
void selection_color ( Fl_Color v ) { _selection_color = v; } | |||
enum trim_e { NO, LEFT, RIGHT }; | |||
void trim ( enum trim_e t, int X ); | |||
@@ -31,6 +31,7 @@ list <Sequence_Widget *> Sequence_Widget::_selection; | |||
Sequence_Widget * Sequence_Widget::_current = NULL; | |||
Sequence_Widget * Sequence_Widget::_pushed = NULL; | |||
Sequence_Widget * Sequence_Widget::_belowmouse = NULL; | |||
Fl_Color Sequence_Widget::_selection_color = FL_MAGENTA; | |||
void | |||
Sequence_Widget::draw_label ( const char *label, Fl_Align align, Fl_Color color ) | |||
@@ -61,6 +61,9 @@ class Sequence_Widget : public Loggable | |||
static Sequence_Widget * _original; /* the original of the /pushed/ widget */ | |||
static Sequence_Widget * _belowmouse; /* the widget below the mouse cursor */ | |||
static Fl_Color _selection_color; | |||
/* can't have this */ | |||
Sequence_Widget ( const Sequence_Widget &rhs ); | |||
@@ -306,9 +309,11 @@ public: | |||
int abs_x ( void ) const { return timeline->ts_to_x( _r->offset ); } | |||
virtual int abs_w ( void ) const { return timeline->ts_to_x( _r->end - _r->start ); } | |||
Fl_Color color ( void ) { return _color; } | |||
Fl_Color color ( void ) const { return _color; } | |||
void color ( Fl_Color v ) { _color = v; } | |||
Fl_Color box_color ( void ) { return _box_color; } | |||
Fl_Color box_color ( void ) const { return _box_color; } | |||
virtual Fl_Color selection_color ( void ) const { return _selection_color; } | |||
virtual void selection_color ( Fl_Color v ) { _selection_color = v; } | |||
Sequence * track ( void ) const { return _track; } | |||
void track ( Sequence *t ) { _track = t; } | |||