From 3ea81e3b8b10e7004dc300d1b3aca1f225c2670a Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 27 Nov 2016 16:16:17 +0000 Subject: [PATCH] Get rename and delete working --- src/interface/title_sequences.c | 3 +- src/title/TitleSequenceManager.cpp | 62 ++++++++++++++++++++++++++++++ src/title/TitleSequenceManager.h | 5 +++ src/windows/title_editor.c | 8 ++-- 4 files changed, 74 insertions(+), 4 deletions(-) diff --git a/src/interface/title_sequences.c b/src/interface/title_sequences.c index 18bda544cb..7951380255 100644 --- a/src/interface/title_sequences.c +++ b/src/interface/title_sequences.c @@ -38,8 +38,9 @@ bool title_sequence_name_exists(const char *name) { size_t count = title_sequence_manager_get_count(); for (size_t i = 0; i < count; i++) { - if (_stricmp(title_sequence_manager_get_name(i), name) == 0) + if (_stricmp(title_sequence_manager_get_name(i), name) == 0) { return true; + } } return false; } diff --git a/src/title/TitleSequenceManager.cpp b/src/title/TitleSequenceManager.cpp index 606d9e245d..a91b38d425 100644 --- a/src/title/TitleSequenceManager.cpp +++ b/src/title/TitleSequenceManager.cpp @@ -21,6 +21,7 @@ #include "../core/Path.hpp" #include "../core/String.hpp" #include "../core/Util.hpp" +#include "TitleSequence.h" #include "TitleSequenceManager.h" extern "C" @@ -64,6 +65,43 @@ namespace TitleSequenceManager return &_items[i]; } + void DeleteItem(size_t i) + { + auto item = GetItem(i); + const utf8 * path = item->Path.c_str(); + if (item->IsZip) + { + platform_file_delete(path); + } + else + { + platform_directory_delete(path); + } + _items.erase(_items.begin() + i); + } + + void RenameItem(size_t i, const utf8 * newName) + { + auto item = &_items[i]; + const utf8 * oldPath = item->Path.c_str(); + + utf8 newPath[MAX_PATH]; + Path::GetDirectory(newPath, sizeof(newPath), oldPath); + Path::Append(newPath, sizeof(newPath), newName); + if (item->IsZip) + { + String::Append(newPath, sizeof(newPath), TITLE_SEQUENCE_EXTENSION); + platform_file_move(oldPath, newPath); + } + else + { + platform_file_move(oldPath, newPath); + } + + item->Name = std::string(newName); + item->Path = std::string(newPath); + } + static const uint16 GetPredefinedIndex(const std::string &path) { const utf8 * filename = Path::GetFileName(path.c_str()); @@ -219,8 +257,32 @@ extern "C" return SIZE_MAX; } + size_t title_sequence_manager_get_index_for_name(const utf8 * name) + { + size_t count = TitleSequenceManager::GetCount(); + for (size_t i = 0; i < count; i++) + { + const utf8 * tn = title_sequence_manager_get_name(i); + if (String::Equals(tn, name)) + { + return i; + } + } + return SIZE_MAX; + } + void title_sequence_manager_scan() { TitleSequenceManager::Scan(); } + + void title_sequence_manager_delete(size_t i) + { + TitleSequenceManager::DeleteItem(i); + } + + void title_sequence_manager_rename(size_t i, const utf8 * newName) + { + TitleSequenceManager::RenameItem(i, newName); + } } diff --git a/src/title/TitleSequenceManager.h b/src/title/TitleSequenceManager.h index d1ae84c57b..27e96a5e86 100644 --- a/src/title/TitleSequenceManager.h +++ b/src/title/TitleSequenceManager.h @@ -34,6 +34,8 @@ namespace TitleSequenceManager { size_t GetCount(); const TitleSequenceManagerItem * GetItem(size_t i); + void DeleteItem(size_t i); + void RenameItem(size_t i, const utf8 * newName); } constexpr uint16 PREDEFINED_INDEX_CUSTOM = UINT16_MAX; @@ -47,7 +49,10 @@ extern "C" { const utf8 * title_sequence_manager_get_config_id(size_t index); uint16 title_sequence_manager_get_predefined_index(size_t index); size_t title_sequence_manager_get_index_for_config_id(const utf8 * configId); + size_t title_sequence_manager_get_index_for_name(const utf8 * name); void title_sequence_manager_scan(); + void title_sequence_manager_delete(size_t i); + void title_sequence_manager_rename(size_t i, const utf8 * newName); #ifdef __cplusplus } diff --git a/src/windows/title_editor.c b/src/windows/title_editor.c index c8187d8f69..29b12356db 100644 --- a/src/windows/title_editor.c +++ b/src/windows/title_editor.c @@ -308,7 +308,8 @@ static void window_title_editor_mouseup(rct_window *w, int widgetIndex) break; case WIDX_TITLE_EDITOR_DELETE_BUTTON: if (window_title_editor_check_can_edit()) { - // title_sequence_delete_preset(_selectedTitleSequence); + title_sequence_manager_delete(_selectedTitleSequence); + window_title_editor_load_sequence(0); } break; case WIDX_TITLE_EDITOR_RENAME_BUTTON: @@ -600,13 +601,14 @@ static void window_title_editor_textinput(rct_window *w, int widgetIndex, char * case WIDX_TITLE_EDITOR_DUPLICATE_BUTTON: case WIDX_TITLE_EDITOR_RENAME_BUTTON: if (filename_valid_characters(text)) { - if (!title_sequence_name_exists(text)) { + if (title_sequence_manager_get_index_for_name(text) == SIZE_MAX) { if (widgetIndex == WIDX_TITLE_EDITOR_NEW_BUTTON) { title_sequence_create_preset(text); } else if (widgetIndex == WIDX_TITLE_EDITOR_DUPLICATE_BUTTON) { // title_sequence_duplicate_preset(_selectedTitleSequence, text); } else { - // title_sequence_rename_preset(_selectedTitleSequence, text); + title_sequence_manager_rename(_selectedTitleSequence, text); + _sequenceName = title_sequence_manager_get_name(_selectedTitleSequence); } config_save_default(); window_invalidate(w);