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
22 #include "appearanceprefs.h"
23 #include "deleteallindexes.h"
25 #include "edlsession.h"
27 #include "filesystem.h"
30 #include "preferences.h"
31 #include "preferencesthread.h"
32 #include "shbtnprefs.h"
36 AppearancePrefs::AppearancePrefs(MWindow *mwindow, PreferencesWindow *pwindow)
37 : PreferencesDialog(mwindow, pwindow)
52 AppearancePrefs::~AppearancePrefs()
63 delete thumbnail_size;
68 void AppearancePrefs::create_objects()
70 int xs5 = xS(5), xs10 = xS(10), xs30 = xS(30);
71 int ys5 = yS(5), ys10 = yS(10), ys15 = yS(15);
72 int ys20 = yS(20), ys35 = yS(35);
73 BC_Resources *resources = BC_WindowBase::get_resources();
74 int margin = mwindow->theme->widget_border;
75 char string[BCTEXTLEN];
76 int x0 = mwindow->theme->preferencesoptions_x;
77 int y0 = mwindow->theme->preferencesoptions_y;
78 int x = x0, y = y0, x1 = x + xS(100);
81 add_subwindow(title = new BC_Title(x, y, _("Layout:"), LARGEFONT,
82 resources->text_default));
83 y += title->get_h() + ys10;
87 add_subwindow(new BC_Title(x, y, _("Theme:")));
88 add_subwindow(theme = new ViewTheme(x1, y, pwindow));
89 theme->create_objects();
90 y += theme->get_h() + ys5;
93 ViewPluginIcons *plugin_icons;
94 add_subwindow(new BC_Title(x, y, _("Plugin Icons:")));
95 add_subwindow(plugin_icons = new ViewPluginIcons(x1, y, pwindow));
96 plugin_icons->create_objects();
97 y += plugin_icons->get_h() + ys10;
98 add_subwindow(new BC_Title(x, y, _("Language:")));
99 LayoutLocale *layout_locale;
100 add_subwindow(layout_locale = new LayoutLocale(x1, y, pwindow));
101 layout_locale->create_objects();
102 y += layout_locale->get_h() + ys15;
105 int x2 = x1 + xS(160), y2 = y;
108 add_subwindow(new BC_Title(x1, y, _("Layout Scale:")));
109 layout_scale = new ViewLayoutScale(pwindow, this, x2, y);
110 layout_scale->create_objects();
111 y += layout_scale->get_h() + ys5;
112 add_subwindow(new BC_Title(x1, y, _("View thumbnail size:")));
113 thumbnail_size = new ViewThumbnailSize(pwindow, this, x2, y);
114 thumbnail_size->create_objects();
115 y += thumbnail_size->get_h() + ys5;
116 add_subwindow(new BC_Title(x1, y, _("Vicon quality:")));
117 vicon_size = new ViewViconSize(pwindow, this, x2, y);
118 vicon_size->create_objects();
119 y += vicon_size->get_h() + ys5;
120 add_subwindow(new BC_Title(x1, y, _("Vicon color mode:")));
121 add_subwindow(vicon_color_mode = new ViewViconColorMode(pwindow, x2, y));
122 vicon_color_mode->create_objects();
123 y += vicon_color_mode->get_h() + ys5;
126 add_subwindow(new BC_Bar(xs5, y, get_w() - xs10));
130 add_subwindow(title = new BC_Title(x, y, _("Time Format:"), LARGEFONT,
131 resources->text_default));
132 y += title->get_h() + ys10;
133 add_subwindow(hms = new TimeFormatHMS(pwindow, this,
134 pwindow->thread->edl->session->time_format == TIME_HMS,
137 add_subwindow(hmsf = new TimeFormatHMSF(pwindow, this,
138 pwindow->thread->edl->session->time_format == TIME_HMSF,
141 add_subwindow(timecode = new TimeFormatTimecode(pwindow, this,
142 pwindow->thread->edl->session->time_format == TIME_TIMECODE,
145 add_subwindow(samples = new TimeFormatSamples(pwindow, this,
146 pwindow->thread->edl->session->time_format == TIME_SAMPLES,
149 add_subwindow(hex = new TimeFormatHex(pwindow, this,
150 pwindow->thread->edl->session->time_format == TIME_SAMPLES_HEX,
153 add_subwindow(frames = new TimeFormatFrames(pwindow, this,
154 pwindow->thread->edl->session->time_format == TIME_FRAMES,
157 add_subwindow(feet = new TimeFormatFeet(pwindow, this,
158 pwindow->thread->edl->session->time_format == TIME_FEET_FRAMES,
160 x += feet->get_w() + xS(15);
161 add_subwindow(title = new BC_Title(x, y, _("Frames per foot:")));
162 x += title->get_w() + margin;
163 sprintf(string, "%0.2f", pwindow->thread->edl->session->frames_per_foot);
164 add_subwindow(new TimeFormatFeetSetting(pwindow,
165 x, y - ys5, string));
168 add_subwindow(seconds = new TimeFormatSeconds(pwindow, this,
169 pwindow->thread->edl->session->time_format == TIME_SECONDS,
175 add_subwindow(new BC_Title(x, y, _("Color:"), LARGEFONT,
176 resources->text_default));
178 add_subwindow(title = new BC_Title(x, y, _("Highlighting Inversion color:")));
179 x += title->get_w() + margin;
180 char hex_color[BCSTRLEN];
181 sprintf(hex_color, "%06x", preferences->highlight_inverse);
182 add_subwindow(new HighlightInverseColor(pwindow, x, y, hex_color));
185 add_subwindow(title = new BC_Title(x, y, _("Composer BG Color:")));
186 int clr_color = pwindow->thread->edl->session->cwindow_clear_color;
187 add_subwindow(cwdw_bg_color = new Composer_BG_Color(pwindow,
188 x2, y, xS(80), yS(24), clr_color));
189 draw_3d_border(x2-2,y-2, xS(80)+4,xS(24)+4, 1);
190 cwdw_bg_color->create_objects();
191 x2 += cwdw_bg_color->get_w();
194 add_subwindow(title = new BC_Title(x1, y, _("YUV color space:")));
196 add_subwindow(yuv_color_space = new YuvColorSpace(x, y, pwindow));
197 yuv_color_space->create_objects();
198 y += yuv_color_space->get_h() + ys5;
200 add_subwindow(title = new BC_Title(x1, y, _("YUV color range:")));
202 add_subwindow(yuv_color_range = new YuvColorRange(x, y, pwindow));
203 yuv_color_range->create_objects();
204 y += yuv_color_range->get_h() + ys35;
207 add_subwindow(new BC_Bar(x0, y2, get_w()-x0 - xs30));
211 add_subwindow(title = new BC_Title(x, y, _("Warnings:"), LARGEFONT,
212 resources->text_default));
213 y += title->get_h() + ys10;
214 UseWarnIndecies *idx_warn = new UseWarnIndecies(pwindow, x, y);
215 add_subwindow(idx_warn);
216 y += idx_warn->get_h() + ys5;
217 BD_WarnRoot *bdwr_warn = new BD_WarnRoot(pwindow, x, y);
218 add_subwindow(bdwr_warn);
219 y += bdwr_warn->get_h() + ys5;
220 UseWarnFileRef *warn_ref = new UseWarnFileRef(pwindow, x, y);
221 add_subwindow(warn_ref);
222 y += warn_ref->get_h() + ys5;
224 add_subwindow(new BC_Bar(x0, y, warn_ref->get_w()-x0 - xs30));
227 add_subwindow(title = new BC_Title(x, y, _("Dangerous:"), LARGEFONT,
228 resources->text_default));
229 y += title->get_h() + ys10;
232 UseUnsafeGUI *unsafe_gui = new UseUnsafeGUI(pwindow, x, y);
233 add_subwindow(unsafe_gui);
234 y += unsafe_gui->get_h() + ys5;
235 OngoingBackups *ongoing_backups = new OngoingBackups(pwindow, x, y);
236 add_subwindow(ongoing_backups);
237 y += ongoing_backups->get_h() + ys5;
239 x = get_w() / 3 + xs30;
241 add_subwindow(title = new BC_Title(x, y, _("Flags:"), LARGEFONT,
242 resources->text_default));
243 y += title->get_h() + ys10;
245 AutocolorAssets *autocolor_assets = new AutocolorAssets(pwindow, x, y);
246 add_subwindow(autocolor_assets);
247 y += autocolor_assets->get_h() + ys5;
248 PerpetualSession *perpetual = new PerpetualSession(x, y, pwindow);
249 add_subwindow(perpetual);
250 y += perpetual->get_h() + ys5;
251 RectifyAudioToggle *rect_toggle = new RectifyAudioToggle(x, y, pwindow);
252 add_subwindow(rect_toggle);
253 y += rect_toggle->get_h() + ys5;
254 CtrlToggle *ctrl_toggle = new CtrlToggle(x, y, pwindow);
255 add_subwindow(ctrl_toggle);
256 y += ctrl_toggle->get_h() + ys5;
257 ForwardRenderDisplacement *displacement = new ForwardRenderDisplacement(pwindow, x, y);
258 add_subwindow(displacement);
259 y += displacement->get_h() + ys5;
260 UseTipWindow *tip_win = new UseTipWindow(pwindow, x, y);
261 add_subwindow(tip_win);
262 y += tip_win->get_h() + ys5;
264 x = 2*get_w() / 3 - xs30;
266 add_subwindow(thumbnails = new ViewThumbnails(x, y, pwindow));
267 y += thumbnails->get_h() + ys5;
268 PopupMenuBtnup *pop_win = new PopupMenuBtnup(pwindow, x, y);
269 add_subwindow(pop_win);
270 y += pop_win->get_h() + ys5;
271 GrabFocusPolicy *grab_input_focus = new GrabFocusPolicy(pwindow, x, y);
272 add_subwindow(grab_input_focus);
273 y += grab_input_focus->get_h() + ys5;
274 ActivateFocusPolicy *focus_activate = new ActivateFocusPolicy(pwindow, x, y);
275 add_subwindow(focus_activate);
276 y += focus_activate->get_h() + ys5;
277 DeactivateFocusPolicy *focus_deactivate = new DeactivateFocusPolicy(pwindow, x, y);
278 add_subwindow(focus_deactivate);
279 y += focus_deactivate->get_h() + ys5;
280 AutoRotate *auto_rotate = new AutoRotate(pwindow, x, y);
281 add_subwindow(auto_rotate);
282 y += auto_rotate->get_h() + ys5;
285 int AppearancePrefs::update(int new_value)
287 pwindow->thread->redraw_times = 1;
288 pwindow->thread->edl->session->time_format = new_value;
289 hms->update(new_value == TIME_HMS);
290 hmsf->update(new_value == TIME_HMSF);
291 timecode->update(new_value == TIME_TIMECODE);
292 samples->update(new_value == TIME_SAMPLES);
293 hex->update(new_value == TIME_SAMPLES_HEX);
294 frames->update(new_value == TIME_FRAMES);
295 feet->update(new_value == TIME_FEET_FRAMES);
296 seconds->update(new_value == TIME_SECONDS);
301 TimeFormatHMS::TimeFormatHMS(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
302 : BC_Radial(x, y, value, TIME_HMS_TEXT)
303 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
305 int TimeFormatHMS::handle_event()
307 tfwindow->update(TIME_HMS);
311 TimeFormatHMSF::TimeFormatHMSF(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
312 : BC_Radial(x, y, value, TIME_HMSF_TEXT)
313 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
315 int TimeFormatHMSF::handle_event()
317 tfwindow->update(TIME_HMSF);
321 TimeFormatTimecode::TimeFormatTimecode(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
322 : BC_Radial(x, y, value, TIME_TIMECODE_TEXT)
323 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
325 int TimeFormatTimecode::handle_event()
327 tfwindow->update(TIME_TIMECODE);
331 TimeFormatSamples::TimeFormatSamples(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
332 : BC_Radial(x, y, value, TIME_SAMPLES_TEXT)
333 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
335 int TimeFormatSamples::handle_event()
337 tfwindow->update(TIME_SAMPLES);
341 TimeFormatFrames::TimeFormatFrames(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
342 : BC_Radial(x, y, value, TIME_FRAMES_TEXT)
343 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
345 int TimeFormatFrames::handle_event()
347 tfwindow->update(TIME_FRAMES);
351 TimeFormatHex::TimeFormatHex(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
352 : BC_Radial(x, y, value, TIME_SAMPLES_HEX_TEXT)
353 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
355 int TimeFormatHex::handle_event()
357 tfwindow->update(TIME_SAMPLES_HEX);
361 TimeFormatSeconds::TimeFormatSeconds(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
362 : BC_Radial(x, y, value, TIME_SECONDS_TEXT)
364 this->pwindow = pwindow;
365 this->tfwindow = tfwindow;
368 int TimeFormatSeconds::handle_event()
370 tfwindow->update(TIME_SECONDS);
374 TimeFormatFeet::TimeFormatFeet(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
375 : BC_Radial(x, y, value, TIME_FEET_FRAMES_TEXT)
376 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
378 int TimeFormatFeet::handle_event()
380 tfwindow->update(TIME_FEET_FRAMES);
384 TimeFormatFeetSetting::TimeFormatFeetSetting(PreferencesWindow *pwindow, int x, int y, char *string)
385 : BC_TextBox(x, y, xS(90), 1, string)
386 { this->pwindow = pwindow; }
388 int TimeFormatFeetSetting::handle_event()
390 pwindow->thread->edl->session->frames_per_foot = atof(get_text());
391 if(pwindow->thread->edl->session->frames_per_foot < 1) pwindow->thread->edl->session->frames_per_foot = 1;
396 ViewTheme::ViewTheme(int x, int y, PreferencesWindow *pwindow)
397 : BC_PopupMenu(x, y, xS(200), pwindow->thread->preferences->theme, 1)
399 this->pwindow = pwindow;
401 ViewTheme::~ViewTheme()
405 void ViewTheme::create_objects()
407 ArrayList<PluginServer*> themes;
408 MWindow::search_plugindb(0, 0, 0, 0, 1, themes);
410 for(int i = 0; i < themes.total; i++) {
411 add_item(new ViewThemeItem(this, themes.values[i]->title));
415 int ViewTheme::handle_event()
420 ViewThemeItem::ViewThemeItem(ViewTheme *popup, const char *text)
426 int ViewThemeItem::handle_event()
428 popup->set_text(get_text());
429 strcpy(popup->pwindow->thread->preferences->theme, get_text());
430 popup->handle_event();
435 ViewPluginIcons::ViewPluginIcons(int x, int y, PreferencesWindow *pwindow)
436 : BC_PopupMenu(x, y, xS(200), pwindow->thread->preferences->plugin_icons, 1)
438 this->pwindow = pwindow;
440 ViewPluginIcons::~ViewPluginIcons()
444 void ViewPluginIcons::create_objects()
446 add_item(new ViewPluginIconItem(this, DEFAULT_PICON));
448 const char *plugin_path = File::get_plugin_path();
449 char picon_path[BCTEXTLEN];
450 snprintf(picon_path,sizeof(picon_path)-1,"%s/picon", plugin_path);
451 if( fs.update(picon_path) ) return;
452 for( int i=0; i<fs.dir_list.total; ++i ) {
453 char *fs_path = fs.dir_list[i]->path;
454 if( !fs.is_dir(fs_path) ) continue;
455 char *cp = strrchr(fs_path,'/');
456 cp = !cp ? fs_path : cp+1;
457 if( !strcmp(cp,DEFAULT_PICON) ) continue;
458 add_item(new ViewPluginIconItem(this, cp));
462 int ViewPluginIcons::handle_event()
467 ViewPluginIconItem::ViewPluginIconItem(ViewPluginIcons *popup, const char *text)
473 int ViewPluginIconItem::handle_event()
475 popup->set_text(get_text());
476 strcpy(popup->pwindow->thread->preferences->plugin_icons, get_text());
477 popup->handle_event();
481 LayoutLocale::LayoutLocale(int x, int y, PreferencesWindow *pwindow)
482 : BC_PopupMenu(x, y, xS(200), pwindow->thread->preferences->locale, 1)
484 this->pwindow = pwindow;
486 LayoutLocale::~LayoutLocale()
490 const char *LayoutLocale::locale_list[] = { LOCALE_LIST, 0 };
492 void LayoutLocale::create_objects()
494 for( const char *tp, **lp=locale_list; (tp=*lp)!=0; ++lp )
495 add_item(new LayoutLocaleItem(this, tp));
498 int LayoutLocale::handle_event()
503 LayoutLocaleItem::LayoutLocaleItem(LayoutLocale *popup, const char *text)
509 int LayoutLocaleItem::handle_event()
511 popup->set_text(get_text());
512 strcpy(popup->pwindow->thread->preferences->locale, get_text());
513 popup->handle_event();
517 ViewLayoutScale::ViewLayoutScale(PreferencesWindow *pwindow,
518 AppearancePrefs *aprefs, int x, int y)
519 : BC_TumbleTextBox(aprefs,
520 pwindow->thread->preferences->layout_scale,
521 0.f, 10.f, x, y, xS(80), 2)
523 this->pwindow = pwindow;
524 this->aprefs = aprefs;
528 int ViewLayoutScale::handle_event()
530 float v = atof(get_text());
531 pwindow->thread->preferences->layout_scale = v;
536 ViewThumbnails::ViewThumbnails(int x,
538 PreferencesWindow *pwindow)
541 pwindow->thread->preferences->use_thumbnails, _("Use thumbnails in resource window"))
543 this->pwindow = pwindow;
546 int ViewThumbnails::handle_event()
548 pwindow->thread->preferences->use_thumbnails = get_value();
553 ViewThumbnailSize::ViewThumbnailSize(PreferencesWindow *pwindow,
554 AppearancePrefs *aprefs, int x, int y)
555 : BC_TumbleTextBox(aprefs,
556 pwindow->thread->preferences->awindow_picon_h,
557 16, 512, x, y, xS(80))
560 this->pwindow = pwindow;
561 this->aprefs = aprefs;
564 int ViewThumbnailSize::handle_event()
566 int v = atoi(get_text());
568 pwindow->thread->preferences->awindow_picon_h = v;
572 ViewViconSize::ViewViconSize(PreferencesWindow *pwindow,
573 AppearancePrefs *aprefs, int x, int y)
574 : BC_TumbleTextBox(aprefs,
575 pwindow->thread->preferences->vicon_size,
576 16, 512, x, y, xS(80))
579 this->pwindow = pwindow;
580 this->aprefs = aprefs;
583 int ViewViconSize::handle_event()
585 int v = atoi(get_text());
587 pwindow->thread->preferences->vicon_size = v;
591 ViewViconColorMode::ViewViconColorMode(PreferencesWindow *pwindow, int x, int y)
592 : BC_PopupMenu(x, y, xS(100),
593 _(vicon_color_modes[pwindow->thread->preferences->vicon_color_mode]), 1)
595 this->pwindow = pwindow;
597 ViewViconColorMode::~ViewViconColorMode()
601 const char *ViewViconColorMode::vicon_color_modes[] = {
607 void ViewViconColorMode::create_objects()
609 for( int id=0,nid=sizeof(vicon_color_modes)/sizeof(vicon_color_modes[0]); id<nid; ++id )
610 add_item(new ViewViconColorModeItem(this, _(vicon_color_modes[id]), id));
614 int ViewViconColorMode::handle_event()
616 set_text(_(vicon_color_modes[pwindow->thread->preferences->vicon_color_mode]));
620 ViewViconColorModeItem::ViewViconColorModeItem(ViewViconColorMode *popup, const char *text, int id)
627 int ViewViconColorModeItem::handle_event()
629 popup->set_text(get_text());
630 popup->pwindow->thread->preferences->vicon_color_mode = id;
631 return popup->handle_event();
635 UseTipWindow::UseTipWindow(PreferencesWindow *pwindow, int x, int y)
638 pwindow->thread->preferences->use_tipwindow,
639 _("Show tip of the day"))
641 this->pwindow = pwindow;
643 int UseTipWindow::handle_event()
645 pwindow->thread->preferences->use_tipwindow = get_value();
650 UseWarnIndecies::UseWarnIndecies(PreferencesWindow *pwindow, int x, int y)
651 : BC_CheckBox(x, y, pwindow->thread->preferences->warn_indexes,
652 _("ffmpeg probe warns rebuild indexes"))
654 this->pwindow = pwindow;
657 int UseWarnIndecies::handle_event()
659 pwindow->thread->preferences->warn_indexes = get_value();
663 UseUnsafeGUI::UseUnsafeGUI(PreferencesWindow *pwindow, int x, int y)
664 : BC_CheckBox(x, y, pwindow->thread->preferences->unsafe_gui,
665 _("Unsafe GUI in batchrender"))
667 this->pwindow = pwindow;
668 set_tooltip(_("Save to EDL path option becomes available and will overwrite EDL on disk. \n Warn if jobs/session mismatch option is available but can be unchecked."));
671 int UseUnsafeGUI::handle_event()
673 pwindow->thread->preferences->unsafe_gui = get_value();
677 OngoingBackups::OngoingBackups(PreferencesWindow *pwindow, int x, int y)
678 : BC_CheckBox(x, y, pwindow->thread->preferences->ongoing_backups,
679 _("Autosave continuous backups"))
681 this->pwindow = pwindow;
682 set_tooltip(_("When you stop Cinelerra, all but the newest 50 will be deleted but you risk \n running out of disk space if you do a lot of work without restarting."));
685 int OngoingBackups::handle_event()
687 pwindow->thread->preferences->ongoing_backups = get_value();
691 BD_WarnRoot::BD_WarnRoot(PreferencesWindow *pwindow, int x, int y)
692 : BC_CheckBox(x, y, pwindow->thread->preferences->bd_warn_root,
693 _("Create Bluray warns if not root"))
695 this->pwindow = pwindow;
698 int BD_WarnRoot::handle_event()
700 pwindow->thread->preferences->bd_warn_root = get_value();
704 UseWarnFileRef::UseWarnFileRef(PreferencesWindow *pwindow, int x, int y)
705 : BC_CheckBox(x, y, pwindow->thread->preferences->warn_fileref,
706 _("Warn on creating file references"))
708 this->pwindow = pwindow;
711 int UseWarnFileRef::handle_event()
713 pwindow->thread->preferences->warn_fileref = get_value();
718 PopupMenuBtnup::PopupMenuBtnup(PreferencesWindow *pwindow, int x, int y)
719 : BC_CheckBox(x, y, pwindow->thread->preferences->popupmenu_btnup,
720 _("Popups activate on button up"))
722 this->pwindow = pwindow;
725 int PopupMenuBtnup::handle_event()
727 pwindow->thread->preferences->popupmenu_btnup = get_value();
731 GrabFocusPolicy::GrabFocusPolicy(PreferencesWindow *pwindow, int x, int y)
732 : BC_CheckBox(x, y, (pwindow->thread->preferences->grab_input_focus) != 0,
733 _("Set Input Focus when window entered"))
735 this->pwindow = pwindow;
738 int GrabFocusPolicy::handle_event()
740 pwindow->thread->preferences->grab_input_focus = get_value();
744 ActivateFocusPolicy::ActivateFocusPolicy(PreferencesWindow *pwindow, int x, int y)
745 : BC_CheckBox(x, y, (pwindow->thread->preferences->textbox_focus_policy & CLICK_ACTIVATE) != 0,
746 _("Click to activate text focus"))
748 this->pwindow = pwindow;
751 int ActivateFocusPolicy::handle_event()
754 pwindow->thread->preferences->textbox_focus_policy |= CLICK_ACTIVATE;
756 pwindow->thread->preferences->textbox_focus_policy &= ~CLICK_ACTIVATE;
760 DeactivateFocusPolicy::DeactivateFocusPolicy(PreferencesWindow *pwindow, int x, int y)
761 : BC_CheckBox(x, y, (pwindow->thread->preferences->textbox_focus_policy & CLICK_DEACTIVATE) != 0,
762 _("Click to deactivate text focus"))
764 this->pwindow = pwindow;
767 int DeactivateFocusPolicy::handle_event()
770 pwindow->thread->preferences->textbox_focus_policy |= CLICK_DEACTIVATE;
772 pwindow->thread->preferences->textbox_focus_policy &= ~CLICK_DEACTIVATE;
776 AutoRotate::AutoRotate(PreferencesWindow *pwindow, int x, int y)
777 : BC_CheckBox(x, y, pwindow->thread->preferences->auto_rotate != 0,
778 _("Auto rotate ffmpeg media"))
780 this->pwindow = pwindow;
781 set_tooltip(_("Automatically rotates media if legal rotation metadata in file."));
784 int AutoRotate::handle_event()
786 pwindow->thread->preferences->auto_rotate = get_value();
790 ForwardRenderDisplacement::ForwardRenderDisplacement(PreferencesWindow *pwindow, int x, int y)
791 : BC_CheckBox(x, y, pwindow->thread->preferences->forward_render_displacement,
792 _("Always show next frame"))
794 this->pwindow = pwindow;
797 int ForwardRenderDisplacement::handle_event()
799 pwindow->thread->preferences->forward_render_displacement = get_value();
803 AutocolorAssets::AutocolorAssets(PreferencesWindow *pwindow, int x, int y)
804 : BC_CheckBox(x, y, pwindow->thread->preferences->autocolor_assets,
805 _("Autocolor assets"))
807 this->pwindow = pwindow;
808 set_tooltip(_("Displays automatically generated color overlay for the \n edits on the timeline that belong to the same media file."));
811 int AutocolorAssets::handle_event()
813 pwindow->thread->preferences->autocolor_assets = get_value();
817 HighlightInverseColor::HighlightInverseColor(PreferencesWindow *pwindow, int x, int y, const char *hex)
818 : BC_TextBox(x, y, xS(80), 1, hex)
820 this->pwindow = pwindow;
823 int HighlightInverseColor::handle_event()
825 int inverse_color = strtoul(get_text(),0,16);
826 if( (inverse_color &= 0xffffff) == 0 ) {
827 inverse_color = 0xffffff;
828 char string[BCSTRLEN];
829 sprintf(string,"%06x", inverse_color);
832 pwindow->thread->preferences->highlight_inverse = inverse_color;
837 const char *YuvColorSpace::color_space[] = {
838 N_("BT601"), // COLOR_SPACE_BT601
839 N_("BT709"), // COLOR_SPACE_BT709
840 N_("BT2020"), // COLOR_SPACE_BT2020
843 YuvColorSpace::YuvColorSpace(int x, int y, PreferencesWindow *pwindow)
844 : BC_PopupMenu(x, y, xS(120),
845 _(color_space[pwindow->thread->preferences->yuv_color_space]), 1)
847 this->pwindow = pwindow;
849 YuvColorSpace::~YuvColorSpace()
853 void YuvColorSpace::create_objects()
855 for( int id=0,nid=sizeof(color_space)/sizeof(color_space[0]); id<nid; ++id )
856 add_item(new YuvColorSpaceItem(this, _(color_space[id]), id));
860 int YuvColorSpace::handle_event()
862 set_text(_(color_space[pwindow->thread->preferences->yuv_color_space]));
866 YuvColorSpaceItem::YuvColorSpaceItem(YuvColorSpace *popup, const char *text, int id)
873 int YuvColorSpaceItem::handle_event()
875 popup->set_text(get_text());
876 popup->pwindow->thread->preferences->yuv_color_space = id;
877 return popup->handle_event();
881 const char *YuvColorRange::color_range[] = {
882 N_("JPEG"), // COLOR_RANGE_JPEG
883 N_("MPEG"), // COLOR_RANGE_MPEG
886 YuvColorRange::YuvColorRange(int x, int y, PreferencesWindow *pwindow)
887 : BC_PopupMenu(x, y, xS(100),
888 _(color_range[pwindow->thread->preferences->yuv_color_range]), 1)
890 this->pwindow = pwindow;
892 YuvColorRange::~YuvColorRange()
896 void YuvColorRange::create_objects()
898 for( int id=0,nid=sizeof(color_range)/sizeof(color_range[0]); id<nid; ++id )
899 add_item(new YuvColorRangeItem(this, _(color_range[id]), id));
903 int YuvColorRange::handle_event()
905 set_text(color_range[pwindow->thread->preferences->yuv_color_range]);
909 YuvColorRangeItem::YuvColorRangeItem(YuvColorRange *popup, const char *text, int id)
916 int YuvColorRangeItem::handle_event()
918 popup->set_text(get_text());
919 popup->pwindow->thread->preferences->yuv_color_range = id;
920 return popup->handle_event();
923 PerpetualSession::PerpetualSession(int x, int y, PreferencesWindow *pwindow)
925 pwindow->thread->preferences->perpetual_session, _("Perpetual session"))
927 this->pwindow = pwindow;
928 set_tooltip(_("Resume previous session on startup with undo/redo stack saved between sessions. \n On startup, previous project is loaded as if there was no stoppage."));
931 int PerpetualSession::handle_event()
933 pwindow->thread->preferences->perpetual_session = get_value();
937 CtrlToggle::CtrlToggle(int x, int y, PreferencesWindow *pwindow)
939 pwindow->thread->preferences->ctrl_toggle, _("Clears before toggle"))
941 this->pwindow = pwindow;
942 set_tooltip(_("Drag and Drop editing - when using LMB on edit,\n clears all selected edits except this one."));
945 int CtrlToggle::handle_event()
947 pwindow->thread->preferences->ctrl_toggle = get_value();
951 RectifyAudioToggle::RectifyAudioToggle(int x, int y, PreferencesWindow *pwindow)
953 pwindow->thread->preferences->rectify_audio, _("Timeline Rectify Audio"))
955 this->pwindow = pwindow;
956 set_tooltip(_("Displays rectified audio showing only positive half of the waveform \n resulting in waveform stretched more over the height of the track."));
959 int RectifyAudioToggle::handle_event()
961 pwindow->thread->preferences->rectify_audio = get_value();
965 Composer_BG_Color::Composer_BG_Color(PreferencesWindow *pwindow,
966 int x, int y, int w, int h, int color)
967 : ColorBoxButton(_("Composer BG color"), x, y, w, h, color, -1, 1)
969 this->pwindow = pwindow;
972 Composer_BG_Color::~Composer_BG_Color()
976 void Composer_BG_Color::handle_done_event(int result)
979 pwindow->lock_window("Composer_BG_Color::handle_done_event");
980 update_gui(orig_color, orig_alpha);
981 pwindow->unlock_window();
982 handle_new_color(orig_color, orig_alpha);
986 int Composer_BG_Color::handle_new_color(int color, int alpha)
988 pwindow->thread->edl->session->cwindow_clear_color = color;