From fe8a0ce301a7604fea186ceb5db78abf55a8c7d7 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sat, 19 Jul 2025 15:45:34 +0200 Subject: [PATCH] fix reset --- Mods/vcmi/Content/config/english.json | 1 + Mods/vcmi/Content/config/german.json | 1 + client/windows/settings/ShortcutsWindow.cpp | 36 +++++++++++++++------ client/windows/settings/ShortcutsWindow.h | 6 +++- 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/Mods/vcmi/Content/config/english.json b/Mods/vcmi/Content/config/english.json index 853283343..c3c64ff4a 100644 --- a/Mods/vcmi/Content/config/english.json +++ b/Mods/vcmi/Content/config/english.json @@ -264,6 +264,7 @@ "vcmi.shortcuts.editButton.help" : "Edit key binding", "vcmi.shortcuts.input" : "Change key binding for {%s}.\n\nPlease enter a key or key kombination.", "vcmi.shortcuts.inputSet" : "Key binding for {%s} will be changed to {%s}.\n\nAppend to existing bindings? Otherwise it will be replaced.", + "vcmi.shortcuts.popup" : "For %s the following keys are configured:\n\n", "vcmi.shortcuts.reset" : "Reset", "vcmi.shortcuts.reset.help" : "{Reset}\n\nResets key bindings to default", "vcmi.shortcuts.resetConfirm" : "Do you want to reset all key bindings to default?", diff --git a/Mods/vcmi/Content/config/german.json b/Mods/vcmi/Content/config/german.json index 56d6942c8..a27bc1034 100644 --- a/Mods/vcmi/Content/config/german.json +++ b/Mods/vcmi/Content/config/german.json @@ -264,6 +264,7 @@ "vcmi.shortcuts.editButton.help" : "Tastenbelegung bearbeiten", "vcmi.shortcuts.input" : "Tastenbelegung für {%s} ändern.\n\nBitte eine Taste oder Tastenkombination eingeben.", "vcmi.shortcuts.inputSet" : "Tastenbelegung für {%s} wird zu {%s}. geändert\n\nZu den existierenten hinzufügen? Ansonsten wird ersetzt.", + "vcmi.shortcuts.popup" : "Für %s sind die folgenden Tastenbelegung konfiguriert:\n\n", "vcmi.shortcuts.reset" : "Zurücks.", "vcmi.shortcuts.reset.help" : "{Zurücksetzen}\n\nSetzt Tastenbelegungen auf Standardeinstellungen zurück", "vcmi.shortcuts.resetConfirm" : "Alle Tastenkürzel auf Standardeinstellungen zurücksetzen?", diff --git a/client/windows/settings/ShortcutsWindow.cpp b/client/windows/settings/ShortcutsWindow.cpp index dfdc2a14b..bdde47ef9 100644 --- a/client/windows/settings/ShortcutsWindow.cpp +++ b/client/windows/settings/ShortcutsWindow.cpp @@ -56,7 +56,7 @@ ShortcutsWindow::ShortcutsWindow() slider->setPanningStep(LINE_HEIGHT); slider->setScrollBounds(Rect(-backgroundRect->pos.w + slider->pos.w, 0, slider->pos.x - pos.x + slider->pos.w, slider->pos.h)); - buttonReset = std::make_shared(Point(411, 403), AnimationPath::builtin("settingsWindow/button80"), std::make_pair("", MetaString::createFromTextID("vcmi.shortcuts.reset").toString())); + buttonReset = std::make_shared(Point(411, 403), AnimationPath::builtin("settingsWindow/button80"), std::make_pair("", MetaString::createFromTextID("vcmi.shortcuts.reset.help").toString())); buttonReset->setOverlay(std::make_shared(0, 0, FONT_MEDIUM, ETextAlignment::CENTER, Colors::YELLOW, MetaString::createFromTextID("vcmi.shortcuts.reset").toString())); buttonReset->addCallback([this](){ GAME->interface()->showYesNoDialog(MetaString::createFromTextID("vcmi.shortcuts.resetConfirm").toString(), [this](){ @@ -114,7 +114,8 @@ void ShortcutsWindow::setKeyBinding(const std::string & id, const std::string & tmp = existing.Vector(); if(existing.isString()) tmp.push_back(existing); - tmp.push_back(JsonNode(keyName)); + if(!vstd::contains(tmp, JsonNode(keyName))) + tmp.push_back(JsonNode(keyName)); existingWrite->Vector() = tmp; } else @@ -125,16 +126,21 @@ void ShortcutsWindow::setKeyBinding(const std::string & id, const std::string & void ShortcutsWindow::resetKeyBinding() { - // FIXME: Not working yet - Settings write = shortcutsConfig.write; - write->clear(); - write->Struct() = JsonUtils::assembleFromFiles("config/shortcutsConfig.json").Struct(); + { + Settings write = shortcutsConfig.write; + write->clear(); + } + { + Settings write = shortcutsConfig.write; + write->Struct() = JsonUtils::assembleFromFiles("config/shortcutsConfig.json").Struct(); + } fillList(slider->getValue()); } ShortcutElement::ShortcutElement(std::string id, JsonNode keys, int elem, std::function func) - : func(func) + : CIntObject(SHOW_POPUP) + , func(func) { OBJECT_CONSTRUCTION; @@ -142,14 +148,21 @@ ShortcutElement::ShortcutElement(std::string id, JsonNode keys, int elem, std::f pos.y += 56; pos.y += elem * LINE_HEIGHT; + popupText = MetaString::createFromTextID("vcmi.shortcuts.popup"); + popupText.replaceTextID("vcmi.shortcuts.shortcut." + id); + std::string keyBinding = ""; if(keys.isString()) + { keyBinding = keys.String(); + popupText.appendRawString(keyBinding); + } else if(keys.isVector()) { std::vector strings; std::transform(keys.Vector().begin(), keys.Vector().end(), std::back_inserter(strings), [](const auto& k) { return k.String(); }); - keyBinding = boost::join(strings, " {gray||} "); + keyBinding = boost::join(strings, " | "); + popupText.appendRawString(boost::join(strings, "\n")); } labelName = std::make_shared( @@ -186,6 +199,11 @@ ShortcutElement::ShortcutElement(std::string group, int elem) seperationLine = std::make_shared(Rect(0, LINE_HEIGHT, 456, 1), ColorRGBA(0, 0, 0, 64), ColorRGBA(128, 100, 75), 1); } +void ShortcutElement::showPopupWindow(const Point & cursorPosition) +{ + CRClickPopup::createAndPush(popupText.toString()); +} + ShortcutsEditWindow::ShortcutsEditWindow(const std::string & id, std::function func) : CWindowObject(BORDERED) , id(id) @@ -207,7 +225,7 @@ ShortcutsEditWindow::ShortcutsEditWindow(const std::string & id, std::function labelKeys; std::shared_ptr seperationLine; // rectangle is cleaner than line... + MetaString popupText; + std::function func; + void showPopupWindow(const Point & cursorPosition) override; public: ShortcutElement(std::string id, JsonNode keys, int elem, std::function func); ShortcutElement(std::string group, int elem); @@ -66,7 +70,7 @@ private: std::string id; std::function func; - void keyPressed(const std::string & keyName) override; + void keyReleased(const std::string & keyName) override; public: ShortcutsEditWindow(const std::string & id, std::function func); };