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"
37 #include "mainsession.h"
39 #include "manualgoto.h"
41 #include "meterpanel.h"
43 #include "mwindowgui.h"
44 #include "playbackengine.h"
45 #include "preferences.h"
46 #include "scopewindow.h"
49 #include "trackcanvas.h"
50 #include "transportque.h"
51 #include "vwindowgui.h"
56 EditPanel::EditPanel(MWindow *mwindow,
57 BC_WindowBase *subwindow,
64 int use_splice, // Extra buttons
81 this->window_id = window_id;
82 this->editing_mode = editing_mode;
83 this->use_editing_mode = use_editing_mode;
84 this->use_keyframe = use_keyframe;
85 this->use_splice = use_splice;
86 this->use_overwrite = use_overwrite;
87 this->use_copy = use_copy;
88 this->use_paste = use_paste;
89 this->use_undo = use_undo;
90 this->mwindow = mwindow;
91 this->subwindow = subwindow;
92 this->use_fit = use_fit;
93 this->use_labels = use_labels;
94 this->use_locklabels = use_locklabels;
95 this->use_toclip = use_toclip;
96 this->use_meters = use_meters;
97 this->use_cut = use_cut;
98 this->use_commercial = use_commercial;
99 this->use_goto = use_goto;
100 this->use_clk2play = use_clk2play;
101 this->use_scope = use_scope;
102 this->use_gang_tracks = use_gang_tracks;
114 this->commercial = 0;
117 this->labelbutton = 0;
122 this->gang_tracks = 0;
125 this->meter_panel = 0;
130 this->span_keyframe = 0;
132 this->click2play = 0;
134 this->scope_dialog = 0;
138 EditPanel::~EditPanel()
143 void EditPanel::set_meters(MeterPanel *meter_panel)
145 this->meter_panel = meter_panel;
149 void EditPanel::update()
151 int new_editing_mode = mwindow->edl->session->editing_mode;
152 if( arrow ) arrow->update(new_editing_mode == EDITING_ARROW);
153 if( ibeam ) ibeam->update(new_editing_mode == EDITING_IBEAM);
154 if( keyframe ) keyframe->update(mwindow->edl->session->auto_keyframes);
155 if( span_keyframe ) span_keyframe->update(mwindow->edl->session->span_keyframes);
156 if( locklabels ) locklabels->set_value(mwindow->edl->session->labels_follow_edits);
158 int value = !is_vwindow() ?
159 mwindow->edl->session->cwindow_click2play :
160 mwindow->edl->session->vwindow_click2play ;
161 click2play->set_value(value);
163 if( gang_tracks ) gang_tracks->update(mwindow->edl->session->gang_tracks);
166 meters->update(mwindow->edl->session->cwindow_meter);
167 mwindow->cwindow->gui->update_meters();
170 meters->update(mwindow->edl->session->vwindow_meter);
176 int EditPanel::calculate_w(MWindow *mwindow, int use_keyframe, int total_buttons)
178 int button_w = xS(24); // mwindow->theme->get_image_set("meters")[0]->get_w();
179 int result = button_w * total_buttons;
181 result += 2*(button_w + mwindow->theme->toggle_margin);
185 int EditPanel::calculate_h(MWindow *mwindow)
187 return mwindow->theme->get_image_set("meters")[0]->get_h();
190 void EditPanel::create_buttons()
194 if( use_editing_mode ) {
195 arrow = new ArrowButton(mwindow, this, x1, y1);
196 subwindow->add_subwindow(arrow);
197 x1 += arrow->get_w();
198 ibeam = new IBeamButton(mwindow, this, x1, y1);
199 subwindow->add_subwindow(ibeam);
200 x1 += ibeam->get_w();
201 x1 += mwindow->theme->toggle_margin;
205 keyframe = new KeyFrameButton(mwindow, this, x1, y1);
206 subwindow->add_subwindow(keyframe);
207 x1 += keyframe->get_w();
208 span_keyframe = new SpanKeyFrameButton(mwindow, this, x1, y1);
209 subwindow->add_subwindow(span_keyframe);
210 x1 += span_keyframe->get_w();
213 if( use_locklabels ) {
214 locklabels = new LockLabelsButton(mwindow, this, x1, y1);
215 subwindow->add_subwindow(locklabels);
216 x1 += locklabels->get_w();
219 if( use_keyframe || use_locklabels )
220 x1 += mwindow->theme->toggle_margin;
223 inpoint = new EditInPoint(mwindow, this, x1, y1);
224 subwindow->add_subwindow(inpoint);
225 x1 += inpoint->get_w();
226 outpoint = new EditOutPoint(mwindow, this, x1, y1);
227 subwindow->add_subwindow(outpoint);
228 x1 += outpoint->get_w();
231 splice = new EditSplice(mwindow, this, x1, y1);
232 subwindow->add_subwindow(splice);
233 x1 += splice->get_w();
236 if( use_overwrite ) {
237 overwrite = new EditOverwrite(mwindow, this, x1, y1);
238 subwindow->add_subwindow(overwrite);
239 x1 += overwrite->get_w();
243 clip = new EditToClip(mwindow, this, x1, y1);
244 subwindow->add_subwindow(clip);
249 cut = new EditCut(mwindow, this, x1, y1);
250 subwindow->add_subwindow(cut);
255 copy = new EditCopy(mwindow, this, x1, y1);
256 subwindow->add_subwindow(copy);
261 paste = new EditPaste(mwindow, this, x1, y1);
262 subwindow->add_subwindow(paste);
263 x1 += paste->get_w();
267 labelbutton = new EditLabelbutton(mwindow, this, x1, y1);
268 subwindow->add_subwindow(labelbutton);
269 x1 += labelbutton->get_w();
270 prevlabel = new EditPrevLabel(mwindow, this, x1, y1);
271 subwindow->add_subwindow(prevlabel);
272 x1 += prevlabel->get_w();
273 nextlabel = new EditNextLabel(mwindow, this, x1, y1);
274 subwindow->add_subwindow(nextlabel);
275 x1 += nextlabel->get_w();
278 // all windows except VWindow since it's only implemented in MWindow.
280 prevedit = new EditPrevEdit(mwindow, this, x1, y1);
281 subwindow->add_subwindow(prevedit);
282 x1 += prevedit->get_w();
283 nextedit = new EditNextEdit(mwindow, this, x1, y1);
284 subwindow->add_subwindow(nextedit);
285 x1 += nextedit->get_w();
289 fit = new EditFit(mwindow, this, x1, y1);
290 subwindow->add_subwindow(fit);
292 fit_autos = new EditFitAutos(mwindow, this, x1, y1);
293 subwindow->add_subwindow(fit_autos);
294 x1 += fit_autos->get_w();
298 undo = new EditUndo(mwindow, this, x1, y1);
299 subwindow->add_subwindow(undo);
301 redo = new EditRedo(mwindow, this, x1, y1);
302 subwindow->add_subwindow(redo);
307 mangoto = new EditManualGoto(mwindow, this, x1, y1);
308 subwindow->add_subwindow(mangoto);
309 x1 += mangoto->get_w();
313 click2play = new EditClick2Play(mwindow, this, x1, y1+yS(3));
314 subwindow->add_subwindow(click2play);
315 x1 += click2play->get_w();
319 scope = new EditPanelScope(mwindow, this, x1, y1-yS(1));
320 subwindow->add_subwindow(scope);
321 x1 += scope->get_w();
322 scope_dialog = new EditPanelScopeDialog(mwindow, this);
325 if( use_gang_tracks ) {
326 gang_tracks = new EditPanelGangTracks(mwindow, this, x1, y1-yS(1));
327 subwindow->add_subwindow(gang_tracks);
328 x1 += gang_tracks->get_w();
333 meters = new MeterShow(mwindow, meter_panel, x1, y1);
334 subwindow->add_subwindow(meters);
335 x1 += meters->get_w();
338 printf("EditPanel::create_objects: meter_panel == 0\n");
341 if( use_commercial ) {
342 commercial = new EditCommercial(mwindow, this, x1, y1);
343 subwindow->add_subwindow(commercial);
344 x1 += commercial->get_w();
348 void EditPanel::reposition_buttons(int x, int y)
354 if( use_editing_mode ) {
355 arrow->reposition_window(x1, y1);
356 x1 += arrow->get_w();
357 ibeam->reposition_window(x1, y1);
358 x1 += ibeam->get_w();
359 x1 += mwindow->theme->toggle_margin;
363 keyframe->reposition_window(x1, y1);
364 x1 += keyframe->get_w();
365 span_keyframe->reposition_window(x1, y1);
366 x1 += span_keyframe->get_w();
369 if( use_locklabels ) {
370 locklabels->reposition_window(x1,y1);
371 x1 += locklabels->get_w();
374 if( use_keyframe || use_locklabels )
375 x1 += mwindow->theme->toggle_margin;
377 inpoint->reposition_window(x1, y1);
378 x1 += inpoint->get_w();
379 outpoint->reposition_window(x1, y1);
380 x1 += outpoint->get_w();
382 splice->reposition_window(x1, y1);
383 x1 += splice->get_w();
385 if( use_overwrite ) {
386 overwrite->reposition_window(x1, y1);
387 x1 += overwrite->get_w();
390 clip->reposition_window(x1, y1);
394 cut->reposition_window(x1, y1);
398 copy->reposition_window(x1, y1);
402 paste->reposition_window(x1, y1);
403 x1 += paste->get_w();
407 labelbutton->reposition_window(x1, y1);
408 x1 += labelbutton->get_w();
409 prevlabel->reposition_window(x1, y1);
410 x1 += prevlabel->get_w();
411 nextlabel->reposition_window(x1, y1);
412 x1 += nextlabel->get_w();
416 prevedit->reposition_window(x1, y1);
417 x1 += prevedit->get_w();
421 nextedit->reposition_window(x1, y1);
422 x1 += nextedit->get_w();
426 fit->reposition_window(x1, y1);
428 fit_autos->reposition_window(x1, y1);
429 x1 += fit_autos->get_w();
433 undo->reposition_window(x1, y1);
435 redo->reposition_window(x1, y1);
440 mangoto->reposition_window(x1, y1);
441 x1 += mangoto->get_w();
444 click2play->reposition_window(x1, y1+yS(3));
445 x1 += click2play->get_w();
448 scope->reposition_window(x1, y1-yS(1));
449 x1 += scope->get_w();
453 meters->reposition_window(x1, y1);
454 x1 += meters->get_w();
458 void EditPanel::create_objects()
463 int EditPanel::get_w()
469 EditLabelbutton::EditLabelbutton(MWindow *mwindow, EditPanel *panel, int x, int y)
470 : BC_Button(x, y, mwindow->theme->get_image_set("labelbutton"))
472 this->mwindow = mwindow;
474 set_tooltip(_("Toggle label at current position ( l )"));
477 EditLabelbutton::~EditLabelbutton()
480 int EditLabelbutton::keypress_event()
482 if( get_keypress() == 'l' && !alt_down() )
483 return handle_event();
486 int EditLabelbutton::handle_event()
488 panel->panel_toggle_label();
493 EditNextLabel::EditNextLabel(MWindow *mwindow,
494 EditPanel *panel, int x, int y)
495 : BC_Button(x, y, mwindow->theme->get_image_set("nextlabel"))
497 this->mwindow = mwindow;
499 set_tooltip(_("Next label ( ctrl -> )"));
501 EditNextLabel::~EditNextLabel()
504 int EditNextLabel::keypress_event()
507 int key = get_keypress();
508 if( (key == RIGHT || key == '.') && !alt_down() ) {
509 panel->panel_next_label(0);
512 if( key == '>' && alt_down() ) {
513 panel->panel_next_label(1);
519 int EditNextLabel::handle_event()
521 int cut = ctrl_down() && alt_down();
522 panel->panel_next_label(cut);
527 EditPrevLabel::EditPrevLabel(MWindow *mwindow,
528 EditPanel *panel, int x, int y)
529 : BC_Button(x, y, mwindow->theme->get_image_set("prevlabel"))
531 this->mwindow = mwindow;
533 set_tooltip(_("Previous label ( ctrl <- )"));
535 EditPrevLabel::~EditPrevLabel()
538 int EditPrevLabel::keypress_event()
541 int key = get_keypress();
542 if( (key == LEFT || key == ',') && !alt_down() ) {
543 panel->panel_prev_label(0);
546 if( key == '<' && alt_down() ) {
547 panel->panel_prev_label(1);
553 int EditPrevLabel::handle_event()
555 int cut = ctrl_down() && alt_down();
556 panel->panel_prev_label(cut);
561 EditPrevEdit::EditPrevEdit(MWindow *mwindow,
562 EditPanel *panel, int x, int y)
563 : BC_Button(x, y, mwindow->theme->get_image_set("prevedit"))
565 this->mwindow = mwindow;
567 set_tooltip(_("Previous edit (alt <- )"));
569 EditPrevEdit::~EditPrevEdit()
572 int EditPrevEdit::keypress_event()
575 int key = get_keypress();
576 if( (key == LEFT || key == ',') && !ctrl_down() ) {
577 panel->panel_prev_edit(0);
580 if( key == ',' && ctrl_down() ) {
581 panel->panel_prev_edit(1);
587 int EditPrevEdit::handle_event()
589 int cut = ctrl_down() && alt_down();
590 panel->panel_prev_edit(cut);
595 EditNextEdit::EditNextEdit(MWindow *mwindow,
596 EditPanel *panel, int x, int y)
597 : BC_Button(x, y, mwindow->theme->get_image_set("nextedit"))
599 this->mwindow = mwindow;
601 set_tooltip(_("Next edit ( alt -> )"));
603 EditNextEdit::~EditNextEdit()
606 int EditNextEdit::keypress_event()
609 int key = get_keypress();
610 if( (key == RIGHT || key == '.') && !ctrl_down() ) {
611 panel->panel_next_edit(0);
614 if( key == '.' && ctrl_down() ) {
615 panel->panel_next_edit(1);
621 int EditNextEdit::handle_event()
623 int cut = ctrl_down() && alt_down();
624 panel->panel_next_edit(cut);
629 EditCopy::EditCopy(MWindow *mwindow, EditPanel *panel, int x, int y)
630 : BC_Button(x, y, mwindow->theme->get_image_set("copy"))
632 this->mwindow = mwindow;
634 set_tooltip(_("Copy ( c )"));
636 EditCopy::~EditCopy()
640 int EditCopy::keypress_event()
642 if( alt_down() ) return 0;
643 if( (get_keypress() == 'c' && !ctrl_down()) ||
644 (panel->is_vwindow() && get_keypress() == 'C') ) {
645 return handle_event();
649 int EditCopy::handle_event()
651 panel->panel_copy_selection();
655 //overwrite_selection
656 EditOverwrite::EditOverwrite(MWindow *mwindow, EditPanel *panel, int x, int y)
657 : BC_Button(x, y, mwindow->theme->overwrite_data)
659 this->mwindow = mwindow;
661 set_tooltip(_("Overwrite ( b )"));
663 EditOverwrite::~EditOverwrite()
666 int EditOverwrite::handle_event()
668 panel->panel_overwrite_selection();
671 int EditOverwrite::keypress_event()
673 if( alt_down() ) return 0;
674 if( get_keypress() == 'b' ||
675 (panel->is_vwindow() && get_keypress() == 'B') ) {
684 EditInPoint::EditInPoint(MWindow *mwindow, EditPanel *panel, int x, int y)
685 : BC_Button(x, y, mwindow->theme->get_image_set("inbutton"))
687 this->mwindow = mwindow;
689 set_tooltip(_("In point ( [ or < )"));
691 EditInPoint::~EditInPoint()
694 int EditInPoint::handle_event()
696 panel->panel_set_inpoint();
699 int EditInPoint::keypress_event()
701 int key = get_keypress();
704 panel->panel_unset_inoutpoint();
708 else if( !alt_down() ) {
709 if( key == '[' || key == '<' ) {
710 panel->panel_set_inpoint();
719 EditOutPoint::EditOutPoint(MWindow *mwindow, EditPanel *panel, int x, int y)
720 : BC_Button(x, y, mwindow->theme->get_image_set("outbutton"))
722 this->mwindow = mwindow;
724 set_tooltip(_("Out point ( ] or > )"));
726 EditOutPoint::~EditOutPoint()
729 int EditOutPoint::handle_event()
731 panel->panel_set_outpoint();
734 int EditOutPoint::keypress_event()
736 int key = get_keypress();
739 panel->panel_unset_inoutpoint();
743 else if( !alt_down() ) {
744 if( key == ']' || key == '>' ) {
745 panel->panel_set_outpoint();
753 EditSplice::EditSplice(MWindow *mwindow, EditPanel *panel, int x, int y)
754 : BC_Button(x, y, mwindow->theme->splice_data)
756 this->mwindow = mwindow;
758 set_tooltip(_("Splice ( v )"));
760 EditSplice::~EditSplice()
763 int EditSplice::handle_event()
765 panel->panel_splice_selection();
768 int EditSplice::keypress_event()
770 if( alt_down() ) return 0;
771 if( (get_keypress() == 'v' && !ctrl_down()) ||
772 (panel->is_vwindow() && get_keypress() == 'V') ) {
780 EditToClip::EditToClip(MWindow *mwindow, EditPanel *panel, int x, int y)
781 : BC_Button(x, y, mwindow->theme->get_image_set("toclip"))
783 this->mwindow = mwindow;
785 set_tooltip(_("To clip ( i )"));
787 EditToClip::~EditToClip()
790 int EditToClip::handle_event()
792 panel->panel_to_clip();
796 int EditToClip::keypress_event()
798 if( alt_down() ) return 0;
799 if( get_keypress() == 'i' ||
800 (panel->is_vwindow() && get_keypress() == 'I') ) {
808 EditCut::EditCut(MWindow *mwindow, EditPanel *panel, int x, int y)
809 : BC_Button(x, y, mwindow->theme->get_image_set("cut"))
811 this->mwindow = mwindow;
813 set_tooltip(_("Split | Cut ( x )"));
818 int EditCut::keypress_event()
820 if( ctrl_down() || shift_down() || alt_down() )
822 if( get_keypress() == 'x' )
823 return handle_event();
827 int EditCut::handle_event()
834 EditPaste::EditPaste(MWindow *mwindow, EditPanel *panel, int x, int y)
835 : BC_Button(x, y, mwindow->theme->get_image_set("paste"))
837 this->mwindow = mwindow;
839 set_tooltip(_("Paste ( v )"));
841 EditPaste::~EditPaste()
845 int EditPaste::keypress_event()
847 if( get_keypress() == 'v' && !ctrl_down() )
848 return handle_event();
851 int EditPaste::handle_event()
853 panel->panel_paste();
858 EditFit::EditFit(MWindow *mwindow, EditPanel *panel, int x, int y)
859 : BC_Button(x, y, mwindow->theme->get_image_set("fit"))
861 this->mwindow = mwindow;
863 set_tooltip(_("Fit selection to display ( f )"));
868 int EditFit::keypress_event()
870 if( !alt_down() && get_keypress() == 'f' ) {
876 int EditFit::handle_event()
878 panel->panel_fit_selection();
883 EditFitAutos::EditFitAutos(MWindow *mwindow, EditPanel *panel, int x, int y)
884 : BC_Button(x, y, mwindow->theme->get_image_set("fitautos"))
886 this->mwindow = mwindow;
888 set_tooltip(_("Fit all autos to display ( Alt + f )"));
890 EditFitAutos::~EditFitAutos()
893 int EditFitAutos::keypress_event()
895 if( get_keypress() == 'f' && alt_down() ) {
896 panel->panel_fit_autos(!ctrl_down() ? 1 : 0);
901 int EditFitAutos::handle_event()
903 panel->panel_fit_autos(1);
908 ArrowButton::ArrowButton(MWindow *mwindow, EditPanel *panel, int x, int y)
910 mwindow->theme->get_image_set("arrow"),
911 mwindow->edl->session->editing_mode == EDITING_ARROW,
914 this->mwindow = mwindow;
916 set_tooltip(_("Drag and drop editing mode"));
919 int ArrowButton::handle_event()
922 panel->ibeam->update(0);
923 panel->panel_set_editing_mode(EDITING_ARROW);
924 // Nothing after this
928 IBeamButton::IBeamButton(MWindow *mwindow, EditPanel *panel, int x, int y)
930 mwindow->theme->get_image_set("ibeam"),
931 mwindow->edl->session->editing_mode == EDITING_IBEAM,
934 this->mwindow = mwindow;
936 set_tooltip(_("Cut and paste editing mode"));
939 int IBeamButton::handle_event()
942 panel->arrow->update(0);
943 panel->panel_set_editing_mode(EDITING_IBEAM);
944 // Nothing after this
949 KeyFrameButton::KeyFrameButton(MWindow *mwindow, EditPanel *panel, int x, int y)
951 mwindow->theme->get_image_set("autokeyframe"),
952 mwindow->edl->session->auto_keyframes,
955 this->mwindow = mwindow;
957 set_tooltip(_("Generate keyframes while tweeking (j)"));
960 int KeyFrameButton::handle_event()
962 panel->panel_set_auto_keyframes(get_value());
966 int KeyFrameButton::keypress_event()
968 int key = get_keypress();
969 if( key == 'j' && !ctrl_down() && !shift_down() && !alt_down() ) {
970 int value = get_value() ? 0 : 1;
972 panel->panel_set_auto_keyframes(value);
979 SpanKeyFrameButton::SpanKeyFrameButton(MWindow *mwindow, EditPanel *panel, int x, int y)
981 mwindow->theme->get_image_set("spankeyframe"),
982 mwindow->edl->session->span_keyframes,
985 this->mwindow = mwindow;
987 set_tooltip(_("Allow keyframe spanning"));
990 int SpanKeyFrameButton::handle_event()
992 panel->panel_set_span_keyframes(get_value());
996 //set_labels_follow_edits
997 LockLabelsButton::LockLabelsButton(MWindow *mwindow, EditPanel *panel, int x, int y)
999 mwindow->theme->get_image_set("locklabels"),
1000 mwindow->edl->session->labels_follow_edits,
1003 this->mwindow = mwindow;
1004 this->panel = panel;
1005 set_tooltip(_("Lock labels from moving with edits"));
1008 int LockLabelsButton::handle_event()
1010 panel->panel_set_labels_follow_edits(get_value());
1016 EditManualGoto::EditManualGoto(MWindow *mwindow, EditPanel *panel, int x, int y)
1017 : BC_Button(x, y, mwindow->theme->get_image_set("goto"))
1019 this->mwindow = mwindow;
1020 this->panel = panel;
1021 mangoto = new ManualGoto(mwindow, panel);
1022 set_tooltip(_("Manual goto ( g )"));
1024 EditManualGoto::~EditManualGoto()
1028 int EditManualGoto::handle_event()
1034 int EditManualGoto::keypress_event()
1036 if( get_keypress() == 'g' ) {
1044 EditClick2Play::EditClick2Play(MWindow *mwindow, EditPanel *panel, int x, int y)
1045 : BC_Toggle(x, y, mwindow->theme->get_image_set("playpatch_data"),
1046 !panel->is_vwindow() ?
1047 mwindow->edl->session->cwindow_click2play :
1048 mwindow->edl->session->vwindow_click2play)
1050 this->mwindow = mwindow;
1051 this->panel = panel;
1052 set_tooltip(_("Click to play (p)"));
1054 int EditClick2Play::handle_event()
1056 int value = get_value();
1057 panel->set_click_to_play(value);
1060 int EditClick2Play::keypress_event()
1062 int key = get_keypress();
1063 if( key == 'p' && !ctrl_down() && !shift_down() && !alt_down() ) {
1064 int value = get_value() ? 0 : 1;
1066 panel->set_click_to_play(value);
1073 EditCommercial::EditCommercial(MWindow *mwindow, EditPanel *panel, int x, int y)
1074 : BC_Button(x, y, mwindow->theme->get_image_set("commercial"))
1076 this->mwindow = mwindow;
1077 this->panel = panel;
1078 set_tooltip(_("Commercial ( shift A )"));
1080 EditCommercial::~EditCommercial()
1083 int EditCommercial::keypress_event()
1085 if( ctrl_down() || !shift_down() || alt_down() )
1087 if( get_keypress() == 'A' )
1088 return handle_event();
1092 int EditCommercial::handle_event()
1094 int have_mwindow_lock = mwindow->gui->get_window_lock();
1095 if( have_mwindow_lock )
1096 mwindow->gui->unlock_window();
1097 mwindow->commit_commercial();
1098 if( !mwindow->put_commercial() ) {
1099 mwindow->gui->lock_window("EditCommercial::handle_event 1");
1101 if( !have_mwindow_lock )
1102 mwindow->gui->unlock_window();
1103 mwindow->activate_commercial();
1106 mwindow->undo_commercial();
1107 if( have_mwindow_lock )
1108 mwindow->gui->lock_window("EditCommercial::handle_event 2");
1113 EditUndo::EditUndo(MWindow *mwindow, EditPanel *panel, int x, int y)
1114 : BC_Button(x, y, mwindow->theme->get_image_set("undo"))
1116 this->mwindow = mwindow;
1117 this->panel = panel;
1118 set_tooltip(_("Undo ( z )"));
1120 EditUndo::~EditUndo()
1123 int EditUndo::keypress_event()
1125 if( ctrl_down() || shift_down() || alt_down() )
1127 if( get_keypress() == 'z' )
1128 return handle_event();
1131 int EditUndo::handle_event()
1133 mwindow->undo_entry(panel->subwindow);
1137 EditRedo::EditRedo(MWindow *mwindow, EditPanel *panel, int x, int y)
1138 : BC_Button(x, y, mwindow->theme->get_image_set("redo"))
1140 this->mwindow = mwindow;
1141 this->panel = panel;
1142 set_tooltip(_("Redo ( shift Z )"));
1144 EditRedo::~EditRedo()
1147 int EditRedo::keypress_event()
1149 if( ctrl_down() || !shift_down() || alt_down() )
1151 if( get_keypress() == 'Z' )
1152 return handle_event();
1155 int EditRedo::handle_event()
1157 mwindow->redo_entry(panel->subwindow);
1162 EditPanelScopeDialog::EditPanelScopeDialog(MWindow *mwindow, EditPanel *panel)
1165 this->mwindow = mwindow;
1166 this->panel = panel;
1168 gui_lock = new Mutex("EditPanelScopeDialog::gui_lock");
1171 EditPanelScopeDialog::~EditPanelScopeDialog()
1177 void EditPanelScopeDialog::handle_close_event(int result)
1181 void EditPanelScopeDialog::handle_done_event(int result)
1183 gui_lock->lock("EditPanelScopeDialog::handle_done_event");
1187 panel->subwindow->lock_window("EditPanelScopeDialog::handle_done_event");
1188 panel->scope->update(0);
1189 panel->subwindow->unlock_window();
1192 BC_Window* EditPanelScopeDialog::new_gui()
1194 EditPanelScopeGUI *gui = new EditPanelScopeGUI(mwindow, this);
1195 gui->create_objects();
1200 void EditPanelScopeDialog::process(VFrame *output_frame)
1202 if( panel->scope_dialog ) {
1203 panel->scope_dialog->gui_lock->lock("EditPanelScopeDialog::process");
1204 if( panel->scope_dialog->scope_gui ) {
1205 EditPanelScopeGUI *gui = panel->scope_dialog->scope_gui;
1206 gui->process(output_frame);
1208 panel->scope_dialog->gui_lock->unlock();
1212 EditPanelScopeGUI::EditPanelScopeGUI(MWindow *mwindow, EditPanelScopeDialog *dialog)
1213 : ScopeGUI(mwindow->theme,
1214 mwindow->session->scope_x, mwindow->session->scope_y,
1215 mwindow->session->scope_w, mwindow->session->scope_h,
1216 mwindow->get_cpus())
1218 this->mwindow = mwindow;
1219 this->dialog = dialog;
1222 EditPanelScopeGUI::~EditPanelScopeGUI()
1226 void EditPanelScopeGUI::create_objects()
1228 MainSession *session = mwindow->session;
1229 use_hist = session->use_hist;
1230 use_wave = session->use_wave;
1231 use_vector = session->use_vector;
1232 use_hist_parade = session->use_hist_parade;
1233 use_wave_parade = session->use_wave_parade;
1234 use_wave_gain = session->use_wave_gain;
1235 use_vect_gain = session->use_vect_gain;
1236 use_smooth = session->use_smooth;
1237 use_refresh = session->use_refresh;
1238 use_release = session->use_release;
1239 use_graticule = session->use_graticule;
1240 ScopeGUI::create_objects();
1243 void EditPanelScopeGUI::toggle_event()
1245 MainSession *session = mwindow->session;
1246 session->use_hist = use_hist;
1247 session->use_wave = use_wave;
1248 session->use_vector = use_vector;
1249 session->use_hist_parade = use_hist_parade;
1250 session->use_wave_parade = use_wave_parade;
1251 session->use_wave_gain = use_wave_gain;
1252 session->use_vect_gain = use_vect_gain;
1253 session->use_smooth = use_smooth;
1254 session->use_refresh = use_refresh;
1255 session->use_release = use_release;
1256 session->use_graticule = use_graticule;
1259 int EditPanelScopeGUI::translation_event()
1261 ScopeGUI::translation_event();
1262 MainSession *session = mwindow->session;
1263 session->scope_x = get_x();
1264 session->scope_y = get_y();
1268 int EditPanelScopeGUI::resize_event(int w, int h)
1270 ScopeGUI::resize_event(w, h);
1271 MainSession *session = mwindow->session;
1272 session->scope_w = w;
1273 session->scope_h = h;
1277 EditPanelScope::EditPanelScope(MWindow *mwindow, EditPanel *panel, int x, int y)
1278 : BC_Toggle(x, y, mwindow->theme ?
1279 mwindow->theme->get_image_set("scope_toggle") : 0, 0)
1281 this->mwindow = mwindow;
1282 this->panel = panel;
1283 set_tooltip(_("View scope"));
1286 EditPanelScope::~EditPanelScope()
1290 void EditPanelScopeGUI::update_scope()
1293 if( dialog->panel->is_cwindow() ) {
1294 CWindowGUI *cgui = (CWindowGUI *)dialog->panel->subwindow;
1295 canvas = cgui->canvas;
1297 else if( dialog->panel->is_vwindow() ) {
1298 VWindowGUI *vgui = (VWindowGUI *)dialog->panel->subwindow;
1299 canvas = vgui->canvas;
1301 if( canvas && canvas->refresh_frame )
1302 process(canvas->refresh_frame);
1305 int EditPanelScope::handle_event()
1308 int v = get_value();
1310 panel->scope_dialog->start();
1312 panel->scope_dialog->close_window();
1313 lock_window("EditPanelScope::handle_event");
1317 const char *EditPanelGangTracks::gang_tips[TOTAL_GANGS] = {
1318 N_("Currently: Gang None\n Click to: Gang Channels"),
1319 N_("Currently: Gang Channels\n Click to: Gang Media"),
1320 N_("Currently: Gang Media\n Click to: Gang None"),
1323 EditPanelGangTracks::EditPanelGangTracks(MWindow *mwindow, EditPanel *panel,
1325 : BC_Button(x, y, get_images(mwindow))
1327 this->mwindow = mwindow;
1328 this->panel = panel;
1329 int gang = mwindow->edl->session->gang_tracks;
1330 set_tooltip(_(gang_tips[gang]));
1333 EditPanelGangTracks::~EditPanelGangTracks()
1337 VFrame **EditPanelGangTracks::gang_images[TOTAL_GANGS];
1339 VFrame **EditPanelGangTracks::get_images(MWindow *mwindow)
1341 gang_images[GANG_NONE] = mwindow->theme->get_image_set("gang0");
1342 gang_images[GANG_MEDIA] = mwindow->theme->get_image_set("gang1");
1343 gang_images[GANG_CHANNELS] = mwindow->theme->get_image_set("gang2");
1344 int gang = mwindow->edl->session->gang_tracks;
1345 return gang_images[gang];
1348 void EditPanelGangTracks::update(int gang)
1350 set_images(gang_images[gang]);
1352 set_tooltip(_(gang_tips[gang]));
1355 int EditPanelGangTracks::handle_event()
1357 int gang = mwindow->edl->session->gang_tracks;
1358 if( !shift_down() ) {
1359 if( ++gang > GANG_MEDIA ) gang = GANG_NONE;
1362 if( --gang < GANG_NONE ) gang = GANG_MEDIA;
1365 panel->panel_set_gang_tracks(gang);