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();
332 void EditPanel::stop_transport(const char *lock_msg)
334 int have_subwindow_lock = subwindow->get_window_lock();
335 if( have_subwindow_lock ) subwindow->unlock_window();
336 mwindow->stop_transport();
337 if( have_subwindow_lock ) subwindow->lock_window(lock_msg);
341 void EditPanel::toggle_label()
343 mwindow->toggle_label(is_mwindow);
346 void EditPanel::prev_label(int cut)
348 int shift_down = subwindow->shift_down();
349 int have_mwindow_lock = mwindow->gui->get_window_lock();
350 if( have_mwindow_lock ) mwindow->gui->unlock_window();
352 stop_transport("EditPanel::prev_label 1");
354 mwindow->gui->lock_window("EditPanel::prev_label 2");
356 mwindow->cut_left_label();
358 mwindow->prev_label(shift_down);
359 if( !have_mwindow_lock )
360 mwindow->gui->unlock_window();
363 void EditPanel::next_label(int cut)
365 int shift_down = subwindow->shift_down();
366 int have_mwindow_lock = mwindow->gui->get_window_lock();
367 if( have_mwindow_lock ) mwindow->gui->unlock_window();
369 stop_transport("EditPanel::next_label 1");
371 mwindow->gui->lock_window("EditPanel::next_label 2");
373 mwindow->cut_right_label();
375 mwindow->next_label(shift_down);
376 if( !have_mwindow_lock )
377 mwindow->gui->unlock_window();
382 void EditPanel::prev_edit(int cut)
384 int shift_down = subwindow->shift_down();
385 int have_mwindow_lock = mwindow->gui->get_window_lock();
386 if( have_mwindow_lock ) mwindow->gui->unlock_window();
388 stop_transport("EditPanel::prev_edit 1");
390 mwindow->gui->lock_window("EditPanel::prev_edit 2");
393 mwindow->cut_left_edit();
395 mwindow->prev_edit_handle(shift_down);
397 if( !have_mwindow_lock )
398 mwindow->gui->unlock_window();
401 void EditPanel::next_edit(int cut)
403 int shift_down = subwindow->shift_down();
404 int have_mwindow_lock = mwindow->gui->get_window_lock();
405 if( have_mwindow_lock ) mwindow->gui->unlock_window();
407 stop_transport("EditPanel::next_edit 1");
409 mwindow->gui->lock_window("EditPanel::next_edit 2");
412 mwindow->cut_right_edit();
414 mwindow->next_edit_handle(shift_down);
416 if( !have_mwindow_lock )
417 mwindow->gui->unlock_window();
421 double EditPanel::get_position()
423 EDL *edl = mwindow->edl;
424 return !edl ? 0 : edl->local_session->get_selectionstart(1);
427 void EditPanel::set_position(double position)
429 EDL *edl = mwindow->edl;
431 if( position != get_position() ) {
432 if( position < 0 ) position = 0;
433 edl->local_session->set_selectionstart(position);
434 edl->local_session->set_selectionend(position);
435 mwindow->gui->lock_window();
436 mwindow->find_cursor();
437 mwindow->gui->update(1, 1, 1, 1, 1, 1, 0);
438 mwindow->gui->unlock_window();
439 mwindow->cwindow->update(1, 0, 0, 0, 0);
449 void EditPanel::reposition_buttons(int x, int y)
457 arrow->reposition_window(x1, y1);
458 x1 += arrow->get_w();
459 ibeam->reposition_window(x1, y1);
460 x1 += ibeam->get_w();
461 x1 += mwindow->theme->toggle_margin;
466 keyframe->reposition_window(x1, y1);
467 x1 += keyframe->get_w();
472 locklabels->reposition_window(x1,y1);
473 x1 += locklabels->get_w();
476 if(use_keyframe || use_locklabels)
477 x1 += mwindow->theme->toggle_margin;
479 inpoint->reposition_window(x1, y1);
480 x1 += inpoint->get_w();
481 outpoint->reposition_window(x1, y1);
482 x1 += outpoint->get_w();
485 splice->reposition_window(x1, y1);
486 x1 += splice->get_w();
490 overwrite->reposition_window(x1, y1);
491 x1 += overwrite->get_w();
495 lift->reposition_window(x1, y1);
500 extract->reposition_window(x1, y1);
501 x1 += extract->get_w();
505 clip->reposition_window(x1, y1);
510 cut->reposition_window(x1, y1);
515 copy->reposition_window(x1, y1);
520 paste->reposition_window(x1, y1);
521 x1 += paste->get_w();
526 meters->reposition_window(x1, y1);
527 x1 += meters->get_w();
532 labelbutton->reposition_window(x1, y1);
533 x1 += labelbutton->get_w();
534 prevlabel->reposition_window(x1, y1);
535 x1 += prevlabel->get_w();
536 nextlabel->reposition_window(x1, y1);
537 x1 += nextlabel->get_w();
542 prevedit->reposition_window(x1, y1);
543 x1 += prevedit->get_w();
548 nextedit->reposition_window(x1, y1);
549 x1 += nextedit->get_w();
554 fit->reposition_window(x1, y1);
556 fit_autos->reposition_window(x1, y1);
557 x1 += fit_autos->get_w();
562 undo->reposition_window(x1, y1);
564 redo->reposition_window(x1, y1);
568 mangoto->reposition_window(x1, y1);
569 x1 += mangoto->get_w();
574 void EditPanel::create_objects()
579 int EditPanel::get_w()
585 void EditPanel::copy_selection()
590 void EditPanel::splice_selection()
594 void EditPanel::overwrite_selection()
598 void EditPanel::set_inpoint()
600 mwindow->set_inpoint(1);
603 void EditPanel::set_outpoint()
605 mwindow->set_outpoint(1);
608 void EditPanel::unset_inoutpoint()
610 mwindow->unset_inoutpoint(1);
614 EditInPoint::EditInPoint(MWindow *mwindow, EditPanel *panel, int x, int y)
615 : BC_Button(x, y, mwindow->theme->get_image_set("inbutton"))
617 this->mwindow = mwindow;
619 set_tooltip(_("In point ( [ or < )"));
621 EditInPoint::~EditInPoint()
624 int EditInPoint::handle_event()
626 panel->set_inpoint();
629 int EditInPoint::keypress_event()
631 int key = get_keypress();
634 panel->unset_inoutpoint();
638 else if( !alt_down() ) {
639 if( key == '[' || key == '<' ) {
640 panel->set_inpoint();
647 EditOutPoint::EditOutPoint(MWindow *mwindow, EditPanel *panel, int x, int y)
648 : BC_Button(x, y, mwindow->theme->get_image_set("outbutton"))
650 this->mwindow = mwindow;
652 set_tooltip(_("Out point ( ] or > )"));
654 EditOutPoint::~EditOutPoint()
657 int EditOutPoint::handle_event()
659 panel->set_outpoint();
662 int EditOutPoint::keypress_event()
664 int key = get_keypress();
667 panel->unset_inoutpoint();
671 else if( !alt_down() ) {
672 if( key == ']' || key == '>' ) {
673 panel->set_outpoint();
681 EditNextLabel::EditNextLabel(MWindow *mwindow,
686 : BC_Button(x, y, mwindow->theme->get_image_set("nextlabel"))
688 this->mwindow = mwindow;
690 this->is_mwindow = is_mwindow;
691 set_tooltip(_("Next label ( ctrl -> )"));
693 EditNextLabel::~EditNextLabel()
696 int EditNextLabel::keypress_event()
699 int key = get_keypress();
700 if( (key == RIGHT || key == '.') && !alt_down() ) {
701 panel->next_label(0);
704 if( key == '>' && alt_down() ) {
705 panel->next_label(1);
711 int EditNextLabel::handle_event()
713 int cut = ctrl_down() && alt_down();
714 panel->next_label(cut);
718 EditPrevLabel::EditPrevLabel(MWindow *mwindow,
723 : BC_Button(x, y, mwindow->theme->get_image_set("prevlabel"))
725 this->mwindow = mwindow;
727 this->is_mwindow = is_mwindow;
728 set_tooltip(_("Previous label ( ctrl <- )"));
730 EditPrevLabel::~EditPrevLabel()
733 int EditPrevLabel::keypress_event()
736 int key = get_keypress();
737 if( (key == LEFT || key == ',') && !alt_down() ) {
738 panel->prev_label(0);
741 if( key == '<' && alt_down() ) {
742 panel->prev_label(1);
748 int EditPrevLabel::handle_event()
750 int cut = ctrl_down() && alt_down();
751 panel->prev_label(cut);
757 EditNextEdit::EditNextEdit(MWindow *mwindow,
762 : BC_Button(x, y, mwindow->theme->get_image_set("nextedit"))
764 this->mwindow = mwindow;
766 this->is_mwindow = is_mwindow;
767 set_tooltip(_("Next edit ( alt -> )"));
769 EditNextEdit::~EditNextEdit()
772 int EditNextEdit::keypress_event()
775 int key = get_keypress();
776 if( (key == RIGHT || key == '.') && !ctrl_down() ) {
780 if( key == '.' && ctrl_down() ) {
787 int EditNextEdit::handle_event()
789 int cut = ctrl_down() && alt_down();
790 panel->next_edit(cut);
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()
812 int key = get_keypress();
813 if( (key == LEFT || key == ',') && !ctrl_down() ) {
817 if( key == ',' && ctrl_down() ) {
824 int EditPrevEdit::handle_event()
826 int cut = ctrl_down() && alt_down();
827 panel->prev_edit(cut);
833 EditLift::EditLift(MWindow *mwindow, EditPanel *panel, int x, int y)
834 : BC_Button(x, y, mwindow->theme->lift_data)
836 this->mwindow = mwindow;
838 set_tooltip(_("Lift"));
840 EditLift::~EditLift()
843 int EditLift::handle_event()
848 EditOverwrite::EditOverwrite(MWindow *mwindow, EditPanel *panel, int x, int y)
849 : BC_Button(x, y, mwindow->theme->overwrite_data)
851 this->mwindow = mwindow;
853 set_tooltip(_("Overwrite ( b )"));
855 EditOverwrite::~EditOverwrite()
858 int EditOverwrite::handle_event()
860 panel->overwrite_selection();
863 int EditOverwrite::keypress_event()
865 if(get_keypress() == 'b')
873 EditExtract::EditExtract(MWindow *mwindow, EditPanel *panel, int x, int y)
874 : BC_Button(x, y, mwindow->theme->extract_data)
876 this->mwindow = mwindow;
878 set_tooltip(_("Extract"));
880 EditExtract::~EditExtract()
883 int EditExtract::handle_event()
885 // mwindow->extract_selection();
889 EditToClip::EditToClip(MWindow *mwindow, EditPanel *panel, int x, int y)
890 : BC_Button(x, y, mwindow->theme->get_image_set("toclip"))
892 this->mwindow = mwindow;
894 set_tooltip(_("To clip ( i )"));
896 EditToClip::~EditToClip()
899 int EditToClip::handle_event()
905 int EditToClip::keypress_event()
907 if(get_keypress() == 'i' && !alt_down())
915 EditManualGoto::EditManualGoto(MWindow *mwindow, EditPanel *panel, int x, int y)
916 : BC_Button(x, y, mwindow->theme->get_image_set("goto"))
918 this->mwindow = mwindow;
920 mangoto = new ManualGoto(mwindow, panel);
921 set_tooltip(_("Manual goto ( g )"));
923 EditManualGoto::~EditManualGoto()
927 int EditManualGoto::handle_event()
933 int EditManualGoto::keypress_event()
935 if(get_keypress() == 'g')
944 EditSplice::EditSplice(MWindow *mwindow, EditPanel *panel, int x, int y)
945 : BC_Button(x, y, mwindow->theme->splice_data)
947 this->mwindow = mwindow;
949 set_tooltip(_("Splice ( v )"));
951 EditSplice::~EditSplice()
954 int EditSplice::handle_event()
956 panel->splice_selection();
959 int EditSplice::keypress_event()
961 if(get_keypress() == 'v')
969 EditCut::EditCut(MWindow *mwindow, EditPanel *panel, int x, int y)
970 : BC_Button(x, y, mwindow->theme->get_image_set("cut"))
972 this->mwindow = mwindow;
974 set_tooltip(_("Cut ( x )"));
979 int EditCut::keypress_event()
981 if(get_keypress() == 'x')
982 return handle_event();
986 int EditCut::handle_event()
988 int have_mwindow_lock = mwindow->gui->get_window_lock();
989 if(!have_mwindow_lock)
990 mwindow->gui->lock_window("EditCut::handle_event");
994 if(!have_mwindow_lock)
995 mwindow->gui->unlock_window();
999 EditCommercial::EditCommercial(MWindow *mwindow, EditPanel *panel, int x, int y)
1000 : BC_Button(x, y, mwindow->theme->get_image_set("commercial"))
1002 this->mwindow = mwindow;
1003 this->panel = panel;
1004 set_tooltip(_("Commercial ( shift X )"));
1006 EditCommercial::~EditCommercial()
1009 int EditCommercial::keypress_event()
1011 if(get_keypress() == 'X')
1012 return handle_event();
1016 int EditCommercial::handle_event()
1018 int have_mwindow_lock = mwindow->gui->get_window_lock();
1019 if(have_mwindow_lock)
1020 mwindow->gui->unlock_window();
1021 mwindow->commit_commercial();
1022 if( !mwindow->put_commercial() ) {
1023 mwindow->gui->lock_window("EditCommercial::handle_event 1");
1025 if(!have_mwindow_lock)
1026 mwindow->gui->unlock_window();
1027 mwindow->activate_commercial();
1030 mwindow->undo_commercial();
1031 if(have_mwindow_lock)
1032 mwindow->gui->lock_window("EditCommercial::handle_event 2");
1036 EditCopy::EditCopy(MWindow *mwindow, EditPanel *panel, int x, int y)
1037 : BC_Button(x, y, mwindow->theme->get_image_set("copy"))
1039 this->mwindow = mwindow;
1040 this->panel = panel;
1041 set_tooltip(_("Copy ( c )"));
1043 EditCopy::~EditCopy()
1047 int EditCopy::keypress_event()
1049 if(get_keypress() == 'c')
1050 return handle_event();
1053 int EditCopy::handle_event()
1055 panel->copy_selection();
1059 EditAppend::EditAppend(MWindow *mwindow, EditPanel *panel, int x, int y)
1060 : BC_Button(x, y, mwindow->theme->append_data)
1062 this->mwindow = mwindow;
1063 this->panel = panel;
1064 set_tooltip(_("Append to end of track"));
1066 EditAppend::~EditAppend()
1071 int EditAppend::handle_event()
1077 EditInsert::EditInsert(MWindow *mwindow, EditPanel *panel, int x, int y)
1078 : BC_Button(x, y, mwindow->theme->insert_data)
1080 this->mwindow = mwindow;
1081 this->panel = panel;
1082 set_tooltip(_("Insert before beginning of track"));
1084 EditInsert::~EditInsert()
1089 int EditInsert::handle_event()
1096 EditPaste::EditPaste(MWindow *mwindow, EditPanel *panel, int x, int y)
1097 : BC_Button(x, y, mwindow->theme->get_image_set("paste"))
1099 this->mwindow = mwindow;
1100 this->panel = panel;
1101 set_tooltip(_("Paste ( v )"));
1103 EditPaste::~EditPaste()
1107 int EditPaste::keypress_event()
1109 if(get_keypress() == 'v')
1110 return handle_event();
1113 int EditPaste::handle_event()
1115 int have_mwindow_lock = mwindow->gui->get_window_lock();
1116 if(!have_mwindow_lock)
1117 mwindow->gui->lock_window("EditPaste::handle_event");
1121 if(!have_mwindow_lock)
1122 mwindow->gui->unlock_window();
1128 EditTransition::EditTransition(MWindow *mwindow, EditPanel *panel, int x, int y)
1129 : BC_Button(x, y, mwindow->theme->transition_data)
1131 this->mwindow = mwindow;
1132 this->panel = panel;
1133 set_tooltip(_("Set transition"));
1135 EditTransition::~EditTransition()
1138 int EditTransition::handle_event()
1143 EditPresentation::EditPresentation(MWindow *mwindow, EditPanel *panel, int x, int y)
1144 : BC_Button(x, y, mwindow->theme->presentation_data)
1146 this->mwindow = mwindow;
1147 this->panel = panel;
1148 set_tooltip(_("Set presentation up to current position"));
1150 EditPresentation::~EditPresentation()
1153 int EditPresentation::handle_event()
1158 EditUndo::EditUndo(MWindow *mwindow, EditPanel *panel, int x, int y)
1159 : BC_Button(x, y, mwindow->theme->get_image_set("undo"))
1161 this->mwindow = mwindow;
1162 this->panel = panel;
1163 set_tooltip(_("Undo ( z )"));
1165 EditUndo::~EditUndo()
1168 int EditUndo::keypress_event()
1170 if(get_keypress() == 'z')
1171 return handle_event();
1174 int EditUndo::handle_event()
1176 mwindow->undo_entry(panel->subwindow);
1180 EditRedo::EditRedo(MWindow *mwindow, EditPanel *panel, int x, int y)
1181 : BC_Button(x, y, mwindow->theme->get_image_set("redo"))
1183 this->mwindow = mwindow;
1184 this->panel = panel;
1185 set_tooltip(_("Redo ( shift Z )"));
1187 EditRedo::~EditRedo()
1190 int EditRedo::keypress_event()
1192 if(get_keypress() == 'Z')
1193 return handle_event();
1196 int EditRedo::handle_event()
1198 mwindow->redo_entry(panel->subwindow);
1206 EditLabelbutton::EditLabelbutton(MWindow *mwindow, EditPanel *panel, int x, int y)
1207 : BC_Button(x, y, mwindow->theme->get_image_set("labelbutton"))
1209 this->mwindow = mwindow;
1210 this->panel = panel;
1211 set_tooltip(_("Toggle label at current position ( l )"));
1214 EditLabelbutton::~EditLabelbutton()
1217 int EditLabelbutton::keypress_event()
1219 if(get_keypress() == 'l' && !alt_down())
1220 return handle_event();
1223 int EditLabelbutton::handle_event()
1225 panel->toggle_label();
1235 EditFit::EditFit(MWindow *mwindow, EditPanel *panel, int x, int y)
1236 : BC_Button(x, y, mwindow->theme->get_image_set("fit"))
1238 this->mwindow = mwindow;
1239 this->panel = panel;
1240 set_tooltip(_("Fit selection to display ( f )"));
1245 int EditFit::keypress_event()
1247 if(!alt_down() && get_keypress() == 'f')
1254 int EditFit::handle_event()
1256 mwindow->fit_selection();
1268 EditFitAutos::EditFitAutos(MWindow *mwindow, EditPanel *panel, int x, int y)
1269 : BC_Button(x, y, mwindow->theme->get_image_set("fitautos"))
1271 this->mwindow = mwindow;
1272 this->panel = panel;
1273 set_tooltip(_("Fit all autos to display ( Alt + f )"));
1275 EditFitAutos::~EditFitAutos()
1278 int EditFitAutos::keypress_event()
1280 if(!ctrl_down() && alt_down() && get_keypress() == 'f')
1282 mwindow->fit_autos(1);
1285 if(ctrl_down() && alt_down() && get_keypress() == 'f')
1287 mwindow->fit_autos(0);
1292 int EditFitAutos::handle_event()
1294 mwindow->fit_autos(1);
1310 ArrowButton::ArrowButton(MWindow *mwindow, EditPanel *panel, int x, int y)
1313 mwindow->theme->get_image_set("arrow"),
1314 mwindow->edl->session->editing_mode == EDITING_ARROW,
1320 this->mwindow = mwindow;
1321 this->panel = panel;
1322 set_tooltip(_("Drag and drop editing mode"));
1325 int ArrowButton::handle_event()
1328 panel->ibeam->update(0);
1329 mwindow->set_editing_mode(EDITING_ARROW,
1332 // Nothing after this
1337 IBeamButton::IBeamButton(MWindow *mwindow, EditPanel *panel, int x, int y)
1340 mwindow->theme->get_image_set("ibeam"),
1341 mwindow->edl->session->editing_mode == EDITING_IBEAM,
1347 this->mwindow = mwindow;
1348 this->panel = panel;
1349 set_tooltip(_("Cut and paste editing mode"));
1352 int IBeamButton::handle_event()
1355 panel->arrow->update(0);
1356 mwindow->set_editing_mode(EDITING_IBEAM,
1359 // Nothing after this
1363 KeyFrameButton::KeyFrameButton(MWindow *mwindow, EditPanel *panel, int x, int y)
1366 mwindow->theme->get_image_set("autokeyframe"),
1367 mwindow->edl->session->auto_keyframes,
1373 this->mwindow = mwindow;
1374 this->panel = panel;
1375 set_tooltip(_("Generate keyframes while tweeking"));
1378 int KeyFrameButton::handle_event()
1380 mwindow->set_auto_keyframes(get_value(),
1387 LockLabelsButton::LockLabelsButton(MWindow *mwindow, int x, int y)
1390 mwindow->theme->get_image_set("locklabels"),
1391 mwindow->edl->session->labels_follow_edits,
1397 this->mwindow = mwindow;
1398 set_tooltip(_("Lock labels from moving"));
1401 int LockLabelsButton::handle_event()
1403 mwindow->set_labels_follow_edits(get_value());