TopBar: Show/Hide "Log in" button in respect to the Preferences settings

(SPE-2352)
This commit is contained in:
YuSanka 2024-06-17 11:50:52 +02:00 committed by Lukas Matena
parent 87d7f9fe7f
commit 7ec2f3439a
8 changed files with 81 additions and 3 deletions

View File

@ -473,6 +473,8 @@ void MainFrame::update_layout()
if (m_layout == ESettingsLayout::Old) if (m_layout == ESettingsLayout::Old)
m_tabpanel->InsertNewPage(0, m_plater, _L("Plater"), "", true); m_tabpanel->InsertNewPage(0, m_plater, _L("Plater"), "", true);
update_topbars();
Layout(); Layout();
Thaw(); Thaw();
} }
@ -596,6 +598,22 @@ static wxString GetTooltipForSettingsButton(PrinterTechnology pt)
return from_u8(tooltip); return from_u8(tooltip);
} }
void MainFrame::update_topbars()
{
if (wxGetApp().is_gcode_viewer())
return;
const bool show_login = !wxGetApp().app_config->has("show_login_button") || wxGetApp().app_config->get_bool("show_login_button");
m_tmp_top_bar->ShowUserAccount(show_login);
m_tabpanel->ShowUserAccount(show_login);
if (!show_login) {
if (auto user_account = wxGetApp().plater()->get_user_account();
user_account && user_account->is_logged())
user_account->do_logout();
}
}
void MainFrame::set_callbacks_for_topbar_menus() void MainFrame::set_callbacks_for_topbar_menus()
{ {
m_bar_menus.set_workspaces_menu_callbacks( m_bar_menus.set_workspaces_menu_callbacks(
@ -607,6 +625,20 @@ void MainFrame::set_callbacks_for_topbar_menus()
m_bar_menus.set_account_menu_callbacks( m_bar_menus.set_account_menu_callbacks(
[]() -> void { wxGetApp().plater()->toggle_remember_user_account_session(); }, []() -> void { wxGetApp().plater()->toggle_remember_user_account_session(); },
[]() -> void { wxGetApp().plater()->act_with_user_account(); }, []() -> void { wxGetApp().plater()->act_with_user_account(); },
[this]() -> void {
wxString preferences_item = _L("Show \"Log in\" button in application top bar");
wxString msg =
_L("PrusaSlicer will remember your choice.") + "\n\n" +
format_wxstr(_L("Visit \"Preferences\" and check \"%1%\"\nto changes your choice."), preferences_item);
MessageDialog msg_dlg(this, msg, _L("PrusaSlicer: Don't ask me again"), wxOK | wxCANCEL | wxICON_INFORMATION);
if (msg_dlg.ShowModal() == wxID_OK) {
wxGetApp().app_config->set("show_login_button", "0");
m_bar_menus.RemoveHideLoginItem();
update_topbars();
}
},
[]() -> TopBarMenus::UserAccountInfo { []() -> TopBarMenus::UserAccountInfo {
if (auto user_account = wxGetApp().plater()->get_user_account()) if (auto user_account = wxGetApp().plater()->get_user_account())
return { user_account->is_logged(), return { user_account->is_logged(),
@ -616,6 +648,10 @@ void MainFrame::set_callbacks_for_topbar_menus()
return TopBarMenus::UserAccountInfo(); return TopBarMenus::UserAccountInfo();
} }
); );
// we need "Hide Log in button" menu item only till "show_login_button" wasn't changed
if (wxGetApp().app_config->has("show_login_button"))
m_bar_menus.RemoveHideLoginItem();
} }
void MainFrame::init_tabpanel() void MainFrame::init_tabpanel()
@ -2160,6 +2196,8 @@ void MainFrame::update_ui_from_settings()
// m_plater->sidebar().show_export(bp_on); // m_plater->sidebar().show_export(bp_on);
// m_plater->sidebar().Layout(); // m_plater->sidebar().Layout();
update_topbars();
if (m_plater) if (m_plater)
m_plater->update_ui_from_settings(); m_plater->update_ui_from_settings();
for (auto tab: wxGetApp().tabs_list) for (auto tab: wxGetApp().tabs_list)

View File

@ -172,6 +172,7 @@ public:
void update_title(); void update_title();
void set_callbacks_for_topbar_menus(); void set_callbacks_for_topbar_menus();
void update_topbars();
void init_tabpanel(); void init_tabpanel();
void create_preset_tabs(); void create_preset_tabs();
void add_created_tab(Tab* panel, const std::string& bmp_name = ""); void add_created_tab(Tab* panel, const std::string& bmp_name = "");

View File

@ -6965,8 +6965,11 @@ void Plater::act_with_user_account()
if (p->user_account) { if (p->user_account) {
if (p->user_account->is_logged()) if (p->user_account->is_logged())
p->user_account->do_logout(); p->user_account->do_logout();
else else {
p->user_account->do_login(); p->user_account->do_login();
if (!wxGetApp().app_config->has("show_login_button"))
wxGetApp().app_config->set("show_login_button", "1");
}
} }
} }

View File

@ -135,8 +135,11 @@ void PreferencesDialog::show(const std::string& highlight_opt_key /*= std::strin
downloader->set_path_name(app_config->get("url_downloader_dest")); downloader->set_path_name(app_config->get("url_downloader_dest"));
downloader->allow(!app_config->has("downloader_url_registered") || app_config->get_bool("downloader_url_registered")); downloader->allow(!app_config->has("downloader_url_registered") || app_config->get_bool("downloader_url_registered"));
for (const std::string& opt_key : {"suppress_hyperlinks", "downloader_url_registered"}) for (const std::string& opt_key : {"suppress_hyperlinks", "downloader_url_registered", "show_login_button"})
m_optgroup_other->set_value(opt_key, app_config->get_bool(opt_key)); m_optgroup_other->set_value(opt_key, app_config->get_bool(opt_key));
// by default "Log in" button is visible
if (!app_config->has("show_login_button"))
m_optgroup_other->set_value("show_login_button", true);
for (const std::string& opt_key : { "default_action_on_close_application" for (const std::string& opt_key : { "default_action_on_close_application"
,"default_action_on_new_project" ,"default_action_on_new_project"
@ -627,6 +630,11 @@ void PreferencesDialog::build()
// "If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks."), // "If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks."),
app_config->get_bool("suppress_hyperlinks")); app_config->get_bool("suppress_hyperlinks"));
append_bool_option(m_optgroup_other, "show_login_button",
L("Show \"Log in\" button in application top bar"),
L("If enabled, PrusaSlicer will show up \"Log in\" button in application top bar."),
app_config->get_bool("show_login_button"));
append_bool_option(m_optgroup_other, "downloader_url_registered", append_bool_option(m_optgroup_other, "downloader_url_registered",
L("Allow downloads from Printables.com"), L("Allow downloads from Printables.com"),
L("If enabled, PrusaSlicer will be allowed to download from Printables.com"), L("If enabled, PrusaSlicer will be allowed to download from Printables.com"),

View File

@ -517,6 +517,12 @@ void TopBarItemsCtrl::UpdateMode()
this->Layout(); this->Layout();
} }
void TopBarItemsCtrl::ShowUserAccount(bool show)
{
m_account_btn->Show(show);
this->Layout();
}
void TopBarItemsCtrl::Rescale() void TopBarItemsCtrl::Rescale()
{ {
update_margins(); update_margins();

View File

@ -76,6 +76,7 @@ public:
void SetSelection(int sel, bool force = false); void SetSelection(int sel, bool force = false);
void UpdateMode(); void UpdateMode();
void ShowUserAccount(bool show);
void Rescale(); void Rescale();
void OnColorsChanged(); void OnColorsChanged();
void UpdateModeMarkers(); void UpdateModeMarkers();
@ -324,6 +325,11 @@ public:
GetTopBarItemsCtrl()->UpdateMode(); GetTopBarItemsCtrl()->UpdateMode();
} }
void ShowUserAccount(bool show)
{
GetTopBarItemsCtrl()->ShowUserAccount(show);
}
void Rescale() void Rescale()
{ {
GetTopBarItemsCtrl()->Rescale(); GetTopBarItemsCtrl()->Rescale();

View File

@ -89,6 +89,9 @@ void TopBarMenus::CreateAccountMenu()
m_login_item = append_menu_item(&account, wxID_ANY, "", "", m_login_item = append_menu_item(&account, wxID_ANY, "", "",
[this](wxCommandEvent&) { if (m_cb_act_with_user_account) m_cb_act_with_user_account(); }, "login"); [this](wxCommandEvent&) { if (m_cb_act_with_user_account) m_cb_act_with_user_account(); }, "login");
m_hide_login_item = append_menu_item(&account, wxID_ANY, _L("Hide \"Log in\" button"), "",
[this](wxCommandEvent&) { if (m_cb_hide_user_account) m_cb_hide_user_account(); });
} }
void TopBarMenus::UpdateAccountMenu() void TopBarMenus::UpdateAccountMenu()
@ -96,12 +99,20 @@ void TopBarMenus::UpdateAccountMenu()
bool is_logged{ false }; bool is_logged{ false };
if (m_cb_get_user_account_info) if (m_cb_get_user_account_info)
is_logged = m_cb_get_user_account_info().is_logged; is_logged = m_cb_get_user_account_info().is_logged;
if (is_logged)
RemoveHideLoginItem();
if (m_login_item) { if (m_login_item) {
m_login_item->SetItemLabel(is_logged ? _L("Prusa Account Log out") : _L("Prusa Account Log in")); m_login_item->SetItemLabel(is_logged ? _L("Prusa Account Log out") : _L("Prusa Account Log in"));
set_menu_item_bitmap(m_login_item, is_logged ? "logout" : "login"); set_menu_item_bitmap(m_login_item, is_logged ? "logout" : "login");
} }
} }
void TopBarMenus::RemoveHideLoginItem()
{
if (m_hide_login_item)
account.Remove(m_hide_login_item);
}
void TopBarMenus::Popup(TopBarItemsCtrl* popup_ctrl, wxMenu* menu, wxPoint pos) void TopBarMenus::Popup(TopBarItemsCtrl* popup_ctrl, wxMenu* menu, wxPoint pos)
{ {
m_popup_ctrl = popup_ctrl; m_popup_ctrl = popup_ctrl;

View File

@ -21,6 +21,7 @@ private:
// Prusa Account menu items // Prusa Account menu items
wxMenuItem* m_login_item { nullptr }; wxMenuItem* m_login_item { nullptr };
wxMenuItem* m_hide_login_item { nullptr };
TopBarItemsCtrl* m_popup_ctrl { nullptr }; TopBarItemsCtrl* m_popup_ctrl { nullptr };
@ -30,6 +31,7 @@ private:
std::function<void()> m_cb_toggle_remember_session { nullptr }; std::function<void()> m_cb_toggle_remember_session { nullptr };
std::function<void()> m_cb_act_with_user_account { nullptr }; std::function<void()> m_cb_act_with_user_account { nullptr };
std::function<void()> m_cb_hide_user_account { nullptr };
std::function<UserAccountInfo()>m_cb_get_user_account_info { nullptr }; std::function<UserAccountInfo()>m_cb_get_user_account_info { nullptr };
public: public:
@ -46,6 +48,7 @@ public:
void ApplyWorkspacesMenu(); void ApplyWorkspacesMenu();
void CreateAccountMenu(); void CreateAccountMenu();
void UpdateAccountMenu(); void UpdateAccountMenu();
void RemoveHideLoginItem();
void Popup(TopBarItemsCtrl* popup_ctrl, wxMenu* menu, wxPoint pos); void Popup(TopBarItemsCtrl* popup_ctrl, wxMenu* menu, wxPoint pos);
void BindEvtClose(); void BindEvtClose();
@ -70,10 +73,12 @@ public:
void set_account_menu_callbacks(std::function<void()> cb_toggle_remember_session, void set_account_menu_callbacks(std::function<void()> cb_toggle_remember_session,
std::function<void()> cb_act_with_user_account , std::function<void()> cb_act_with_user_account ,
std::function<void()> cb_hide_user_account ,
std::function<UserAccountInfo()> cb_get_user_account_info ) std::function<UserAccountInfo()> cb_get_user_account_info )
{ {
m_cb_toggle_remember_session = cb_toggle_remember_session; m_cb_toggle_remember_session = cb_toggle_remember_session;
m_cb_act_with_user_account = cb_act_with_user_account; m_cb_act_with_user_account = cb_act_with_user_account;
m_cb_hide_user_account = cb_hide_user_account;
m_cb_get_user_account_info = cb_get_user_account_info; m_cb_get_user_account_info = cb_get_user_account_info;
} }