Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/slic3r/GUI/MainFrame.cpp')
-rw-r--r--src/slic3r/GUI/MainFrame.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp
index d800f6f38..b08df1690 100644
--- a/src/slic3r/GUI/MainFrame.cpp
+++ b/src/slic3r/GUI/MainFrame.cpp
@@ -35,6 +35,7 @@ namespace GUI {
MainFrame::MainFrame() :
DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, "mainframe"),
m_printhost_queue_dlg(new PrintHostQueueDialog(this))
+ , m_recent_projects(9)
{
// Fonts were created by the DPIFrame constructor for the monitor, on which the window opened.
wxGetApp().update_fonts(this);
@@ -383,6 +384,40 @@ void MainFrame::init_menubar()
append_menu_item(fileMenu, wxID_ANY, _(L("&Open Project")) + dots + "\tCtrl+O", _(L("Open a project file")),
[this](wxCommandEvent&) { if (m_plater) m_plater->load_project(); }, menu_icon("open"), nullptr,
[this](){return m_plater != nullptr; }, this);
+
+ wxMenu* recent_projects_menu = new wxMenu();
+ wxMenuItem* recent_projects_submenu = append_submenu(fileMenu, recent_projects_menu, wxID_ANY, _(L("Recent projects")), "");
+ m_recent_projects.UseMenu(recent_projects_menu);
+ Bind(wxEVT_MENU, [this](wxCommandEvent& evt) {
+ size_t file_id = evt.GetId() - wxID_FILE1;
+ wxString filename = m_recent_projects.GetHistoryFile(file_id);
+ if (wxFileExists(filename))
+ m_plater->load_project(filename);
+ else
+ {
+ wxMessageDialog msg(this, _(L("The selected project is no more available")), _(L("Error")));
+ msg.ShowModal();
+
+ m_recent_projects.RemoveFileFromHistory(file_id);
+ std::vector<std::string> recent_projects;
+ size_t count = m_recent_projects.GetCount();
+ for (size_t i = 0; i < count; ++i)
+ {
+ recent_projects.push_back(into_u8(m_recent_projects.GetHistoryFile(i)));
+ }
+ wxGetApp().app_config->set_recent_projects(recent_projects);
+ wxGetApp().app_config->save();
+ }
+ }, wxID_FILE1, wxID_FILE9);
+
+ std::vector<std::string> recent_projects = wxGetApp().app_config->get_recent_projects();
+ for (const std::string& project : recent_projects)
+ {
+ m_recent_projects.AddFileToHistory(from_u8(project));
+ }
+
+ Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(m_recent_projects.GetCount() > 0); }, recent_projects_submenu->GetId());
+
append_menu_item(fileMenu, wxID_ANY, _(L("&Save Project")) + "\tCtrl+S", _(L("Save current project file")),
[this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(into_path(m_plater->get_project_filename(".3mf"))); }, menu_icon("save"), nullptr,
[this](){return m_plater != nullptr && can_save(); }, this);
@@ -503,6 +538,14 @@ void MainFrame::init_menubar()
menu_icon("delete_all_menu"), nullptr, [this](){return can_delete_all(); }, this);
editMenu->AppendSeparator();
+ append_menu_item(editMenu, wxID_ANY, _(L("&Undo")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "Z",
+ _(L("Undo")), [this](wxCommandEvent&) { m_plater->undo(); },
+ "undo", nullptr, [this](){return m_plater->can_undo(); }, this);
+ append_menu_item(editMenu, wxID_ANY, _(L("&Redo")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "Y",
+ _(L("Redo")), [this](wxCommandEvent&) { m_plater->redo(); },
+ "redo", nullptr, [this](){return m_plater->can_redo(); }, this);
+
+ editMenu->AppendSeparator();
append_menu_item(editMenu, wxID_ANY, _(L("&Copy")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "C",
_(L("Copy selection to clipboard")), [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); },
menu_icon("copy_menu"), nullptr, [this](){return m_plater->can_copy_to_clipboard(); }, this);
@@ -1046,6 +1089,23 @@ void MainFrame::on_config_changed(DynamicPrintConfig* config) const
m_plater->on_config_change(*config); // propagate config change events to the plater
}
+void MainFrame::add_to_recent_projects(const wxString& filename)
+{
+ if (wxFileExists(filename))
+ {
+ m_recent_projects.AddFileToHistory(filename);
+ std::vector<std::string> recent_projects;
+ size_t count = m_recent_projects.GetCount();
+ for (size_t i = 0; i < count; ++i)
+ {
+ recent_projects.push_back(into_u8(m_recent_projects.GetHistoryFile(i)));
+ }
+ wxGetApp().app_config->set_recent_projects(recent_projects);
+ wxGetApp().app_config->save();
+ }
+}
+
+//
// Called after the Preferences dialog is closed and the program settings are saved.
// Update the UI based on the current preferences.
void MainFrame::update_ui_from_settings()