mirror of
https://github.com/Zelda64Recomp/Zelda64Recomp
synced 2026-06-09 12:46:47 -04:00
Finish drag and drop mod installation, disable mod refresh button and code mod toggle when game starts
This commit is contained in:
+132
-45
@@ -10,6 +10,7 @@ struct {
|
||||
recompui::ContextId ui_context;
|
||||
recompui::Label* prompt_header;
|
||||
recompui::Label* prompt_label;
|
||||
recompui::Element* prompt_controls;
|
||||
recompui::Button* confirm_button;
|
||||
recompui::Button* cancel_button;
|
||||
std::function<void()> confirm_action;
|
||||
@@ -95,26 +96,26 @@ void recompui::init_prompt_context() {
|
||||
prompt_content->set_border_color(Color{ 255, 255, 255, 51 });
|
||||
prompt_content->set_background_color(Color{ 8, 7, 13, 229 });
|
||||
|
||||
prompt_state.prompt_header = context.create_element<Label>(prompt_content, "Graphics options have changed", LabelStyle::Large);
|
||||
prompt_state.prompt_header = context.create_element<Label>(prompt_content, "", LabelStyle::Large);
|
||||
prompt_state.prompt_header->set_margin(24, Unit::Dp);
|
||||
|
||||
prompt_state.prompt_label = context.create_element<Label>(prompt_content, "Would you like to apply or discard these changes?", LabelStyle::Small);
|
||||
prompt_state.prompt_label = context.create_element<Label>(prompt_content, "", LabelStyle::Small);
|
||||
prompt_state.prompt_label->set_margin(24, Unit::Dp);
|
||||
prompt_state.prompt_label->set_margin_top(0);
|
||||
|
||||
Element* prompt_controls = context.create_element<Element>(prompt_content);
|
||||
prompt_state.prompt_controls = context.create_element<Element>(prompt_content);
|
||||
|
||||
prompt_controls->set_display(Display::Flex);
|
||||
prompt_controls->set_flex_direction(FlexDirection::Row);
|
||||
prompt_controls->set_justify_content(JustifyContent::Center);
|
||||
prompt_controls->set_padding_top(24, Unit::Dp);
|
||||
prompt_controls->set_padding_bottom(24, Unit::Dp);
|
||||
prompt_controls->set_padding_left(12, Unit::Dp);
|
||||
prompt_controls->set_padding_right(12, Unit::Dp);
|
||||
prompt_controls->set_border_top_width(1.1, Unit::Dp);
|
||||
prompt_controls->set_border_top_color({ 255, 255, 255, 25 });
|
||||
prompt_state.prompt_controls->set_display(Display::Flex);
|
||||
prompt_state.prompt_controls->set_flex_direction(FlexDirection::Row);
|
||||
prompt_state.prompt_controls->set_justify_content(JustifyContent::Center);
|
||||
prompt_state.prompt_controls->set_padding_top(24, Unit::Dp);
|
||||
prompt_state.prompt_controls->set_padding_bottom(24, Unit::Dp);
|
||||
prompt_state.prompt_controls->set_padding_left(12, Unit::Dp);
|
||||
prompt_state.prompt_controls->set_padding_right(12, Unit::Dp);
|
||||
prompt_state.prompt_controls->set_border_top_width(1.1, Unit::Dp);
|
||||
prompt_state.prompt_controls->set_border_top_color({ 255, 255, 255, 25 });
|
||||
|
||||
prompt_state.confirm_button = context.create_element<Button>(prompt_controls, "", ButtonStyle::Primary);
|
||||
prompt_state.confirm_button = context.create_element<Button>(prompt_state.prompt_controls, "", ButtonStyle::Primary);
|
||||
prompt_state.confirm_button->set_min_width(185.0f, Unit::Dp);
|
||||
prompt_state.confirm_button->set_margin_top(0);
|
||||
prompt_state.confirm_button->set_margin_bottom(0);
|
||||
@@ -131,7 +132,7 @@ void recompui::init_prompt_context() {
|
||||
confirm_hover_style->set_background_color(Color{ 69, 208, 67, 76 });
|
||||
confirm_hover_style->set_color(Color{ 242, 242, 242, 255 });
|
||||
|
||||
prompt_state.cancel_button = context.create_element<Button>(prompt_controls, "", ButtonStyle::Primary);
|
||||
prompt_state.cancel_button = context.create_element<Button>(prompt_state.prompt_controls, "", ButtonStyle::Primary);
|
||||
prompt_state.cancel_button->set_min_width(185.0f, Unit::Dp);
|
||||
prompt_state.cancel_button->set_margin_top(0);
|
||||
prompt_state.cancel_button->set_margin_bottom(0);
|
||||
@@ -197,47 +198,133 @@ void style_button(recompui::Button* button, recompui::ButtonVariant variant) {
|
||||
disabled_style->set_color(disabled_color);
|
||||
}
|
||||
|
||||
void recompui::open_prompt(
|
||||
const std::string& headerText,
|
||||
const std::string& contentText,
|
||||
const std::string& confirmLabelText,
|
||||
const std::string& cancelLabelText,
|
||||
std::function<void()> confirmCb,
|
||||
std::function<void()> cancelCb,
|
||||
ButtonVariant _confirmVariant,
|
||||
ButtonVariant _cancelVariant,
|
||||
bool _focusOnCancel,
|
||||
const std::string& _returnElementId
|
||||
) {
|
||||
std::lock_guard lock{ prompt_state.mutex };
|
||||
|
||||
prompt_state.ui_context.open();
|
||||
|
||||
prompt_state.prompt_header->set_text(headerText);
|
||||
prompt_state.prompt_label->set_text(contentText);
|
||||
prompt_state.confirm_button->set_text(confirmLabelText);
|
||||
prompt_state.cancel_button->set_text(cancelLabelText);
|
||||
prompt_state.confirm_action = confirmCb;
|
||||
prompt_state.cancel_action = cancelCb;
|
||||
prompt_state.return_element_id = _returnElementId;
|
||||
|
||||
style_button(prompt_state.confirm_button, _confirmVariant);
|
||||
style_button(prompt_state.cancel_button, _cancelVariant);
|
||||
|
||||
if (_focusOnCancel) {
|
||||
// Must be called while prompt_state.mutex is locked.
|
||||
void show_prompt(std::function<void()>& prev_cancel_action, bool focus_on_cancel) {
|
||||
if (!recompui::is_context_shown(prompt_state.ui_context)) {
|
||||
recompui::show_context(prompt_state.ui_context, "");
|
||||
}
|
||||
else {
|
||||
// Call the previous cancel action to effectively close the previous prompt.
|
||||
if (prev_cancel_action) {
|
||||
prev_cancel_action();
|
||||
}
|
||||
}
|
||||
|
||||
if (focus_on_cancel) {
|
||||
// TODO nav: focus cancel button
|
||||
}
|
||||
else {
|
||||
// TODO nav: focus confirm button
|
||||
}
|
||||
}
|
||||
|
||||
void recompui::open_choice_prompt(
|
||||
const std::string& header_text,
|
||||
const std::string& content_text,
|
||||
const std::string& confirm_label_text,
|
||||
const std::string& cancel_label_text,
|
||||
std::function<void()> confirm_action,
|
||||
std::function<void()> cancel_action,
|
||||
ButtonVariant confirm_variant,
|
||||
ButtonVariant cancel_variant,
|
||||
bool focus_on_cancel,
|
||||
const std::string& return_element_id
|
||||
) {
|
||||
std::lock_guard lock{ prompt_state.mutex };
|
||||
|
||||
std::function<void()> prev_cancel_action = std::move(prompt_state.cancel_action);
|
||||
|
||||
prompt_state.ui_context.open();
|
||||
|
||||
prompt_state.prompt_header->set_text(header_text);
|
||||
prompt_state.prompt_label->set_text(content_text);
|
||||
prompt_state.prompt_controls->set_display(Display::Flex);
|
||||
prompt_state.confirm_button->set_display(Display::Block);
|
||||
prompt_state.cancel_button->set_display(Display::Block);
|
||||
prompt_state.confirm_button->set_text(confirm_label_text);
|
||||
prompt_state.cancel_button->set_text(cancel_label_text);
|
||||
prompt_state.confirm_action = confirm_action;
|
||||
prompt_state.cancel_action = cancel_action;
|
||||
prompt_state.return_element_id = return_element_id;
|
||||
|
||||
style_button(prompt_state.confirm_button, confirm_variant);
|
||||
style_button(prompt_state.cancel_button, cancel_variant);
|
||||
|
||||
prompt_state.ui_context.close();
|
||||
|
||||
if (!recompui::is_context_shown(prompt_state.ui_context)) {
|
||||
recompui::show_context(prompt_state.ui_context, "");
|
||||
show_prompt(prev_cancel_action, focus_on_cancel);
|
||||
}
|
||||
|
||||
void recompui::open_info_prompt(
|
||||
const std::string& header_text,
|
||||
const std::string& content_text,
|
||||
const std::string& okay_label_text,
|
||||
std::function<void()> okay_action,
|
||||
ButtonVariant okay_variant,
|
||||
const std::string& return_element_id
|
||||
) {
|
||||
std::lock_guard lock{ prompt_state.mutex };
|
||||
|
||||
std::function<void()> prev_cancel_action = std::move(prompt_state.cancel_action);
|
||||
|
||||
prompt_state.ui_context.open();
|
||||
|
||||
prompt_state.prompt_header->set_text(header_text);
|
||||
prompt_state.prompt_label->set_text(content_text);
|
||||
prompt_state.prompt_controls->set_display(Display::Flex);
|
||||
prompt_state.confirm_button->set_display(Display::None);
|
||||
prompt_state.cancel_button->set_display(Display::Block);
|
||||
prompt_state.cancel_button->set_text(okay_label_text);
|
||||
prompt_state.confirm_action = {};
|
||||
prompt_state.cancel_action = okay_action;
|
||||
prompt_state.return_element_id = return_element_id;
|
||||
|
||||
style_button(prompt_state.cancel_button, okay_variant);
|
||||
|
||||
prompt_state.ui_context.close();
|
||||
|
||||
show_prompt(prev_cancel_action, true);
|
||||
}
|
||||
|
||||
void recompui::open_notification(
|
||||
const std::string& header_text,
|
||||
const std::string& content_text,
|
||||
const std::string& return_element_id
|
||||
) {
|
||||
std::lock_guard lock{ prompt_state.mutex };
|
||||
|
||||
std::function<void()> prev_cancel_action = std::move(prompt_state.cancel_action);
|
||||
|
||||
prompt_state.ui_context.open();
|
||||
|
||||
prompt_state.prompt_header->set_text(header_text);
|
||||
prompt_state.prompt_label->set_text(content_text);
|
||||
prompt_state.prompt_controls->set_display(Display::None);
|
||||
prompt_state.confirm_button->set_display(Display::None);
|
||||
prompt_state.cancel_button->set_display(Display::None);
|
||||
prompt_state.confirm_action = {};
|
||||
prompt_state.cancel_action = {};
|
||||
prompt_state.return_element_id = return_element_id;
|
||||
|
||||
prompt_state.ui_context.close();
|
||||
|
||||
show_prompt(prev_cancel_action, false);
|
||||
}
|
||||
|
||||
void recompui::close_prompt() {
|
||||
std::lock_guard lock{ prompt_state.mutex };
|
||||
|
||||
if (recompui::is_context_shown(prompt_state.ui_context)) {
|
||||
if (prompt_state.cancel_action) {
|
||||
prompt_state.cancel_action();
|
||||
}
|
||||
|
||||
recompui::hide_context(prompt_state.ui_context);
|
||||
}
|
||||
}
|
||||
|
||||
bool recompui::is_prompt_open() {
|
||||
return false;
|
||||
std::lock_guard lock{ prompt_state.mutex };
|
||||
|
||||
return recompui::is_context_shown(prompt_state.ui_context);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user