mirror of
https://github.com/Mr-Wiseguy/Zelda64Recomp.git
synced 2024-11-05 22:35:06 +01:00
Button config type + callback wip
This commit is contained in:
parent
7991907b93
commit
47669a8880
@ -164,6 +164,7 @@ set (SOURCES
|
|||||||
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementConfigOption.cpp
|
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementConfigOption.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementDescription.cpp
|
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementDescription.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementOptionType.cpp
|
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementOptionType.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementOptionTypeButton.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementOptionTypeCheckbox.cpp
|
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementOptionTypeCheckbox.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementOptionTypeColor.cpp
|
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementOptionTypeColor.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementOptionTypeDropdown.cpp
|
${CMAKE_SOURCE_DIR}/src/ui/elements/ElementOptionTypeDropdown.cpp
|
||||||
|
@ -7,6 +7,10 @@
|
|||||||
"consumables/infinite_bombs": "Infinite Bombs",
|
"consumables/infinite_bombs": "Infinite Bombs",
|
||||||
"consumables/infinite_health": "Infinite Health",
|
"consumables/infinite_health": "Infinite Health",
|
||||||
|
|
||||||
|
"consumable_actions": "Consumable Actions",
|
||||||
|
"consumable_actions/refill_all": "primary",
|
||||||
|
"consumable_actions/refill_all:description": "Refills anything that can be refilled, like magic, rupees, arrows, bombs, health, etc.",
|
||||||
|
|
||||||
"gameplay": "Gameplay",
|
"gameplay": "Gameplay",
|
||||||
|
|
||||||
"gameplay/movement": "Movement",
|
"gameplay/movement": "Movement",
|
||||||
|
@ -29,7 +29,19 @@
|
|||||||
"type": "Checkbox",
|
"type": "Checkbox",
|
||||||
"key": "infinite_health",
|
"key": "infinite_health",
|
||||||
"default": false,
|
"default": false,
|
||||||
"onChange": "on_update_health"
|
"callback": "on_update_health"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Group",
|
||||||
|
"key": "consumable_actions",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"key": "refill_all",
|
||||||
|
"variant": "primary",
|
||||||
|
"callback": "on_refill_all"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -78,6 +78,13 @@ void ElementConfigOption::AddOptionTypeElement() {
|
|||||||
default:
|
default:
|
||||||
printf("No option type element exists for type '%d'\n", el_option_type);
|
printf("No option type element exists for type '%d'\n", el_option_type);
|
||||||
return;
|
return;
|
||||||
|
case ConfigOptionType::Button: {
|
||||||
|
add_option_el<ElementOptionTypeButton>(doc, wrapper, "recomp-option-type-button", config_key);
|
||||||
|
// Button contains label text, so hide the label
|
||||||
|
auto label = GetLabel();
|
||||||
|
label->SetProperty("display", "none");
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ConfigOptionType::Checkbox: {
|
case ConfigOptionType::Checkbox: {
|
||||||
add_option_el<ElementOptionTypeCheckbox>(doc, wrapper, "recomp-option-type-checkbox", config_key);
|
add_option_el<ElementOptionTypeCheckbox>(doc, wrapper, "recomp-option-type-checkbox", config_key);
|
||||||
break;
|
break;
|
||||||
|
61
src/ui/elements/ElementOptionTypeButton.cpp
Normal file
61
src/ui/elements/ElementOptionTypeButton.cpp
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
#include "ElementOptionTypeButton.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
using json = nlohmann::json;
|
||||||
|
|
||||||
|
namespace recompui {
|
||||||
|
|
||||||
|
static const std::string button_id = "recomp-button";
|
||||||
|
|
||||||
|
static const std::string cls_base = "config-option-button";
|
||||||
|
static const std::string cls_button = "button";
|
||||||
|
|
||||||
|
ElementOptionTypeButton::ElementOptionTypeButton(const Rml::String& tag) : ElementOptionType(tag, cls_base)
|
||||||
|
{
|
||||||
|
Rml::Element *button = AppendChild(GetOwnerDocument()->CreateElement("button"));
|
||||||
|
button->SetClass(cls_button, true);
|
||||||
|
button->SetId(button_id);
|
||||||
|
button->AddEventListener(Rml::EventId::Click, this, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
ElementOptionTypeButton::~ElementOptionTypeButton()
|
||||||
|
{
|
||||||
|
auto button_el = get_button();
|
||||||
|
button_el->RemoveEventListener(Rml::EventId::Click, this, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Rml::Element *ElementOptionTypeButton::get_button()
|
||||||
|
{
|
||||||
|
return GetElementById(button_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ElementOptionTypeButton::init_option(std::string& _config_key) {
|
||||||
|
config_key = _config_key;
|
||||||
|
|
||||||
|
const json& option_json = recomp::config::get_json_from_key(config_key);
|
||||||
|
|
||||||
|
auto button_el = get_button();
|
||||||
|
|
||||||
|
button_el->SetInnerRML(
|
||||||
|
recomp::config::get_config_store_value<std::string>("translations/" + config_key)
|
||||||
|
);
|
||||||
|
|
||||||
|
std::string variantClass = recomp::config::get_value_in_json_with_default<std::string>(option_json, "variant", "primary");
|
||||||
|
button_el->SetClass(cls_button + "--" + variantClass, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ElementOptionTypeButton::ProcessEvent(Rml::Event& event)
|
||||||
|
{
|
||||||
|
if (event == Rml::EventId::Click)
|
||||||
|
{
|
||||||
|
if (event.GetPhase() == Rml::EventPhase::Bubble || event.GetPhase() == Rml::EventPhase::Target)
|
||||||
|
{
|
||||||
|
printf("Button clicked\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Rml
|
22
src/ui/elements/ElementOptionTypeButton.h
Normal file
22
src/ui/elements/ElementOptionTypeButton.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef RECOMPUI_ELEMENT_OPTION_TYPE_BUTTON_H
|
||||||
|
#define RECOMPUI_ELEMENT_OPTION_TYPE_BUTTON_H
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "ElementOptionType.h"
|
||||||
|
|
||||||
|
namespace recompui {
|
||||||
|
|
||||||
|
class ElementOptionTypeButton : public ElementOptionType {
|
||||||
|
public:
|
||||||
|
ElementOptionTypeButton(const Rml::String& tag);
|
||||||
|
virtual ~ElementOptionTypeButton();
|
||||||
|
|
||||||
|
void init_option(std::string& _config_key);
|
||||||
|
protected:
|
||||||
|
void ProcessEvent(Rml::Event& event) override;
|
||||||
|
private:
|
||||||
|
Rml::Element* get_button();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace recompui
|
||||||
|
#endif
|
@ -32,7 +32,7 @@ Rml::ElementFormControlInput *ElementOptionTypeTextField::get_input()
|
|||||||
ElementOptionTypeTextField::~ElementOptionTypeTextField()
|
ElementOptionTypeTextField::~ElementOptionTypeTextField()
|
||||||
{
|
{
|
||||||
auto input_el = get_input();
|
auto input_el = get_input();
|
||||||
RemoveEventListener(Rml::EventId::Change, this, false);
|
input_el->RemoveEventListener(Rml::EventId::Change, this, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ElementOptionTypeTextField::init_option(std::string& _config_key) {
|
void ElementOptionTypeTextField::init_option(std::string& _config_key) {
|
||||||
|
@ -12,6 +12,7 @@ static RecompElementConfig custom_elements[] = {
|
|||||||
CUSTOM_ELEMENT("recomp-description", recompui::ElementDescription),
|
CUSTOM_ELEMENT("recomp-description", recompui::ElementDescription),
|
||||||
CUSTOM_ELEMENT("recomp-config-group", recompui::ElementConfigGroup),
|
CUSTOM_ELEMENT("recomp-config-group", recompui::ElementConfigGroup),
|
||||||
CUSTOM_ELEMENT("recomp-config-option", recompui::ElementConfigOption),
|
CUSTOM_ELEMENT("recomp-config-option", recompui::ElementConfigOption),
|
||||||
|
CUSTOM_ELEMENT("recomp-option-type-button", recompui::ElementOptionTypeButton),
|
||||||
CUSTOM_ELEMENT("recomp-option-type-checkbox", recompui::ElementOptionTypeCheckbox),
|
CUSTOM_ELEMENT("recomp-option-type-checkbox", recompui::ElementOptionTypeCheckbox),
|
||||||
CUSTOM_ELEMENT("recomp-option-type-color", recompui::ElementOptionTypeColor),
|
CUSTOM_ELEMENT("recomp-option-type-color", recompui::ElementOptionTypeColor),
|
||||||
CUSTOM_ELEMENT("recomp-option-type-dropdown", recompui::ElementOptionTypeDropdown),
|
CUSTOM_ELEMENT("recomp-option-type-dropdown", recompui::ElementOptionTypeDropdown),
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include "elements/ElementConfigOption.h"
|
#include "elements/ElementConfigOption.h"
|
||||||
#include "elements/ElementConfigGroup.h"
|
#include "elements/ElementConfigGroup.h"
|
||||||
|
#include "elements/ElementOptionTypeButton.h"
|
||||||
#include "elements/ElementOptionTypeCheckbox.h"
|
#include "elements/ElementOptionTypeCheckbox.h"
|
||||||
#include "elements/ElementOptionTypeColor.h"
|
#include "elements/ElementOptionTypeColor.h"
|
||||||
#include "elements/ElementOptionTypeDropdown.h"
|
#include "elements/ElementOptionTypeDropdown.h"
|
||||||
|
Loading…
Reference in New Issue
Block a user