no longer need ffmpeg patch0 which was for Termux
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / appearanceprefs.C
index 143e8407394e4b018046bbf1438274e587c50508..e9b75f21e6af90110e49b3f78fd12f752585d519 100644 (file)
@@ -38,188 +38,300 @@ AppearancePrefs::AppearancePrefs(MWindow *mwindow, PreferencesWindow *pwindow)
 {
        hms = 0;
        hmsf = 0;
+       timecode = 0;
        samples = 0;
        frames = 0;
        hex = 0;
        feet = 0;
+       layout_scale = 0;
        thumbnails = 0;
        thumbnail_size = 0;
+       vicon_size = 0;
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Appearance");
 }
 
 AppearancePrefs::~AppearancePrefs()
 {
        delete hms;
        delete hmsf;
+       delete timecode;
        delete samples;
        delete frames;
        delete hex;
        delete feet;
+       delete layout_scale;
        delete thumbnails;
        delete thumbnail_size;
+       delete vicon_size;
 }
 
 
 void AppearancePrefs::create_objects()
 {
+       int xs5 = xS(5), xs10 = xS(10), xs30 = xS(30);
+       int ys5 = yS(5), ys10 = yS(10), ys15 = yS(15);
+       int ys20 = yS(20), ys35 = yS(35);
        BC_Resources *resources = BC_WindowBase::get_resources();
        int margin = mwindow->theme->widget_border;
        char string[BCTEXTLEN];
        int x0 = mwindow->theme->preferencesoptions_x;
        int y0 = mwindow->theme->preferencesoptions_y;
-       int x = x0, y = y0, x1 = x + 100;
+       int x = x0, y = y0, x1 = x + xS(100);
 
-       add_subwindow(new BC_Title(x, y, _("Layout:"), LARGEFONT,
+       BC_Title *title;
+       add_subwindow(title = new BC_Title(x, y, _("Layout:"), LARGEFONT,
                resources->text_default));
-       y += 35;
+       title->context_help_set_keyword("Layout section");
+       y += title->get_h() + ys10;
        int y1 = y;
 
        ViewTheme *theme;
-       add_subwindow(new BC_Title(x, y, _("Theme:")));
+       add_subwindow(title = new BC_Title(x, y, _("Theme:")));
+       title->context_help_set_keyword("Layout section");
        add_subwindow(theme = new ViewTheme(x1, y, pwindow));
        theme->create_objects();
-       y += theme->get_h() + 5;
+       theme->context_help_set_keyword("Layout section");
+       y += theme->get_h() + ys5;
 
        x = x0;
        ViewPluginIcons *plugin_icons;
-       add_subwindow(new BC_Title(x, y, _("Plugin Icons:")));
+       add_subwindow(title = new BC_Title(x, y, _("Plugin Icons:")));
+       title->context_help_set_keyword("Updatable Icon Image Support");
        add_subwindow(plugin_icons = new ViewPluginIcons(x1, y, pwindow));
        plugin_icons->create_objects();
-       y += plugin_icons->get_h() + 15;
+       plugin_icons->context_help_set_keyword("Updatable Icon Image Support");
+       y += plugin_icons->get_h() + ys10;
+       add_subwindow(title = new BC_Title(x, y, _("Language:")));
+       title->context_help_set_keyword("Layout section");
+       LayoutLocale *layout_locale;
+       add_subwindow(layout_locale = new LayoutLocale(x1, y, pwindow));
+       layout_locale->create_objects();
+       layout_locale->context_help_set_keyword("Layout section");
+       y += layout_locale->get_h() + ys15;
        x1 = get_w()/2;
 
-       int x2 = x1 + 160, y2 = y;
+       int x2 = x1 + xS(160), y2 = y;
        y = y1;
-       add_subwindow(new BC_Title(x1, y, _("View thumbnail size:")));
+
+       add_subwindow(title = new BC_Title(x1, y, _("Layout Scale:")));
+       title->context_help_set_keyword("Layout section");
+       layout_scale = new ViewLayoutScale(pwindow, this, x2, y);
+       layout_scale->create_objects();
+       y += layout_scale->get_h() + ys5;
+       add_subwindow(title = new BC_Title(x1, y, _("View thumbnail size:")));
+       title->context_help_set_keyword("Layout section");
        thumbnail_size = new ViewThumbnailSize(pwindow, this, x2, y);
        thumbnail_size->create_objects();
-       y += thumbnail_size->get_h() + 5;
-       add_subwindow(new BC_Title(x1, y, _("Vicon quality:")));
+       y += thumbnail_size->get_h() + ys5;
+       add_subwindow(title = new BC_Title(x1, y, _("Vicon quality:")));
+       title->context_help_set_keyword("Layout section");
        vicon_size = new ViewViconSize(pwindow, this, x2, y);
        vicon_size->create_objects();
-       y += vicon_size->get_h() + 5;
-       add_subwindow(new BC_Title(x1, y, _("Vicon color mode:")));
+       y += vicon_size->get_h() + ys5;
+       add_subwindow(title = new BC_Title(x1, y, _("Vicon color mode:")));
+       title->context_help_set_keyword("Layout section");
        add_subwindow(vicon_color_mode = new ViewViconColorMode(pwindow, x2, y));
        vicon_color_mode->create_objects();
-       y += vicon_color_mode->get_h() + 5;
+       vicon_color_mode->context_help_set_keyword("Layout section");
+       y += vicon_color_mode->get_h() + ys5;
        y = bmax(y, y2);        
+       y += ys10;
+       add_subwindow(new BC_Bar(xs5, y, get_w() - xs10));
+       y += ys15;
 
-       y += 10;
-       add_subwindow(new BC_Bar(5, y,  get_w() - 10));
-       y += 15;
-
-       add_subwindow(new BC_Title(x, y, _("Time Format:"), LARGEFONT,
-               resources->text_default));
-
-       add_subwindow(new BC_Title(x1, y, _("Flags:"), LARGEFONT,
-               resources->text_default));
-
-       y += get_text_height(LARGEFONT) + 5;
-       y += 10;
        y1 = y;
-
+       add_subwindow(title = new BC_Title(x, y, _("Time Format:"), LARGEFONT,
+               resources->text_default));
+       title->context_help_set_keyword("Time Format section");
+       y += title->get_h() + ys10;
        add_subwindow(hms = new TimeFormatHMS(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_HMS,
                x, y));
-       y += 20;
+       hms->context_help_set_keyword("Time Format section");
+       y += ys20;
        add_subwindow(hmsf = new TimeFormatHMSF(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_HMSF,
                x, y));
-       y += 20;
+       hmsf->context_help_set_keyword("Time Format section");
+       y += ys20;
+       add_subwindow(timecode = new TimeFormatTimecode(pwindow, this,
+               pwindow->thread->edl->session->time_format == TIME_TIMECODE,
+               x, y));
+       timecode->context_help_set_keyword("Time Format section");
+       y += ys20;
        add_subwindow(samples = new TimeFormatSamples(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_SAMPLES,
                x, y));
-       y += 20;
+       samples->context_help_set_keyword("Time Format section");
+       y += ys20;
        add_subwindow(hex = new TimeFormatHex(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_SAMPLES_HEX,
                x, y));
-       y += 20;
+       hex->context_help_set_keyword("Time Format section");
+       y += ys20;
        add_subwindow(frames = new TimeFormatFrames(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_FRAMES,
                x, y));
-       y += 20;
+       frames->context_help_set_keyword("Time Format section");
+       y += ys20;
        add_subwindow(feet = new TimeFormatFeet(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_FEET_FRAMES,
                x, y));
-       x += feet->get_w() + 15;
-       BC_Title *title;
+       feet->context_help_set_keyword("Time Format section");
+       x += feet->get_w() + xS(15);
        add_subwindow(title = new BC_Title(x, y, _("Frames per foot:")));
+       title->context_help_set_keyword("Time Format section");
        x += title->get_w() + margin;
        sprintf(string, "%0.2f", pwindow->thread->edl->session->frames_per_foot);
        add_subwindow(new TimeFormatFeetSetting(pwindow,
-               x, y - 5,       string));
+               x, y - ys5,     string));
        x = x0;
-       y += 20;
+       y += ys20;
        add_subwindow(seconds = new TimeFormatSeconds(pwindow, this,
                pwindow->thread->edl->session->time_format == TIME_SECONDS,
                x, y));
-       x = x0;
-       y += 35;
-       add_subwindow(new BC_Bar(5, y,  get_w()/2 - 30));
-       y += 15;
-
-       add_subwindow(new BC_Title(x, y, _("Color:"), LARGEFONT,
+       seconds->context_help_set_keyword("Time Format section");
+       y += ys35;
+       y2 = y;
+       
+       x = x1;  y = y1;
+       add_subwindow(title = new BC_Title(x, y, _("Color:"), LARGEFONT,
                resources->text_default));
-       y += 35;
+       title->context_help_set_keyword("Color section");
+       y += ys35;
        add_subwindow(title = new BC_Title(x, y, _("Highlighting Inversion color:")));
+       title->context_help_set_keyword("Color section");
        x += title->get_w() + margin;
        char hex_color[BCSTRLEN];
        sprintf(hex_color, "%06x", preferences->highlight_inverse);
         add_subwindow(new HighlightInverseColor(pwindow, x, y, hex_color));
-       y += 35;
-
-       x = x0;
-       add_subwindow(title = new BC_Title(x, y, _("YUV color space:")));
-       x += title->get_w() + margin;
+       x2 = x;  x = x1;
+       y += ys35;
+       add_subwindow(title = new BC_Title(x, y, _("Composer BG Color:")));
+       title->context_help_set_keyword("Color section");
+       int clr_color = pwindow->thread->edl->session->cwindow_clear_color;
+        add_subwindow(cwdw_bg_color = new Composer_BG_Color(pwindow,
+               x2, y, xS(80), yS(24), clr_color));
+       draw_3d_border(x2-2,y-2, xS(80)+4,xS(24)+4, 1);
+       cwdw_bg_color->create_objects();
+       cwdw_bg_color->context_help_set_keyword("Color section");
+       x2 += cwdw_bg_color->get_w();
+       y += ys35;
+
+       add_subwindow(title = new BC_Title(x1, y, _("YUV color space:")));
+       title->context_help_set_keyword("Color Space and Color Range");
+       x = x2 - xS(120);
        add_subwindow(yuv_color_space = new YuvColorSpace(x, y, pwindow));
        yuv_color_space->create_objects();
-       y += yuv_color_space->get_h() + 5;
+       yuv_color_space->context_help_set_keyword("Color Space and Color Range");
+       y += yuv_color_space->get_h() + ys5;
 
-       x = x0;
-       add_subwindow(title = new BC_Title(x, y, _("YUV color range:")));
-       x += title->get_w() + margin;
+       add_subwindow(title = new BC_Title(x1, y, _("YUV color range:")));
+       title->context_help_set_keyword("Color Space and Color Range");
+       x = x2 - xS(100);
        add_subwindow(yuv_color_range = new YuvColorRange(x, y, pwindow));
        yuv_color_range->create_objects();
-       y += yuv_color_range->get_h() + 5;
+       yuv_color_range->context_help_set_keyword("Color Space and Color Range");
+       y += yuv_color_range->get_h() + ys35;
+       if( y2 < y ) y2 = y;
 
-       UseTipWindow *tip_win = new UseTipWindow(pwindow, x1, y1);
-       add_subwindow(tip_win);
-       y1 += tip_win->get_h() + 5;
-       AutocolorAssets *autocolor_assets = new AutocolorAssets(pwindow, x1, y1);
+       add_subwindow(new BC_Bar(x0, y2, get_w()-x0 - xs30));
+       y += ys35;
+
+       x = x0;  y1 = y;
+       add_subwindow(title = new BC_Title(x, y, _("Warnings:"), LARGEFONT,
+               resources->text_default));
+       title->context_help_set_keyword("Warnings section");
+       y += title->get_h() + ys10;
+       UseWarnIndecies *idx_warn = new UseWarnIndecies(pwindow, x, y);
+       add_subwindow(idx_warn);
+       idx_warn->context_help_set_keyword("Warnings section");
+       y += idx_warn->get_h() + ys5;
+       BD_WarnRoot *bdwr_warn = new BD_WarnRoot(pwindow, x, y);
+       add_subwindow(bdwr_warn);
+       bdwr_warn->context_help_set_keyword("Blu-ray Workaround for Mount");
+       y += bdwr_warn->get_h() + ys5;
+       UseWarnFileRef *warn_ref = new UseWarnFileRef(pwindow, x, y);
+       add_subwindow(warn_ref);
+       warn_ref->context_help_set_keyword("File by Reference");
+       y += warn_ref->get_h() + ys5;
+       
+       add_subwindow(new BC_Bar(x0, y, warn_ref->get_w()-x0 - xs30));
+       y += ys15;
+
+       add_subwindow(title = new BC_Title(x, y, _("Dangerous:"), LARGEFONT,
+               resources->text_default));
+       title->context_help_set_keyword("Dangerous section");
+       y += title->get_h() + ys10;
+
+       
+       UseUnsafeGUI *unsafe_gui = new UseUnsafeGUI(pwindow, x, y);
+       add_subwindow(unsafe_gui);
+       unsafe_gui->context_help_set_keyword("Advanced features");
+       y += unsafe_gui->get_h() + ys5;
+       OngoingBackups *ongoing_backups = new OngoingBackups(pwindow, x, y);
+       add_subwindow(ongoing_backups);
+       ongoing_backups->context_help_set_keyword("Backup and Perpetual Session");
+       y += ongoing_backups->get_h() + ys5;
+
+       x = get_w() / 3 + xs30;
+       y = y1;
+       add_subwindow(title = new BC_Title(x, y, _("Flags:"), LARGEFONT,
+               resources->text_default));
+       title->context_help_set_keyword("Flags section");
+       y += title->get_h() + ys10;
+       y1 = y;
+       AutocolorAssets *autocolor_assets = new AutocolorAssets(pwindow, x, y);
        add_subwindow(autocolor_assets);
-       y1 += autocolor_assets->get_h() + 5;
-       UseWarnIndecies *idx_win = new UseWarnIndecies(pwindow, x1, y1);
-       add_subwindow(idx_win);
-       y1 += idx_win->get_h() + 5;
-       UseWarnVersion *ver_win = new UseWarnVersion(pwindow, x1, y1);
-       add_subwindow(ver_win);
-       y1 += ver_win->get_h() + 5;
-       BD_WarnRoot *bdwr_win = new BD_WarnRoot(pwindow, x1, y1);
-       add_subwindow(bdwr_win);
-       y1 += bdwr_win->get_h() + 5;
-       PopupMenuBtnup *pop_win = new PopupMenuBtnup(pwindow, x1, y1);
+       autocolor_assets->context_help_set_keyword("Color Title Bars and Assets");
+       y += autocolor_assets->get_h() + ys5;
+       PerpetualSession *perpetual = new PerpetualSession(x, y, pwindow);
+       add_subwindow(perpetual);
+       perpetual->context_help_set_keyword("Backup and Perpetual Session");
+       y += perpetual->get_h() + ys5;
+       RectifyAudioToggle *rect_toggle = new RectifyAudioToggle(x, y, pwindow);
+       add_subwindow(rect_toggle);
+       rect_toggle->context_help_set_keyword("Flags section");
+       y += rect_toggle->get_h() + ys5;
+       CtrlToggle *ctrl_toggle = new CtrlToggle(x, y, pwindow);
+       add_subwindow(ctrl_toggle);
+       ctrl_toggle->context_help_set_keyword("Selection Methods");
+       y += ctrl_toggle->get_h() + ys5;
+       ForwardRenderDisplacement *displacement = new ForwardRenderDisplacement(pwindow, x, y);
+       add_subwindow(displacement);
+       displacement->context_help_set_keyword("Always Show Next Frame");
+       y += displacement->get_h() + ys5;
+       UseTipWindow *tip_win = new UseTipWindow(pwindow, x, y);
+       add_subwindow(tip_win);
+       tip_win->context_help_set_keyword("Flags section");
+       y += tip_win->get_h() + ys5;
+
+       x = 2*get_w() / 3 - xs30;
+       y = y1;
+       add_subwindow(thumbnails = new ViewThumbnails(x, y, pwindow));
+       thumbnails->context_help_set_keyword("Video Icons \\/ Audio Icons");
+       y += thumbnails->get_h() + ys5;
+       PopupMenuBtnup *pop_win = new PopupMenuBtnup(pwindow, x, y);
        add_subwindow(pop_win);
-       y1 += pop_win->get_h() + 5;
-       GrabFocusPolicy *grab_input_focus = new GrabFocusPolicy(pwindow, x1, y1);
+       pop_win->context_help_set_keyword("Flags section");
+       y += pop_win->get_h() + ys5;
+       GrabFocusPolicy *grab_input_focus = new GrabFocusPolicy(pwindow, x, y);
        add_subwindow(grab_input_focus);
-       y1 += grab_input_focus->get_h() + 5;
-       ActivateFocusPolicy *focus_activate = new ActivateFocusPolicy(pwindow, x1, y1);
+       grab_input_focus->context_help_set_keyword("Flags section");
+       y += grab_input_focus->get_h() + ys5;
+       ActivateFocusPolicy *focus_activate = new ActivateFocusPolicy(pwindow, x, y);
        add_subwindow(focus_activate);
-       y1 += focus_activate->get_h() + 5;
-       DeactivateFocusPolicy *focus_deactivate = new DeactivateFocusPolicy(pwindow, x1, y1);
+       focus_activate->context_help_set_keyword("Flags section");
+       y += focus_activate->get_h() + ys5;
+       DeactivateFocusPolicy *focus_deactivate = new DeactivateFocusPolicy(pwindow, x, y);
        add_subwindow(focus_deactivate);
-       y1 += focus_deactivate->get_h() + 5;
-       ForwardRenderDisplacement *displacement = new ForwardRenderDisplacement(pwindow, x1, y1);
-       add_subwindow(displacement);
-       y1 += displacement->get_h() + 5;
-       add_subwindow(thumbnails = new ViewThumbnails(x1, y1, pwindow));
-       y1 += thumbnails->get_h() + 5;
-       PerpetualSession *perpetual = new PerpetualSession(x1, y1, pwindow);
-       add_subwindow(perpetual);
-       y1 += perpetual->get_h() + 5;
-       CtrlToggle *ctrl_toggle = new CtrlToggle(x1, y1, pwindow);
-       add_subwindow(ctrl_toggle);
-       y1 += ctrl_toggle->get_h() + 5;
-       if( y < y1 ) y = y1;
+       focus_deactivate->context_help_set_keyword("Flags section");
+       y += focus_deactivate->get_h() + ys5;
+       AutoRotate *auto_rotate = new AutoRotate(pwindow, x, y);
+       add_subwindow(auto_rotate);
+       auto_rotate->context_help_set_keyword("Flags section");
+       y += auto_rotate->get_h() + ys5;
 }
 
 int AppearancePrefs::update(int new_value)
@@ -228,6 +340,7 @@ int AppearancePrefs::update(int new_value)
        pwindow->thread->edl->session->time_format = new_value;
        hms->update(new_value == TIME_HMS);
        hmsf->update(new_value == TIME_HMSF);
+       timecode->update(new_value == TIME_TIMECODE);
        samples->update(new_value == TIME_SAMPLES);
        hex->update(new_value == TIME_SAMPLES_HEX);
        frames->update(new_value == TIME_FRAMES);
@@ -257,6 +370,16 @@ int TimeFormatHMSF::handle_event()
        return 1;
 }
 
+TimeFormatTimecode::TimeFormatTimecode(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
+ : BC_Radial(x, y, value, TIME_TIMECODE_TEXT)
+{ this->pwindow = pwindow; this->tfwindow = tfwindow; }
+
+int TimeFormatTimecode::handle_event()
+{
+       tfwindow->update(TIME_TIMECODE);
+       return 1;
+}
+
 TimeFormatSamples::TimeFormatSamples(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
  : BC_Radial(x, y, value, TIME_SAMPLES_TEXT)
 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
@@ -311,7 +434,7 @@ int TimeFormatFeet::handle_event()
 }
 
 TimeFormatFeetSetting::TimeFormatFeetSetting(PreferencesWindow *pwindow, int x, int y, char *string)
- : BC_TextBox(x, y, 90, 1, string)
+ : BC_TextBox(x, y, xS(90), 1, string)
 { this->pwindow = pwindow; }
 
 int TimeFormatFeetSetting::handle_event()
@@ -323,7 +446,7 @@ int TimeFormatFeetSetting::handle_event()
 
 
 ViewTheme::ViewTheme(int x, int y, PreferencesWindow *pwindow)
- : BC_PopupMenu(x, y, 200, pwindow->thread->preferences->theme, 1)
+ : BC_PopupMenu(x, y, xS(200), pwindow->thread->preferences->theme, 1)
 {
        this->pwindow = pwindow;
 }
@@ -362,7 +485,7 @@ int ViewThemeItem::handle_event()
 
 
 ViewPluginIcons::ViewPluginIcons(int x, int y, PreferencesWindow *pwindow)
- : BC_PopupMenu(x, y, 200, pwindow->thread->preferences->plugin_icons, 1)
+ : BC_PopupMenu(x, y, xS(200), pwindow->thread->preferences->plugin_icons, 1)
 {
        this->pwindow = pwindow;
 }
@@ -407,6 +530,60 @@ int ViewPluginIconItem::handle_event()
        return 1;
 }
 
+LayoutLocale::LayoutLocale(int x, int y, PreferencesWindow *pwindow)
+ : BC_PopupMenu(x, y, xS(200), pwindow->thread->preferences->locale, 1)
+{
+       this->pwindow = pwindow;
+}
+LayoutLocale::~LayoutLocale()
+{
+}
+
+const char *LayoutLocale::locale_list[] = { LOCALE_LIST, 0 };
+
+void LayoutLocale::create_objects()
+{
+       for( const char *tp, **lp=locale_list; (tp=*lp)!=0; ++lp )
+               add_item(new LayoutLocaleItem(this, tp));
+}
+
+int LayoutLocale::handle_event()
+{
+       return 1;
+}
+
+LayoutLocaleItem::LayoutLocaleItem(LayoutLocale *popup, const char *text)
+ : BC_MenuItem(text)
+{
+       this->popup = popup;
+}
+
+int LayoutLocaleItem::handle_event()
+{
+       popup->set_text(get_text());
+       strcpy(popup->pwindow->thread->preferences->locale, get_text());
+       popup->handle_event();
+       return 1;
+}
+
+ViewLayoutScale::ViewLayoutScale(PreferencesWindow *pwindow,
+               AppearancePrefs *aprefs, int x, int y)
+ : BC_TumbleTextBox(aprefs,
+       pwindow->thread->preferences->layout_scale,
+       0.f, 10.f, x, y, xS(80), 2)
+{
+       this->pwindow = pwindow;
+       this->aprefs = aprefs;
+       set_increment(0.1);
+}
+
+int ViewLayoutScale::handle_event()
+{
+       float v = atof(get_text());
+       pwindow->thread->preferences->layout_scale = v;
+       return 1;
+}
+
 
 ViewThumbnails::ViewThumbnails(int x,
        int y,
@@ -429,7 +606,7 @@ ViewThumbnailSize::ViewThumbnailSize(PreferencesWindow *pwindow,
                AppearancePrefs *aprefs, int x, int y)
  : BC_TumbleTextBox(aprefs,
        pwindow->thread->preferences->awindow_picon_h,
-       16, 512, x, y, 80)
+       16, 512, x, y, xS(80))
 
 {
        this->pwindow = pwindow;
@@ -448,7 +625,7 @@ ViewViconSize::ViewViconSize(PreferencesWindow *pwindow,
                AppearancePrefs *aprefs, int x, int y)
  : BC_TumbleTextBox(aprefs,
        pwindow->thread->preferences->vicon_size,
-       16, 512, x, y, 80)
+       16, 512, x, y, xS(80))
 
 {
        this->pwindow = pwindow;
@@ -464,7 +641,7 @@ int ViewViconSize::handle_event()
 }
 
 ViewViconColorMode::ViewViconColorMode(PreferencesWindow *pwindow, int x, int y)
- : BC_PopupMenu(x, y, 100,
+ : BC_PopupMenu(x, y, xS(100),
        _(vicon_color_modes[pwindow->thread->preferences->vicon_color_mode]), 1)
 {
        this->pwindow = pwindow;
@@ -535,16 +712,31 @@ int UseWarnIndecies::handle_event()
        return 1;
 }
 
-UseWarnVersion::UseWarnVersion(PreferencesWindow *pwindow, int x, int y)
- : BC_CheckBox(x, y, pwindow->thread->preferences->warn_version,
-       _("EDL version warns if mismatched"))
+UseUnsafeGUI::UseUnsafeGUI(PreferencesWindow *pwindow, int x, int y)
+ : BC_CheckBox(x, y, pwindow->thread->preferences->unsafe_gui,
+       _("Unsafe GUI in batchrender"))
 {
        this->pwindow = pwindow;
+       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."));
 }
 
-int UseWarnVersion::handle_event()
+int UseUnsafeGUI::handle_event()
 {
-       pwindow->thread->preferences->warn_version = get_value();
+       pwindow->thread->preferences->unsafe_gui = get_value();
+       return 1;
+}
+
+OngoingBackups::OngoingBackups(PreferencesWindow *pwindow, int x, int y)
+ : BC_CheckBox(x, y, pwindow->thread->preferences->ongoing_backups,
+       _("Autosave continuous backups"))
+{
+       this->pwindow = pwindow;
+       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."));
+}
+
+int OngoingBackups::handle_event()
+{
+       pwindow->thread->preferences->ongoing_backups = get_value();
        return 1;
 }
 
@@ -561,6 +753,20 @@ int BD_WarnRoot::handle_event()
        return 1;
 }
 
+UseWarnFileRef::UseWarnFileRef(PreferencesWindow *pwindow, int x, int y)
+ : BC_CheckBox(x, y, pwindow->thread->preferences->warn_fileref,
+       _("Warn on creating file references"))
+{
+       this->pwindow = pwindow;
+}
+
+int UseWarnFileRef::handle_event()
+{
+       pwindow->thread->preferences->warn_fileref = get_value();
+       return 1;
+}
+
+
 PopupMenuBtnup::PopupMenuBtnup(PreferencesWindow *pwindow, int x, int y)
  : BC_CheckBox(x, y, pwindow->thread->preferences->popupmenu_btnup,
        _("Popups activate on button up"))
@@ -619,6 +825,20 @@ int DeactivateFocusPolicy::handle_event()
        return 1;
 }
 
+AutoRotate::AutoRotate(PreferencesWindow *pwindow, int x, int y)
+ : BC_CheckBox(x, y, pwindow->thread->preferences->auto_rotate != 0,
+       _("Auto rotate ffmpeg media"))
+{
+       this->pwindow = pwindow;
+       set_tooltip(_("Automatically rotates media if legal rotation metadata in file."));
+}
+
+int AutoRotate::handle_event()
+{
+       pwindow->thread->preferences->auto_rotate = get_value();
+       return 1;
+}
+
 ForwardRenderDisplacement::ForwardRenderDisplacement(PreferencesWindow *pwindow, int x, int y)
  : BC_CheckBox(x, y, pwindow->thread->preferences->forward_render_displacement,
        _("Always show next frame"))
@@ -637,6 +857,7 @@ AutocolorAssets::AutocolorAssets(PreferencesWindow *pwindow, int x, int y)
        _("Autocolor assets"))
 {
        this->pwindow = pwindow;
+       set_tooltip(_("Displays automatically generated color overlay for the \n edits on the timeline that belong to the same media file."));
 }
 
 int AutocolorAssets::handle_event()
@@ -646,7 +867,7 @@ int AutocolorAssets::handle_event()
 }
 
 HighlightInverseColor::HighlightInverseColor(PreferencesWindow *pwindow, int x, int y, const char *hex)
- : BC_TextBox(x, y, 80, 1, hex)
+ : BC_TextBox(x, y, xS(80), 1, hex)
 {
        this->pwindow = pwindow;
 }
@@ -664,15 +885,19 @@ int HighlightInverseColor::handle_event()
        return 1;
 }
 
+// num. order of those entries must be same as in
+// guicast/bccolors.inc
 
-const char *YuvColorSpace::color_space[] = {
-       N_("BT601"),
-       N_("BT709"),
-       N_("BT2020"),
+const char *YuvColorSpace::color_space[MAX_COLOR_SPACE] = {
+       N_("BT601_NTSC"), // COLOR SPACE BT601_NTSC
+       N_("BT709"), // COLOR_SPACE_BT709
+       N_("BT2020 NCL"), // COLOR_SPACE_BT2020_NCL
+       N_("BT601_PAL"), // COLOR_SPACE_BT601_PAL
+       N_("BT2020 CL"), // COLOR_SPACE_BT2020_CL
 };
 
 YuvColorSpace::YuvColorSpace(int x, int y, PreferencesWindow *pwindow)
- : BC_PopupMenu(x, y, 100,
+ : BC_PopupMenu(x, y, xS(140),
        _(color_space[pwindow->thread->preferences->yuv_color_space]), 1)
 {
        this->pwindow = pwindow;
@@ -710,12 +935,12 @@ int YuvColorSpaceItem::handle_event()
 
 
 const char *YuvColorRange::color_range[] = {
-       N_("JPEG"),
-       N_("MPEG"),
+       N_("JPEG"), // COLOR_RANGE_JPEG
+       N_("MPEG"), // COLOR_RANGE_MPEG
 };
 
 YuvColorRange::YuvColorRange(int x, int y, PreferencesWindow *pwindow)
- : BC_PopupMenu(x, y, 100,
+ : BC_PopupMenu(x, y, xS(100),
        _(color_range[pwindow->thread->preferences->yuv_color_range]), 1)
 {
        this->pwindow = pwindow;
@@ -756,6 +981,7 @@ PerpetualSession::PerpetualSession(int x, int y, PreferencesWindow *pwindow)
        pwindow->thread->preferences->perpetual_session, _("Perpetual session"))
 {
        this->pwindow = pwindow;
+       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."));
 }
 
 int PerpetualSession::handle_event()
@@ -769,6 +995,7 @@ CtrlToggle::CtrlToggle(int x, int y, PreferencesWindow *pwindow)
        pwindow->thread->preferences->ctrl_toggle, _("Clears before toggle"))
 {
        this->pwindow = pwindow;
+       set_tooltip(_("Drag and Drop editing - when using LMB on edit,\n clears all selected edits except this one."));
 }
 
 int CtrlToggle::handle_event()
@@ -777,3 +1004,44 @@ int CtrlToggle::handle_event()
        return 1;
 }
 
+RectifyAudioToggle::RectifyAudioToggle(int x, int y, PreferencesWindow *pwindow)
+ : BC_CheckBox(x, y,
+       pwindow->thread->preferences->rectify_audio, _("Timeline Rectify Audio"))
+{
+       this->pwindow = pwindow;
+       set_tooltip(_("Displays rectified audio showing only positive half of the waveform \n resulting in waveform stretched more over the height of the track."));
+}
+
+int RectifyAudioToggle::handle_event()
+{
+       pwindow->thread->preferences->rectify_audio = get_value();
+       return 1;
+}
+
+Composer_BG_Color::Composer_BG_Color(PreferencesWindow *pwindow,
+               int x, int y, int w, int h, int color)
+ : ColorBoxButton(_("Composer BG color"), x, y, w, h, color, -1, 1)
+{
+       this->pwindow = pwindow;
+}
+
+Composer_BG_Color::~Composer_BG_Color()
+{
+}
+
+void Composer_BG_Color::handle_done_event(int result)
+{
+       if( result ) {
+               pwindow->lock_window("Composer_BG_Color::handle_done_event");
+               update_gui(orig_color, orig_alpha);
+               pwindow->unlock_window();
+               handle_new_color(orig_color, orig_alpha);
+       }
+}
+
+int Composer_BG_Color::handle_new_color(int color, int alpha)
+{
+       pwindow->thread->edl->session->cwindow_clear_color = color;
+       return 1;
+}
+