diff --git a/src/windows/title_editor.c b/src/windows/title_editor.c index 2a15b5fd38..f7d85d01c1 100644 --- a/src/windows/title_editor.c +++ b/src/windows/title_editor.c @@ -274,83 +274,75 @@ void window_title_editor_open(int tab) static void window_title_editor_close(rct_window *w) { - rct_window *command_editor_w, *load_save_w; - // Close the related windows - command_editor_w = window_find_by_class(WC_TITLE_COMMAND_EDITOR); - load_save_w = window_find_by_class(WC_LOADSAVE); - if (command_editor_w) - window_close(command_editor_w); - if (load_save_w && gLoadSaveTitleSequenceSave) - window_close(load_save_w); + window_close_by_class(WC_TITLE_COMMAND_EDITOR); + if (gLoadSaveTitleSequenceSave) { + window_close_by_class(WC_LOADSAVE); + } } static void window_title_editor_mouseup(rct_window *w, int widgetIndex) { - char path[MAX_PATH]; - int defaultPreset, playing, inTitle, i, commandEditorOpen; - - defaultPreset = (gCurrentTitleSequence < TITLE_SEQUENCE_DEFAULT_PRESETS); - playing = (gCurrentTitleSequence == gCurrentPreviewTitleSequence) && ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO); - inTitle = ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO); - commandEditorOpen = (window_find_by_class(WC_TITLE_COMMAND_EDITOR) != NULL); + bool readOnly = (gCurrentTitleSequence < TITLE_SEQUENCE_DEFAULT_PRESETS); + bool playing = (gCurrentTitleSequence == gCurrentPreviewTitleSequence) && ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO); + bool inTitle = ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO); + bool commandEditorOpen = (window_find_by_class(WC_TITLE_COMMAND_EDITOR) != NULL); switch (widgetIndex) { case WIDX_TITLE_EDITOR_CLOSE: window_close(w); break; case WIDX_TITLE_EDITOR_NEW_BUTTON: - commandEditorOpen *= 2; - if (!commandEditorOpen) + if (!commandEditorOpen) { // TODO: This should probably be 'NEW' window_text_input_open(w, widgetIndex, STR_TITLE_EDITOR_ACTION_DUPLICATE, STR_TITLE_EDITOR_ENTER_NAME_FOR_SEQUENCE, STR_NONE, 0, 64); + } break; case WIDX_TITLE_EDITOR_DUPLICATE_BUTTON: - commandEditorOpen *= 2; - if (!commandEditorOpen) + if (!commandEditorOpen) { window_text_input_open(w, widgetIndex, STR_TITLE_EDITOR_ACTION_DUPLICATE, STR_TITLE_EDITOR_ENTER_NAME_FOR_SEQUENCE, STR_STRING, (uintptr_t)_loadedTitleSequence->Name, 64); + } break; case WIDX_TITLE_EDITOR_DELETE_BUTTON: - defaultPreset *= 2; commandEditorOpen *= 2; - if (!defaultPreset && !commandEditorOpen) + if (!readOnly && !commandEditorOpen) { title_sequence_delete_preset(gCurrentTitleSequence); + } break; case WIDX_TITLE_EDITOR_RENAME_BUTTON: - defaultPreset *= 2; commandEditorOpen *= 2; - if (!defaultPreset && !commandEditorOpen) + if (!readOnly && !commandEditorOpen) { window_text_input_open(w, widgetIndex, STR_TRACK_MANAGE_RENAME, STR_TITLE_EDITOR_ENTER_NAME_FOR_SEQUENCE, STR_STRING, (uintptr_t)_loadedTitleSequence->Name, 64); + } break; case WIDX_TITLE_EDITOR_ADD: - defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2; - if (!defaultPreset && !playing && !commandEditorOpen) { + if (!readOnly && !playing && !commandEditorOpen) { window_loadsave_open(LOADSAVETYPE_LOAD | LOADSAVETYPE_GAME, NULL); gLoadSaveTitleSequenceSave = true; } break; case WIDX_TITLE_EDITOR_REMOVE: - defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2; - if (!defaultPreset && !playing && !commandEditorOpen) { + if (!readOnly && !playing && !commandEditorOpen) { if (w->selected_list_item != -1) { title_sequence_remove_save(gCurrentTitleSequence, w->selected_list_item); - if (w->selected_list_item > 0) + if (w->selected_list_item > 0) { w->selected_list_item--; - else if (w->selected_list_item > (sint16)_loadedTitleSequence->NumSaves) + } else if (w->selected_list_item > (sint16)_loadedTitleSequence->NumSaves) { w->selected_list_item = (sint16)(_loadedTitleSequence->NumSaves - 1); + } } } break; case WIDX_TITLE_EDITOR_RENAME: - defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2; - if (!defaultPreset && !playing && !commandEditorOpen) { - if (w->selected_list_item != -1) + if (!readOnly && !playing && !commandEditorOpen) { + if (w->selected_list_item != -1) { window_text_input_open(w, widgetIndex, STR_FILEBROWSER_RENAME_SAVE_TITLE, STR_TITLE_EDITOR_ENTER_NAME_FOR_SAVE, STR_STRING, (uintptr_t)_loadedTitleSequence->Saves[w->selected_list_item], 52 - 1); + } } break; case WIDX_TITLE_EDITOR_LOAD: if (w->selected_list_item != -1) { + utf8 path[MAX_PATH]; if (str_is_null_or_empty(_loadedTitleSequence->Path)) { safe_strcpy(path, _loadedTitleSequence->Path, sizeof(path)); - } - else { + } else { // TODO: This should probably use a constant platform_get_user_directory(path, "title sequences", sizeof(path)); safe_strcat_path(path, _loadedTitleSequence->Name, sizeof(path)); @@ -362,35 +354,34 @@ static void window_title_editor_mouseup(rct_window *w, int widgetIndex) } break; case WIDX_TITLE_EDITOR_INSERT: - defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2; - if (!defaultPreset && !playing && !commandEditorOpen) { - if (w->selected_list_item != -1) + if (!readOnly && !playing && !commandEditorOpen) { + if (w->selected_list_item != -1) { window_title_command_editor_open(w->selected_list_item + 1, true); - else + } else { window_title_command_editor_open((int)_loadedTitleSequence->NumCommands, true); + } } break; case WIDX_TITLE_EDITOR_EDIT: - defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2; - if (!defaultPreset && !playing && !commandEditorOpen) { - if (w->selected_list_item != -1 && w->selected_list_item < (sint16)_loadedTitleSequence->NumCommands) + if (!readOnly && !playing && !commandEditorOpen) { + if (w->selected_list_item != -1 && w->selected_list_item < (sint16)_loadedTitleSequence->NumCommands) { window_title_command_editor_open(w->selected_list_item, false); + } } break; case WIDX_TITLE_EDITOR_DELETE: - defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2; - if (!defaultPreset && !playing && !commandEditorOpen) { + if (!readOnly && !playing && !commandEditorOpen) { if (w->selected_list_item != -1 && w->selected_list_item < (sint16)_loadedTitleSequence->NumCommands) { title_sequence_delete_command(gCurrentTitleSequence, w->selected_list_item); - if (w->selected_list_item > 0) + if (w->selected_list_item > 0) { w->selected_list_item--; - else if (w->selected_list_item >= (sint16)_loadedTitleSequence->NumCommands) + } else if (w->selected_list_item >= (sint16)_loadedTitleSequence->NumCommands) { w->selected_list_item = (sint16)(_loadedTitleSequence->NumCommands - 1); + } } } break; /*case WIDX_TITLE_EDITOR_RELOAD: - playing *= 2; commandEditorOpen *= 2; if (!playing && !commandEditorOpen) { //title_sequence_open } @@ -401,7 +392,7 @@ static void window_title_editor_mouseup(rct_window *w, int widgetIndex) gTitleScriptCommand = 0; } if (gTitleScriptCommand != w->selected_list_item) { - for (i = gTitleScriptCommand + 1; i < (int)_loadedTitleSequence->NumCommands; i++) { + for (int i = gTitleScriptCommand + 1; i < (int)_loadedTitleSequence->NumCommands; i++) { if (_loadedTitleSequence->Commands[i].Type == TITLE_SCRIPT_LOAD || _loadedTitleSequence->Commands[i].Type == TITLE_SCRIPT_LOADMM) { gTitleScriptSkipLoad = i; @@ -415,8 +406,7 @@ static void window_title_editor_mouseup(rct_window *w, int widgetIndex) } break; case WIDX_TITLE_EDITOR_MOVE_DOWN: - defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2; - if (!defaultPreset && !playing && !commandEditorOpen) { + if (!readOnly && !playing && !commandEditorOpen) { if (w->selected_list_item != -1 && w->selected_list_item < (sint16)_loadedTitleSequence->NumCommands - 1) { title_sequence_move_down_command(gCurrentTitleSequence, w->selected_list_item); w->selected_list_item++; @@ -424,8 +414,7 @@ static void window_title_editor_mouseup(rct_window *w, int widgetIndex) } break; case WIDX_TITLE_EDITOR_MOVE_UP: - defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2; - if (!defaultPreset && !playing && !commandEditorOpen) { + if (!readOnly && !playing && !commandEditorOpen) { if (w->selected_list_item != -1 && w->selected_list_item > 0) { title_sequence_move_up_command(gCurrentTitleSequence, w->selected_list_item); w->selected_list_item--; @@ -446,6 +435,7 @@ static void window_title_editor_mouseup(rct_window *w, int widgetIndex) break; case WIDX_TITLE_EDITOR_SKIP: if (playing) { + int i; for (i = gTitleScriptCommand; i < (int)_loadedTitleSequence->NumCommands; i++) { if (_loadedTitleSequence->Commands[i].Type == TITLE_SCRIPT_LOAD || _loadedTitleSequence->Commands[i].Type == TITLE_SCRIPT_LOADMM @@ -469,107 +459,62 @@ static void window_title_editor_mouseup(rct_window *w, int widgetIndex) } break; } - if (defaultPreset == 2) + if (readOnly == 2) { window_error_open(STR_ERROR_CANT_CHANGE_TITLE_SEQUENCE, STR_NONE); - else if (commandEditorOpen == 2) + } else if (commandEditorOpen == 2) { window_error_open(STR_TITLE_EDITOR_ERR_CANT_CHANGE_WHILE_EDITOR_IS_OPEN, STR_NONE); - else if (playing == 2) + } else if (playing == 2) { window_error_open(STR_TITLE_EDITOR_ERR_CANT_EDIT_WHILE_PLAYING, STR_TITLE_EDITOR_PRESS_STOP_TO_CONTINUE_EDITING); + } } static void window_title_editor_resize(rct_window *w) { if (w->selected_tab == WINDOW_TITLE_EDITOR_TAB_PRESETS) { - w->min_width = WW; - w->min_height = WH2; - w->max_width = WW; - w->max_height = WH2; - - if (w->width < w->min_width) { - w->width = w->min_width; - gfx_invalidate_screen(); - } - if (w->height < w->min_height) { - w->height = w->min_height; - gfx_invalidate_screen(); - } - if (w->width > w->max_width) { - w->width = w->max_width; - gfx_invalidate_screen(); - } - if (w->height > w->max_height) { - w->height = w->max_height; - gfx_invalidate_screen(); - } - } - else { - w->min_width = WW; - w->min_height = WH; - w->max_width = 500; - w->max_height = 580; - - if (w->width < w->min_width) { - w->width = w->min_width; - window_invalidate(w); - } - if (w->height < w->min_height) { - w->height = w->min_height; - window_invalidate(w); - } - if (w->width > w->max_width) { - w->width = w->max_width; - window_invalidate(w); - } - if (w->height > w->max_height) { - w->height = w->max_height; - window_invalidate(w); - } + window_set_resize(w, WW, WH, WH2, WH2); + } else { + window_set_resize(w, WW, WH, 500, 580); } } static void window_title_editor_mousedown(int widgetIndex, rct_window* w, rct_widget* widget) { - short newSelectedTab; - int num_items, i; - switch (widgetIndex) { case WIDX_TITLE_EDITOR_PRESETS_TAB: case WIDX_TITLE_EDITOR_SAVES_TAB: case WIDX_TITLE_EDITOR_SCRIPT_TAB: - newSelectedTab = widgetIndex - WIDX_TITLE_EDITOR_PRESETS_TAB; - if (w->selected_tab == newSelectedTab) - break; - w->selected_tab = newSelectedTab; - w->selected_list_item = -1; - _window_title_editor_highlighted_index = -1; - w->scrolls[0].v_top = 0; - w->frame_no = 0; - window_event_resize_call(w); - window_invalidate(w); + { + int newSelectedTab = widgetIndex - WIDX_TITLE_EDITOR_PRESETS_TAB; + if (w->selected_tab != newSelectedTab) { + w->selected_tab = newSelectedTab; + w->selected_list_item = -1; + _window_title_editor_highlighted_index = -1; + w->scrolls[0].v_top = 0; + w->frame_no = 0; + window_event_resize_call(w); + window_invalidate(w); + } break; + } case WIDX_TITLE_EDITOR_PRESETS_DROPDOWN: if (window_find_by_class(WC_TITLE_COMMAND_EDITOR) != NULL) { window_error_open(STR_TITLE_EDITOR_ERR_CANT_CHANGE_WHILE_EDITOR_IS_OPEN, STR_NONE); - } - else { - num_items = (int)title_sequence_manager_get_count(); - - widget--; - for (i = 0; i < num_items; i++) { + } else { + int numItems = (int)title_sequence_manager_get_count(); + for (int i = 0; i < numItems; i++) { gDropdownItemsFormat[i] = STR_OPTIONS_DROPDOWN_ITEM; gDropdownItemsArgs[i] = (uintptr_t)title_sequence_manager_get_name(i); } + widget--; window_dropdown_show_text_custom_width( w->x + widget->left, w->y + widget->top, widget->bottom - widget->top + 1, w->colours[1], DROPDOWN_FLAG_STAY_OPEN, - num_items, - widget->right - widget->left - 3 - ); - + numItems, + widget->right - widget->left - 3); dropdown_set_checked(gCurrentTitleSequence, true); } break; @@ -593,8 +538,9 @@ static void window_title_editor_dropdown(rct_window *w, int widgetIndex, int dro static void window_title_editor_update(rct_window *w) { w->frame_no++; - if (w->frame_no >= window_title_editor_tab_animation_loops[w->selected_tab]) + if (w->frame_no >= window_title_editor_tab_animation_loops[w->selected_tab]) { w->frame_no = 0; + } if (!widget_is_highlighted(w, WIDX_TITLE_EDITOR_LIST)) { _window_title_editor_highlighted_index = -1; @@ -607,15 +553,17 @@ static void window_title_editor_update(rct_window *w) static void window_title_editor_scrollgetsize(rct_window *w, int scrollIndex, int *width, int *height) { size_t lineCount = 1; - if (w->selected_tab == WINDOW_TITLE_EDITOR_TAB_SAVES) + if (w->selected_tab == WINDOW_TITLE_EDITOR_TAB_SAVES) { lineCount = _loadedTitleSequence->NumSaves; - else if (w->selected_tab == WINDOW_TITLE_EDITOR_TAB_SCRIPT) + } else if (w->selected_tab == WINDOW_TITLE_EDITOR_TAB_SCRIPT) { lineCount = _loadedTitleSequence->NumCommands; + } *height = (int)(lineCount * ROW_HEIGHT); int i = *height - window_title_editor_widgets[WIDX_TITLE_EDITOR_LIST].bottom + window_title_editor_widgets[WIDX_TITLE_EDITOR_LIST].top + 21; - if (i < 0) + if (i < 0) { i = 0; + } if (i < w->scrolls[0].v_top) { w->scrolls[0].v_top = i; window_invalidate(w); @@ -626,9 +574,7 @@ static void window_title_editor_scrollgetsize(rct_window *w, int scrollIndex, in static void window_title_editor_scrollmousedown(rct_window *w, int scrollIndex, int x, int y) { - int index; - - index = y / ROW_HEIGHT; + int index = y / ROW_HEIGHT; w->selected_list_item = -1; switch (w->selected_tab) { case WINDOW_TITLE_EDITOR_TAB_SAVES: @@ -648,9 +594,7 @@ static void window_title_editor_scrollmousedown(rct_window *w, int scrollIndex, static void window_title_editor_scrollmouseover(rct_window *w, int scrollIndex, int x, int y) { - int index; - - index = y / ROW_HEIGHT; + int index = y / ROW_HEIGHT; switch (w->selected_tab) { case WINDOW_TITLE_EDITOR_TAB_SAVES: if (index < (int)_loadedTitleSequence->NumSaves) @@ -661,16 +605,14 @@ static void window_title_editor_scrollmouseover(rct_window *w, int scrollIndex, _window_title_editor_highlighted_index = (sint16)index; break; } - // This check is disabled since for some reason it creates a problem with highlighting index 1 - //if (oldHighlightedIndex != _window_title_editor_highlighted_index) { widget_invalidate(w, WIDX_TITLE_EDITOR_LIST); - //} } static void window_title_editor_textinput(rct_window *w, int widgetIndex, char *text) { - if (text == NULL || text[0] == 0) + if (str_is_null_or_empty(text)) { return; + } switch (widgetIndex) { case WIDX_TITLE_EDITOR_NEW_BUTTON: @@ -680,21 +622,17 @@ static void window_title_editor_textinput(rct_window *w, int widgetIndex, char * if (!title_sequence_name_exists(text)) { if (widgetIndex == WIDX_TITLE_EDITOR_NEW_BUTTON) { title_sequence_create_preset(text); - } - else if (widgetIndex == WIDX_TITLE_EDITOR_DUPLICATE_BUTTON) { + } else if (widgetIndex == WIDX_TITLE_EDITOR_DUPLICATE_BUTTON) { title_sequence_duplicate_preset(gCurrentTitleSequence, text); - } - else { + } else { title_sequence_rename_preset(gCurrentTitleSequence, text); } config_save_default(); window_invalidate(w); - } - else { + } else { window_error_open(STR_ERROR_EXISTING_NAME, STR_NONE); } - } - else { + } else { window_error_open(STR_ERROR_INVALID_CHARACTERS, STR_NONE); } break; @@ -704,12 +642,10 @@ static void window_title_editor_textinput(rct_window *w, int widgetIndex, char * title_sequence_rename_save(gCurrentTitleSequence, w->selected_list_item, text); TileSequenceSave(_loadedTitleSequence); window_invalidate(w); - } - else { + } else { window_error_open(STR_ERROR_EXISTING_NAME, STR_NONE); } - } - else { + } else { window_error_open(STR_ERROR_INVALID_CHARACTERS, STR_NONE); } break; @@ -811,19 +747,18 @@ static void window_title_editor_invalidate(rct_window *w) window_title_editor_widgets[WIDX_TITLE_EDITOR_SKIP].top = w->height - 32; window_title_editor_widgets[WIDX_TITLE_EDITOR_SKIP].bottom = w->height - 16; - int playing, inTitle; - - playing = (gCurrentTitleSequence == gCurrentPreviewTitleSequence) && ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO); - inTitle = ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO); - - if (!inTitle) + int playing = (gCurrentTitleSequence == gCurrentPreviewTitleSequence) && ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO); + int inTitle = ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO); + if (!inTitle) { w->disabled_widgets |= (1 << WIDX_TITLE_EDITOR_PLAY); - else + } else { w->disabled_widgets &= ~(1 << WIDX_TITLE_EDITOR_PLAY); - if (!playing) + } + if (!playing) { w->disabled_widgets |= (1 << WIDX_TITLE_EDITOR_REPLAY) | (1 << WIDX_TITLE_EDITOR_STOP) | (1 << WIDX_TITLE_EDITOR_SKIP) | (1 << WIDX_TITLE_EDITOR_SKIP_TO); - else + } else { w->disabled_widgets &= ~((1 << WIDX_TITLE_EDITOR_REPLAY) | (1 << WIDX_TITLE_EDITOR_STOP) | (1 << WIDX_TITLE_EDITOR_SKIP) | (1 << WIDX_TITLE_EDITOR_SKIP_TO)); + } } static void window_title_editor_paint(rct_window *w, rct_drawpixelinfo *dpi) @@ -835,7 +770,6 @@ static void window_title_editor_paint(rct_window *w, rct_drawpixelinfo *dpi) // Draw strings switch (w->selected_tab) { case WINDOW_TITLE_EDITOR_TAB_PRESETS: - set_format_arg(0, uintptr_t, _loadedTitleSequence->Name); gfx_draw_string_left(dpi, STR_TITLE_SEQUENCE, NULL, w->colours[1], w->x + 10, w->y + window_title_editor_widgets[WIDX_TITLE_EDITOR_PRESETS].top + 1); gfx_draw_string_left_clipped( @@ -845,15 +779,11 @@ static void window_title_editor_paint(rct_window *w, rct_drawpixelinfo *dpi) w->colours[1], w->x + window_title_editor_widgets[WIDX_TITLE_EDITOR_PRESETS].left + 1, w->y + window_title_editor_widgets[WIDX_TITLE_EDITOR_PRESETS].top, - w->x + window_title_editor_widgets[WIDX_TITLE_EDITOR_PRESETS_DROPDOWN].left - window_title_editor_widgets[WIDX_TITLE_EDITOR_PRESETS].left - 4 - ); - + w->x + window_title_editor_widgets[WIDX_TITLE_EDITOR_PRESETS_DROPDOWN].left - window_title_editor_widgets[WIDX_TITLE_EDITOR_PRESETS].left - 4); break; case WINDOW_TITLE_EDITOR_TAB_SAVES: - break; case WINDOW_TITLE_EDITOR_TAB_SCRIPT: - break; } } @@ -991,20 +921,18 @@ static void window_title_editor_scrollpaint_commands(rct_window *w, rct_drawpixe static void window_title_editor_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w) { - int sprite_idx; - int x, y; - for (int i = 0; i < WINDOW_TITLE_EDITOR_TAB_COUNT; i++) { - x = 0; - y = 0; - sprite_idx = window_title_editor_tab_sprites[i]; - if (w->selected_tab == i) - sprite_idx += w->frame_no / window_title_editor_tab_animation_divisor[w->selected_tab]; + int x = 0; + int y = 0; + int spriteId = window_title_editor_tab_sprites[i]; + if (w->selected_tab == i) { + spriteId += w->frame_no / window_title_editor_tab_animation_divisor[w->selected_tab]; + } if (i == 1) { x = 4; y = 1; } - gfx_draw_sprite(dpi, sprite_idx, w->x + w->widgets[WIDX_TITLE_EDITOR_PRESETS_TAB + i].left + x, w->y + w->widgets[WIDX_TITLE_EDITOR_PRESETS_TAB + i].top + y, 0); + gfx_draw_sprite(dpi, spriteId, w->x + w->widgets[WIDX_TITLE_EDITOR_PRESETS_TAB + i].left + x, w->y + w->widgets[WIDX_TITLE_EDITOR_PRESETS_TAB + i].top + y, 0); } }