4 * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include "awindowgui.h"
24 #include "bcsignals.h"
26 #include "cplayback.h"
28 #include "cwindowgui.h"
29 #include "editpanel.h"
31 #include "edlsession.h"
35 #include "localsession.h"
36 #include "mainclock.h"
39 #include "meterpanel.h"
41 #include "mwindowgui.h"
42 #include "playbackengine.h"
45 #include "trackcanvas.h"
46 #include "transportque.h"
48 #include "manualgoto.h"
52 EditPanel::EditPanel(MWindow *mwindow,
53 BC_WindowBase *subwindow,
59 int use_splice, // Extra buttons
75 this->editing_mode = editing_mode;
76 this->use_editing_mode = use_editing_mode;
77 this->use_keyframe = use_keyframe;
78 this->use_splice = use_splice;
79 this->use_overwrite = use_overwrite;
81 this->use_extract = 0;
82 this->use_copy = use_copy;
83 this->use_paste = use_paste;
84 this->use_undo = use_undo;
85 this->mwindow = mwindow;
86 this->subwindow = subwindow;
87 this->use_fit = use_fit;
88 this->use_labels = use_labels;
89 this->use_locklabels = use_locklabels;
90 this->use_toclip = use_toclip;
91 this->use_meters = use_meters;
92 this->is_mwindow = is_mwindow;
93 this->use_cut = use_cut;
94 this->use_commercial = use_commercial;
108 this->commercial = 0;
111 this->labelbutton = 0;
118 this->meter_panel = 0;
126 EditPanel::~EditPanel()
130 void EditPanel::set_meters(MeterPanel *meter_panel)
132 this->meter_panel = meter_panel;
136 void EditPanel::update()
138 int new_editing_mode = mwindow->edl->session->editing_mode;
139 if(arrow) arrow->update(new_editing_mode == EDITING_ARROW);
140 if(ibeam) ibeam->update(new_editing_mode == EDITING_IBEAM);
141 if(keyframe) keyframe->update(mwindow->edl->session->auto_keyframes);
142 if(locklabels) locklabels->set_value(mwindow->edl->session->labels_follow_edits);
145 //printf("EditPanel::update %d %p %p\n", __LINE__, subwindow, (BC_WindowBase*)mwindow->cwindow->gui);
146 if(subwindow == (BC_WindowBase*)mwindow->cwindow->gui)
148 //printf("EditPanel::update %d %d\n", __LINE__, mwindow->edl->session->cwindow_meter);
149 meters->update(mwindow->edl->session->cwindow_meter);
150 mwindow->cwindow->gui->update_meters();
154 //printf("EditPanel::update %d %d\n", __LINE__, mwindow->edl->session->vwindow_meter);
155 meters->update(mwindow->edl->session->vwindow_meter);
161 int EditPanel::calculate_w(MWindow *mwindow, int use_keyframe, int total_buttons)
164 int button_w = mwindow->theme->get_image_set("ibeam")[0]->get_w();
167 result += button_w + mwindow->theme->toggle_margin;
170 result += button_w * total_buttons;
174 int EditPanel::calculate_h(MWindow *mwindow)
176 return mwindow->theme->get_image_set("ibeam")[0]->get_h();
179 void EditPanel::create_buttons()
187 subwindow->add_subwindow(arrow = new ArrowButton(mwindow, this, x1, y1));
188 x1 += arrow->get_w();
189 subwindow->add_subwindow(ibeam = new IBeamButton(mwindow, this, x1, y1));
190 x1 += ibeam->get_w();
191 x1 += mwindow->theme->toggle_margin;
196 subwindow->add_subwindow(keyframe = new KeyFrameButton(mwindow, this, x1, y1));
197 x1 += keyframe->get_w();
202 subwindow->add_subwindow(locklabels = new LockLabelsButton(mwindow,
205 x1 += locklabels->get_w();
207 if(use_keyframe || use_locklabels)
208 x1 += mwindow->theme->toggle_margin;
211 subwindow->add_subwindow(inpoint = new EditInPoint(mwindow, this, x1, y1));
212 x1 += inpoint->get_w();
213 subwindow->add_subwindow(outpoint = new EditOutPoint(mwindow, this, x1, y1));
214 x1 += outpoint->get_w();
217 subwindow->add_subwindow(splice = new EditSplice(mwindow, this, x1, y1));
218 x1 += splice->get_w();
222 subwindow->add_subwindow(overwrite = new EditOverwrite(mwindow, this, x1, y1));
223 x1 += overwrite->get_w();
227 subwindow->add_subwindow(lift = new EditLift(mwindow, this, x1, y1));
232 subwindow->add_subwindow(extract = new EditExtract(mwindow, this, x1, y1));
233 x1 += extract->get_w();
237 subwindow->add_subwindow(clip = new EditToClip(mwindow, this, x1, y1));
243 subwindow->add_subwindow(cut = new EditCut(mwindow, this, x1, y1));
248 subwindow->add_subwindow(copy = new EditCopy(mwindow, this, x1, y1));
253 subwindow->add_subwindow(paste = new EditPaste(mwindow, this, x1, y1));
254 x1 += paste->get_w();
261 printf("EditPanel::create_objects: meter_panel == 0\n");
263 subwindow->add_subwindow(meters = new MeterShow(mwindow, meter_panel, x1, y1));
264 x1 += meters->get_w();
269 subwindow->add_subwindow(labelbutton = new EditLabelbutton(mwindow,
273 x1 += labelbutton->get_w();
274 subwindow->add_subwindow(prevlabel = new EditPrevLabel(mwindow,
279 x1 += prevlabel->get_w();
280 subwindow->add_subwindow(nextlabel = new EditNextLabel(mwindow,
285 x1 += nextlabel->get_w();
288 // all windows except VWindow since it's only implemented in MWindow.
291 subwindow->add_subwindow(prevedit = new EditPrevEdit(mwindow,
296 x1 += prevedit->get_w();
297 subwindow->add_subwindow(nextedit = new EditNextEdit(mwindow,
302 x1 += nextedit->get_w();
307 subwindow->add_subwindow(fit = new EditFit(mwindow, this, x1, y1));
309 subwindow->add_subwindow(fit_autos = new EditFitAutos(mwindow, this, x1, y1));
310 x1 += fit_autos->get_w();
315 subwindow->add_subwindow(undo = new EditUndo(mwindow, this, x1, y1));
317 subwindow->add_subwindow(redo = new EditRedo(mwindow, this, x1, y1));
321 subwindow->add_subwindow(mangoto = new EditManualGoto(mwindow, this, x1, y1));
322 x1 += mangoto->get_w();
326 subwindow->add_subwindow(commercial = new EditCommercial(mwindow, this, x1, y1));
327 x1 += commercial->get_w();
334 void EditPanel::toggle_label()
336 mwindow->toggle_label(is_mwindow);
339 void EditPanel::prev_label()
341 int shift_down = subwindow->shift_down();
342 int snap = subwindow->ctrl_down() && subwindow->alt_down();
344 int have_mwindow_lock = mwindow->gui->get_window_lock();
345 int have_subwindow_lock =
346 subwindow->get_top_level() == mwindow->gui->get_top_level() ?
347 0 : subwindow->get_window_lock();
348 if(have_mwindow_lock)
349 mwindow->gui->unlock_window();
350 if(have_subwindow_lock)
351 subwindow->unlock_window();
353 mwindow->gui->mbuttons->transport->handle_transport(STOP, 1, 0, 0);
355 if(have_subwindow_lock)
356 subwindow->lock_window("EditPanel::prev_label 1");
358 mwindow->gui->lock_window("EditPanel::prev_label 2");
361 mwindow->snap_left_label();
363 mwindow->prev_label(shift_down);
365 if(!have_mwindow_lock)
366 mwindow->gui->unlock_window();
369 void EditPanel::next_label()
371 int shift_down = subwindow->shift_down();
372 int snap = subwindow->ctrl_down() && subwindow->alt_down();
374 int have_mwindow_lock = mwindow->gui->get_window_lock();
375 int have_subwindow_lock =
376 subwindow->get_top_level() == mwindow->gui->get_top_level() ?
377 0 : subwindow->get_window_lock();
378 if(have_mwindow_lock)
379 mwindow->gui->unlock_window();
380 if(have_subwindow_lock)
381 subwindow->unlock_window();
383 mwindow->gui->mbuttons->transport->handle_transport(STOP, 1, 0, 0);
385 if(have_subwindow_lock)
386 subwindow->lock_window("EditPanel::next_label 1");
388 mwindow->gui->lock_window("EditPanel::next_label 2");
391 mwindow->snap_right_label();
393 mwindow->next_label(shift_down);
395 if(!have_mwindow_lock)
396 mwindow->gui->unlock_window();
401 void EditPanel::prev_edit()
403 int shift_down = subwindow->shift_down();
404 int snap = subwindow->ctrl_down() && subwindow->alt_down();
406 int have_mwindow_lock = mwindow->gui->get_window_lock();
407 int have_subwindow_lock =
408 subwindow->get_top_level() == mwindow->gui->get_top_level() ?
409 0 : subwindow->get_window_lock();
410 if(have_mwindow_lock)
411 mwindow->gui->unlock_window();
412 if(have_subwindow_lock)
413 subwindow->unlock_window();
415 mwindow->gui->mbuttons->transport->handle_transport(STOP, 1, 0, 0);
417 if(have_subwindow_lock)
418 subwindow->lock_window("EditPanel::prev_edit 1");
420 mwindow->gui->lock_window("EditPanel::prev_edit 2");
423 mwindow->snap_left_edit();
425 mwindow->prev_edit_handle(shift_down);
427 if(!have_mwindow_lock)
428 mwindow->gui->unlock_window();
431 void EditPanel::next_edit()
433 int shift_down = subwindow->shift_down();
434 int snap = subwindow->ctrl_down() && subwindow->alt_down();
436 int have_mwindow_lock = mwindow->gui->get_window_lock();
437 int have_subwindow_lock =
438 subwindow->get_top_level() == mwindow->gui->get_top_level() ?
439 0 : subwindow->get_window_lock();
440 if(have_mwindow_lock)
441 mwindow->gui->unlock_window();
442 if(have_subwindow_lock)
443 subwindow->unlock_window();
445 mwindow->gui->mbuttons->transport->handle_transport(STOP, 1, 0, 0);
447 if(have_subwindow_lock)
448 subwindow->lock_window("EditPanel::next_edit 1");
450 mwindow->gui->lock_window("EditPanel::next_edit 2");
453 mwindow->snap_right_edit();
455 mwindow->next_edit_handle(shift_down);
457 if(!have_mwindow_lock)
458 mwindow->gui->unlock_window();
462 double EditPanel::get_position()
464 EDL *edl = mwindow->edl;
465 return !edl ? 0 : edl->local_session->get_selectionstart(1);
468 void EditPanel::set_position(double position)
470 EDL *edl = mwindow->edl;
472 if( position != get_position() ) {
473 if( position < 0 ) position = 0;
474 edl->local_session->set_selectionstart(position);
475 edl->local_session->set_selectionend(position);
476 mwindow->gui->lock_window();
477 mwindow->find_cursor();
478 mwindow->gui->update(1, 1, 1, 1, 1, 1, 0);
479 mwindow->gui->unlock_window();
480 mwindow->cwindow->update(1, 0, 0, 0, 0);
490 void EditPanel::reposition_buttons(int x, int y)
498 arrow->reposition_window(x1, y1);
499 x1 += arrow->get_w();
500 ibeam->reposition_window(x1, y1);
501 x1 += ibeam->get_w();
502 x1 += mwindow->theme->toggle_margin;
507 keyframe->reposition_window(x1, y1);
508 x1 += keyframe->get_w();
513 locklabels->reposition_window(x1,y1);
514 x1 += locklabels->get_w();
517 if(use_keyframe || use_locklabels)
518 x1 += mwindow->theme->toggle_margin;
520 inpoint->reposition_window(x1, y1);
521 x1 += inpoint->get_w();
522 outpoint->reposition_window(x1, y1);
523 x1 += outpoint->get_w();
526 splice->reposition_window(x1, y1);
527 x1 += splice->get_w();
531 overwrite->reposition_window(x1, y1);
532 x1 += overwrite->get_w();
536 lift->reposition_window(x1, y1);
541 extract->reposition_window(x1, y1);
542 x1 += extract->get_w();
546 clip->reposition_window(x1, y1);
551 cut->reposition_window(x1, y1);
556 copy->reposition_window(x1, y1);
561 paste->reposition_window(x1, y1);
562 x1 += paste->get_w();
567 meters->reposition_window(x1, y1);
568 x1 += meters->get_w();
573 labelbutton->reposition_window(x1, y1);
574 x1 += labelbutton->get_w();
575 prevlabel->reposition_window(x1, y1);
576 x1 += prevlabel->get_w();
577 nextlabel->reposition_window(x1, y1);
578 x1 += nextlabel->get_w();
583 prevedit->reposition_window(x1, y1);
584 x1 += prevedit->get_w();
589 nextedit->reposition_window(x1, y1);
590 x1 += nextedit->get_w();
595 fit->reposition_window(x1, y1);
597 fit_autos->reposition_window(x1, y1);
598 x1 += fit_autos->get_w();
603 undo->reposition_window(x1, y1);
605 redo->reposition_window(x1, y1);
609 mangoto->reposition_window(x1, y1);
610 x1 += mangoto->get_w();
615 void EditPanel::create_objects()
620 int EditPanel::get_w()
626 void EditPanel::copy_selection()
631 void EditPanel::splice_selection()
635 void EditPanel::overwrite_selection()
639 void EditPanel::set_inpoint()
641 mwindow->set_inpoint(1);
644 void EditPanel::set_outpoint()
646 mwindow->set_outpoint(1);
649 void EditPanel::clear_inpoint()
651 mwindow->delete_inpoint();
654 void EditPanel::clear_outpoint()
656 mwindow->delete_outpoint();
660 EditInPoint::EditInPoint(MWindow *mwindow, EditPanel *panel, int x, int y)
661 : BC_Button(x, y, mwindow->theme->get_image_set("inbutton"))
663 this->mwindow = mwindow;
665 set_tooltip(_("In point ( [ )"));
667 EditInPoint::~EditInPoint()
670 int EditInPoint::handle_event()
672 panel->set_inpoint();
675 int EditInPoint::keypress_event()
677 if(get_keypress() == '[')
679 panel->set_inpoint();
685 EditOutPoint::EditOutPoint(MWindow *mwindow, EditPanel *panel, int x, int y)
686 : BC_Button(x, y, mwindow->theme->get_image_set("outbutton"))
688 this->mwindow = mwindow;
690 set_tooltip(_("Out point ( ] )"));
692 EditOutPoint::~EditOutPoint()
695 int EditOutPoint::handle_event()
697 panel->set_outpoint();
700 int EditOutPoint::keypress_event()
702 if(get_keypress() == ']')
704 panel->set_outpoint();
711 EditNextLabel::EditNextLabel(MWindow *mwindow,
716 : BC_Button(x, y, mwindow->theme->get_image_set("nextlabel"))
718 this->mwindow = mwindow;
720 this->is_mwindow = is_mwindow;
721 set_tooltip(_("Next label ( ctrl -> )"));
723 EditNextLabel::~EditNextLabel()
726 int EditNextLabel::keypress_event()
728 if( ctrl_down() && get_keypress() == (!alt_down() ? RIGHT : '>') )
729 return handle_event();
732 int EditNextLabel::handle_event()
738 EditPrevLabel::EditPrevLabel(MWindow *mwindow,
743 : BC_Button(x, y, mwindow->theme->get_image_set("prevlabel"))
745 this->mwindow = mwindow;
747 this->is_mwindow = is_mwindow;
748 set_tooltip(_("Previous label ( ctrl <- )"));
750 EditPrevLabel::~EditPrevLabel()
753 int EditPrevLabel::keypress_event()
755 if( ctrl_down() && get_keypress() == (!alt_down() ? LEFT : '<') )
756 return handle_event();
759 int EditPrevLabel::handle_event()
767 EditNextEdit::EditNextEdit(MWindow *mwindow,
772 : BC_Button(x, y, mwindow->theme->get_image_set("nextedit"))
774 this->mwindow = mwindow;
776 this->is_mwindow = is_mwindow;
777 set_tooltip(_("Next edit ( alt -> )"));
779 EditNextEdit::~EditNextEdit()
782 int EditNextEdit::keypress_event()
784 if( alt_down() && get_keypress() == (!ctrl_down() ? RIGHT : '.') )
785 return handle_event();
788 int EditNextEdit::handle_event()
794 EditPrevEdit::EditPrevEdit(MWindow *mwindow,
799 : BC_Button(x, y, mwindow->theme->get_image_set("prevedit"))
801 this->mwindow = mwindow;
803 this->is_mwindow = is_mwindow;
804 set_tooltip(_("Previous edit (alt <- )"));
806 EditPrevEdit::~EditPrevEdit()
809 int EditPrevEdit::keypress_event()
811 if( alt_down() && get_keypress() == (!ctrl_down() ? LEFT : ',') )
812 return handle_event();
815 int EditPrevEdit::handle_event()
823 EditLift::EditLift(MWindow *mwindow, EditPanel *panel, int x, int y)
824 : BC_Button(x, y, mwindow->theme->lift_data)
826 this->mwindow = mwindow;
828 set_tooltip(_("Lift"));
830 EditLift::~EditLift()
833 int EditLift::handle_event()
838 EditOverwrite::EditOverwrite(MWindow *mwindow, EditPanel *panel, int x, int y)
839 : BC_Button(x, y, mwindow->theme->overwrite_data)
841 this->mwindow = mwindow;
843 set_tooltip(_("Overwrite ( b )"));
845 EditOverwrite::~EditOverwrite()
848 int EditOverwrite::handle_event()
850 panel->overwrite_selection();
853 int EditOverwrite::keypress_event()
855 if(get_keypress() == 'b')
863 EditExtract::EditExtract(MWindow *mwindow, EditPanel *panel, int x, int y)
864 : BC_Button(x, y, mwindow->theme->extract_data)
866 this->mwindow = mwindow;
868 set_tooltip(_("Extract"));
870 EditExtract::~EditExtract()
873 int EditExtract::handle_event()
875 // mwindow->extract_selection();
879 EditToClip::EditToClip(MWindow *mwindow, EditPanel *panel, int x, int y)
880 : BC_Button(x, y, mwindow->theme->get_image_set("toclip"))
882 this->mwindow = mwindow;
884 set_tooltip(_("To clip ( i )"));
886 EditToClip::~EditToClip()
889 int EditToClip::handle_event()
895 int EditToClip::keypress_event()
897 if(get_keypress() == 'i' && !alt_down())
905 EditManualGoto::EditManualGoto(MWindow *mwindow, EditPanel *panel, int x, int y)
906 : BC_Button(x, y, mwindow->theme->get_image_set("goto"))
908 this->mwindow = mwindow;
910 mangoto = new ManualGoto(mwindow, panel);
911 set_tooltip(_("Manual goto ( g )"));
913 EditManualGoto::~EditManualGoto()
917 int EditManualGoto::handle_event()
923 int EditManualGoto::keypress_event()
925 if(get_keypress() == 'g')
934 EditSplice::EditSplice(MWindow *mwindow, EditPanel *panel, int x, int y)
935 : BC_Button(x, y, mwindow->theme->splice_data)
937 this->mwindow = mwindow;
939 set_tooltip(_("Splice ( v )"));
941 EditSplice::~EditSplice()
944 int EditSplice::handle_event()
946 panel->splice_selection();
949 int EditSplice::keypress_event()
951 if(get_keypress() == 'v')
959 EditCut::EditCut(MWindow *mwindow, EditPanel *panel, int x, int y)
960 : BC_Button(x, y, mwindow->theme->get_image_set("cut"))
962 this->mwindow = mwindow;
964 set_tooltip(_("Cut ( x )"));
969 int EditCut::keypress_event()
971 if(get_keypress() == 'x')
972 return handle_event();
976 int EditCut::handle_event()
978 int have_mwindow_lock = mwindow->gui->get_window_lock();
979 if(!have_mwindow_lock)
980 mwindow->gui->lock_window("EditCut::handle_event");
984 if(!have_mwindow_lock)
985 mwindow->gui->unlock_window();
989 EditCommercial::EditCommercial(MWindow *mwindow, EditPanel *panel, int x, int y)
990 : BC_Button(x, y, mwindow->theme->get_image_set("commercial"))
992 this->mwindow = mwindow;
994 set_tooltip(_("Commercial ( shift X )"));
996 EditCommercial::~EditCommercial()
999 int EditCommercial::keypress_event()
1001 if(get_keypress() == 'X')
1002 return handle_event();
1006 int EditCommercial::handle_event()
1008 int have_mwindow_lock = mwindow->gui->get_window_lock();
1009 if(have_mwindow_lock)
1010 mwindow->gui->unlock_window();
1011 mwindow->commit_commercial();
1012 if( !mwindow->put_commercial() ) {
1013 mwindow->gui->lock_window("EditCommercial::handle_event 1");
1015 if(!have_mwindow_lock)
1016 mwindow->gui->unlock_window();
1017 mwindow->activate_commercial();
1020 mwindow->undo_commercial();
1021 if(have_mwindow_lock)
1022 mwindow->gui->lock_window("EditCommercial::handle_event 2");
1026 EditCopy::EditCopy(MWindow *mwindow, EditPanel *panel, int x, int y)
1027 : BC_Button(x, y, mwindow->theme->get_image_set("copy"))
1029 this->mwindow = mwindow;
1030 this->panel = panel;
1031 set_tooltip(_("Copy ( c )"));
1033 EditCopy::~EditCopy()
1037 int EditCopy::keypress_event()
1039 if(get_keypress() == 'c')
1040 return handle_event();
1043 int EditCopy::handle_event()
1045 panel->copy_selection();
1049 EditAppend::EditAppend(MWindow *mwindow, EditPanel *panel, int x, int y)
1050 : BC_Button(x, y, mwindow->theme->append_data)
1052 this->mwindow = mwindow;
1053 this->panel = panel;
1054 set_tooltip(_("Append to end of track"));
1056 EditAppend::~EditAppend()
1061 int EditAppend::handle_event()
1067 EditInsert::EditInsert(MWindow *mwindow, EditPanel *panel, int x, int y)
1068 : BC_Button(x, y, mwindow->theme->insert_data)
1070 this->mwindow = mwindow;
1071 this->panel = panel;
1072 set_tooltip(_("Insert before beginning of track"));
1074 EditInsert::~EditInsert()
1079 int EditInsert::handle_event()
1086 EditPaste::EditPaste(MWindow *mwindow, EditPanel *panel, int x, int y)
1087 : BC_Button(x, y, mwindow->theme->get_image_set("paste"))
1089 this->mwindow = mwindow;
1090 this->panel = panel;
1091 set_tooltip(_("Paste ( v )"));
1093 EditPaste::~EditPaste()
1097 int EditPaste::keypress_event()
1099 if(get_keypress() == 'v')
1100 return handle_event();
1103 int EditPaste::handle_event()
1105 int have_mwindow_lock = mwindow->gui->get_window_lock();
1106 if(!have_mwindow_lock)
1107 mwindow->gui->lock_window("EditPaste::handle_event");
1111 if(!have_mwindow_lock)
1112 mwindow->gui->unlock_window();
1118 EditTransition::EditTransition(MWindow *mwindow, EditPanel *panel, int x, int y)
1119 : BC_Button(x, y, mwindow->theme->transition_data)
1121 this->mwindow = mwindow;
1122 this->panel = panel;
1123 set_tooltip(_("Set transition"));
1125 EditTransition::~EditTransition()
1128 int EditTransition::handle_event()
1133 EditPresentation::EditPresentation(MWindow *mwindow, EditPanel *panel, int x, int y)
1134 : BC_Button(x, y, mwindow->theme->presentation_data)
1136 this->mwindow = mwindow;
1137 this->panel = panel;
1138 set_tooltip(_("Set presentation up to current position"));
1140 EditPresentation::~EditPresentation()
1143 int EditPresentation::handle_event()
1148 EditUndo::EditUndo(MWindow *mwindow, EditPanel *panel, int x, int y)
1149 : BC_Button(x, y, mwindow->theme->get_image_set("undo"))
1151 this->mwindow = mwindow;
1152 this->panel = panel;
1153 set_tooltip(_("Undo ( z )"));
1155 EditUndo::~EditUndo()
1158 int EditUndo::keypress_event()
1160 if(get_keypress() == 'z')
1161 return handle_event();
1164 int EditUndo::handle_event()
1166 mwindow->undo_entry(panel->subwindow);
1170 EditRedo::EditRedo(MWindow *mwindow, EditPanel *panel, int x, int y)
1171 : BC_Button(x, y, mwindow->theme->get_image_set("redo"))
1173 this->mwindow = mwindow;
1174 this->panel = panel;
1175 set_tooltip(_("Redo ( shift Z )"));
1177 EditRedo::~EditRedo()
1180 int EditRedo::keypress_event()
1182 if(get_keypress() == 'Z')
1183 return handle_event();
1186 int EditRedo::handle_event()
1188 mwindow->redo_entry(panel->subwindow);
1196 EditLabelbutton::EditLabelbutton(MWindow *mwindow, EditPanel *panel, int x, int y)
1197 : BC_Button(x, y, mwindow->theme->get_image_set("labelbutton"))
1199 this->mwindow = mwindow;
1200 this->panel = panel;
1201 set_tooltip(_("Toggle label at current position ( l )"));
1204 EditLabelbutton::~EditLabelbutton()
1207 int EditLabelbutton::keypress_event()
1209 if(get_keypress() == 'l' && !alt_down())
1210 return handle_event();
1213 int EditLabelbutton::handle_event()
1215 panel->toggle_label();
1225 EditFit::EditFit(MWindow *mwindow, EditPanel *panel, int x, int y)
1226 : BC_Button(x, y, mwindow->theme->get_image_set("fit"))
1228 this->mwindow = mwindow;
1229 this->panel = panel;
1230 set_tooltip(_("Fit selection to display ( f )"));
1235 int EditFit::keypress_event()
1237 if(!alt_down() && get_keypress() == 'f')
1244 int EditFit::handle_event()
1246 mwindow->fit_selection();
1258 EditFitAutos::EditFitAutos(MWindow *mwindow, EditPanel *panel, int x, int y)
1259 : BC_Button(x, y, mwindow->theme->get_image_set("fitautos"))
1261 this->mwindow = mwindow;
1262 this->panel = panel;
1263 set_tooltip(_("Fit all autos to display ( Alt + f )"));
1265 EditFitAutos::~EditFitAutos()
1268 int EditFitAutos::keypress_event()
1270 if(!ctrl_down() && alt_down() && get_keypress() == 'f')
1272 mwindow->fit_autos(1);
1275 if(ctrl_down() && alt_down() && get_keypress() == 'f')
1277 mwindow->fit_autos(0);
1282 int EditFitAutos::handle_event()
1284 mwindow->fit_autos(1);
1300 ArrowButton::ArrowButton(MWindow *mwindow, EditPanel *panel, int x, int y)
1303 mwindow->theme->get_image_set("arrow"),
1304 mwindow->edl->session->editing_mode == EDITING_ARROW,
1310 this->mwindow = mwindow;
1311 this->panel = panel;
1312 set_tooltip(_("Drag and drop editing mode"));
1315 int ArrowButton::handle_event()
1318 panel->ibeam->update(0);
1319 mwindow->set_editing_mode(EDITING_ARROW,
1322 // Nothing after this
1327 IBeamButton::IBeamButton(MWindow *mwindow, EditPanel *panel, int x, int y)
1330 mwindow->theme->get_image_set("ibeam"),
1331 mwindow->edl->session->editing_mode == EDITING_IBEAM,
1337 this->mwindow = mwindow;
1338 this->panel = panel;
1339 set_tooltip(_("Cut and paste editing mode"));
1342 int IBeamButton::handle_event()
1345 panel->arrow->update(0);
1346 mwindow->set_editing_mode(EDITING_IBEAM,
1349 // Nothing after this
1353 KeyFrameButton::KeyFrameButton(MWindow *mwindow, EditPanel *panel, int x, int y)
1356 mwindow->theme->get_image_set("autokeyframe"),
1357 mwindow->edl->session->auto_keyframes,
1363 this->mwindow = mwindow;
1364 this->panel = panel;
1365 set_tooltip(_("Generate keyframes while tweeking"));
1368 int KeyFrameButton::handle_event()
1370 mwindow->set_auto_keyframes(get_value(),
1377 LockLabelsButton::LockLabelsButton(MWindow *mwindow, int x, int y)
1380 mwindow->theme->get_image_set("locklabels"),
1381 mwindow->edl->session->labels_follow_edits,
1387 this->mwindow = mwindow;
1388 set_tooltip(_("Lock labels from moving"));
1391 int LockLabelsButton::handle_event()
1393 mwindow->set_labels_follow_edits(get_value());