2016-05-04 19:24:41 +02:00
|
|
|
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
|
2015-06-24 18:22:12 +02:00
|
|
|
/*****************************************************************************
|
2016-05-04 19:24:41 +02:00
|
|
|
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
|
|
|
|
*
|
|
|
|
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
|
|
|
|
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
|
|
|
|
*
|
|
|
|
* OpenRCT2 is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* A full copy of the GNU General Public License can be found in licence.txt
|
|
|
|
*****************************************************************************/
|
|
|
|
#pragma endregion
|
2015-06-24 18:22:12 +02:00
|
|
|
|
|
|
|
#include "../config.h"
|
|
|
|
#include "../game.h"
|
|
|
|
#include "../drawing/drawing.h"
|
|
|
|
#include "../input.h"
|
|
|
|
#include "../interface/viewport.h"
|
|
|
|
#include "../interface/widget.h"
|
|
|
|
#include "../interface/window.h"
|
|
|
|
#include "../localisation/localisation.h"
|
|
|
|
#include "../peep/peep.h"
|
|
|
|
#include "../peep/staff.h"
|
|
|
|
#include "../world/sprite.h"
|
|
|
|
#include "dropdown.h"
|
|
|
|
#include "../interface/themes.h"
|
|
|
|
#include "../sprites.h"
|
|
|
|
#include "../title.h"
|
|
|
|
#include "../interface/title_sequences.h"
|
|
|
|
#include "error.h"
|
|
|
|
#include "../scenario.h"
|
|
|
|
#include "../util/util.h"
|
|
|
|
|
|
|
|
enum {
|
|
|
|
WINDOW_TITLE_EDITOR_TAB_PRESETS,
|
|
|
|
WINDOW_TITLE_EDITOR_TAB_SAVES,
|
|
|
|
WINDOW_TITLE_EDITOR_TAB_SCRIPT,
|
|
|
|
WINDOW_TITLE_EDITOR_TAB_COUNT
|
|
|
|
} WINDOW_TITLE_EDITOR_TAB;
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
static void window_title_editor_close(rct_window *w);
|
|
|
|
static void window_title_editor_mouseup(rct_window *w, int widgetIndex);
|
|
|
|
static void window_title_editor_resize(rct_window *w);
|
2015-06-24 18:22:12 +02:00
|
|
|
static void window_title_editor_mousedown(int widgetIndex, rct_window*w, rct_widget* widget);
|
2015-07-10 02:39:16 +02:00
|
|
|
static void window_title_editor_dropdown(rct_window *w, int widgetIndex, int dropdownIndex);
|
2015-06-24 18:22:12 +02:00
|
|
|
static void window_title_editor_update(rct_window *w);
|
2015-07-10 02:39:16 +02:00
|
|
|
static void window_title_editor_scrollgetsize(rct_window *w, int scrollIndex, int *width, int *height);
|
|
|
|
static void window_title_editor_scrollmousedown(rct_window *w, int scrollIndex, int x, int y);
|
|
|
|
static void window_title_editor_scrollmouseover(rct_window *w, int scrollIndex, int x, int y);
|
|
|
|
static void window_title_editor_textinput(rct_window *w, int widgetIndex, char *text);
|
|
|
|
static void window_title_editor_tooltip(rct_window* w, int widgetIndex, rct_string_id *stringId);
|
|
|
|
static void window_title_editor_invalidate(rct_window *w);
|
|
|
|
static void window_title_editor_paint(rct_window *w, rct_drawpixelinfo *dpi);
|
|
|
|
static void window_title_editor_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int scrollIndex);
|
2015-06-24 18:22:12 +02:00
|
|
|
static void window_title_editor_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w);
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
static rct_window_event_list window_title_editor_events = {
|
2015-06-24 18:22:12 +02:00
|
|
|
window_title_editor_close,
|
|
|
|
window_title_editor_mouseup,
|
|
|
|
window_title_editor_resize,
|
|
|
|
window_title_editor_mousedown,
|
|
|
|
window_title_editor_dropdown,
|
2015-07-10 02:39:16 +02:00
|
|
|
NULL,
|
2015-06-24 18:22:12 +02:00
|
|
|
window_title_editor_update,
|
2015-07-10 02:39:16 +02:00
|
|
|
NULL,
|
|
|
|
NULL,
|
|
|
|
NULL,
|
|
|
|
NULL,
|
|
|
|
NULL,
|
|
|
|
NULL,
|
|
|
|
NULL,
|
|
|
|
NULL,
|
2015-06-24 18:22:12 +02:00
|
|
|
window_title_editor_scrollgetsize,
|
|
|
|
window_title_editor_scrollmousedown,
|
2015-07-10 02:39:16 +02:00
|
|
|
NULL,
|
2015-06-24 18:22:12 +02:00
|
|
|
window_title_editor_scrollmouseover,
|
|
|
|
window_title_editor_textinput,
|
2015-07-10 02:39:16 +02:00
|
|
|
NULL,
|
|
|
|
NULL,
|
2015-06-24 18:22:12 +02:00
|
|
|
window_title_editor_tooltip,
|
2015-07-10 02:39:16 +02:00
|
|
|
NULL,
|
|
|
|
NULL,
|
2015-06-24 18:22:12 +02:00
|
|
|
window_title_editor_invalidate,
|
|
|
|
window_title_editor_paint,
|
|
|
|
window_title_editor_scrollpaint,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum WINDOW_TITLE_EDITOR_WIDGET_IDX {
|
|
|
|
WIDX_TITLE_EDITOR_BACKGROUND,
|
|
|
|
WIDX_TITLE_EDITOR_TITLE,
|
|
|
|
WIDX_TITLE_EDITOR_CLOSE,
|
|
|
|
WIDX_TITLE_EDITOR_TAB_CONTENT_PANEL,
|
|
|
|
WIDX_TITLE_EDITOR_PRESETS_TAB,
|
|
|
|
WIDX_TITLE_EDITOR_SAVES_TAB,
|
|
|
|
WIDX_TITLE_EDITOR_SCRIPT_TAB,
|
|
|
|
WIDX_TITLE_EDITOR_LIST,
|
2015-10-20 20:16:30 +02:00
|
|
|
|
2015-06-24 18:22:12 +02:00
|
|
|
// Presets Tab
|
|
|
|
WIDX_TITLE_EDITOR_PRESETS,
|
|
|
|
WIDX_TITLE_EDITOR_PRESETS_DROPDOWN,
|
2015-06-25 16:41:40 +02:00
|
|
|
WIDX_TITLE_EDITOR_NEW_BUTTON,
|
2015-06-24 18:22:12 +02:00
|
|
|
WIDX_TITLE_EDITOR_DUPLICATE_BUTTON,
|
|
|
|
WIDX_TITLE_EDITOR_DELETE_BUTTON,
|
|
|
|
WIDX_TITLE_EDITOR_RENAME_BUTTON,
|
|
|
|
|
|
|
|
// Saves Tab
|
|
|
|
WIDX_TITLE_EDITOR_ADD,
|
|
|
|
WIDX_TITLE_EDITOR_REMOVE,
|
|
|
|
WIDX_TITLE_EDITOR_RENAME,
|
|
|
|
WIDX_TITLE_EDITOR_LOAD,
|
|
|
|
|
|
|
|
// Script Tab
|
|
|
|
WIDX_TITLE_EDITOR_INSERT,
|
|
|
|
WIDX_TITLE_EDITOR_EDIT,
|
|
|
|
WIDX_TITLE_EDITOR_DELETE,
|
|
|
|
//WIDX_TITLE_EDITOR_RELOAD,
|
|
|
|
WIDX_TITLE_EDITOR_SKIP_TO,
|
2015-10-20 20:16:30 +02:00
|
|
|
|
2015-06-24 18:22:12 +02:00
|
|
|
WIDX_TITLE_EDITOR_MOVE_UP,
|
|
|
|
WIDX_TITLE_EDITOR_MOVE_DOWN,
|
|
|
|
|
|
|
|
WIDX_TITLE_EDITOR_REPLAY,
|
|
|
|
WIDX_TITLE_EDITOR_STOP,
|
|
|
|
WIDX_TITLE_EDITOR_PLAY,
|
|
|
|
WIDX_TITLE_EDITOR_SKIP,
|
|
|
|
};
|
|
|
|
|
|
|
|
// Increase BW if certain launguages do not fit
|
|
|
|
// BW should be a multiple of 4
|
|
|
|
#define WW 320
|
|
|
|
#define WH 270
|
|
|
|
#define BX 8
|
|
|
|
#define BW 72
|
|
|
|
#define BY 52
|
|
|
|
#define BH 63
|
|
|
|
#define BS 18
|
|
|
|
#define ROW_HEIGHT 11
|
|
|
|
#define SCROLL_WIDTH 350
|
2015-06-25 16:41:40 +02:00
|
|
|
#define WH2 127
|
2015-06-24 18:22:12 +02:00
|
|
|
|
|
|
|
static rct_widget window_title_editor_widgets[] = {
|
2016-07-14 14:07:49 +02:00
|
|
|
{ WWT_FRAME, 0, 0, WW-1, 0, WH2-1, 0xFFFFFFFF, STR_NONE }, // panel / background
|
|
|
|
{ WWT_CAPTION, 0, 1, WW-2, 1, 14, STR_TITLE_EDITOR_TITLE, STR_WINDOW_TITLE_TIP }, // title bar
|
|
|
|
{ WWT_CLOSEBOX, 0, WW-13, WW-3, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close button
|
|
|
|
{ WWT_RESIZE, 1, 0, WW-1, 43, WH2-1, 0xFFFFFFFF, STR_NONE }, // tab content panel
|
|
|
|
{ WWT_TAB, 1, 3, 33, 17, 43, 0x20000000 | SPR_TAB, STR_THEMES_TAB_SETTINGS_TIP }, // presets tab
|
|
|
|
{ WWT_TAB, 1, 34, 64, 17, 43, 0x20000000 | SPR_TAB, STR_TITLE_EDITOR_SAVES_TAB_TIP }, // saves tab
|
|
|
|
{ WWT_TAB, 1, 65, 95, 17, 43, 0x20000000 | SPR_TAB, STR_TITLE_EDITOR_SCRIPT_TAB_TIP }, // script tab
|
|
|
|
{ WWT_SCROLL, 1, BX+BW+9,WW-4, 48, WH-4, SCROLL_BOTH, STR_NONE }, // command/save list
|
2015-10-20 20:16:30 +02:00
|
|
|
|
2015-06-24 18:22:12 +02:00
|
|
|
// Presets Tab
|
2016-07-14 14:07:49 +02:00
|
|
|
{ WWT_DROPDOWN, 1, 125, 299, 60, 71, STR_NONE, STR_NONE }, // Preset title sequences
|
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, 288, 298, 61, 70, STR_DROPDOWN_GLYPH, STR_NONE },
|
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, 10, 100, 82, 93, STR_TITLE_EDITOR_ACTION_CREATE, STR_TITLE_EDITOR_ACTION_CREATE_SEQUENCE_TIP }, // Create button
|
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, 10, 100, 82+20, 93+20, STR_TITLE_EDITOR_ACTION_DUPLICATE, STR_TITLE_EDITOR_ACTION_DUPLICATE_SEQUENCE_TIP }, // Duplicate button
|
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, 110, 200, 82, 93, STR_TRACK_MANAGE_DELETE, STR_TITLE_EDITOR_ACTION_DELETE_SEQUENCE_TIP }, // Delete button
|
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, 210, 300, 82, 93, STR_TRACK_MANAGE_RENAME, STR_TITLE_EDITOR_ACTION_RENAME_SEQUENCE_TIP }, // Rename button
|
2015-10-20 20:16:30 +02:00
|
|
|
|
2015-06-24 18:22:12 +02:00
|
|
|
// Saves Tab
|
2016-07-14 14:07:49 +02:00
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, BX, BX+BW-1,BY, BH, STR_TITLE_EDITOR_ACTION_ADD, STR_TITLE_EDITOR_ACTION_ADD_TIP }, // Add
|
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, BX, BX+BW-1,BY+(BS*1), BH+(BS*1), STR_TITLE_EDITOR_ACTION_REMOVE, STR_TITLE_EDITOR_ACTION_REMOVE_TIP }, // Remove
|
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, BX, BX+BW-1,BY+(BS*2), BH+(BS*2), STR_TRACK_MANAGE_RENAME, STR_TITLE_EDITOR_ACTION_RENAME_TIP }, // Rename
|
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, BX, BX+BW-1,BY+(BS*3), BH+(BS*3), STR_TITLE_EDITOR_ACTION_LOAD, STR_TITLE_EDITOR_ACTION_LOAD_TIP }, // Load
|
2015-06-24 18:22:12 +02:00
|
|
|
|
|
|
|
// Script Tab
|
2016-07-14 14:07:49 +02:00
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, BX, BX+BW-1,BY, BH, STR_TITLE_EDITOR_ACTION_INSERT, STR_TITLE_EDITOR_ACTION_INSERT_TIP }, // Insert
|
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, BX, BX+BW-1,BY+(BS*1), BH+(BS*1), STR_TITLE_EDITOR_ACTION_EDIT, STR_TITLE_EDITOR_ACTION_EDIT_TIP }, // Edit
|
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, BX, BX+BW-1,BY+(BS*2), BH+(BS*2), STR_TRACK_MANAGE_DELETE, STR_TITLE_EDITOR_ACTION_DELETE_TIP }, // Delete
|
|
|
|
//{ WWT_DROPDOWN_BUTTON, 1, BX, BX+BW-1,BY+(BS*3), BH+(BS*3), STR_TITLE_EDITOR_ACTION_RELOAD, STR_TITLE_EDITOR_ACTION_RELOAD_TIP }, // Reload
|
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, BX, BX+BW-1,BY+(BS*3), BH+(BS*3), STR_TITLE_EDITOR_ACTION_SKIP_TO, STR_TITLE_EDITOR_ACTION_SKIP_TO_TIP }, // Skip to
|
2015-06-24 18:22:12 +02:00
|
|
|
|
2016-07-14 14:07:49 +02:00
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, BX, BX+BW/2-1,BY+(BS*5),BH+(BS*5), STR_DOWN, STR_TITLE_EDITOR_ACTION_MOVE_DOWN_TIP }, // Move down
|
|
|
|
{ WWT_DROPDOWN_BUTTON, 1, BX+BW/2,BX+BW-1,BY+(BS*5), BH+(BS*5), STR_UP, STR_TITLE_EDITOR_ACTION_MOVE_UP_TIP }, // Move up
|
2015-06-24 18:22:12 +02:00
|
|
|
|
2016-07-14 14:07:49 +02:00
|
|
|
{ WWT_IMGBTN, 1, BX, BX+BW/4-1, WH-32, WH-16, SPR_G2_TITLE_RESTART, STR_TITLE_EDITOR_ACTION_REPLAY_TIP }, // Replay
|
|
|
|
{ WWT_IMGBTN, 1, BX+BW/4,BX+BW/2-1, WH-32, WH-16, SPR_G2_TITLE_STOP, STR_TITLE_EDITOR_ACTION_STOP_TIP }, // Stop
|
|
|
|
{ WWT_IMGBTN, 1, BX+BW/2,BX+BW*3/4-1,WH-32, WH-16, SPR_G2_TITLE_PLAY, STR_TITLE_EDITOR_ACTION_PLAY_TIP }, // Play
|
|
|
|
{ WWT_IMGBTN, 1, BX+BW*3/4,BX+BW, WH-32, WH-16, SPR_G2_TITLE_SKIP, STR_TITLE_EDITOR_ACTION_SKIP_TIP }, // Skip
|
2015-06-24 18:22:12 +02:00
|
|
|
|
|
|
|
{ WIDGETS_END },
|
|
|
|
};
|
|
|
|
|
|
|
|
static sint16 _window_title_editor_highlighted_index;
|
|
|
|
|
|
|
|
|
|
|
|
static int window_title_editor_tab_animation_loops[] = {
|
|
|
|
64,
|
|
|
|
1,
|
|
|
|
28
|
|
|
|
};
|
|
|
|
static int window_title_editor_tab_animation_divisor[] = {
|
|
|
|
4,
|
|
|
|
1,
|
|
|
|
4
|
|
|
|
};
|
|
|
|
static int window_title_editor_tab_sprites[] = {
|
|
|
|
SPR_TAB_RIDE_0,
|
2016-05-18 22:51:37 +02:00
|
|
|
SPR_FLOPPY,
|
2015-06-24 18:22:12 +02:00
|
|
|
SPR_TAB_STATS_0
|
|
|
|
};
|
|
|
|
|
|
|
|
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];
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void window_title_editor_open(int tab)
|
|
|
|
{
|
|
|
|
rct_window* window;
|
|
|
|
|
|
|
|
// Check if window is already open
|
|
|
|
window = window_bring_to_front_by_class(WC_TITLE_EDITOR);
|
|
|
|
if (window != NULL)
|
|
|
|
return;
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
window = window_create_auto_pos(WW, WH2, &window_title_editor_events, WC_TITLE_EDITOR, WF_10 | WF_RESIZABLE);
|
2015-06-24 18:22:12 +02:00
|
|
|
window->widgets = window_title_editor_widgets;
|
|
|
|
window->enabled_widgets =
|
|
|
|
(1 << WIDX_TITLE_EDITOR_CLOSE) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_PRESETS_TAB) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_SAVES_TAB) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_SCRIPT_TAB) |
|
|
|
|
|
|
|
|
(1 << WIDX_TITLE_EDITOR_PRESETS) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_PRESETS_DROPDOWN) |
|
2015-06-25 16:41:40 +02:00
|
|
|
(1 << WIDX_TITLE_EDITOR_NEW_BUTTON) |
|
2015-06-24 18:22:12 +02:00
|
|
|
(1 << WIDX_TITLE_EDITOR_DUPLICATE_BUTTON) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_DELETE_BUTTON) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_RENAME_BUTTON) |
|
|
|
|
|
|
|
|
(1 << WIDX_TITLE_EDITOR_ADD) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_REMOVE) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_RENAME) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_LOAD) |
|
|
|
|
|
|
|
|
(1 << WIDX_TITLE_EDITOR_INSERT) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_EDIT) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_DELETE) |
|
|
|
|
//(1 << WIDX_TITLE_EDITOR_RELOAD) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_SKIP_TO) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_MOVE_DOWN) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_MOVE_UP) |
|
|
|
|
|
|
|
|
(1 << WIDX_TITLE_EDITOR_PLAY) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_STOP) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_REPLAY) |
|
|
|
|
(1 << WIDX_TITLE_EDITOR_SKIP);
|
2015-10-20 20:16:30 +02:00
|
|
|
|
2015-06-24 18:22:12 +02:00
|
|
|
window_init_scroll_widgets(window);
|
|
|
|
window->list_information_type = 0;
|
|
|
|
|
|
|
|
window->selected_tab = tab;
|
|
|
|
window->selected_list_item = -1;
|
|
|
|
_window_title_editor_highlighted_index = -1;
|
|
|
|
window->scrolls[0].v_top = 0;
|
|
|
|
window->scrolls[0].h_left = 0;
|
|
|
|
|
|
|
|
window->min_width = WW;
|
|
|
|
window->min_height = WH;
|
|
|
|
window->max_width = 500;
|
|
|
|
window->max_height = 450;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
void window_title_editor_close(rct_window *w)
|
|
|
|
{
|
|
|
|
rct_window *command_editor_w, *load_save_w;
|
2015-06-24 18:22:12 +02:00
|
|
|
|
|
|
|
// 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);
|
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
static void window_title_editor_mouseup(rct_window *w, int widgetIndex)
|
2015-06-24 18:22:12 +02:00
|
|
|
{
|
|
|
|
char path[MAX_PATH];
|
|
|
|
int defaultPreset, playing, inTitle, i, commandEditorOpen;
|
|
|
|
|
|
|
|
defaultPreset = (gCurrentTitleSequence < TITLE_SEQUENCE_DEFAULT_PRESETS);
|
2016-04-23 12:16:46 +02:00
|
|
|
playing = (gCurrentTitleSequence == gCurrentPreviewTitleSequence) && ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO);
|
|
|
|
inTitle = ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO);
|
2015-06-24 18:22:12 +02:00
|
|
|
commandEditorOpen = (window_find_by_class(WC_TITLE_COMMAND_EDITOR) != NULL);
|
|
|
|
switch (widgetIndex) {
|
|
|
|
case WIDX_TITLE_EDITOR_CLOSE:
|
|
|
|
window_close(w);
|
|
|
|
break;
|
2015-06-25 16:41:40 +02:00
|
|
|
case WIDX_TITLE_EDITOR_NEW_BUTTON:
|
|
|
|
commandEditorOpen *= 2;
|
|
|
|
if (!commandEditorOpen)
|
2016-07-14 14:07:49 +02:00
|
|
|
// 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);
|
2015-06-25 16:41:40 +02:00
|
|
|
break;
|
2015-06-24 18:22:12 +02:00
|
|
|
case WIDX_TITLE_EDITOR_DUPLICATE_BUTTON:
|
|
|
|
commandEditorOpen *= 2;
|
|
|
|
if (!commandEditorOpen)
|
2016-08-03 20:53:25 +02:00
|
|
|
window_text_input_open(w, widgetIndex, STR_TITLE_EDITOR_ACTION_DUPLICATE, STR_TITLE_EDITOR_ENTER_NAME_FOR_SEQUENCE, STR_STRING, (uintptr_t)&gConfigTitleSequences.presets[gCurrentTitleSequence].name, 64);
|
2015-06-24 18:22:12 +02:00
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_DELETE_BUTTON:
|
|
|
|
defaultPreset *= 2; commandEditorOpen *= 2;
|
|
|
|
if (!defaultPreset && !commandEditorOpen)
|
|
|
|
title_sequence_delete_preset(gCurrentTitleSequence);
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_RENAME_BUTTON:
|
|
|
|
defaultPreset *= 2; commandEditorOpen *= 2;
|
|
|
|
if (!defaultPreset && !commandEditorOpen)
|
2016-08-03 20:53:25 +02:00
|
|
|
window_text_input_open(w, widgetIndex, STR_TRACK_MANAGE_RENAME, STR_TITLE_EDITOR_ENTER_NAME_FOR_SEQUENCE, STR_STRING, (uintptr_t)&gConfigTitleSequences.presets[gCurrentTitleSequence].name, 64);
|
2015-06-24 18:22:12 +02:00
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_ADD:
|
|
|
|
defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2;
|
|
|
|
if (!defaultPreset && !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 (w->selected_list_item != -1) {
|
|
|
|
title_sequence_remove_save(gCurrentTitleSequence, w->selected_list_item);
|
|
|
|
if (w->selected_list_item > 0)
|
|
|
|
w->selected_list_item--;
|
|
|
|
else if (w->selected_list_item > gConfigTitleSequences.presets[gCurrentTitleSequence].num_saves)
|
|
|
|
w->selected_list_item = gConfigTitleSequences.presets[gCurrentTitleSequence].num_saves - 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_RENAME:
|
|
|
|
defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2;
|
|
|
|
if (!defaultPreset && !playing && !commandEditorOpen) {
|
|
|
|
if (w->selected_list_item != -1)
|
2016-08-03 20:53:25 +02:00
|
|
|
window_text_input_open(w, widgetIndex, STR_FILEBROWSER_RENAME_SAVE_TITLE, STR_TITLE_EDITOR_ENTER_NAME_FOR_SAVE, STR_STRING, (uintptr_t)gConfigTitleSequences.presets[gCurrentTitleSequence].saves[w->selected_list_item], TITLE_SEQUENCE_MAX_SAVE_LENGTH - 1);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_LOAD:
|
|
|
|
if (w->selected_list_item != -1) {
|
|
|
|
if (gConfigTitleSequences.presets[gCurrentTitleSequence].path[0]) {
|
2016-01-18 20:49:52 +01:00
|
|
|
safe_strcpy(path, gConfigTitleSequences.presets[gCurrentTitleSequence].path, MAX_PATH);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
else {
|
2016-07-14 14:07:49 +02:00
|
|
|
// TODO: This should probably use a constant
|
2016-09-26 04:24:29 +02:00
|
|
|
platform_get_user_directory(path, "title sequences", sizeof(path));
|
|
|
|
safe_strcat_path(path, gConfigTitleSequences.presets[gCurrentTitleSequence].name, sizeof(path));
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
|
2016-09-26 04:24:29 +02:00
|
|
|
safe_strcat_path(path, gConfigTitleSequences.presets[gCurrentTitleSequence].saves[w->selected_list_item], sizeof(path));
|
2015-06-24 18:22:12 +02:00
|
|
|
game_load_save(path);
|
|
|
|
window_title_editor_open(1);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_INSERT:
|
|
|
|
defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2;
|
|
|
|
if (!defaultPreset && !playing && !commandEditorOpen) {
|
|
|
|
if (w->selected_list_item != -1)
|
|
|
|
window_title_command_editor_open(w->selected_list_item + 1, true);
|
|
|
|
else
|
|
|
|
window_title_command_editor_open(gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands, true);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_EDIT:
|
|
|
|
defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2;
|
|
|
|
if (!defaultPreset && !playing && !commandEditorOpen) {
|
2015-06-24 19:52:29 +02:00
|
|
|
if (w->selected_list_item != -1 && w->selected_list_item < gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands)
|
2015-06-24 18:22:12 +02:00
|
|
|
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) {
|
2015-06-24 19:52:29 +02:00
|
|
|
if (w->selected_list_item != -1 && w->selected_list_item < gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands) {
|
2015-06-24 18:22:12 +02:00
|
|
|
title_sequence_delete_command(gCurrentTitleSequence, w->selected_list_item);
|
|
|
|
if (w->selected_list_item > 0)
|
|
|
|
w->selected_list_item--;
|
2015-06-24 19:52:29 +02:00
|
|
|
else if (w->selected_list_item >= gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands)
|
2015-06-24 18:22:12 +02:00
|
|
|
w->selected_list_item = gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands - 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
/*case WIDX_TITLE_EDITOR_RELOAD:
|
|
|
|
playing *= 2; commandEditorOpen *= 2;
|
|
|
|
if (!playing && !commandEditorOpen) {
|
|
|
|
//title_sequence_open
|
|
|
|
}
|
|
|
|
break;*/
|
|
|
|
case WIDX_TITLE_EDITOR_SKIP_TO:
|
2015-06-24 19:53:13 +02:00
|
|
|
if (playing && w->selected_list_item != -1 && w->selected_list_item < gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands) {
|
2015-06-24 18:22:12 +02:00
|
|
|
if (gTitleScriptCommand > w->selected_list_item) {
|
|
|
|
title_skip_from_beginning();
|
|
|
|
}
|
|
|
|
if (gTitleScriptCommand != w->selected_list_item) {
|
|
|
|
for (i = gTitleScriptCommand + 1; i < gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands; i++) {
|
|
|
|
if (gConfigTitleSequences.presets[gCurrentTitleSequence].commands[i].command == TITLE_SCRIPT_LOAD ||
|
|
|
|
gConfigTitleSequences.presets[gCurrentTitleSequence].commands[i].command == TITLE_SCRIPT_LOADMM) {
|
|
|
|
gTitleScriptSkipLoad = i;
|
|
|
|
}
|
|
|
|
if (i == w->selected_list_item) {
|
|
|
|
gTitleScriptSkipTo = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_MOVE_DOWN:
|
|
|
|
defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2;
|
|
|
|
if (!defaultPreset && !playing && !commandEditorOpen) {
|
|
|
|
if (w->selected_list_item != -1 && w->selected_list_item < gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands - 1) {
|
|
|
|
title_sequence_move_down_command(gCurrentTitleSequence, w->selected_list_item);
|
|
|
|
w->selected_list_item++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_MOVE_UP:
|
|
|
|
defaultPreset *= 2; playing *= 2; commandEditorOpen *= 2;
|
|
|
|
if (!defaultPreset && !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--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_REPLAY:
|
|
|
|
if (playing) {
|
|
|
|
title_refresh_sequence();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_STOP:
|
|
|
|
if (playing) {
|
|
|
|
gCurrentPreviewTitleSequence = 0;
|
|
|
|
title_refresh_sequence();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_PLAY:
|
|
|
|
if (gCurrentTitleSequence != gCurrentPreviewTitleSequence && inTitle) {
|
|
|
|
gCurrentPreviewTitleSequence = gCurrentTitleSequence;
|
|
|
|
title_refresh_sequence();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_SKIP:
|
|
|
|
if (playing) {
|
|
|
|
for (i = gTitleScriptCommand + 1; i < gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands; i++) {
|
|
|
|
if (gConfigTitleSequences.presets[gCurrentTitleSequence].commands[i].command == TITLE_SCRIPT_LOAD ||
|
|
|
|
gConfigTitleSequences.presets[gCurrentTitleSequence].commands[i].command == TITLE_SCRIPT_LOADMM) {
|
|
|
|
gTitleScriptSkipLoad = i;
|
|
|
|
}
|
|
|
|
else if (gConfigTitleSequences.presets[gCurrentTitleSequence].commands[i].command == TITLE_SCRIPT_WAIT ||
|
|
|
|
gConfigTitleSequences.presets[gCurrentTitleSequence].commands[i].command == TITLE_SCRIPT_END) {
|
|
|
|
gTitleScriptSkipTo = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else if (gConfigTitleSequences.presets[gCurrentTitleSequence].commands[i].command == TITLE_SCRIPT_RESTART) {
|
|
|
|
gTitleScriptSkipLoad = -1;
|
|
|
|
gTitleScriptSkipTo = -1;
|
|
|
|
title_refresh_sequence();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (i == gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands && i - 1 > gTitleScriptCommand) {
|
|
|
|
gTitleScriptSkipTo = i - 1;
|
|
|
|
gTitleScriptSkipLoad = -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (defaultPreset == 2)
|
2016-07-14 14:07:49 +02:00
|
|
|
window_error_open(STR_ERROR_CANT_CHANGE_TITLE_SEQUENCE, STR_NONE);
|
2015-06-24 18:22:12 +02:00
|
|
|
else if (commandEditorOpen == 2)
|
2016-07-14 14:07:49 +02:00
|
|
|
window_error_open(STR_TITLE_EDITOR_ERR_CANT_CHANGE_WHILE_EDITOR_IS_OPEN, STR_NONE);
|
2015-06-24 18:22:12 +02:00
|
|
|
else if (playing == 2)
|
2016-07-14 14:07:49 +02:00
|
|
|
window_error_open(STR_TITLE_EDITOR_ERR_CANT_EDIT_WHILE_PLAYING, STR_TITLE_EDITOR_PRESS_STOP_TO_CONTINUE_EDITING);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
static void window_title_editor_resize(rct_window *w)
|
2015-10-20 20:16:30 +02:00
|
|
|
{
|
2015-06-24 18:22:12 +02:00
|
|
|
if (w->selected_tab == WINDOW_TITLE_EDITOR_TAB_PRESETS) {
|
|
|
|
w->min_width = WW;
|
2015-06-25 16:41:40 +02:00
|
|
|
w->min_height = WH2;
|
2015-06-24 18:22:12 +02:00
|
|
|
w->max_width = WW;
|
2015-06-25 16:41:40 +02:00
|
|
|
w->max_height = WH2;
|
2015-06-24 18:22:12 +02:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_PRESETS_DROPDOWN:
|
|
|
|
if (window_find_by_class(WC_TITLE_COMMAND_EDITOR) != NULL) {
|
2016-07-14 14:07:49 +02:00
|
|
|
window_error_open(STR_TITLE_EDITOR_ERR_CANT_CHANGE_WHILE_EDITOR_IS_OPEN, STR_NONE);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
num_items = gConfigTitleSequences.num_presets;
|
|
|
|
|
|
|
|
widget--;
|
|
|
|
for (i = 0; i < num_items; i++) {
|
2016-07-14 14:07:49 +02:00
|
|
|
gDropdownItemsFormat[i] = STR_OPTIONS_DROPDOWN_ITEM;
|
2016-08-03 23:19:46 +02:00
|
|
|
gDropdownItemsArgs[i] = (uintptr_t)&gConfigTitleSequences.presets[i].name;
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
);
|
|
|
|
|
2015-10-14 21:54:02 +02:00
|
|
|
dropdown_set_checked(gCurrentTitleSequence, true);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
static void window_title_editor_dropdown(rct_window *w, int widgetIndex, int dropdownIndex)
|
2015-10-20 20:16:30 +02:00
|
|
|
{
|
2015-06-24 18:22:12 +02:00
|
|
|
if (dropdownIndex == -1)
|
|
|
|
return;
|
|
|
|
|
|
|
|
switch (widgetIndex) {
|
|
|
|
case WIDX_TITLE_EDITOR_PRESETS_DROPDOWN:
|
|
|
|
gCurrentTitleSequence = dropdownIndex;
|
|
|
|
window_invalidate(w);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void window_title_editor_update(rct_window *w)
|
|
|
|
{
|
|
|
|
w->frame_no++;
|
|
|
|
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;
|
|
|
|
widget_invalidate(w, WIDX_TITLE_EDITOR_LIST);
|
|
|
|
}
|
|
|
|
|
|
|
|
widget_invalidate(w, WIDX_TITLE_EDITOR_PRESETS_TAB + w->selected_tab);
|
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
void window_title_editor_scrollgetsize(rct_window *w, int scrollIndex, int *width, int *height)
|
2015-06-24 18:22:12 +02:00
|
|
|
{
|
2015-07-10 02:39:16 +02:00
|
|
|
int i;
|
2015-06-24 18:22:12 +02:00
|
|
|
uint16 lineCount;
|
|
|
|
|
|
|
|
lineCount = 1;
|
|
|
|
if (w->selected_tab == WINDOW_TITLE_EDITOR_TAB_SAVES)
|
|
|
|
lineCount = gConfigTitleSequences.presets[gCurrentTitleSequence].num_saves;
|
|
|
|
else if (w->selected_tab == WINDOW_TITLE_EDITOR_TAB_SCRIPT)
|
|
|
|
lineCount = gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands;
|
2015-10-20 20:16:30 +02:00
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
*height = lineCount * ROW_HEIGHT;
|
|
|
|
i = *height - window_title_editor_widgets[WIDX_TITLE_EDITOR_LIST].bottom + window_title_editor_widgets[WIDX_TITLE_EDITOR_LIST].top + 21;
|
2015-06-24 18:22:12 +02:00
|
|
|
if (i < 0)
|
|
|
|
i = 0;
|
|
|
|
if (i < w->scrolls[0].v_top) {
|
|
|
|
w->scrolls[0].v_top = i;
|
|
|
|
window_invalidate(w);
|
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
*width = SCROLL_WIDTH;
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
void window_title_editor_scrollmousedown(rct_window *w, int scrollIndex, int x, int y)
|
|
|
|
{
|
2015-06-24 18:22:12 +02:00
|
|
|
int index;
|
|
|
|
|
|
|
|
index = y / ROW_HEIGHT;
|
|
|
|
w->selected_list_item = -1;
|
|
|
|
switch (w->selected_tab) {
|
|
|
|
case WINDOW_TITLE_EDITOR_TAB_SAVES:
|
|
|
|
if (index < gConfigTitleSequences.presets[gCurrentTitleSequence].num_saves) {
|
|
|
|
w->selected_list_item = index;
|
|
|
|
widget_invalidate(w, WIDX_TITLE_EDITOR_LIST);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WINDOW_TITLE_EDITOR_TAB_SCRIPT:
|
|
|
|
if (index < gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands) {
|
|
|
|
w->selected_list_item = index;
|
|
|
|
widget_invalidate(w, WIDX_TITLE_EDITOR_LIST);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
void window_title_editor_scrollmouseover(rct_window *w, int scrollIndex, int x, int y)
|
|
|
|
{
|
2015-06-24 18:22:12 +02:00
|
|
|
int index;
|
2015-10-20 20:16:30 +02:00
|
|
|
|
2015-06-24 18:22:12 +02:00
|
|
|
index = y / ROW_HEIGHT;
|
|
|
|
switch (w->selected_tab) {
|
|
|
|
case WINDOW_TITLE_EDITOR_TAB_SAVES:
|
|
|
|
if (index < gConfigTitleSequences.presets[gCurrentTitleSequence].num_saves)
|
|
|
|
_window_title_editor_highlighted_index = (sint16)index;
|
|
|
|
break;
|
|
|
|
case WINDOW_TITLE_EDITOR_TAB_SCRIPT:
|
|
|
|
if (index < gConfigTitleSequences.presets[gCurrentTitleSequence].num_commands)
|
|
|
|
_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);
|
|
|
|
//}
|
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
static void window_title_editor_textinput(rct_window *w, int widgetIndex, char *text)
|
2015-06-24 18:22:12 +02:00
|
|
|
{
|
2015-07-10 02:39:16 +02:00
|
|
|
if (text == NULL || text[0] == 0)
|
2015-06-24 18:22:12 +02:00
|
|
|
return;
|
|
|
|
|
|
|
|
switch (widgetIndex) {
|
2015-06-25 16:41:40 +02:00
|
|
|
case WIDX_TITLE_EDITOR_NEW_BUTTON:
|
2015-06-24 18:22:12 +02:00
|
|
|
case WIDX_TITLE_EDITOR_DUPLICATE_BUTTON:
|
|
|
|
case WIDX_TITLE_EDITOR_RENAME_BUTTON:
|
|
|
|
if (filename_valid_characters(text)) {
|
|
|
|
if (!title_sequence_name_exists(text)) {
|
2015-06-25 16:41:40 +02:00
|
|
|
if (widgetIndex == WIDX_TITLE_EDITOR_NEW_BUTTON) {
|
|
|
|
title_sequence_create_preset(text);
|
|
|
|
}
|
|
|
|
else if (widgetIndex == WIDX_TITLE_EDITOR_DUPLICATE_BUTTON) {
|
2015-06-24 18:22:12 +02:00
|
|
|
title_sequence_duplicate_preset(gCurrentTitleSequence, text);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
title_sequence_rename_preset(gCurrentTitleSequence, text);
|
|
|
|
}
|
|
|
|
config_save_default();
|
|
|
|
window_invalidate(w);
|
|
|
|
}
|
|
|
|
else {
|
2016-07-14 14:07:49 +02:00
|
|
|
window_error_open(STR_ERROR_EXISTING_NAME, STR_NONE);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
2016-07-14 14:07:49 +02:00
|
|
|
window_error_open(STR_ERROR_INVALID_CHARACTERS, STR_NONE);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case WIDX_TITLE_EDITOR_RENAME:
|
|
|
|
if (filename_valid_characters(text)) {
|
|
|
|
if (!title_sequence_save_exists(gCurrentTitleSequence, text)) {
|
|
|
|
title_sequence_rename_save(gCurrentTitleSequence, w->selected_list_item, text);
|
|
|
|
title_sequence_save_preset_script(gCurrentTitleSequence);
|
|
|
|
window_invalidate(w);
|
|
|
|
}
|
|
|
|
else {
|
2016-07-14 14:07:49 +02:00
|
|
|
window_error_open(STR_ERROR_EXISTING_NAME, STR_NONE);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
2016-07-14 14:07:49 +02:00
|
|
|
window_error_open(STR_ERROR_INVALID_CHARACTERS, STR_NONE);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
void window_title_editor_tooltip(rct_window* w, int widgetIndex, rct_string_id *stringId)
|
2015-06-24 18:22:12 +02:00
|
|
|
{
|
2016-07-27 00:29:25 +02:00
|
|
|
set_format_arg(0, rct_string_id, STR_LIST);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
void window_title_editor_invalidate(rct_window *w)
|
2015-06-24 18:22:12 +02:00
|
|
|
{
|
|
|
|
colour_scheme_update(w);
|
|
|
|
|
|
|
|
int pressed_widgets = w->pressed_widgets & 0xFFFFFF8F;
|
|
|
|
uint8 widgetIndex = w->selected_tab + 4;
|
|
|
|
|
|
|
|
w->pressed_widgets = pressed_widgets | (1 << widgetIndex);
|
2015-10-20 20:16:30 +02:00
|
|
|
|
2015-06-24 18:22:12 +02:00
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_LIST].type = WWT_EMPTY;
|
|
|
|
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_PRESETS].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_PRESETS_DROPDOWN].type = WWT_EMPTY;
|
2015-06-25 16:41:40 +02:00
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_NEW_BUTTON].type = WWT_EMPTY;
|
2015-06-24 18:22:12 +02:00
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_DUPLICATE_BUTTON].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_DELETE_BUTTON].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_RENAME_BUTTON].type = WWT_EMPTY;
|
|
|
|
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_ADD].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_REMOVE].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_RENAME].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_LOAD].type = WWT_EMPTY;
|
|
|
|
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_INSERT].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_EDIT].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_DELETE].type = WWT_EMPTY;
|
|
|
|
//window_title_editor_widgets[WIDX_TITLE_EDITOR_RELOAD].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_SKIP_TO].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_MOVE_UP].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_MOVE_DOWN].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_PLAY].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_STOP].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_REPLAY].type = WWT_EMPTY;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_SKIP].type = WWT_EMPTY;
|
2015-10-20 20:16:30 +02:00
|
|
|
|
2015-06-24 18:22:12 +02:00
|
|
|
switch (w->selected_tab) {
|
|
|
|
case WINDOW_TITLE_EDITOR_TAB_PRESETS:
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_PRESETS].type = WWT_DROPDOWN;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_PRESETS_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
|
2015-06-25 16:41:40 +02:00
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_NEW_BUTTON].type = WWT_DROPDOWN_BUTTON;
|
2015-06-24 18:22:12 +02:00
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_DUPLICATE_BUTTON].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_DELETE_BUTTON].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_RENAME_BUTTON].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
break;
|
|
|
|
case WINDOW_TITLE_EDITOR_TAB_SAVES:
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_LIST].type = WWT_SCROLL;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_ADD].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_REMOVE].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_RENAME].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_LOAD].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_PLAY].type = WWT_IMGBTN;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_STOP].type = WWT_IMGBTN;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_REPLAY].type = WWT_IMGBTN;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_SKIP].type = WWT_IMGBTN;
|
|
|
|
break;
|
|
|
|
case WINDOW_TITLE_EDITOR_TAB_SCRIPT:
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_LIST].type = WWT_SCROLL;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_INSERT].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_EDIT].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_DELETE].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
//window_title_editor_widgets[WIDX_TITLE_EDITOR_RELOAD].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_SKIP_TO].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_MOVE_UP].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_MOVE_DOWN].type = WWT_DROPDOWN_BUTTON;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_PLAY].type = WWT_IMGBTN;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_STOP].type = WWT_IMGBTN;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_REPLAY].type = WWT_IMGBTN;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_SKIP].type = WWT_IMGBTN;
|
|
|
|
break;
|
|
|
|
}
|
2015-10-20 20:16:30 +02:00
|
|
|
|
2015-06-24 18:22:12 +02:00
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_BACKGROUND].right = w->width - 1;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_BACKGROUND].bottom = w->height - 1;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_TAB_CONTENT_PANEL].right = w->width - 1;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_TAB_CONTENT_PANEL].bottom = w->height - 1;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_TITLE].right = w->width - 2;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_CLOSE].left = w->width - 2 - 0x0B;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_CLOSE].right = w->width - 2 - 0x0B + 0x0A;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_LIST].right = w->width - 4;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_LIST].bottom = w->height - 16;
|
|
|
|
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_REPLAY].top = w->height - 32;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_REPLAY].bottom = w->height - 16;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_STOP].top = w->height - 32;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_STOP].bottom = w->height - 16;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_PLAY].top = w->height - 32;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_PLAY].bottom = w->height - 16;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_SKIP].top = w->height - 32;
|
|
|
|
window_title_editor_widgets[WIDX_TITLE_EDITOR_SKIP].bottom = w->height - 16;
|
|
|
|
|
2016-09-07 14:39:29 +02:00
|
|
|
int playing, inTitle;
|
2015-06-24 18:22:12 +02:00
|
|
|
|
2016-04-23 12:16:46 +02:00
|
|
|
playing = (gCurrentTitleSequence == gCurrentPreviewTitleSequence) && ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO);
|
|
|
|
inTitle = ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO);
|
2015-06-24 18:22:12 +02:00
|
|
|
|
|
|
|
if (!inTitle)
|
|
|
|
w->disabled_widgets |= (1 << WIDX_TITLE_EDITOR_PLAY);
|
|
|
|
else
|
|
|
|
w->disabled_widgets &= ~(1 << WIDX_TITLE_EDITOR_PLAY);
|
|
|
|
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
|
|
|
|
w->disabled_widgets &= ~((1 << WIDX_TITLE_EDITOR_REPLAY) | (1 << WIDX_TITLE_EDITOR_STOP) | (1 << WIDX_TITLE_EDITOR_SKIP) | (1 << WIDX_TITLE_EDITOR_SKIP_TO));
|
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
void window_title_editor_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
|
|
|
{
|
2015-06-24 18:22:12 +02:00
|
|
|
// Widgets
|
|
|
|
window_draw_widgets(w, dpi);
|
|
|
|
window_title_editor_draw_tab_images(dpi, w);
|
|
|
|
|
|
|
|
// Draw strings
|
|
|
|
switch (w->selected_tab) {
|
|
|
|
case WINDOW_TITLE_EDITOR_TAB_PRESETS:
|
|
|
|
|
2016-08-03 20:53:25 +02:00
|
|
|
set_format_arg(0, uintptr_t, &gConfigTitleSequences.presets[gCurrentTitleSequence].name);
|
2016-07-14 14:07:49 +02:00
|
|
|
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);
|
2015-06-24 18:22:12 +02:00
|
|
|
gfx_draw_string_left_clipped(
|
|
|
|
dpi,
|
2016-07-14 14:07:49 +02:00
|
|
|
STR_STRING,
|
2016-05-15 23:03:53 +02:00
|
|
|
gCommonFormatArgs,
|
2015-06-24 18:22:12 +02:00
|
|
|
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
|
|
|
|
);
|
|
|
|
|
|
|
|
break;
|
|
|
|
case WINDOW_TITLE_EDITOR_TAB_SAVES:
|
|
|
|
|
|
|
|
break;
|
|
|
|
case WINDOW_TITLE_EDITOR_TAB_SCRIPT:
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
void window_title_editor_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int scrollIndex)
|
2015-06-24 18:22:12 +02:00
|
|
|
{
|
|
|
|
char buffer[256];
|
|
|
|
bool selected, hover, error, inTitle;
|
2016-09-07 14:39:29 +02:00
|
|
|
int y, x;
|
2015-06-24 18:22:12 +02:00
|
|
|
|
2015-11-08 19:55:32 +01:00
|
|
|
gfx_fill_rect(dpi, dpi->x, dpi->y, dpi->x + dpi->width - 1, dpi->y + dpi->height - 1, ColourMapA[w->colours[1]].mid_light);
|
2015-06-24 18:22:12 +02:00
|
|
|
|
|
|
|
title_sequence *title = &gConfigTitleSequences.presets[gCurrentTitleSequence];
|
|
|
|
|
2016-04-23 12:16:46 +02:00
|
|
|
inTitle = ((gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) == SCREEN_FLAGS_TITLE_DEMO);
|
2016-09-07 14:39:29 +02:00
|
|
|
y = 0; x = 0;
|
2015-06-24 18:22:12 +02:00
|
|
|
if (w->selected_tab == WINDOW_TITLE_EDITOR_TAB_SAVES) {
|
|
|
|
|
|
|
|
for (int i = 0; i < title->num_saves; i++, y += ROW_HEIGHT) {
|
|
|
|
selected = false;
|
|
|
|
hover = false;
|
|
|
|
if (i == w->selected_list_item) {
|
|
|
|
selected = true;
|
2015-11-08 19:55:32 +01:00
|
|
|
gfx_fill_rect(dpi, x, y, x + SCROLL_WIDTH + 100, y + ROW_HEIGHT - 1, ColourMapA[w->colours[1]].dark);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
else if (i == _window_title_editor_highlighted_index || (i == gTitleScriptSave && inTitle && gCurrentTitleSequence == gCurrentPreviewTitleSequence)) {
|
|
|
|
hover = true;
|
2015-11-08 19:55:32 +01:00
|
|
|
gfx_fill_rect(dpi, x, y, x + SCROLL_WIDTH + 100, y + ROW_HEIGHT - 1, ColourMapA[w->colours[1]].mid_dark);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
else if (i & 1) {
|
2015-11-08 19:55:32 +01:00
|
|
|
gfx_fill_rect(dpi, x, y, x + SCROLL_WIDTH + 100, y + ROW_HEIGHT - 1, ColourMapA[w->colours[1]].lighter | 0x1000000);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
2015-10-20 20:16:30 +02:00
|
|
|
|
2016-08-03 20:53:25 +02:00
|
|
|
set_format_arg(0, uintptr_t, &title->saves[i]);
|
2015-06-24 18:22:12 +02:00
|
|
|
if (selected || hover) {
|
2016-09-26 04:24:29 +02:00
|
|
|
format_string(buffer, 256, STR_STRING, gCommonFormatArgs);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
else {
|
2016-09-26 04:24:29 +02:00
|
|
|
format_string(buffer + 1, 255, STR_STRING, gCommonFormatArgs);
|
2016-10-30 21:56:30 +01:00
|
|
|
buffer[0] = (utf8)FORMAT_BLACK;
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
2016-08-03 20:53:25 +02:00
|
|
|
set_format_arg(0, uintptr_t, &buffer);
|
2016-07-14 14:07:49 +02:00
|
|
|
gfx_draw_string_left(dpi, STR_STRING, gCommonFormatArgs, w->colours[1], x + 5, y);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (w->selected_tab == WINDOW_TITLE_EDITOR_TAB_SCRIPT) {
|
|
|
|
for (int i = 0; i < title->num_commands; i++, y += ROW_HEIGHT) {
|
|
|
|
title_command *command = &title->commands[i];
|
|
|
|
selected = false;
|
|
|
|
hover = false;
|
|
|
|
error = false;
|
|
|
|
if (i == w->selected_list_item) {
|
|
|
|
selected = true;
|
2015-11-08 19:55:32 +01:00
|
|
|
gfx_fill_rect(dpi, x, y, x + SCROLL_WIDTH + 100, y + ROW_HEIGHT - 1, ColourMapA[w->colours[1]].dark);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
else if (i == (int)_window_title_editor_highlighted_index || (i == gTitleScriptCommand && inTitle && gCurrentTitleSequence == gCurrentPreviewTitleSequence)) {
|
|
|
|
hover = true;
|
2015-11-08 19:55:32 +01:00
|
|
|
gfx_fill_rect(dpi, x, y, x + SCROLL_WIDTH + 100, y + ROW_HEIGHT - 1, ColourMapA[w->colours[1]].mid_dark);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
else if (i & 1) {
|
2015-11-08 19:55:32 +01:00
|
|
|
gfx_fill_rect(dpi, x, y, x + SCROLL_WIDTH + 100, y + ROW_HEIGHT - 1, ColourMapA[w->colours[1]].lighter | 0x1000000);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
|
2015-11-12 12:15:20 +01:00
|
|
|
rct_string_id commandName = STR_NONE;
|
2015-06-24 18:22:12 +02:00
|
|
|
switch (command->command) {
|
|
|
|
case TITLE_SCRIPT_LOAD:
|
2016-07-14 14:07:49 +02:00
|
|
|
commandName = STR_TITLE_EDITOR_COMMAND_LOAD_FILE;
|
2015-06-24 18:22:12 +02:00
|
|
|
if (command->saveIndex == 0xFF) {
|
2016-07-14 14:07:49 +02:00
|
|
|
commandName = STR_TITLE_EDITOR_COMMAND_LOAD_NO_SAVE;
|
2015-06-24 18:22:12 +02:00
|
|
|
error = true;
|
|
|
|
}
|
2016-08-03 20:53:25 +02:00
|
|
|
set_format_arg(0, uintptr_t, &title->saves[command->saveIndex]);
|
2015-06-24 18:22:12 +02:00
|
|
|
break;
|
|
|
|
case TITLE_SCRIPT_LOADMM:
|
2016-07-14 14:07:49 +02:00
|
|
|
commandName = STR_TITLE_EDITOR_COMMAND_LOAD_SFMM;
|
2015-06-24 18:22:12 +02:00
|
|
|
break;
|
|
|
|
case TITLE_SCRIPT_LOCATION:
|
2016-07-14 14:07:49 +02:00
|
|
|
commandName = STR_TITLE_EDITOR_COMMAND_LOCATION;
|
2016-05-15 23:03:53 +02:00
|
|
|
set_format_arg(0, uint16, command->x);
|
|
|
|
set_format_arg(2, uint16, command->y);
|
2015-06-24 18:22:12 +02:00
|
|
|
break;
|
|
|
|
case TITLE_SCRIPT_ROTATE:
|
2016-07-14 14:07:49 +02:00
|
|
|
commandName = STR_TITLE_EDITOR_COMMAND_ROTATE;
|
2016-05-15 23:03:53 +02:00
|
|
|
set_format_arg(0, uint16, command->rotations);
|
2015-06-24 18:22:12 +02:00
|
|
|
break;
|
|
|
|
case TITLE_SCRIPT_ZOOM:
|
2016-07-14 14:07:49 +02:00
|
|
|
commandName = STR_TITLE_EDITOR_COMMAND_ZOOM;
|
2016-05-15 23:03:53 +02:00
|
|
|
set_format_arg(0, uint16, command->zoom);
|
2015-06-24 18:22:12 +02:00
|
|
|
break;
|
2015-06-25 17:19:23 +02:00
|
|
|
case TITLE_SCRIPT_SPEED:
|
2016-07-14 14:07:49 +02:00
|
|
|
commandName = STR_TITLE_EDITOR_COMMAND_SPEED;
|
|
|
|
set_format_arg(0, rct_string_id, SpeedNames[command->speed - 1]);
|
2015-06-25 17:19:23 +02:00
|
|
|
break;
|
2015-06-24 18:22:12 +02:00
|
|
|
case TITLE_SCRIPT_WAIT:
|
2016-07-14 14:07:49 +02:00
|
|
|
commandName = STR_TITLE_EDITOR_COMMAND_WAIT;
|
2016-05-15 23:03:53 +02:00
|
|
|
set_format_arg(0, uint16, command->seconds);
|
2015-06-24 18:22:12 +02:00
|
|
|
break;
|
|
|
|
case TITLE_SCRIPT_RESTART:
|
2016-07-14 14:07:49 +02:00
|
|
|
commandName = STR_TITLE_EDITOR_RESTART;
|
|
|
|
// TODO: Why the format arg?
|
2016-05-15 23:03:53 +02:00
|
|
|
set_format_arg(0, uint16, command->zoom);
|
2015-06-24 18:22:12 +02:00
|
|
|
break;
|
|
|
|
case TITLE_SCRIPT_END:
|
2016-07-14 14:07:49 +02:00
|
|
|
commandName = STR_TITLE_EDITOR_END;
|
2015-06-24 18:22:12 +02:00
|
|
|
break;
|
2015-11-12 12:15:20 +01:00
|
|
|
default:
|
|
|
|
log_warning("Unknown command %d", command->command);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
2015-10-20 20:16:30 +02:00
|
|
|
|
2015-06-24 18:22:12 +02:00
|
|
|
if ((selected || hover) && !error) {
|
2016-09-26 04:24:29 +02:00
|
|
|
format_string(buffer, 256, commandName, gCommonFormatArgs);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
else {
|
2016-09-26 04:24:29 +02:00
|
|
|
format_string(buffer + 1, 255, commandName, gCommonFormatArgs);
|
2016-10-30 21:56:30 +01:00
|
|
|
buffer[0] = (utf8)(error ? ((selected || hover) ? FORMAT_LIGHTPINK : FORMAT_RED) : FORMAT_BLACK);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
2016-08-03 20:53:25 +02:00
|
|
|
set_format_arg(0, uintptr_t, &buffer);
|
2016-07-14 14:07:49 +02:00
|
|
|
gfx_draw_string_left(dpi, STR_STRING, gCommonFormatArgs, w->colours[1], x + 5, y);
|
2015-06-24 18:22:12 +02:00
|
|
|
}
|
|
|
|
}
|
2015-07-13 11:56:58 +02:00
|
|
|
}
|