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)
174 int button_w = xS(24); // mwindow->theme->get_image_set("meters")[0]->get_w();
175 int result = button_w * total_buttons;
177 result += 2*(button_w + mwindow->theme->toggle_margin);
181 int EditPanel::calculate_h(MWindow *mwindow)
183 return mwindow->theme->get_image_set("meters")[0]->get_h();
186 void EditPanel::create_buttons()
190 if( use_editing_mode ) {
191 arrow = new ArrowButton(mwindow, this, x1, y1);
192 subwindow->add_subwindow(arrow);
193 x1 += arrow->get_w();
194 ibeam = new IBeamButton(mwindow, this, x1, y1);
195 subwindow->add_subwindow(ibeam);
196 x1 += ibeam->get_w();
197 x1 += mwindow->theme->toggle_margin;
201 keyframe = new KeyFrameButton(mwindow, this, x1, y1);
202 subwindow->add_subwindow(keyframe);
203 x1 += keyframe->get_w();
204 span_keyframe = new SpanKeyFrameButton(mwindow, this, x1, y1);
205 subwindow->add_subwindow(span_keyframe);
206 x1 += span_keyframe->get_w();
209 if( use_locklabels ) {
210 locklabels = new LockLabelsButton(mwindow, this, x1, y1);
211 subwindow->add_subwindow(locklabels);
212 x1 += locklabels->get_w();
215 if( use_keyframe || use_locklabels )
216 x1 += mwindow->theme->toggle_margin;
219 inpoint = new EditInPoint(mwindow, this, x1, y1);
220 subwindow->add_subwindow(inpoint);
221 x1 += inpoint->get_w();
222 outpoint = new EditOutPoint(mwindow, this, x1, y1);
223 subwindow->add_subwindow(outpoint);
224 x1 += outpoint->get_w();
227 splice = new EditSplice(mwindow, this, x1, y1);
228 subwindow->add_subwindow(splice);
229 x1 += splice->get_w();
232 if( use_overwrite ) {
233 overwrite = new EditOverwrite(mwindow, this, x1, y1);
234 subwindow->add_subwindow(overwrite);
235 x1 += overwrite->get_w();
239 clip = new EditToClip(mwindow, this, x1, y1);
240 subwindow->add_subwindow(clip);
245 cut = new EditCut(mwindow, this, x1, y1);
246 subwindow->add_subwindow(cut);
251 copy = new EditCopy(mwindow, this, x1, y1);
252 subwindow->add_subwindow(copy);
257 paste = new EditPaste(mwindow, this, x1, y1);
258 subwindow->add_subwindow(paste);
259 x1 += paste->get_w();
263 labelbutton = new EditLabelbutton(mwindow, this, x1, y1);
264 subwindow->add_subwindow(labelbutton);
265 x1 += labelbutton->get_w();
266 prevlabel = new EditPrevLabel(mwindow, this, x1, y1);
267 subwindow->add_subwindow(prevlabel);
268 x1 += prevlabel->get_w();
269 nextlabel = new EditNextLabel(mwindow, this, x1, y1);
270 subwindow->add_subwindow(nextlabel);
271 x1 += nextlabel->get_w();
274 // all windows except VWindow since it's only implemented in MWindow.
276 prevedit = new EditPrevEdit(mwindow, this, x1, y1);
277 subwindow->add_subwindow(prevedit);
278 x1 += prevedit->get_w();
279 nextedit = new EditNextEdit(mwindow, this, x1, y1);
280 subwindow->add_subwindow(nextedit);
281 x1 += nextedit->get_w();
285 fit = new EditFit(mwindow, this, x1, y1);
286 subwindow->add_subwindow(fit);
288 fit_autos = new EditFitAutos(mwindow, this, x1, y1);
289 subwindow->add_subwindow(fit_autos);
290 x1 += fit_autos->get_w();
294 undo = new EditUndo(mwindow, this, x1, y1);
295 subwindow->add_subwindow(undo);
297 redo = new EditRedo(mwindow, this, x1, y1);
298 subwindow->add_subwindow(redo);
303 mangoto = new EditManualGoto(mwindow, this, x1, y1);
304 subwindow->add_subwindow(mangoto);
305 x1 += mangoto->get_w();
309 click2play = new EditClick2Play(mwindow, this, x1, y1+yS(3));
310 subwindow->add_subwindow(click2play);
311 x1 += click2play->get_w();
315 scope = new EditPanelScope(mwindow, this, x1, y1-yS(1));
316 subwindow->add_subwindow(scope);
317 x1 += scope->get_w();
318 scope_dialog = new EditPanelScopeDialog(mwindow, this);
323 meters = new MeterShow(mwindow, meter_panel, x1, y1);
324 subwindow->add_subwindow(meters);
325 x1 += meters->get_w();
328 printf("EditPanel::create_objects: meter_panel == 0\n");
331 if( use_commercial ) {
332 commercial = new EditCommercial(mwindow, this, x1, y1);
333 subwindow->add_subwindow(commercial);
334 x1 += commercial->get_w();
338 void EditPanel::reposition_buttons(int x, int y)
344 if( use_editing_mode ) {
345 arrow->reposition_window(x1, y1);
346 x1 += arrow->get_w();
347 ibeam->reposition_window(x1, y1);
348 x1 += ibeam->get_w();
349 x1 += mwindow->theme->toggle_margin;
353 keyframe->reposition_window(x1, y1);
354 x1 += keyframe->get_w();
355 span_keyframe->reposition_window(x1, y1);
356 x1 += span_keyframe->get_w();
359 if( use_locklabels ) {
360 locklabels->reposition_window(x1,y1);
361 x1 += locklabels->get_w();
364 if( use_keyframe || use_locklabels )
365 x1 += mwindow->theme->toggle_margin;
367 inpoint->reposition_window(x1, y1);
368 x1 += inpoint->get_w();
369 outpoint->reposition_window(x1, y1);
370 x1 += outpoint->get_w();
372 splice->reposition_window(x1, y1);
373 x1 += splice->get_w();
375 if( use_overwrite ) {
376 overwrite->reposition_window(x1, y1);
377 x1 += overwrite->get_w();
380 clip->reposition_window(x1, y1);
384 cut->reposition_window(x1, y1);
388 copy->reposition_window(x1, y1);
392 paste->reposition_window(x1, y1);
393 x1 += paste->get_w();
397 labelbutton->reposition_window(x1, y1);
398 x1 += labelbutton->get_w();
399 prevlabel->reposition_window(x1, y1);
400 x1 += prevlabel->get_w();
401 nextlabel->reposition_window(x1, y1);
402 x1 += nextlabel->get_w();
406 prevedit->reposition_window(x1, y1);
407 x1 += prevedit->get_w();
411 nextedit->reposition_window(x1, y1);
412 x1 += nextedit->get_w();
416 fit->reposition_window(x1, y1);
418 fit_autos->reposition_window(x1, y1);
419 x1 += fit_autos->get_w();
423 undo->reposition_window(x1, y1);
425 redo->reposition_window(x1, y1);
430 mangoto->reposition_window(x1, y1);
431 x1 += mangoto->get_w();
434 click2play->reposition_window(x1, y1+yS(3));
435 x1 += click2play->get_w();
438 scope->reposition_window(x1, y1-yS(1));
439 x1 += scope->get_w();
443 meters->reposition_window(x1, y1);
444 x1 += meters->get_w();
448 void EditPanel::create_objects()
453 int EditPanel::get_w()
459 EditLabelbutton::EditLabelbutton(MWindow *mwindow, EditPanel *panel, int x, int y)
460 : BC_Button(x, y, mwindow->theme->get_image_set("labelbutton"))
462 this->mwindow = mwindow;
464 set_tooltip(_("Toggle label at current position ( l )"));
467 EditLabelbutton::~EditLabelbutton()
470 int EditLabelbutton::keypress_event()
472 if( get_keypress() == 'l' && !alt_down() )
473 return handle_event();
476 int EditLabelbutton::handle_event()
478 panel->panel_toggle_label();
483 EditNextLabel::EditNextLabel(MWindow *mwindow,
484 EditPanel *panel, int x, int y)
485 : BC_Button(x, y, mwindow->theme->get_image_set("nextlabel"))
487 this->mwindow = mwindow;
489 set_tooltip(_("Next label ( ctrl -> )"));
491 EditNextLabel::~EditNextLabel()
494 int EditNextLabel::keypress_event()
497 int key = get_keypress();
498 if( (key == RIGHT || key == '.') && !alt_down() ) {
499 panel->panel_next_label(0);
502 if( key == '>' && alt_down() ) {
503 panel->panel_next_label(1);
509 int EditNextLabel::handle_event()
511 int cut = ctrl_down() && alt_down();
512 panel->panel_next_label(cut);
517 EditPrevLabel::EditPrevLabel(MWindow *mwindow,
518 EditPanel *panel, int x, int y)
519 : BC_Button(x, y, mwindow->theme->get_image_set("prevlabel"))
521 this->mwindow = mwindow;
523 set_tooltip(_("Previous label ( ctrl <- )"));
525 EditPrevLabel::~EditPrevLabel()
528 int EditPrevLabel::keypress_event()
531 int key = get_keypress();
532 if( (key == LEFT || key == ',') && !alt_down() ) {
533 panel->panel_prev_label(0);
536 if( key == '<' && alt_down() ) {
537 panel->panel_prev_label(1);
543 int EditPrevLabel::handle_event()
545 int cut = ctrl_down() && alt_down();
546 panel->panel_prev_label(cut);
551 EditPrevEdit::EditPrevEdit(MWindow *mwindow,
552 EditPanel *panel, int x, int y)
553 : BC_Button(x, y, mwindow->theme->get_image_set("prevedit"))
555 this->mwindow = mwindow;
557 set_tooltip(_("Previous edit (alt <- )"));
559 EditPrevEdit::~EditPrevEdit()
562 int EditPrevEdit::keypress_event()
565 int key = get_keypress();
566 if( (key == LEFT || key == ',') && !ctrl_down() ) {
567 panel->panel_prev_edit(0);
570 if( key == ',' && ctrl_down() ) {
571 panel->panel_prev_edit(1);
577 int EditPrevEdit::handle_event()
579 int cut = ctrl_down() && alt_down();
580 panel->panel_prev_edit(cut);
585 EditNextEdit::EditNextEdit(MWindow *mwindow,
586 EditPanel *panel, int x, int y)
587 : BC_Button(x, y, mwindow->theme->get_image_set("nextedit"))
589 this->mwindow = mwindow;
591 set_tooltip(_("Next edit ( alt -> )"));
593 EditNextEdit::~EditNextEdit()
596 int EditNextEdit::keypress_event()
599 int key = get_keypress();
600 if( (key == RIGHT || key == '.') && !ctrl_down() ) {
601 panel->panel_next_edit(0);
604 if( key == '.' && ctrl_down() ) {
605 panel->panel_next_edit(1);
611 int EditNextEdit::handle_event()
613 int cut = ctrl_down() && alt_down();
614 panel->panel_next_edit(cut);
619 EditCopy::EditCopy(MWindow *mwindow, EditPanel *panel, int x, int y)
620 : BC_Button(x, y, mwindow->theme->get_image_set("copy"))
622 this->mwindow = mwindow;
624 set_tooltip(_("Copy ( c )"));
626 EditCopy::~EditCopy()
630 int EditCopy::keypress_event()
632 if( alt_down() ) return 0;
633 if( (get_keypress() == 'c' && !ctrl_down()) ||
634 (panel->is_vwindow() && get_keypress() == 'C') ) {
635 return handle_event();
639 int EditCopy::handle_event()
641 panel->panel_copy_selection();
645 //overwrite_selection
646 EditOverwrite::EditOverwrite(MWindow *mwindow, EditPanel *panel, int x, int y)
647 : BC_Button(x, y, mwindow->theme->overwrite_data)
649 this->mwindow = mwindow;
651 set_tooltip(_("Overwrite ( b )"));
653 EditOverwrite::~EditOverwrite()
656 int EditOverwrite::handle_event()
658 panel->panel_overwrite_selection();
661 int EditOverwrite::keypress_event()
663 if( alt_down() ) return 0;
664 if( get_keypress() == 'b' ||
665 (panel->is_vwindow() && get_keypress() == 'B') ) {
674 EditInPoint::EditInPoint(MWindow *mwindow, EditPanel *panel, int x, int y)
675 : BC_Button(x, y, mwindow->theme->get_image_set("inbutton"))
677 this->mwindow = mwindow;
679 set_tooltip(_("In point ( [ or < )"));
681 EditInPoint::~EditInPoint()
684 int EditInPoint::handle_event()
686 panel->panel_set_inpoint();
689 int EditInPoint::keypress_event()
691 int key = get_keypress();
694 panel->panel_unset_inoutpoint();
698 else if( !alt_down() ) {
699 if( key == '[' || key == '<' ) {
700 panel->panel_set_inpoint();
709 EditOutPoint::EditOutPoint(MWindow *mwindow, EditPanel *panel, int x, int y)
710 : BC_Button(x, y, mwindow->theme->get_image_set("outbutton"))
712 this->mwindow = mwindow;
714 set_tooltip(_("Out point ( ] or > )"));
716 EditOutPoint::~EditOutPoint()
719 int EditOutPoint::handle_event()
721 panel->panel_set_outpoint();
724 int EditOutPoint::keypress_event()
726 int key = get_keypress();
729 panel->panel_unset_inoutpoint();
733 else if( !alt_down() ) {
734 if( key == ']' || key == '>' ) {
735 panel->panel_set_outpoint();
743 EditSplice::EditSplice(MWindow *mwindow, EditPanel *panel, int x, int y)
744 : BC_Button(x, y, mwindow->theme->splice_data)
746 this->mwindow = mwindow;
748 set_tooltip(_("Splice ( v )"));
750 EditSplice::~EditSplice()
753 int EditSplice::handle_event()
755 panel->panel_splice_selection();
758 int EditSplice::keypress_event()
760 if( alt_down() ) return 0;
761 if( (get_keypress() == 'v' && !ctrl_down()) ||
762 (panel->is_vwindow() && get_keypress() == 'V') ) {
770 EditToClip::EditToClip(MWindow *mwindow, EditPanel *panel, int x, int y)
771 : BC_Button(x, y, mwindow->theme->get_image_set("toclip"))
773 this->mwindow = mwindow;
775 set_tooltip(_("To clip ( i )"));
777 EditToClip::~EditToClip()
780 int EditToClip::handle_event()
782 panel->panel_to_clip();
786 int EditToClip::keypress_event()
788 if( alt_down() ) return 0;
789 if( get_keypress() == 'i' ||
790 (panel->is_vwindow() && get_keypress() == 'I') ) {
798 EditCut::EditCut(MWindow *mwindow, EditPanel *panel, int x, int y)
799 : BC_Button(x, y, mwindow->theme->get_image_set("cut"))
801 this->mwindow = mwindow;
803 set_tooltip(_("Split | Cut ( x )"));
808 int EditCut::keypress_event()
810 if( ctrl_down() || shift_down() || alt_down() )
812 if( get_keypress() == 'x' )
813 return handle_event();
817 int EditCut::handle_event()
824 EditPaste::EditPaste(MWindow *mwindow, EditPanel *panel, int x, int y)
825 : BC_Button(x, y, mwindow->theme->get_image_set("paste"))
827 this->mwindow = mwindow;
829 set_tooltip(_("Paste ( v )"));
831 EditPaste::~EditPaste()
835 int EditPaste::keypress_event()
837 if( get_keypress() == 'v' && !ctrl_down() )
838 return handle_event();
841 int EditPaste::handle_event()
843 panel->panel_paste();
848 EditFit::EditFit(MWindow *mwindow, EditPanel *panel, int x, int y)
849 : BC_Button(x, y, mwindow->theme->get_image_set("fit"))
851 this->mwindow = mwindow;
853 set_tooltip(_("Fit selection to display ( f )"));
858 int EditFit::keypress_event()
860 if( !alt_down() && get_keypress() == 'f' ) {
866 int EditFit::handle_event()
868 panel->panel_fit_selection();
873 EditFitAutos::EditFitAutos(MWindow *mwindow, EditPanel *panel, int x, int y)
874 : BC_Button(x, y, mwindow->theme->get_image_set("fitautos"))
876 this->mwindow = mwindow;
878 set_tooltip(_("Fit all autos to display ( Alt + f )"));
880 EditFitAutos::~EditFitAutos()
883 int EditFitAutos::keypress_event()
885 if( get_keypress() == 'f' && alt_down() ) {
886 panel->panel_fit_autos(!ctrl_down() ? 1 : 0);
891 int EditFitAutos::handle_event()
893 panel->panel_fit_autos(1);
898 ArrowButton::ArrowButton(MWindow *mwindow, EditPanel *panel, int x, int y)
900 mwindow->theme->get_image_set("arrow"),
901 mwindow->edl->session->editing_mode == EDITING_ARROW,
904 this->mwindow = mwindow;
906 set_tooltip(_("Drag and drop editing mode"));
909 int ArrowButton::handle_event()
912 panel->ibeam->update(0);
913 panel->panel_set_editing_mode(EDITING_ARROW);
914 // Nothing after this
918 IBeamButton::IBeamButton(MWindow *mwindow, EditPanel *panel, int x, int y)
920 mwindow->theme->get_image_set("ibeam"),
921 mwindow->edl->session->editing_mode == EDITING_IBEAM,
924 this->mwindow = mwindow;
926 set_tooltip(_("Cut and paste editing mode"));
929 int IBeamButton::handle_event()
932 panel->arrow->update(0);
933 panel->panel_set_editing_mode(EDITING_IBEAM);
934 // Nothing after this
939 KeyFrameButton::KeyFrameButton(MWindow *mwindow, EditPanel *panel, int x, int y)
941 mwindow->theme->get_image_set("autokeyframe"),
942 mwindow->edl->session->auto_keyframes,
945 this->mwindow = mwindow;
947 set_tooltip(_("Generate keyframes while tweeking (j)"));
950 int KeyFrameButton::handle_event()
952 panel->panel_set_auto_keyframes(get_value());
956 int KeyFrameButton::keypress_event()
958 int key = get_keypress();
959 if( key == 'j' && !ctrl_down() && !shift_down() && !alt_down() ) {
960 int value = get_value() ? 0 : 1;
962 panel->panel_set_auto_keyframes(value);
969 SpanKeyFrameButton::SpanKeyFrameButton(MWindow *mwindow, EditPanel *panel, int x, int y)
971 mwindow->theme->get_image_set("spankeyframe"),
972 mwindow->edl->session->span_keyframes,
975 this->mwindow = mwindow;
977 set_tooltip(_("Allow keyframe spanning"));
980 int SpanKeyFrameButton::handle_event()
982 panel->panel_set_span_keyframes(get_value());
986 //set_labels_follow_edits
987 LockLabelsButton::LockLabelsButton(MWindow *mwindow, EditPanel *panel, int x, int y)
989 mwindow->theme->get_image_set("locklabels"),
990 mwindow->edl->session->labels_follow_edits,
993 this->mwindow = mwindow;
995 set_tooltip(_("Lock labels from moving with edits"));
998 int LockLabelsButton::handle_event()
1000 panel->panel_set_labels_follow_edits(get_value());
1006 EditManualGoto::EditManualGoto(MWindow *mwindow, EditPanel *panel, int x, int y)
1007 : BC_Button(x, y, mwindow->theme->get_image_set("goto"))
1009 this->mwindow = mwindow;
1010 this->panel = panel;
1011 mangoto = new ManualGoto(mwindow, panel);
1012 set_tooltip(_("Manual goto ( g )"));
1014 EditManualGoto::~EditManualGoto()
1018 int EditManualGoto::handle_event()
1024 int EditManualGoto::keypress_event()
1026 if( get_keypress() == 'g' ) {
1034 EditClick2Play::EditClick2Play(MWindow *mwindow, EditPanel *panel, int x, int y)
1035 : BC_Toggle(x, y, mwindow->theme->get_image_set("playpatch_data"),
1036 !panel->is_vwindow() ?
1037 mwindow->edl->session->cwindow_click2play :
1038 mwindow->edl->session->vwindow_click2play)
1040 this->mwindow = mwindow;
1041 this->panel = panel;
1042 set_tooltip(_("Click to play (p)"));
1044 int EditClick2Play::handle_event()
1046 int value = get_value();
1047 panel->set_click_to_play(value);
1050 int EditClick2Play::keypress_event()
1052 int key = get_keypress();
1053 if( key == 'p' && !ctrl_down() && !shift_down() && !alt_down() ) {
1054 int value = get_value() ? 0 : 1;
1056 panel->set_click_to_play(value);
1063 EditCommercial::EditCommercial(MWindow *mwindow, EditPanel *panel, int x, int y)
1064 : BC_Button(x, y, mwindow->theme->get_image_set("commercial"))
1066 this->mwindow = mwindow;
1067 this->panel = panel;
1068 set_tooltip(_("Commercial ( shift A )"));
1070 EditCommercial::~EditCommercial()
1073 int EditCommercial::keypress_event()
1075 if( ctrl_down() || !shift_down() || alt_down() )
1077 if( get_keypress() == 'A' )
1078 return handle_event();
1082 int EditCommercial::handle_event()
1084 int have_mwindow_lock = mwindow->gui->get_window_lock();
1085 if( have_mwindow_lock )
1086 mwindow->gui->unlock_window();
1087 mwindow->commit_commercial();
1088 if( !mwindow->put_commercial() ) {
1089 mwindow->gui->lock_window("EditCommercial::handle_event 1");
1091 if( !have_mwindow_lock )
1092 mwindow->gui->unlock_window();
1093 mwindow->activate_commercial();
1096 mwindow->undo_commercial();
1097 if( have_mwindow_lock )
1098 mwindow->gui->lock_window("EditCommercial::handle_event 2");
1103 EditUndo::EditUndo(MWindow *mwindow, EditPanel *panel, int x, int y)
1104 : BC_Button(x, y, mwindow->theme->get_image_set("undo"))
1106 this->mwindow = mwindow;
1107 this->panel = panel;
1108 set_tooltip(_("Undo ( z )"));
1110 EditUndo::~EditUndo()
1113 int EditUndo::keypress_event()
1115 if( ctrl_down() || shift_down() || alt_down() )
1117 if( get_keypress() == 'z' )
1118 return handle_event();
1121 int EditUndo::handle_event()
1123 mwindow->undo_entry(panel->subwindow);
1127 EditRedo::EditRedo(MWindow *mwindow, EditPanel *panel, int x, int y)
1128 : BC_Button(x, y, mwindow->theme->get_image_set("redo"))
1130 this->mwindow = mwindow;
1131 this->panel = panel;
1132 set_tooltip(_("Redo ( shift Z )"));
1134 EditRedo::~EditRedo()
1137 int EditRedo::keypress_event()
1139 if( ctrl_down() || !shift_down() || alt_down() )
1141 if( get_keypress() == 'Z' )
1142 return handle_event();
1145 int EditRedo::handle_event()
1147 mwindow->redo_entry(panel->subwindow);
1152 EditPanelScopeDialog::EditPanelScopeDialog(MWindow *mwindow, EditPanel *panel)
1155 this->mwindow = mwindow;
1156 this->panel = panel;
1158 gui_lock = new Mutex("EditPanelScopeDialog::gui_lock");
1161 EditPanelScopeDialog::~EditPanelScopeDialog()
1167 void EditPanelScopeDialog::handle_close_event(int result)
1171 void EditPanelScopeDialog::handle_done_event(int result)
1173 gui_lock->lock("EditPanelScopeDialog::handle_done_event");
1177 panel->subwindow->lock_window("EditPanelScopeDialog::handle_done_event");
1178 panel->scope->update(0);
1179 panel->subwindow->unlock_window();
1182 BC_Window* EditPanelScopeDialog::new_gui()
1184 EditPanelScopeGUI *gui = new EditPanelScopeGUI(mwindow, this);
1185 gui->create_objects();
1190 void EditPanelScopeDialog::process(VFrame *output_frame)
1192 if( panel->scope_dialog ) {
1193 panel->scope_dialog->gui_lock->lock("EditPanelScopeDialog::process");
1194 if( panel->scope_dialog->scope_gui ) {
1195 EditPanelScopeGUI *gui = panel->scope_dialog->scope_gui;
1196 gui->process(output_frame);
1198 panel->scope_dialog->gui_lock->unlock();
1202 EditPanelScopeGUI::EditPanelScopeGUI(MWindow *mwindow, EditPanelScopeDialog *dialog)
1203 : ScopeGUI(mwindow->theme,
1204 mwindow->session->scope_x, mwindow->session->scope_y,
1205 mwindow->session->scope_w, mwindow->session->scope_h,
1206 mwindow->get_cpus())
1208 this->mwindow = mwindow;
1209 this->dialog = dialog;
1212 EditPanelScopeGUI::~EditPanelScopeGUI()
1216 void EditPanelScopeGUI::create_objects()
1218 MainSession *session = mwindow->session;
1219 use_hist = session->use_hist;
1220 use_wave = session->use_wave;
1221 use_vector = session->use_vector;
1222 use_hist_parade = session->use_hist_parade;
1223 use_wave_parade = session->use_wave_parade;
1224 use_wave_gain = session->use_wave_gain;
1225 use_vect_gain = session->use_vect_gain;
1226 use_smooth = session->use_smooth;
1227 use_graticule = session->use_graticule;
1228 ScopeGUI::create_objects();
1231 void EditPanelScopeGUI::toggle_event()
1233 MainSession *session = mwindow->session;
1234 session->use_hist = use_hist;
1235 session->use_wave = use_wave;
1236 session->use_vector = use_vector;
1237 session->use_hist_parade = use_hist_parade;
1238 session->use_wave_parade = use_wave_parade;
1239 session->use_wave_gain = use_wave_gain;
1240 session->use_vect_gain = use_vect_gain;
1241 session->use_smooth = use_smooth;
1242 session->use_graticule = use_graticule;
1245 int EditPanelScopeGUI::translation_event()
1247 ScopeGUI::translation_event();
1248 MainSession *session = mwindow->session;
1249 session->scope_x = get_x();
1250 session->scope_y = get_y();
1254 int EditPanelScopeGUI::resize_event(int w, int h)
1256 ScopeGUI::resize_event(w, h);
1257 MainSession *session = mwindow->session;
1258 session->scope_w = w;
1259 session->scope_h = h;
1263 EditPanelScope::EditPanelScope(MWindow *mwindow, EditPanel *panel, int x, int y)
1264 : BC_Toggle(x, y, mwindow->theme ?
1265 mwindow->theme->get_image_set("scope_toggle") : 0, 0)
1267 this->mwindow = mwindow;
1268 this->panel = panel;
1269 set_tooltip(_("View scope"));
1272 EditPanelScope::~EditPanelScope()
1276 void EditPanelScopeGUI::update_scope()
1279 if( dialog->panel->is_cwindow() ) {
1280 CWindowGUI *cgui = (CWindowGUI *)dialog->panel->subwindow;
1281 canvas = cgui->canvas;
1283 else if( dialog->panel->is_vwindow() ) {
1284 VWindowGUI *vgui = (VWindowGUI *)dialog->panel->subwindow;
1285 canvas = vgui->canvas;
1287 if( canvas && canvas->refresh_frame )
1288 process(canvas->refresh_frame);
1291 int EditPanelScope::handle_event()
1294 int v = get_value();
1296 panel->scope_dialog->start();
1298 panel->scope_dialog->close_window();
1299 lock_window("EditPanelScope::handle_event");