LabelGUI::~LabelGUI()
{
+ if( timebar->drag_label == this )
+ timebar->drag_label = 0;
}
int LabelGUI::get_y(MWindow *mwindow, TimeBar *timebar)
int LabelGUI::button_press_event()
{
- int result = 0;
+ int result = test_drag_label(1);
if( this->is_event_win() && get_buttonpress() == 3 ) {
if( label ) {
return result;
}
+int LabelGUI::button_release_event()
+{
+ int ret = BC_Toggle::button_release_event();
+ test_drag_label(0);
+ return ret;
+}
+
+int LabelGUI::test_drag_label(int press)
+{
+ if( is_event_win() && get_buttonpress() == 1 ) {
+ switch( timebar->current_operation ) {
+ case TIMEBAR_NONE:
+ if( press && get_value() ) {
+ timebar->current_operation = TIMEBAR_DRAG_LABEL;
+ timebar->drag_label = this;
+ set_cursor(MOVE_CURSOR, 0, 0);
+ mwindow->undo->update_undo_before(_("drag label"), this);
+ return 1;
+ }
+ break;
+ case TIMEBAR_DRAG_LABEL:
+ if( !press ) {
+ timebar->current_operation = TIMEBAR_NONE;
+ set_cursor(ARROW_CURSOR, 0, 0);
+ mwindow->undo->update_undo_after(_("drag label"), LOAD_TIMEBAR);
+ }
+ break;
+ }
+ }
+ return 0;
+}
+
int LabelGUI::handle_event()
{
timebar->select_label(position);
//printf("TimeBar::TimeBar %d %d %d %d\n", x, y, w, h);
this->gui = gui;
this->mwindow = mwindow;
+ this->drag_label = 0;
label_edit = new LabelEdit(mwindow, mwindow->awindow, 0);
pane = 0;
highlighted = 0;
int out_x = position_to_pixel(out_position);
CLAMP(in_x, 0, get_w());
CLAMP(out_x, 0, get_w());
- set_color(GREEN);
+ set_color(mwindow->theme->inout_highlight_color);
int lw = 5;
set_line_width(lw);
set_inverse();
result = move_preview(redraw);
break;
+ case TIMEBAR_DRAG_LABEL:
+ if( drag_label ) {
+ int pixel = get_relative_cursor_x();
+ double position = pixel_to_position(pixel);
+ if( drag_label->label )
+ drag_label->label->position = position;
+ else if( drag_label == in_point ) {
+ EDL *edl = get_edl();
+ edl->local_session->set_inpoint(position);
+ }
+ else if( drag_label == out_point ) {
+ EDL *edl = get_edl();
+ edl->local_session->set_outpoint(position);
+ }
+ }
+ highlighted = 1;
+ redraw = 1;
+ break;
+
default:
if( cursor_above() ) {
highlighted = 1;
#define TIMEBAR_DRAG_LEFT 2
#define TIMEBAR_DRAG_RIGHT 3
#define TIMEBAR_DRAG_CENTER 4
+#define TIMEBAR_DRAG_LABEL 5
class LabelGUI : public BC_Toggle
{
virtual int handle_event();
static int get_y(MWindow *mwindow, TimeBar *timebar);
void reposition(int flush = 1);
+ int test_drag_label(int press);
Label *label;
int button_press_event();
+ int button_release_event();
MWindow *mwindow;
VWindowGUI *gui;
TimeBar *timebar;
// Operation started by a buttonpress
int current_operation;
+ LabelGUI *drag_label;
private:
int get_preview_pixels(int &x1, int &x2);