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
80 this->window_id = window_id;
81 this->editing_mode = editing_mode;
82 this->use_editing_mode = use_editing_mode;
83 this->use_keyframe = use_keyframe;
84 this->use_splice = use_splice;
85 this->use_overwrite = use_overwrite;
86 this->use_copy = use_copy;
87 this->use_paste = use_paste;
88 this->use_undo = use_undo;
89 this->mwindow = mwindow;
90 this->subwindow = subwindow;
91 this->use_fit = use_fit;
92 this->use_labels = use_labels;
93 this->use_locklabels = use_locklabels;
94 this->use_toclip = use_toclip;
95 this->use_meters = use_meters;
96 this->use_cut = use_cut;
97 this->use_commercial = use_commercial;
98 this->use_goto = use_goto;
99 this->use_clk2play = use_clk2play;
100 this->use_scope = use_scope;
112 this->commercial = 0;
115 this->labelbutton = 0;
122 this->meter_panel = 0;
127 this->span_keyframe = 0;
129 this->click2play = 0;
131 this->scope_dialog = 0;
135 EditPanel::~EditPanel()
140 void EditPanel::set_meters(MeterPanel *meter_panel)
142 this->meter_panel = meter_panel;
146 void EditPanel::update()
148 int new_editing_mode = mwindow->edl->session->editing_mode;
149 if( arrow ) arrow->update(new_editing_mode == EDITING_ARROW);
150 if( ibeam ) ibeam->update(new_editing_mode == EDITING_IBEAM);
151 if( keyframe ) keyframe->update(mwindow->edl->session->auto_keyframes);
152 if( span_keyframe ) span_keyframe->update(mwindow->edl->session->span_keyframes);
153 if( locklabels ) locklabels->set_value(mwindow->edl->session->labels_follow_edits);
155 int value = !is_vwindow() ?
156 mwindow->edl->session->cwindow_click2play :
157 mwindow->edl->session->vwindow_click2play ;
158 click2play->set_value(value);
162 meters->update(mwindow->edl->session->cwindow_meter);
163 mwindow->cwindow->gui->update_meters();
166 meters->update(mwindow->edl->session->vwindow_meter);
172 int EditPanel::calculate_w(MWindow *mwindow, int use_keyframe, int total_buttons)
175 int button_w = mwindow->theme->get_image_set("ibeam")[0]->get_w();
177 result += 2*(button_w + mwindow->theme->toggle_margin);
180 result += button_w * total_buttons;
184 int EditPanel::calculate_h(MWindow *mwindow)
186 return mwindow->theme->get_image_set("ibeam")[0]->get_h();
189 void EditPanel::create_buttons()
193 if( use_editing_mode ) {
194 arrow = new ArrowButton(mwindow, this, x1, y1);
195 subwindow->add_subwindow(arrow);
196 x1 += arrow->get_w();
197 ibeam = new IBeamButton(mwindow, this, x1, y1);
198 subwindow->add_subwindow(ibeam);
199 x1 += ibeam->get_w();
200 x1 += mwindow->theme->toggle_margin;
204 keyframe = new KeyFrameButton(mwindow, this, x1, y1);
205 subwindow->add_subwindow(keyframe);
206 x1 += keyframe->get_w();
207 span_keyframe = new SpanKeyFrameButton(mwindow, this, x1, y1);
208 subwindow->add_subwindow(span_keyframe);
209 x1 += span_keyframe->get_w();
212 if( use_locklabels ) {
213 locklabels = new LockLabelsButton(mwindow, this, x1, y1);
214 subwindow->add_subwindow(locklabels);
215 x1 += locklabels->get_w();
218 if( use_keyframe || use_locklabels )
219 x1 += mwindow->theme->toggle_margin;
222 inpoint = new EditInPoint(mwindow, this, x1, y1);
223 subwindow->add_subwindow(inpoint);
224 x1 += inpoint->get_w();
225 outpoint = new EditOutPoint(mwindow, this, x1, y1);
226 subwindow->add_subwindow(outpoint);
227 x1 += outpoint->get_w();
230 splice = new EditSplice(mwindow, this, x1, y1);
231 subwindow->add_subwindow(splice);
232 x1 += splice->get_w();
235 if( use_overwrite ) {
236 overwrite = new EditOverwrite(mwindow, this, x1, y1);
237 subwindow->add_subwindow(overwrite);
238 x1 += overwrite->get_w();
242 clip = new EditToClip(mwindow, this, x1, y1);
243 subwindow->add_subwindow(clip);
248 cut = new EditCut(mwindow, this, x1, y1);
249 subwindow->add_subwindow(cut);
254 copy = new EditCopy(mwindow, this, x1, y1);
255 subwindow->add_subwindow(copy);
260 paste = new EditPaste(mwindow, this, x1, y1);
261 subwindow->add_subwindow(paste);
262 x1 += paste->get_w();
267 meters = new MeterShow(mwindow, meter_panel, x1, y1);
268 subwindow->add_subwindow(meters);
269 x1 += meters->get_w();
272 printf("EditPanel::create_objects: meter_panel == 0\n");
276 labelbutton = new EditLabelbutton(mwindow, this, x1, y1);
277 subwindow->add_subwindow(labelbutton);
278 x1 += labelbutton->get_w();
279 prevlabel = new EditPrevLabel(mwindow, this, x1, y1);
280 subwindow->add_subwindow(prevlabel);
281 x1 += prevlabel->get_w();
282 nextlabel = new EditNextLabel(mwindow, this, x1, y1);
283 subwindow->add_subwindow(nextlabel);
284 x1 += nextlabel->get_w();
287 // all windows except VWindow since it's only implemented in MWindow.
289 prevedit = new EditPrevEdit(mwindow, this, x1, y1);
290 subwindow->add_subwindow(prevedit);
291 x1 += prevedit->get_w();
292 nextedit = new EditNextEdit(mwindow, this, x1, y1);
293 subwindow->add_subwindow(nextedit);
294 x1 += nextedit->get_w();
298 fit = new EditFit(mwindow, this, x1, y1);
299 subwindow->add_subwindow(fit);
301 fit_autos = new EditFitAutos(mwindow, this, x1, y1);
302 subwindow->add_subwindow(fit_autos);
303 x1 += fit_autos->get_w();
307 undo = new EditUndo(mwindow, this, x1, y1);
308 subwindow->add_subwindow(undo);
310 redo = new EditRedo(mwindow, this, x1, y1);
311 subwindow->add_subwindow(redo);
316 mangoto = new EditManualGoto(mwindow, this, x1, y1);
317 subwindow->add_subwindow(mangoto);
318 x1 += mangoto->get_w();
322 click2play = new EditClick2Play(mwindow, this, x1, y1+yS(3));
323 subwindow->add_subwindow(click2play);
324 x1 += click2play->get_w();
328 scope = new EditPanelScope(mwindow, this, x1, y1-yS(1));
329 subwindow->add_subwindow(scope);
330 x1 += scope->get_w();
331 scope_dialog = new EditPanelScopeDialog(mwindow, this);
334 if( use_commercial ) {
335 commercial = new EditCommercial(mwindow, this, x1, y1);
336 subwindow->add_subwindow(commercial);
337 x1 += commercial->get_w();
341 void EditPanel::reposition_buttons(int x, int y)
347 if( use_editing_mode ) {
348 arrow->reposition_window(x1, y1);
349 x1 += arrow->get_w();
350 ibeam->reposition_window(x1, y1);
351 x1 += ibeam->get_w();
352 x1 += mwindow->theme->toggle_margin;
356 keyframe->reposition_window(x1, y1);
357 x1 += keyframe->get_w();
358 span_keyframe->reposition_window(x1, y1);
359 x1 += span_keyframe->get_w();
362 if( use_locklabels ) {
363 locklabels->reposition_window(x1,y1);
364 x1 += locklabels->get_w();
367 if( use_keyframe || use_locklabels )
368 x1 += mwindow->theme->toggle_margin;
370 inpoint->reposition_window(x1, y1);
371 x1 += inpoint->get_w();
372 outpoint->reposition_window(x1, y1);
373 x1 += outpoint->get_w();
375 splice->reposition_window(x1, y1);
376 x1 += splice->get_w();
378 if( use_overwrite ) {
379 overwrite->reposition_window(x1, y1);
380 x1 += overwrite->get_w();
383 clip->reposition_window(x1, y1);
387 cut->reposition_window(x1, y1);
391 copy->reposition_window(x1, y1);
395 paste->reposition_window(x1, y1);
396 x1 += paste->get_w();
400 meters->reposition_window(x1, y1);
401 x1 += meters->get_w();
405 labelbutton->reposition_window(x1, y1);
406 x1 += labelbutton->get_w();
407 prevlabel->reposition_window(x1, y1);
408 x1 += prevlabel->get_w();
409 nextlabel->reposition_window(x1, y1);
410 x1 += nextlabel->get_w();
414 prevedit->reposition_window(x1, y1);
415 x1 += prevedit->get_w();
419 nextedit->reposition_window(x1, y1);
420 x1 += nextedit->get_w();
424 fit->reposition_window(x1, y1);
426 fit_autos->reposition_window(x1, y1);
427 x1 += fit_autos->get_w();
431 undo->reposition_window(x1, y1);
433 redo->reposition_window(x1, y1);
438 mangoto->reposition_window(x1, y1);
439 x1 += mangoto->get_w();
442 click2play->reposition_window(x1, y1+yS(3));
443 x1 += click2play->get_w();
446 scope->reposition_window(x1, y1-yS(1));
447 x1 += scope->get_w();
451 void EditPanel::create_objects()
456 int EditPanel::get_w()
462 EditLabelbutton::EditLabelbutton(MWindow *mwindow, EditPanel *panel, int x, int y)
463 : BC_Button(x, y, mwindow->theme->get_image_set("labelbutton"))
465 this->mwindow = mwindow;
467 set_tooltip(_("Toggle label at current position ( l )"));
470 EditLabelbutton::~EditLabelbutton()
473 int EditLabelbutton::keypress_event()
475 if( get_keypress() == 'l' && !alt_down() )
476 return handle_event();
479 int EditLabelbutton::handle_event()
481 panel->panel_toggle_label();
486 EditNextLabel::EditNextLabel(MWindow *mwindow,
487 EditPanel *panel, int x, int y)
488 : BC_Button(x, y, mwindow->theme->get_image_set("nextlabel"))
490 this->mwindow = mwindow;
492 set_tooltip(_("Next label ( ctrl -> )"));
494 EditNextLabel::~EditNextLabel()
497 int EditNextLabel::keypress_event()
500 int key = get_keypress();
501 if( (key == RIGHT || key == '.') && !alt_down() ) {
502 panel->panel_next_label(0);
505 if( key == '>' && alt_down() ) {
506 panel->panel_next_label(1);
512 int EditNextLabel::handle_event()
514 int cut = ctrl_down() && alt_down();
515 panel->panel_next_label(cut);
520 EditPrevLabel::EditPrevLabel(MWindow *mwindow,
521 EditPanel *panel, int x, int y)
522 : BC_Button(x, y, mwindow->theme->get_image_set("prevlabel"))
524 this->mwindow = mwindow;
526 set_tooltip(_("Previous label ( ctrl <- )"));
528 EditPrevLabel::~EditPrevLabel()
531 int EditPrevLabel::keypress_event()
534 int key = get_keypress();
535 if( (key == LEFT || key == ',') && !alt_down() ) {
536 panel->panel_prev_label(0);
539 if( key == '<' && alt_down() ) {
540 panel->panel_prev_label(1);
546 int EditPrevLabel::handle_event()
548 int cut = ctrl_down() && alt_down();
549 panel->panel_prev_label(cut);
554 EditPrevEdit::EditPrevEdit(MWindow *mwindow,
555 EditPanel *panel, int x, int y)
556 : BC_Button(x, y, mwindow->theme->get_image_set("prevedit"))
558 this->mwindow = mwindow;
560 set_tooltip(_("Previous edit (alt <- )"));
562 EditPrevEdit::~EditPrevEdit()
565 int EditPrevEdit::keypress_event()
568 int key = get_keypress();
569 if( (key == LEFT || key == ',') && !ctrl_down() ) {
570 panel->panel_prev_edit(0);
573 if( key == ',' && ctrl_down() ) {
574 panel->panel_prev_edit(1);
580 int EditPrevEdit::handle_event()
582 int cut = ctrl_down() && alt_down();
583 panel->panel_prev_edit(cut);
588 EditNextEdit::EditNextEdit(MWindow *mwindow,
589 EditPanel *panel, int x, int y)
590 : BC_Button(x, y, mwindow->theme->get_image_set("nextedit"))
592 this->mwindow = mwindow;
594 set_tooltip(_("Next edit ( alt -> )"));
596 EditNextEdit::~EditNextEdit()
599 int EditNextEdit::keypress_event()
602 int key = get_keypress();
603 if( (key == RIGHT || key == '.') && !ctrl_down() ) {
604 panel->panel_next_edit(0);
607 if( key == '.' && ctrl_down() ) {
608 panel->panel_next_edit(1);
614 int EditNextEdit::handle_event()
616 int cut = ctrl_down() && alt_down();
617 panel->panel_next_edit(cut);
622 EditCopy::EditCopy(MWindow *mwindow, EditPanel *panel, int x, int y)
623 : BC_Button(x, y, mwindow->theme->get_image_set("copy"))
625 this->mwindow = mwindow;
627 set_tooltip(_("Copy ( c )"));
629 EditCopy::~EditCopy()
633 int EditCopy::keypress_event()
635 if( alt_down() ) return 0;
636 if( (get_keypress() == 'c' && !ctrl_down()) ||
637 (panel->is_vwindow() && get_keypress() == 'C') ) {
638 return handle_event();
642 int EditCopy::handle_event()
644 panel->panel_copy_selection();
648 //overwrite_selection
649 EditOverwrite::EditOverwrite(MWindow *mwindow, EditPanel *panel, int x, int y)
650 : BC_Button(x, y, mwindow->theme->overwrite_data)
652 this->mwindow = mwindow;
654 set_tooltip(_("Overwrite ( b )"));
656 EditOverwrite::~EditOverwrite()
659 int EditOverwrite::handle_event()
661 panel->panel_overwrite_selection();
664 int EditOverwrite::keypress_event()
666 if( alt_down() ) return 0;
667 if( get_keypress() == 'b' ||
668 (panel->is_vwindow() && get_keypress() == 'B') ) {
677 EditInPoint::EditInPoint(MWindow *mwindow, EditPanel *panel, int x, int y)
678 : BC_Button(x, y, mwindow->theme->get_image_set("inbutton"))
680 this->mwindow = mwindow;
682 set_tooltip(_("In point ( [ or < )"));
684 EditInPoint::~EditInPoint()
687 int EditInPoint::handle_event()
689 panel->panel_set_inpoint();
692 int EditInPoint::keypress_event()
694 int key = get_keypress();
697 panel->panel_unset_inoutpoint();
701 else if( !alt_down() ) {
702 if( key == '[' || key == '<' ) {
703 panel->panel_set_inpoint();
712 EditOutPoint::EditOutPoint(MWindow *mwindow, EditPanel *panel, int x, int y)
713 : BC_Button(x, y, mwindow->theme->get_image_set("outbutton"))
715 this->mwindow = mwindow;
717 set_tooltip(_("Out point ( ] or > )"));
719 EditOutPoint::~EditOutPoint()
722 int EditOutPoint::handle_event()
724 panel->panel_set_outpoint();
727 int EditOutPoint::keypress_event()
729 int key = get_keypress();
732 panel->panel_unset_inoutpoint();
736 else if( !alt_down() ) {
737 if( key == ']' || key == '>' ) {
738 panel->panel_set_outpoint();
746 EditSplice::EditSplice(MWindow *mwindow, EditPanel *panel, int x, int y)
747 : BC_Button(x, y, mwindow->theme->splice_data)
749 this->mwindow = mwindow;
751 set_tooltip(_("Splice ( v )"));
753 EditSplice::~EditSplice()
756 int EditSplice::handle_event()
758 panel->panel_splice_selection();
761 int EditSplice::keypress_event()
763 if( alt_down() ) return 0;
764 if( (get_keypress() == 'v' && !ctrl_down()) ||
765 (panel->is_vwindow() && get_keypress() == 'V') ) {
773 EditToClip::EditToClip(MWindow *mwindow, EditPanel *panel, int x, int y)
774 : BC_Button(x, y, mwindow->theme->get_image_set("toclip"))
776 this->mwindow = mwindow;
778 set_tooltip(_("To clip ( i )"));
780 EditToClip::~EditToClip()
783 int EditToClip::handle_event()
785 panel->panel_to_clip();
789 int EditToClip::keypress_event()
791 if( alt_down() ) return 0;
792 if( get_keypress() == 'i' ||
793 (panel->is_vwindow() && get_keypress() == 'I') ) {
801 EditCut::EditCut(MWindow *mwindow, EditPanel *panel, int x, int y)
802 : BC_Button(x, y, mwindow->theme->get_image_set("cut"))
804 this->mwindow = mwindow;
806 set_tooltip(_("Split | Cut ( x )"));
811 int EditCut::keypress_event()
813 if( ctrl_down() || shift_down() || alt_down() )
815 if( get_keypress() == 'x' )
816 return handle_event();
820 int EditCut::handle_event()
827 EditPaste::EditPaste(MWindow *mwindow, EditPanel *panel, int x, int y)
828 : BC_Button(x, y, mwindow->theme->get_image_set("paste"))
830 this->mwindow = mwindow;
832 set_tooltip(_("Paste ( v )"));
834 EditPaste::~EditPaste()
838 int EditPaste::keypress_event()
840 if( get_keypress() == 'v' && !ctrl_down() )
841 return handle_event();
844 int EditPaste::handle_event()
846 panel->panel_paste();
851 EditFit::EditFit(MWindow *mwindow, EditPanel *panel, int x, int y)
852 : BC_Button(x, y, mwindow->theme->get_image_set("fit"))
854 this->mwindow = mwindow;
856 set_tooltip(_("Fit selection to display ( f )"));
861 int EditFit::keypress_event()
863 if( !alt_down() && get_keypress() == 'f' ) {
869 int EditFit::handle_event()
871 panel->panel_fit_selection();
876 EditFitAutos::EditFitAutos(MWindow *mwindow, EditPanel *panel, int x, int y)
877 : BC_Button(x, y, mwindow->theme->get_image_set("fitautos"))
879 this->mwindow = mwindow;
881 set_tooltip(_("Fit all autos to display ( Alt + f )"));
883 EditFitAutos::~EditFitAutos()
886 int EditFitAutos::keypress_event()
888 if( get_keypress() == 'f' && alt_down() ) {
889 panel->panel_fit_autos(!ctrl_down() ? 1 : 0);
894 int EditFitAutos::handle_event()
896 panel->panel_fit_autos(1);
901 ArrowButton::ArrowButton(MWindow *mwindow, EditPanel *panel, int x, int y)
903 mwindow->theme->get_image_set("arrow"),
904 mwindow->edl->session->editing_mode == EDITING_ARROW,
907 this->mwindow = mwindow;
909 set_tooltip(_("Drag and drop editing mode"));
912 int ArrowButton::handle_event()
915 panel->ibeam->update(0);
916 panel->panel_set_editing_mode(EDITING_ARROW);
917 // Nothing after this
921 IBeamButton::IBeamButton(MWindow *mwindow, EditPanel *panel, int x, int y)
923 mwindow->theme->get_image_set("ibeam"),
924 mwindow->edl->session->editing_mode == EDITING_IBEAM,
927 this->mwindow = mwindow;
929 set_tooltip(_("Cut and paste editing mode"));
932 int IBeamButton::handle_event()
935 panel->arrow->update(0);
936 panel->panel_set_editing_mode(EDITING_IBEAM);
937 // Nothing after this
942 KeyFrameButton::KeyFrameButton(MWindow *mwindow, EditPanel *panel, int x, int y)
944 mwindow->theme->get_image_set("autokeyframe"),
945 mwindow->edl->session->auto_keyframes,
948 this->mwindow = mwindow;
950 set_tooltip(_("Generate keyframes while tweeking (j)"));
953 int KeyFrameButton::handle_event()
955 panel->panel_set_auto_keyframes(get_value());
959 int KeyFrameButton::keypress_event()
961 int key = get_keypress();
962 if( key == 'j' && !ctrl_down() && !shift_down() && !alt_down() ) {
963 int value = get_value() ? 0 : 1;
965 panel->panel_set_auto_keyframes(value);
972 SpanKeyFrameButton::SpanKeyFrameButton(MWindow *mwindow, EditPanel *panel, int x, int y)
974 mwindow->theme->get_image_set("spankeyframe"),
975 mwindow->edl->session->span_keyframes,
978 this->mwindow = mwindow;
980 set_tooltip(_("Allow keyframe spanning"));
983 int SpanKeyFrameButton::handle_event()
985 panel->panel_set_span_keyframes(get_value());
989 //set_labels_follow_edits
990 LockLabelsButton::LockLabelsButton(MWindow *mwindow, EditPanel *panel, int x, int y)
992 mwindow->theme->get_image_set("locklabels"),
993 mwindow->edl->session->labels_follow_edits,
996 this->mwindow = mwindow;
998 set_tooltip(_("Lock labels from moving with edits"));
1001 int LockLabelsButton::handle_event()
1003 panel->panel_set_labels_follow_edits(get_value());
1009 EditManualGoto::EditManualGoto(MWindow *mwindow, EditPanel *panel, int x, int y)
1010 : BC_Button(x, y, mwindow->theme->get_image_set("goto"))
1012 this->mwindow = mwindow;
1013 this->panel = panel;
1014 mangoto = new ManualGoto(mwindow, panel);
1015 set_tooltip(_("Manual goto ( g )"));
1017 EditManualGoto::~EditManualGoto()
1021 int EditManualGoto::handle_event()
1027 int EditManualGoto::keypress_event()
1029 if( get_keypress() == 'g' ) {
1037 EditClick2Play::EditClick2Play(MWindow *mwindow, EditPanel *panel, int x, int y)
1038 : BC_Toggle(x, y, mwindow->theme->get_image_set("playpatch_data"),
1039 !panel->is_vwindow() ?
1040 mwindow->edl->session->cwindow_click2play :
1041 mwindow->edl->session->vwindow_click2play)
1043 this->mwindow = mwindow;
1044 this->panel = panel;
1045 set_tooltip(_("Click to play (p)"));
1047 int EditClick2Play::handle_event()
1049 int value = get_value();
1050 panel->set_click_to_play(value);
1053 int EditClick2Play::keypress_event()
1055 int key = get_keypress();
1056 if( key == 'p' && !ctrl_down() && !shift_down() && !alt_down() ) {
1057 int value = get_value() ? 0 : 1;
1059 panel->set_click_to_play(value);
1066 EditCommercial::EditCommercial(MWindow *mwindow, EditPanel *panel, int x, int y)
1067 : BC_Button(x, y, mwindow->theme->get_image_set("commercial"))
1069 this->mwindow = mwindow;
1070 this->panel = panel;
1071 set_tooltip(_("Commercial ( shift A )"));
1073 EditCommercial::~EditCommercial()
1076 int EditCommercial::keypress_event()
1078 if( ctrl_down() || !shift_down() || alt_down() )
1080 if( get_keypress() == 'A' )
1081 return handle_event();
1085 int EditCommercial::handle_event()
1087 int have_mwindow_lock = mwindow->gui->get_window_lock();
1088 if( have_mwindow_lock )
1089 mwindow->gui->unlock_window();
1090 mwindow->commit_commercial();
1091 if( !mwindow->put_commercial() ) {
1092 mwindow->gui->lock_window("EditCommercial::handle_event 1");
1094 if( !have_mwindow_lock )
1095 mwindow->gui->unlock_window();
1096 mwindow->activate_commercial();
1099 mwindow->undo_commercial();
1100 if( have_mwindow_lock )
1101 mwindow->gui->lock_window("EditCommercial::handle_event 2");
1106 EditUndo::EditUndo(MWindow *mwindow, EditPanel *panel, int x, int y)
1107 : BC_Button(x, y, mwindow->theme->get_image_set("undo"))
1109 this->mwindow = mwindow;
1110 this->panel = panel;
1111 set_tooltip(_("Undo ( z )"));
1113 EditUndo::~EditUndo()
1116 int EditUndo::keypress_event()
1118 if( ctrl_down() || shift_down() || alt_down() )
1120 if( get_keypress() == 'z' )
1121 return handle_event();
1124 int EditUndo::handle_event()
1126 mwindow->undo_entry(panel->subwindow);
1130 EditRedo::EditRedo(MWindow *mwindow, EditPanel *panel, int x, int y)
1131 : BC_Button(x, y, mwindow->theme->get_image_set("redo"))
1133 this->mwindow = mwindow;
1134 this->panel = panel;
1135 set_tooltip(_("Redo ( shift Z )"));
1137 EditRedo::~EditRedo()
1140 int EditRedo::keypress_event()
1142 if( ctrl_down() || !shift_down() || alt_down() )
1144 if( get_keypress() == 'Z' )
1145 return handle_event();
1148 int EditRedo::handle_event()
1150 mwindow->redo_entry(panel->subwindow);
1155 EditPanelScopeDialog::EditPanelScopeDialog(MWindow *mwindow, EditPanel *panel)
1158 this->mwindow = mwindow;
1159 this->panel = panel;
1161 gui_lock = new Mutex("EditPanelScopeDialog::gui_lock");
1164 EditPanelScopeDialog::~EditPanelScopeDialog()
1170 void EditPanelScopeDialog::handle_done_event(int result)
1172 gui_lock->lock("EditPanelScopeDialog::handle_done_event");
1176 panel->subwindow->lock_window("EditPanelScopeDialog::handle_done_event");
1177 panel->scope->update(0);
1178 panel->subwindow->unlock_window();
1181 BC_Window* EditPanelScopeDialog::new_gui()
1183 EditPanelScopeGUI *gui = new EditPanelScopeGUI(mwindow, this);
1184 gui->create_objects();
1189 void EditPanelScopeDialog::process(VFrame *output_frame)
1191 if( panel->scope_dialog ) {
1192 panel->scope_dialog->gui_lock->lock("EditPanelScopeDialog::process");
1193 if( panel->scope_dialog->scope_gui ) {
1194 EditPanelScopeGUI *gui = panel->scope_dialog->scope_gui;
1195 gui->process(output_frame);
1197 panel->scope_dialog->gui_lock->unlock();
1201 EditPanelScopeGUI::EditPanelScopeGUI(MWindow *mwindow, EditPanelScopeDialog *dialog)
1202 : ScopeGUI(mwindow->theme,
1203 mwindow->session->scope_x, mwindow->session->scope_y,
1204 mwindow->session->scope_w, mwindow->session->scope_h,
1205 mwindow->preferences->processors)
1207 this->mwindow = mwindow;
1208 this->dialog = dialog;
1211 EditPanelScopeGUI::~EditPanelScopeGUI()
1215 void EditPanelScopeGUI::create_objects()
1217 MainSession *session = mwindow->session;
1218 use_hist = session->use_hist;
1219 use_wave = session->use_wave;
1220 use_vector = session->use_vector;
1221 use_hist_parade = session->use_hist_parade;
1222 use_wave_parade = session->use_wave_parade;
1223 ScopeGUI::create_objects();
1226 void EditPanelScopeGUI::toggle_event()
1228 MainSession *session = mwindow->session;
1229 session->use_hist = use_hist;
1230 session->use_wave = use_wave;
1231 session->use_vector = use_vector;
1232 session->use_hist_parade = use_hist_parade;
1233 session->use_wave_parade = use_wave_parade;
1236 int EditPanelScopeGUI::translation_event()
1238 ScopeGUI::translation_event();
1239 MainSession *session = mwindow->session;
1240 session->scope_x = get_x();
1241 session->scope_y = get_y();
1245 int EditPanelScopeGUI::resize_event(int w, int h)
1247 ScopeGUI::resize_event(w, h);
1248 MainSession *session = mwindow->session;
1249 session->scope_w = w;
1250 session->scope_h = h;
1254 EditPanelScope::EditPanelScope(MWindow *mwindow, EditPanel *panel, int x, int y)
1255 : BC_Toggle(x, y, mwindow->theme ?
1256 mwindow->theme->get_image_set("scope_toggle") : 0, 0)
1258 this->mwindow = mwindow;
1259 this->panel = panel;
1260 set_tooltip(_("View scope"));
1263 EditPanelScope::~EditPanelScope()
1267 void EditPanelScopeGUI::update_scope()
1270 if( dialog->panel->is_cwindow() ) {
1271 CWindowGUI *cgui = (CWindowGUI *)dialog->panel->subwindow;
1272 canvas = cgui->canvas;
1274 else if( dialog->panel->is_vwindow() ) {
1275 VWindowGUI *vgui = (VWindowGUI *)dialog->panel->subwindow;
1276 canvas = vgui->canvas;
1278 if( canvas && canvas->refresh_frame )
1279 process(canvas->refresh_frame);
1282 int EditPanelScope::handle_event()
1285 int v = get_value();
1287 panel->scope_dialog->start();
1289 panel->scope_dialog->close_window();
1290 lock_window("EditPanelScope::handle_event");