Get rename and delete working

This commit is contained in:
Ted John 2016-11-27 16:16:17 +00:00
parent 821b091b25
commit 3ea81e3b8b
4 changed files with 74 additions and 4 deletions

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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
}

View File

@ -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);