mirror of
https://github.com/Zelda64Recomp/Zelda64Recomp.git
synced 2026-04-26 20:21:38 +00:00
Set mod tab to navigate down to first mod, fix redundant mod scanning
This commit is contained in:
parent
9d6a39f68a
commit
f9df5c2b7c
3 changed files with 33 additions and 27 deletions
|
|
@ -69,7 +69,8 @@ namespace recompui {
|
||||||
};
|
};
|
||||||
|
|
||||||
void set_config_tab(ConfigTab tab);
|
void set_config_tab(ConfigTab tab);
|
||||||
Rml::ElementTabSet* get_config_tab();
|
Rml::ElementTabSet* get_config_tabset();
|
||||||
|
Rml::Element* get_mod_tab();
|
||||||
|
|
||||||
enum class ButtonVariant {
|
enum class ButtonVariant {
|
||||||
Primary,
|
Primary,
|
||||||
|
|
|
||||||
|
|
@ -464,6 +464,7 @@ public:
|
||||||
}
|
}
|
||||||
void load_document() override {
|
void load_document() override {
|
||||||
config_context = recompui::create_context(zelda64::get_asset_path("config_menu.rml"));
|
config_context = recompui::create_context(zelda64::get_asset_path("config_menu.rml"));
|
||||||
|
recompui::update_mod_list();
|
||||||
}
|
}
|
||||||
void register_events(recompui::UiEventListenerInstancer& listener) override {
|
void register_events(recompui::UiEventListenerInstancer& listener) override {
|
||||||
recompui::register_event(listener, "apply_options",
|
recompui::register_event(listener, "apply_options",
|
||||||
|
|
@ -542,25 +543,6 @@ public:
|
||||||
[](const std::string& param, Rml::Event& event) {
|
[](const std::string& param, Rml::Event& event) {
|
||||||
zelda64::set_time(debug_context.set_time_day, debug_context.set_time_hour, debug_context.set_time_minute);
|
zelda64::set_time(debug_context.set_time_day, debug_context.set_time_hour, debug_context.set_time_minute);
|
||||||
});
|
});
|
||||||
|
|
||||||
#if 0
|
|
||||||
class TabChangeListener : public Rml::EventListener {
|
|
||||||
void ProcessEvent(Rml::Event &event) override {
|
|
||||||
int new_tab_index = event.GetParameter("tab_index", 0);
|
|
||||||
if (new_tab_index == config_tab_to_index(recompui::ConfigTab::Mods)) {
|
|
||||||
// Hook up this element to the mods menu's first list entry.
|
|
||||||
recompui::get_config_tab()->SetProperty(Rml::PropertyId::NavDown, Rml::Style::Nav::None);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Revert the navigation to auto.
|
|
||||||
recompui::get_config_tab()->SetProperty(Rml::PropertyId::NavDown, Rml::Style::Nav::None);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static TabChangeListener tab_change_listener;
|
|
||||||
recompui::get_config_tab()->AddEventListener(Rml::EventId::Tabchange, &tab_change_listener);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void bind_config_list_events(Rml::DataModelConstructor &constructor) {
|
void bind_config_list_events(Rml::DataModelConstructor &constructor) {
|
||||||
|
|
@ -996,12 +978,14 @@ void recompui::toggle_fullscreen() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void recompui::set_config_tab(ConfigTab tab) {
|
void recompui::set_config_tab(ConfigTab tab) {
|
||||||
get_config_tab()->SetActiveTab(config_tab_to_index(tab));
|
get_config_tabset()->SetActiveTab(config_tab_to_index(tab));
|
||||||
}
|
}
|
||||||
|
|
||||||
Rml::ElementTabSet* recompui::get_config_tab() {
|
Rml::ElementTabSet* recompui::get_config_tabset() {
|
||||||
ContextId config_context = recompui::get_config_context_id();
|
ContextId config_context = recompui::get_config_context_id();
|
||||||
|
|
||||||
|
ContextId old_context = recompui::try_close_current_context();
|
||||||
|
|
||||||
Rml::ElementDocument *doc = config_context.get_document();
|
Rml::ElementDocument *doc = config_context.get_document();
|
||||||
assert(doc != nullptr);
|
assert(doc != nullptr);
|
||||||
|
|
||||||
|
|
@ -1011,5 +995,27 @@ Rml::ElementTabSet* recompui::get_config_tab() {
|
||||||
Rml::ElementTabSet *tabset = rmlui_dynamic_cast<Rml::ElementTabSet *>(tabset_el);
|
Rml::ElementTabSet *tabset = rmlui_dynamic_cast<Rml::ElementTabSet *>(tabset_el);
|
||||||
assert(tabset != nullptr);
|
assert(tabset != nullptr);
|
||||||
|
|
||||||
|
if (old_context != ContextId::null()) {
|
||||||
|
old_context.open();
|
||||||
|
}
|
||||||
|
|
||||||
return tabset;
|
return tabset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rml::Element* recompui::get_mod_tab() {
|
||||||
|
ContextId config_context = recompui::get_config_context_id();
|
||||||
|
|
||||||
|
ContextId old_context = recompui::try_close_current_context();
|
||||||
|
|
||||||
|
Rml::ElementDocument* doc = config_context.get_document();
|
||||||
|
assert(doc != nullptr);
|
||||||
|
|
||||||
|
Rml::Element* tab_el = doc->GetElementById("tab_mods");
|
||||||
|
assert(tab_el != nullptr);
|
||||||
|
|
||||||
|
if (old_context != ContextId::null()) {
|
||||||
|
old_context.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
return tab_el;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -582,9 +582,11 @@ void ModMenu::create_mod_list() {
|
||||||
mod_entry_buttons.front()->set_nav_manual(NavDirection::Up, mod_tab_id);
|
mod_entry_buttons.front()->set_nav_manual(NavDirection::Up, mod_tab_id);
|
||||||
mod_entry_buttons.back()->set_nav(NavDirection::Down, install_mods_button);
|
mod_entry_buttons.back()->set_nav(NavDirection::Down, install_mods_button);
|
||||||
install_mods_button->set_nav(NavDirection::Up, mod_entry_buttons.back());
|
install_mods_button->set_nav(NavDirection::Up, mod_entry_buttons.back());
|
||||||
|
recompui::get_mod_tab()->SetProperty(Rml::PropertyId::NavDown, Rml::Property{ "#" + mod_entry_buttons.front()->get_id(), Rml::Unit::STRING });
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
install_mods_button->set_nav_manual(NavDirection::Up, mod_tab_id);
|
install_mods_button->set_nav_manual(NavDirection::Up, mod_tab_id);
|
||||||
|
recompui::get_mod_tab()->SetProperty(Rml::PropertyId::NavDown, Rml::Style::Nav::Auto);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add one extra spacer at the bottom.
|
// Add one extra spacer at the bottom.
|
||||||
|
|
@ -684,7 +686,7 @@ ModMenu::ModMenu(Element *parent) : Element(parent) {
|
||||||
footer_spacer->set_flex(1.0f, 0.0f);
|
footer_spacer->set_flex(1.0f, 0.0f);
|
||||||
|
|
||||||
refresh_button = context.create_element<Button>(footer_container, "Refresh", recompui::ButtonStyle::Primary);
|
refresh_button = context.create_element<Button>(footer_container, "Refresh", recompui::ButtonStyle::Primary);
|
||||||
refresh_button->add_pressed_callback([this](){ recomp::mods::scan_mods(); refresh_mods(); });
|
refresh_button->add_pressed_callback([this](){ refresh_mods(); });
|
||||||
refresh_button->set_nav_manual(NavDirection::Up, mod_tab_id);
|
refresh_button->set_nav_manual(NavDirection::Up, mod_tab_id);
|
||||||
|
|
||||||
mods_folder_button = context.create_element<Button>(footer_container, "Open Mods Folder", recompui::ButtonStyle::Primary);
|
mods_folder_button = context.create_element<Button>(footer_container, "Open Mods Folder", recompui::ButtonStyle::Primary);
|
||||||
|
|
@ -699,9 +701,6 @@ ModMenu::ModMenu(Element *parent) : Element(parent) {
|
||||||
mod_entry_floating_view->set_position(Position::Absolute);
|
mod_entry_floating_view->set_position(Position::Absolute);
|
||||||
mod_entry_floating_view->set_selected(true);
|
mod_entry_floating_view->set_selected(true);
|
||||||
|
|
||||||
recomp::mods::scan_mods();
|
|
||||||
refresh_mods();
|
|
||||||
|
|
||||||
context.close();
|
context.close();
|
||||||
|
|
||||||
sub_menu_context = recompui::create_context(zelda64::get_asset_path("config_sub_menu.rml"));
|
sub_menu_context = recompui::create_context(zelda64::get_asset_path("config_sub_menu.rml"));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue