mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-07-13 03:31:52 +08:00
MSW specific: Highlighted text for the default buttons in dialog. Related to https://github.com/prusa3d/PrusaSlicer/issues/7564 (#7830)
This commit is contained in:
parent
07a27c9e2d
commit
ddb14fa7f9
@ -1406,6 +1406,7 @@ void GUI_App::init_label_colours()
|
|||||||
m_color_highlight_label_default = is_dark_mode ? wxColour(230, 230, 230): wxSystemSettings::GetColour(/*wxSYS_COLOUR_HIGHLIGHTTEXT*/wxSYS_COLOUR_WINDOWTEXT);
|
m_color_highlight_label_default = is_dark_mode ? wxColour(230, 230, 230): wxSystemSettings::GetColour(/*wxSYS_COLOUR_HIGHLIGHTTEXT*/wxSYS_COLOUR_WINDOWTEXT);
|
||||||
m_color_highlight_default = is_dark_mode ? wxColour(78, 78, 78) : wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT);
|
m_color_highlight_default = is_dark_mode ? wxColour(78, 78, 78) : wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT);
|
||||||
m_color_hovered_btn_label = is_dark_mode ? wxColour(253, 111, 40) : wxColour(252, 77, 1);
|
m_color_hovered_btn_label = is_dark_mode ? wxColour(253, 111, 40) : wxColour(252, 77, 1);
|
||||||
|
m_color_default_btn_label = is_dark_mode ? wxColour(255, 181, 100): wxColour(203, 61, 0);
|
||||||
m_color_selected_btn_bg = is_dark_mode ? wxColour(95, 73, 62) : wxColour(228, 220, 216);
|
m_color_selected_btn_bg = is_dark_mode ? wxColour(95, 73, 62) : wxColour(228, 220, 216);
|
||||||
#else
|
#else
|
||||||
m_color_label_default = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
|
m_color_label_default = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
|
||||||
@ -1440,12 +1441,22 @@ static bool is_focused(HWND hWnd)
|
|||||||
HWND hFocusedWnd = ::GetFocus();
|
HWND hFocusedWnd = ::GetFocus();
|
||||||
return hFocusedWnd && hWnd == hFocusedWnd;
|
return hFocusedWnd && hWnd == hFocusedWnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool is_default(wxWindow* win)
|
||||||
|
{
|
||||||
|
wxTopLevelWindow* tlw = find_toplevel_parent(win);
|
||||||
|
if (!tlw)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return win == tlw->GetDefaultItem();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void GUI_App::UpdateDarkUI(wxWindow* window, bool highlited/* = false*/, bool just_font/* = false*/)
|
void GUI_App::UpdateDarkUI(wxWindow* window, bool highlited/* = false*/, bool just_font/* = false*/)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
bool is_focused_button = false;
|
bool is_focused_button = false;
|
||||||
|
bool is_default_button = false;
|
||||||
if (wxButton* btn = dynamic_cast<wxButton*>(window)) {
|
if (wxButton* btn = dynamic_cast<wxButton*>(window)) {
|
||||||
if (!(btn->GetWindowStyle() & wxNO_BORDER)) {
|
if (!(btn->GetWindowStyle() & wxNO_BORDER)) {
|
||||||
btn->SetWindowStyle(btn->GetWindowStyle() | wxNO_BORDER);
|
btn->SetWindowStyle(btn->GetWindowStyle() | wxNO_BORDER);
|
||||||
@ -1457,7 +1468,7 @@ void GUI_App::UpdateDarkUI(wxWindow* window, bool highlited/* = false*/, bool ju
|
|||||||
if (btn->GetLabel().IsEmpty())
|
if (btn->GetLabel().IsEmpty())
|
||||||
btn->SetBackgroundColour(mark ? m_color_selected_btn_bg : highlited ? m_color_highlight_default : m_color_window_default);
|
btn->SetBackgroundColour(mark ? m_color_selected_btn_bg : highlited ? m_color_highlight_default : m_color_window_default);
|
||||||
else
|
else
|
||||||
btn->SetForegroundColour(mark ? m_color_hovered_btn_label : m_color_label_default);
|
btn->SetForegroundColour(mark ? m_color_hovered_btn_label : (is_default(btn) ? m_color_default_btn_label : m_color_label_default));
|
||||||
btn->Refresh();
|
btn->Refresh();
|
||||||
btn->Update();
|
btn->Update();
|
||||||
};
|
};
|
||||||
@ -1469,8 +1480,10 @@ void GUI_App::UpdateDarkUI(wxWindow* window, bool highlited/* = false*/, bool ju
|
|||||||
btn->Bind(wxEVT_SET_FOCUS, [mark_button](wxFocusEvent& event) { mark_button(true); event.Skip(); });
|
btn->Bind(wxEVT_SET_FOCUS, [mark_button](wxFocusEvent& event) { mark_button(true); event.Skip(); });
|
||||||
btn->Bind(wxEVT_KILL_FOCUS, [mark_button](wxFocusEvent& event) { mark_button(false); event.Skip(); });
|
btn->Bind(wxEVT_KILL_FOCUS, [mark_button](wxFocusEvent& event) { mark_button(false); event.Skip(); });
|
||||||
|
|
||||||
if (is_focused_button = is_focused(btn->GetHWND()))
|
is_focused_button = is_focused(btn->GetHWND());
|
||||||
mark_button(true);
|
is_default_button = is_default(btn);
|
||||||
|
if (is_focused_button || is_default_button)
|
||||||
|
mark_button(is_focused_button);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (wxTextCtrl* text = dynamic_cast<wxTextCtrl*>(window)) {
|
else if (wxTextCtrl* text = dynamic_cast<wxTextCtrl*>(window)) {
|
||||||
@ -1492,7 +1505,7 @@ void GUI_App::UpdateDarkUI(wxWindow* window, bool highlited/* = false*/, bool ju
|
|||||||
|
|
||||||
if (!just_font)
|
if (!just_font)
|
||||||
window->SetBackgroundColour(highlited ? m_color_highlight_default : m_color_window_default);
|
window->SetBackgroundColour(highlited ? m_color_highlight_default : m_color_window_default);
|
||||||
if (!is_focused_button)
|
if (!is_focused_button && !is_default_button)
|
||||||
window->SetForegroundColour(m_color_label_default);
|
window->SetForegroundColour(m_color_label_default);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -123,6 +123,7 @@ private:
|
|||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
wxColour m_color_highlight_label_default;
|
wxColour m_color_highlight_label_default;
|
||||||
wxColour m_color_hovered_btn_label;
|
wxColour m_color_hovered_btn_label;
|
||||||
|
wxColour m_color_default_btn_label;
|
||||||
wxColour m_color_highlight_default;
|
wxColour m_color_highlight_default;
|
||||||
wxColour m_color_selected_btn_bg;
|
wxColour m_color_selected_btn_bg;
|
||||||
bool m_force_colors_update { false };
|
bool m_force_colors_update { false };
|
||||||
|
@ -37,7 +37,8 @@ static const char *CONFIG_KEY_PATH = "printhost_path";
|
|||||||
static const char *CONFIG_KEY_GROUP = "printhost_group";
|
static const char *CONFIG_KEY_GROUP = "printhost_group";
|
||||||
|
|
||||||
PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUploadActions post_actions, const wxArrayString &groups)
|
PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUploadActions post_actions, const wxArrayString &groups)
|
||||||
: MsgDialog(static_cast<wxWindow*>(wxGetApp().mainframe), _L("Send G-Code to printer host"), _L("Upload to Printer Host with the following filename:"))
|
: MsgDialog(static_cast<wxWindow*>(wxGetApp().mainframe), _L("Send G-Code to printer host"), _L("Upload to Printer Host with the following filename:"), 0) // Set style = 0 to avoid default creation of the "OK" button.
|
||||||
|
// All buttons will be added later in this constructor
|
||||||
, txt_filename(new wxTextCtrl(this, wxID_ANY))
|
, txt_filename(new wxTextCtrl(this, wxID_ANY))
|
||||||
, combo_groups(!groups.IsEmpty() ? new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, groups, wxCB_READONLY) : nullptr)
|
, combo_groups(!groups.IsEmpty() ? new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, groups, wxCB_READONLY) : nullptr)
|
||||||
, post_upload_action(PrintHostPostUploadAction::None)
|
, post_upload_action(PrintHostPostUploadAction::None)
|
||||||
@ -74,7 +75,6 @@ PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUplo
|
|||||||
const auto stem_len = stem.Length();
|
const auto stem_len = stem.Length();
|
||||||
|
|
||||||
txt_filename->SetValue(recent_path);
|
txt_filename->SetValue(recent_path);
|
||||||
txt_filename->SetFocus();
|
|
||||||
|
|
||||||
if (size_t extension_start = recent_path.find_last_of('.'); extension_start != std::string::npos)
|
if (size_t extension_start = recent_path.find_last_of('.'); extension_start != std::string::npos)
|
||||||
m_valid_suffix = recent_path.substr(extension_start);
|
m_valid_suffix = recent_path.substr(extension_start);
|
||||||
@ -88,6 +88,15 @@ PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUplo
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto* btn_ok = add_button(wxID_OK, true, _L("Upload"));
|
||||||
|
btn_ok->Bind(wxEVT_BUTTON, [this, validate_path](wxCommandEvent&) {
|
||||||
|
if (validate_path(txt_filename->GetValue())) {
|
||||||
|
post_upload_action = PrintHostPostUploadAction::None;
|
||||||
|
EndDialog(wxID_OK);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
txt_filename->SetFocus();
|
||||||
|
|
||||||
if (post_actions.has(PrintHostPostUploadAction::StartPrint)) {
|
if (post_actions.has(PrintHostPostUploadAction::StartPrint)) {
|
||||||
auto* btn_print = add_button(wxID_YES, false, _L("Upload and Print"));
|
auto* btn_print = add_button(wxID_YES, false, _L("Upload and Print"));
|
||||||
btn_print->Bind(wxEVT_BUTTON, [this, validate_path](wxCommandEvent&) {
|
btn_print->Bind(wxEVT_BUTTON, [this, validate_path](wxCommandEvent&) {
|
||||||
@ -110,16 +119,6 @@ PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUplo
|
|||||||
}
|
}
|
||||||
|
|
||||||
add_button(wxID_CANCEL);
|
add_button(wxID_CANCEL);
|
||||||
|
|
||||||
if (auto* btn_ok = get_button(wxID_OK); btn_ok != NULL) {
|
|
||||||
btn_ok->SetLabel(_L("Upload"));
|
|
||||||
btn_ok->Bind(wxEVT_BUTTON, [this, validate_path](wxCommandEvent&) {
|
|
||||||
if (validate_path(txt_filename->GetValue())) {
|
|
||||||
post_upload_action = PrintHostPostUploadAction::None;
|
|
||||||
EndDialog(wxID_OK);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
finalize();
|
finalize();
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
@ -137,6 +136,7 @@ PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUplo
|
|||||||
// Another similar case where the function only works with EVT_SHOW + CallAfter,
|
// Another similar case where the function only works with EVT_SHOW + CallAfter,
|
||||||
// this time on Mac.
|
// this time on Mac.
|
||||||
CallAfter([=]() {
|
CallAfter([=]() {
|
||||||
|
txt_filename->SetInsertionPoint(0);
|
||||||
txt_filename->SetSelection(recent_path_len, recent_path_len + stem_len);
|
txt_filename->SetSelection(recent_path_len, recent_path_len + stem_len);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user