Exemple #1
0
static void window_themes_mouseup(rct_window *w, rct_widgetindex widgetIndex)
{
    size_t activeAvailableThemeIndex;
    const utf8 * activeThemeName;

    switch (widgetIndex) {
    case WIDX_THEMES_CLOSE:
        window_close(w);
        break;
    case WIDX_THEMES_DUPLICATE_BUTTON:;
        activeAvailableThemeIndex = theme_manager_get_active_available_theme_index();
        activeThemeName = theme_manager_get_available_theme_name(activeAvailableThemeIndex);
        window_text_input_open(w, widgetIndex, STR_TITLE_EDITOR_ACTION_DUPLICATE, STR_THEMES_PROMPT_ENTER_THEME_NAME, STR_STRING, (uintptr_t)activeThemeName, 64);
        break;
    case WIDX_THEMES_DELETE_BUTTON:
        if (theme_get_flags() & UITHEME_FLAG_PREDEFINED) {
            window_error_open(STR_THEMES_ERR_CANT_CHANGE_THIS_THEME, STR_NONE);
        } else {
            theme_delete();
        }
        break;
    case WIDX_THEMES_RENAME_BUTTON:
        if (theme_get_flags() & UITHEME_FLAG_PREDEFINED) {
            window_error_open(STR_THEMES_ERR_CANT_CHANGE_THIS_THEME, STR_NONE);
        } else {
            activeAvailableThemeIndex = theme_manager_get_active_available_theme_index();
            activeThemeName = theme_manager_get_available_theme_name(activeAvailableThemeIndex);
            window_text_input_open(w, widgetIndex, STR_TRACK_MANAGE_RENAME, STR_THEMES_PROMPT_ENTER_THEME_NAME, STR_STRING, (uintptr_t)activeThemeName, 64);
        }
        break;
    }
}
Exemple #2
0
 void theme_delete()
 {
     platform_file_delete(ThemeManager::CurrentThemePath);
     ThemeManager::LoadTheme((UITheme *)&PredefinedThemeRCT2);
     ThemeManager::ActiveAvailableThemeIndex = 1;
     String::DiscardDuplicate(&gConfigInterface.current_theme_preset, theme_manager_get_available_theme_name(1));
 }
Exemple #3
0
    void theme_duplicate(const utf8 * name)
    {
        utf8 newPath[MAX_PATH];

        ThemeManager::EnsureThemeDirectoryExists();
        ThemeManager::GetThemeFileName(newPath, sizeof(newPath), name);

        // Copy the theme, save it and then load it back in
        UITheme * newTheme = new UITheme(*ThemeManager::CurrentTheme);
        newTheme->SetName(name);
        newTheme->Flags &= ~UITHEME_FLAG_PREDEFINED;
        newTheme->WriteToFile(newPath);
        delete newTheme;

        ThemeManager::LoadTheme(newPath);

        theme_manager_load_available_themes();
        for (size_t i = 0; i < ThemeManager::AvailableThemes.GetCount(); i++)
        {
            if (Path::Equals(newPath, ThemeManager::AvailableThemes[i].Path))
            {
                ThemeManager::ActiveAvailableThemeIndex = i;
                String::DiscardDuplicate(&gConfigInterface.current_theme_preset, theme_manager_get_available_theme_name(i));
                break;
            }
        }
    }
Exemple #4
0
void window_themes_paint(rct_window *w, rct_drawpixelinfo *dpi)
{
    // Widgets
    window_draw_widgets(w, dpi);
    window_themes_draw_tab_images(dpi, w);

    if (_selected_tab == WINDOW_THEMES_TAB_SETTINGS) {
        size_t activeAvailableThemeIndex = theme_manager_get_active_available_theme_index();
        const utf8 * activeThemeName = theme_manager_get_available_theme_name(activeAvailableThemeIndex);
        set_format_arg(0, uintptr_t, (uintptr_t)activeThemeName);
        gfx_draw_string_left(dpi, STR_THEMES_LABEL_CURRENT_THEME, NULL, w->colours[1], w->x + 10, w->y + window_themes_widgets[WIDX_THEMES_PRESETS].top + 1);
        gfx_draw_string_left_clipped(
            dpi,
            STR_STRING,
            gCommonFormatArgs,
            w->colours[1],
            w->x + window_themes_widgets[WIDX_THEMES_PRESETS].left + 1,
            w->y + window_themes_widgets[WIDX_THEMES_PRESETS].top,
            w->x + window_themes_widgets[WIDX_THEMES_PRESETS_DROPDOWN].left - window_themes_widgets[WIDX_THEMES_PRESETS].left - 4
        );
    }
    else if (_selected_tab == WINDOW_THEMES_TAB_FEATURES) {

    }
    else {
        gfx_draw_string_left(dpi, STR_THEMES_HEADER_WINDOW, w, w->colours[1], w->x + 6, 58 - 12 + w->y + 1);
        gfx_draw_string_left(dpi, STR_THEMES_HEADER_PALETTE, w, w->colours[1], w->x + 220, 58 - 12 + w->y + 1);
    }
}
Exemple #5
0
static void window_themes_textinput(rct_window *w, rct_widgetindex widgetIndex, char *text)
{
    if (text == NULL || text[0] == 0)
        return;

    switch (widgetIndex) {
    case WIDX_THEMES_DUPLICATE_BUTTON:
    case WIDX_THEMES_RENAME_BUTTON:
        if (filename_valid_characters(text)) {
            bool nameTaken = false;
            sint32 numAvailableThemes = (sint32)theme_manager_get_num_available_themes();
            for (sint32 i = 0; i < numAvailableThemes; i++) {
                const utf8 * themeName = theme_manager_get_available_theme_name(i);
                if (strcmp(themeName, text) == 0) {
                    if (widgetIndex != WIDX_THEMES_RENAME_BUTTON) {
                        window_error_open(STR_THEMES_ERR_NAME_ALREADY_EXISTS, STR_NONE);
                    }
                    nameTaken = true;
                    break;
                }
            }
            if (!nameTaken) {
                if (widgetIndex == WIDX_THEMES_DUPLICATE_BUTTON) {
                    theme_duplicate(text);
                } else {
                    theme_rename(text);
                }
                window_invalidate(w);
            }
        } else {
            window_error_open(STR_ERROR_INVALID_CHARACTERS, STR_NONE);
        }
        break;
    }
}
Exemple #6
0
    void theme_manager_set_active_available_theme(size_t index)
    {
        if (index < ThemeManager::NumPredefinedThemes)
        {
            ThemeManager::LoadTheme((UITheme *)PredefinedThemes[index]);
        }
        else
        {
            const utf8 * path = ThemeManager::AvailableThemes[index].Path;
            ThemeManager::LoadTheme(path);

            // HACK Check if theme load failed and fell back to RCT2
            if (ThemeManager::CurrentThemePath == nullptr)
            {
                index = 1;
            }
        }
        ThemeManager::ActiveAvailableThemeIndex = index;
        String::DiscardDuplicate(&gConfigInterface.current_theme_preset, theme_manager_get_available_theme_name(index));
    }
Exemple #7
0
    void Initialise()
    {
        ThemeManager::GetAvailableThemes(&ThemeManager::AvailableThemes);
        LoadTheme((UITheme *)&PredefinedThemeRCT2);
        ActiveAvailableThemeIndex = 1;

        bool configValid = false;
        if (!String::IsNullOrEmpty(gConfigInterface.current_theme_preset))
        {
            if (LoadThemeByName(gConfigInterface.current_theme_preset))
            {
                configValid = true;
            }
        }
        
        if (!configValid)
        {
            String::DiscardDuplicate(&gConfigInterface.current_theme_preset, theme_manager_get_available_theme_name(1));
        }
    }
Exemple #8
0
    void theme_rename(const utf8 * name)
    {
        const utf8 * oldPath = ThemeManager::CurrentThemePath;
        utf8         newPath[MAX_PATH];

        ThemeManager::EnsureThemeDirectoryExists();
        ThemeManager::GetThemeFileName(newPath, sizeof(newPath), name);
        platform_file_move(oldPath, newPath);
        String::DiscardDuplicate(&ThemeManager::CurrentThemePath, newPath);

        ThemeManager::CurrentTheme->SetName(name);
        ThemeManager::CurrentTheme->WriteToFile(ThemeManager::CurrentThemePath);

        theme_manager_load_available_themes();
        for (size_t i = 0; i < ThemeManager::AvailableThemes.GetCount(); i++)
        {
            if (Path::Equals(newPath, ThemeManager::AvailableThemes[i].Path))
            {
                ThemeManager::ActiveAvailableThemeIndex = i;
                String::DiscardDuplicate(&gConfigInterface.current_theme_preset, theme_manager_get_available_theme_name(1));
                break;
            }
        }
    }
Exemple #9
0
static void window_themes_mousedown(rct_window *w, rct_widgetindex widgetIndex, rct_widget* widget)
{
    sint16 newSelectedTab;
    sint32 num_items;

    switch (widgetIndex) {
    case WIDX_THEMES_SETTINGS_TAB:
    case WIDX_THEMES_MAIN_UI_TAB:
    case WIDX_THEMES_PARK_TAB:
    case WIDX_THEMES_TOOLS_TAB:
    case WIDX_THEMES_RIDE_PEEPS_TAB:
    case WIDX_THEMES_EDITORS_TAB:
    case WIDX_THEMES_MISC_TAB:
    case WIDX_THEMES_PROMPTS_TAB:
    case WIDX_THEMES_FEATURES_TAB:
        newSelectedTab = widgetIndex - WIDX_THEMES_SETTINGS_TAB;
        if (_selected_tab == newSelectedTab)
            break;
        _selected_tab = (uint8)newSelectedTab;
        w->scrolls[0].v_top = 0;
        w->frame_no = 0;
        window_event_resize_call(w);
        window_invalidate(w);
        break;
    case WIDX_THEMES_PRESETS_DROPDOWN:
        theme_manager_load_available_themes();
        num_items = (sint32)theme_manager_get_num_available_themes();

        widget--;
        for (sint32 i = 0; i < num_items; i++) {
            gDropdownItemsFormat[i] = STR_OPTIONS_DROPDOWN_ITEM;
            gDropdownItemsArgs[i] = (uintptr_t)theme_manager_get_available_theme_name(i);
        }

        window_dropdown_show_text_custom_width(
            w->x + widget->left,
            w->y + widget->top,
            widget->bottom - widget->top + 1,
            w->colours[1],
            0,
            DROPDOWN_FLAG_STAY_OPEN,
            num_items,
            widget->right - widget->left - 3
        );

        dropdown_set_checked((sint32)theme_manager_get_active_available_theme_index(), true);
        break;
    case WIDX_THEMES_RCT1_RIDE_LIGHTS:
        if (theme_get_flags() & UITHEME_FLAG_PREDEFINED) {
            window_error_open(STR_THEMES_ERR_CANT_CHANGE_THIS_THEME, STR_NONE);
        } else {
            theme_set_flags(theme_get_flags() ^ UITHEME_FLAG_USE_LIGHTS_RIDE);
            theme_save();
            window_invalidate_all();
        }
        break;
    case WIDX_THEMES_RCT1_PARK_LIGHTS:
        if (theme_get_flags() & UITHEME_FLAG_PREDEFINED) {
            window_error_open(STR_THEMES_ERR_CANT_CHANGE_THIS_THEME, STR_NONE);
        } else {
            theme_set_flags(theme_get_flags() ^ UITHEME_FLAG_USE_LIGHTS_PARK);
            theme_save();
            window_invalidate_all();
        }
        break;
    case WIDX_THEMES_RCT1_SCENARIO_FONT:
        if (theme_get_flags() & UITHEME_FLAG_PREDEFINED) {
            window_error_open(STR_THEMES_ERR_CANT_CHANGE_THIS_THEME, STR_NONE);
        } else {
            theme_set_flags(theme_get_flags() ^ UITHEME_FLAG_USE_ALTERNATIVE_SCENARIO_SELECT_FONT);
            theme_save();
            window_invalidate_all();
        }
        break;
    }
}