Fix for #8728 - Remember Size/Location of Shape Gallery window box

This commit is contained in:
YuSanka 2022-08-24 16:48:23 +02:00
parent 7e77048593
commit 98e94c3329
7 changed files with 40 additions and 18 deletions

View file

@ -2828,6 +2828,11 @@ NotificationManager * GUI_App::notification_manager()
return plater_->get_notification_manager();
}
GalleryDialog* GUI_App::gallery_dialog()
{
return mainframe->gallery_dialog();
}
// extruders count from selected printer preset
int GUI_App::extruders_cnt() const
{

View file

@ -47,6 +47,7 @@ class ObjectLayers;
class Plater;
class NotificationManager;
struct GUI_InitParams;
class GalleryDialog;
@ -296,6 +297,7 @@ public:
const Plater* plater() const;
Model& model();
NotificationManager * notification_manager();
GalleryDialog * gallery_dialog();
// Parameters extracted from the command line to be passed to GUI after initialization.
GUI_InitParams* init_params { nullptr };

View file

@ -1409,9 +1409,8 @@ void ObjectList::load_subobject(ModelVolumeType type, bool from_galery/* = false
wxArrayString input_files;
if (from_galery) {
GalleryDialog dlg(this);
if (dlg.ShowModal() != wxID_CLOSE)
dlg.get_input_files(input_files);
if (wxGetApp().gallery_dialog()->show() != wxID_CLOSE)
wxGetApp().gallery_dialog()->get_input_files(input_files);
}
else
wxGetApp().import_model(wxGetApp().tab_panel()->GetPage(0), input_files);
@ -1737,10 +1736,10 @@ void ObjectList::load_shape_object_from_gallery()
return;// Add nothing if something is selected on 3DScene
wxArrayString input_files;
GalleryDialog gallery_dlg(this);
if (gallery_dlg.ShowModal() == wxID_CLOSE)
GalleryDialog* gallery_dlg = wxGetApp().gallery_dialog();
if (gallery_dlg->show() == wxID_CLOSE)
return;
gallery_dlg.get_input_files(input_files);
gallery_dlg->get_input_files(input_files);
if (input_files.IsEmpty())
return;
load_shape_object_from_gallery(input_files);

View file

@ -65,7 +65,7 @@ bool GalleryDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& f
}
GalleryDialog::GalleryDialog(wxWindow* parent, bool modify_gallery/* = false*/) :
GalleryDialog::GalleryDialog(wxWindow* parent) :
DPIDialog(parent, wxID_ANY, _L("Shape Gallery"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
#ifndef _WIN32
@ -94,12 +94,9 @@ GalleryDialog::GalleryDialog(wxWindow* parent, bool modify_gallery/* = false*/)
#endif
wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxOK | wxCLOSE);
wxButton* ok_btn = static_cast<wxButton*>(FindWindowById(wxID_OK, this));
ok_btn->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(!m_selected_items.empty()); });
if (modify_gallery) {
ok_btn->SetLabel(_L("Add to bed"));
ok_btn->SetToolTip(_L("Add selected shape(s) to the bed"));
}
m_ok_btn = static_cast<wxButton*>(FindWindowById(wxID_OK, this));
m_ok_btn->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(!m_selected_items.empty()); });
static_cast<wxButton*>(FindWindowById(wxID_CLOSE, this))->Bind(wxEVT_BUTTON, [this](wxCommandEvent&){ this->EndModal(wxID_CLOSE); });
this->SetEscapeId(wxID_CLOSE);
auto add_btn = [this, buttons]( size_t pos, int& ID, wxString title, wxString tooltip,
@ -140,6 +137,14 @@ GalleryDialog::~GalleryDialog()
{
}
int GalleryDialog::show(bool show_from_menu)
{
m_ok_btn->SetLabel( show_from_menu ? _L("Add to bed") : _L("OK"));
m_ok_btn->SetToolTip(show_from_menu ? _L("Add selected shape(s) to the bed") : "");
return this->ShowModal();
}
bool GalleryDialog::can_delete()
{
if (m_selected_items.empty())

View file

@ -20,6 +20,7 @@ class GalleryDialog : public DPIDialog
{
wxListCtrl* m_list_ctrl { nullptr };
wxImageList* m_image_list { nullptr };
wxButton* m_ok_btn { nullptr };
struct Item {
std::string name;
@ -48,9 +49,10 @@ class GalleryDialog : public DPIDialog
void update();
public:
GalleryDialog(wxWindow* parent, bool modify_gallery = false);
GalleryDialog(wxWindow* parent);
~GalleryDialog();
int show(bool show_from_menu = false);
void get_input_files(wxArrayString& input_files);
bool load_files(const wxArrayString& input_files);

View file

@ -622,6 +622,13 @@ void MainFrame::shutdown()
wxGetApp().plater_ = nullptr;
}
GalleryDialog* MainFrame::gallery_dialog()
{
if (!m_gallery_dialog)
m_gallery_dialog = new GalleryDialog(this);
return m_gallery_dialog;
}
void MainFrame::update_title()
{
wxString title = wxEmptyString;
@ -1413,11 +1420,10 @@ void MainFrame::init_menubar_as_editor()
windowMenu->AppendSeparator();
append_menu_item(windowMenu, wxID_ANY, _L("Shape Gallery"), _L("Open the dialog to modify shape gallery"),
[this](wxCommandEvent&) {
GalleryDialog dlg(this, true);
if (dlg.ShowModal() == wxID_OK) {
[this](wxCommandEvent&) {
if (gallery_dialog()->show(true) == wxID_OK) {
wxArrayString input_files;
dlg.get_input_files(input_files);
m_gallery_dialog->get_input_files(input_files);
if (!input_files.IsEmpty())
m_plater->sidebar().obj_list()->load_shape_object_from_gallery(input_files);
}

View file

@ -33,6 +33,7 @@ class PrintHostQueueDialog;
class Plater;
class MainFrame;
class PreferencesDialog;
class GalleryDialog;
enum QuickSlice
{
@ -146,6 +147,7 @@ public:
void shutdown();
Plater* plater() { return m_plater; }
GalleryDialog* gallery_dialog();
void update_title();
@ -207,6 +209,7 @@ public:
PreferencesDialog* preferences_dialog { nullptr };
PrintHostQueueDialog* m_printhost_queue_dlg;
// std::shared_ptr<ProgressStatusBar> m_statusbar;
GalleryDialog* m_gallery_dialog{ nullptr };
#ifdef __APPLE__
std::unique_ptr<wxTaskBarIcon> m_taskbar_icon;