FIX:add the sd card removal function

Change-Id: I98592a5d3d4abcfd3a67b8c12fa4cf07e79b0e4b
This commit is contained in:
tao wang 2022-09-16 11:31:12 +08:00 committed by Lane.Wei
parent b9b3f7b4c1
commit bf927f5adc
12 changed files with 74 additions and 56 deletions

View file

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800"><title>notification_eject_sd</title><path d="M702.38,400c0,166.31-135.31,300.87-302.38,300.87S97.62,566.31,97.62,400,232.93,99.13,400,99.13,702.38,233.69,702.38,400Z" fill="#eee"/><path d="M240.49,533.8a16.78,16.78,0,0,1,16.63-16.63H552a16.64,16.64,0,0,1,0,33.27H257.12A16.78,16.78,0,0,1,240.49,533.8Z" fill="#ff6f00" fill-rule="evenodd"/><path d="M530,434.77,405.29,220.08l-124,214.69ZM434.77,203.45c-12.85-21.92-45.35-21.92-58.2,0L251.83,418.14c-12.85,21.93,3,49.9,28.73,49.9H529.27c25.7,0,42.33-28,28.72-49.9Z" fill="#ff6f00" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 651 B

View file

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800"><title>notification_eject_sd_hover</title><path d="M780.4,400c0,209.22-170.23,378.5-380.4,378.5S19.6,609.22,19.6,400,189.83,21.5,400,21.5,780.4,190.78,780.4,400Z" fill="#eee"/><path d="M199.34,568.33a21.11,21.11,0,0,1,20.92-20.92H591.15a20.92,20.92,0,0,1,0,41.84H220.26A21.11,21.11,0,0,1,199.34,568.33Z" fill="#ff6f00" fill-rule="evenodd"/><path d="M563.57,443.75,406.66,173.66l-156,270.09Zm-119.82-291c-16.17-27.58-57.06-27.58-73.23,0L213.6,422.82c-16.16,27.58,3.81,62.77,36.14,62.77H562.62c32.34,0,53.26-35.19,36.14-62.77Z" fill="#ff6f00" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 663 B

View file

@ -253,8 +253,8 @@ set(SLIC3R_GUI_SOURCES
GUI/wxExtensions.hpp GUI/wxExtensions.hpp
GUI/WipeTowerDialog.cpp GUI/WipeTowerDialog.cpp
GUI/WipeTowerDialog.hpp GUI/WipeTowerDialog.hpp
#GUI/RemovableDriveManager.cpp GUI/RemovableDriveManager.cpp
#GUI/RemovableDriveManager.hpp GUI/RemovableDriveManager.hpp
GUI/SendSystemInfoDialog.cpp GUI/SendSystemInfoDialog.cpp
GUI/SendSystemInfoDialog.hpp GUI/SendSystemInfoDialog.hpp
GUI/ImGuiWrapper.hpp GUI/ImGuiWrapper.hpp
@ -387,8 +387,8 @@ if (APPLE)
list(APPEND SLIC3R_GUI_SOURCES list(APPEND SLIC3R_GUI_SOURCES
Utils/RetinaHelperImpl.mm Utils/RetinaHelperImpl.mm
Utils/MacDarkMode.mm Utils/MacDarkMode.mm
#GUI/RemovableDriveManagerMM.mm GUI/RemovableDriveManagerMM.mm
#GUI/RemovableDriveManagerMM.h GUI/RemovableDriveManagerMM.h
GUI/Mouse3DHandlerMac.mm GUI/Mouse3DHandlerMac.mm
#GUI/InstanceCheckMac.mm #GUI/InstanceCheckMac.mm
#GUI/InstanceCheckMac.h #GUI/InstanceCheckMac.h

View file

@ -65,7 +65,7 @@
#include "SysInfoDialog.hpp" #include "SysInfoDialog.hpp"
#include "UpdateDialogs.hpp" #include "UpdateDialogs.hpp"
#include "Mouse3DController.hpp" #include "Mouse3DController.hpp"
//#include "RemovableDriveManager.hpp" #include "RemovableDriveManager.hpp"
#include "InstanceCheck.hpp" #include "InstanceCheck.hpp"
#include "NotificationManager.hpp" #include "NotificationManager.hpp"
#include "UnsavedChangesDialog.hpp" #include "UnsavedChangesDialog.hpp"
@ -1119,7 +1119,7 @@ GUI_App::GUI_App()
, m_em_unit(10) , m_em_unit(10)
, m_imgui(new ImGuiWrapper()) , m_imgui(new ImGuiWrapper())
, hms_query(new HMSQuery()) , hms_query(new HMSQuery())
//, m_removable_drive_manager(std::make_unique<RemovableDriveManager>()) , m_removable_drive_manager(std::make_unique<RemovableDriveManager>())
//, m_other_instance_message_handler(std::make_unique<OtherInstanceMessageHandler>()) //, m_other_instance_message_handler(std::make_unique<OtherInstanceMessageHandler>())
{ {
//app config initializes early becasuse it is used in instance checking in BambuStudio.cpp //app config initializes early becasuse it is used in instance checking in BambuStudio.cpp

View file

@ -49,7 +49,7 @@ class NetworkAgent;
namespace GUI{ namespace GUI{
//class RemovableDriveManager; class RemovableDriveManager;
class OtherInstanceMessageHandler; class OtherInstanceMessageHandler;
class MainFrame; class MainFrame;
class Sidebar; class Sidebar;
@ -244,7 +244,7 @@ private:
const wxLanguageInfo *m_language_info_best = nullptr; const wxLanguageInfo *m_language_info_best = nullptr;
OpenGLManager m_opengl_mgr; OpenGLManager m_opengl_mgr;
//std::unique_ptr<RemovableDriveManager> m_removable_drive_manager; std::unique_ptr<RemovableDriveManager> m_removable_drive_manager;
std::unique_ptr<ImGuiWrapper> m_imgui; std::unique_ptr<ImGuiWrapper> m_imgui;
//std::unique_ptr <OtherInstanceMessageHandler> m_other_instance_message_handler; //std::unique_ptr <OtherInstanceMessageHandler> m_other_instance_message_handler;
@ -479,7 +479,7 @@ public:
std::vector<Tab *> tabs_list; std::vector<Tab *> tabs_list;
std::vector<Tab *> model_tabs_list; std::vector<Tab *> model_tabs_list;
//RemovableDriveManager* removable_drive_manager() { return m_removable_drive_manager.get(); } RemovableDriveManager* removable_drive_manager() { return m_removable_drive_manager.get(); }
//OtherInstanceMessageHandler* other_instance_message_handler() { return m_other_instance_message_handler.get(); } //OtherInstanceMessageHandler* other_instance_message_handler() { return m_other_instance_message_handler.get(); }
//wxSingleInstanceChecker* single_instance_checker() {return m_single_instance_checker.get();} //wxSingleInstanceChecker* single_instance_checker() {return m_single_instance_checker.get();}

View file

@ -71,8 +71,8 @@ static const std::map<const wchar_t, std::string> font_icons_large = {
{ImGui::CloseNotifButton , "notification_close" }, {ImGui::CloseNotifButton , "notification_close" },
{ImGui::CloseNotifHoverButton , "notification_close_hover" }, {ImGui::CloseNotifHoverButton , "notification_close_hover" },
//BBS removed //BBS removed
//{ImGui::EjectButton , "notification_eject_sd" }, {ImGui::EjectButton , "notification_eject_sd" },
//{ImGui::EjectHoverButton , "notification_eject_sd_hover" }, {ImGui::EjectHoverButton , "notification_eject_sd_hover" },
//{ImGui::WarningMarker , "notification_warning" }, //{ImGui::WarningMarker , "notification_warning" },
//{ImGui::ErrorMarker , "notification_error" }, //{ImGui::ErrorMarker , "notification_error" },
{ImGui::CancelButton , "notification_cancel" }, {ImGui::CancelButton , "notification_cancel" },

View file

@ -34,7 +34,7 @@ static constexpr int FADING_OUT_TIMEOUT = 100;
namespace Slic3r { namespace Slic3r {
namespace GUI { namespace GUI {
//wxDEFINE_EVENT(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, EjectDriveNotificationClickedEvent); wxDEFINE_EVENT(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, EjectDriveNotificationClickedEvent);
wxDEFINE_EVENT(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, ExportGcodeNotificationClickedEvent); wxDEFINE_EVENT(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, ExportGcodeNotificationClickedEvent);
wxDEFINE_EVENT(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, PresetUpdateAvailableClickedEvent); wxDEFINE_EVENT(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, PresetUpdateAvailableClickedEvent);
@ -801,11 +801,11 @@ void NotificationManager::ExportFinishedNotification::render_text(ImGuiWrapper&
void NotificationManager::ExportFinishedNotification::render_close_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) void NotificationManager::ExportFinishedNotification::render_close_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y)
{ {
PopNotification::render_close_button(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); PopNotification::render_close_button(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y);
//if(m_to_removable && ! m_eject_pending) if (m_to_removable && !m_eject_pending)
// render_eject_button(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); render_eject_button(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y);
} }
/*void NotificationManager::ExportFinishedNotification::render_eject_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) void NotificationManager::ExportFinishedNotification::render_eject_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y)
{ {
ImVec2 win_size(win_size_x, win_size_y); ImVec2 win_size(win_size_x, win_size_y);
ImVec2 win_pos(win_pos_x, win_pos_y); ImVec2 win_pos(win_pos_x, win_pos_y);
@ -824,17 +824,19 @@ void NotificationManager::ExportFinishedNotification::render_close_button(ImGuiW
{ {
button_text = ImGui::EjectHoverButton; button_text = ImGui::EjectHoverButton;
//tooltip //tooltip
long time_now = wxGetLocalTime(); long time_now = wxGetLocalTime();
if (m_hover_time > 0 && m_hover_time < time_now) { if (m_hover_time > 0 && m_hover_time < time_now) {
ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND);
ImGui::BeginTooltip(); //ImGui::BeginTooltip();
imgui.text(_u8L("Eject drive") + " " + GUI::shortkey_ctrl_prefix() + "T"); //imgui.text(_u8L("Eject drive") + " " + GUI::shortkey_ctrl_prefix() + "T");
ImGui::EndTooltip(); //ImGui::EndTooltip();
ImGui::PopStyleColor(); ImGui::PopStyleColor();
} }
if (m_hover_time == 0) if (m_hover_time == 0)
m_hover_time = time_now; m_hover_time = time_now;
} else }
else
m_hover_time = 0; m_hover_time = 0;
ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str());
@ -860,7 +862,8 @@ void NotificationManager::ExportFinishedNotification::render_close_button(ImGuiW
on_eject_click(); on_eject_click();
} }
ImGui::PopStyleColor(5); ImGui::PopStyleColor(5);
}*/ }
bool NotificationManager::ExportFinishedNotification::on_text_click() bool NotificationManager::ExportFinishedNotification::on_text_click()
{ {
open_folder(m_export_dir_path); open_folder(m_export_dir_path);

View file

@ -21,8 +21,8 @@
namespace Slic3r { namespace Slic3r {
namespace GUI { namespace GUI {
//using EjectDriveNotificationClickedEvent = SimpleEvent; using EjectDriveNotificationClickedEvent = SimpleEvent;
//wxDECLARE_EVENT(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, EjectDriveNotificationClickedEvent); wxDECLARE_EVENT(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, EjectDriveNotificationClickedEvent);
using ExportGcodeNotificationClickedEvent = SimpleEvent; using ExportGcodeNotificationClickedEvent = SimpleEvent;
wxDECLARE_EVENT(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, ExportGcodeNotificationClickedEvent); wxDECLARE_EVENT(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, ExportGcodeNotificationClickedEvent);
using PresetUpdateAvailableClickedEvent = SimpleEvent; using PresetUpdateAvailableClickedEvent = SimpleEvent;
@ -690,9 +690,9 @@ private:
void render_close_button(ImGuiWrapper& imgui, void render_close_button(ImGuiWrapper& imgui,
const float win_size_x, const float win_size_y, const float win_size_x, const float win_size_y,
const float win_pos_x, const float win_pos_y) override; const float win_pos_x, const float win_pos_y) override;
/*void render_eject_button(ImGuiWrapper& imgui, void render_eject_button(ImGuiWrapper& imgui,
const float win_size_x, const float win_size_y, const float win_size_x, const float win_size_y,
const float win_pos_x, const float win_pos_y);*/ const float win_pos_x, const float win_pos_y);
void render_minimize_button(ImGuiWrapper& imgui, const float win_pos_x, const float win_pos_y) override void render_minimize_button(ImGuiWrapper& imgui, const float win_pos_x, const float win_pos_y) override
{ m_minimize_b_visible = false; } { m_minimize_b_visible = false; }
bool on_text_click() override; bool on_text_click() override;

View file

@ -91,7 +91,7 @@
#include "../Utils/UndoRedo.hpp" #include "../Utils/UndoRedo.hpp"
#include "../Utils/PresetUpdater.hpp" #include "../Utils/PresetUpdater.hpp"
#include "../Utils/Process.hpp" #include "../Utils/Process.hpp"
//#include "RemovableDriveManager.hpp" #include "RemovableDriveManager.hpp"
#include "InstanceCheck.hpp" #include "InstanceCheck.hpp"
#include "NotificationManager.hpp" #include "NotificationManager.hpp"
#include "PresetComboBoxes.hpp" #include "PresetComboBoxes.hpp"
@ -2240,12 +2240,11 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
//notification_manager = new NotificationManager(this->q); //notification_manager = new NotificationManager(this->q);
if (wxGetApp().is_editor()) { if (wxGetApp().is_editor()) {
//this->q->Bind(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, [this](EjectDriveNotificationClickedEvent&) { this->q->eject_drive(); }); this->q->Bind(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, [this](EjectDriveNotificationClickedEvent&) { this->q->eject_drive(); });
this->q->Bind(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, [this](ExportGcodeNotificationClickedEvent&) { this->q->export_gcode(true); }); this->q->Bind(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, [this](ExportGcodeNotificationClickedEvent&) { this->q->export_gcode(true); });
this->q->Bind(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, [](PresetUpdateAvailableClickedEvent&) { wxGetApp().get_preset_updater()->on_update_notification_confirm(); }); this->q->Bind(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, [](PresetUpdateAvailableClickedEvent&) { wxGetApp().get_preset_updater()->on_update_notification_confirm(); });
/* BBS do not handle removeable driver event */ /* BBS do not handle removeable driver event */
/*
this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this](RemovableDriveEjectEvent &evt) { this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this](RemovableDriveEjectEvent &evt) {
if (evt.data.second) { if (evt.data.second) {
// BBS // BBS
@ -2268,14 +2267,13 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
// Close notification ExportingFinished but only if last export was to removable // Close notification ExportingFinished but only if last export was to removable
notification_manager->device_ejected(); notification_manager->device_ejected();
}); });
*/
// Start the background thread and register this window as a target for update events. // Start the background thread and register this window as a target for update events.
//wxGetApp().removable_drive_manager()->init(this->q); wxGetApp().removable_drive_manager()->init(this->q);
//#ifdef _WIN32 #ifdef _WIN32
//Trigger enumeration of removable media on Win32 notification. //Trigger enumeration of removable media on Win32 notification.
//this->q->Bind(EVT_VOLUME_ATTACHED, [this](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); this->q->Bind(EVT_VOLUME_ATTACHED, [this](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); });
//this->q->Bind(EVT_VOLUME_DETACHED, [this](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); this->q->Bind(EVT_VOLUME_DETACHED, [this](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); });
//#endif /* _WIN32 */ #endif /* _WIN32 */
} }
// Initialize the Undo / Redo stack with a first snapshot. // Initialize the Undo / Redo stack with a first snapshot.
@ -5382,16 +5380,16 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt)
notification_manager->close_notification_of_type(NotificationType::ExportOngoing); notification_manager->close_notification_of_type(NotificationType::ExportOngoing);
} }
// If writing to removable drive was scheduled, show notification with eject button // If writing to removable drive was scheduled, show notification with eject button
/*if (exporting_status == ExportingStatus::EXPORTING_TO_REMOVABLE && !has_error) { if (exporting_status == ExportingStatus::EXPORTING_TO_REMOVABLE && !has_error) {
//show_action_buttons(ready_to_slice); //show_action_buttons(ready_to_slice);
this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, ready_to_slice, true); this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, ready_to_slice, true);
notification_manager->push_exporting_finished_notification(last_output_path, last_output_dir_path, notification_manager->push_exporting_finished_notification(last_output_path, last_output_dir_path,
// Don't offer the "Eject" button on ChromeOS, the Linux side has no control over it. // Don't offer the "Eject" button on ChromeOS, the Linux side has no control over it.
platform_flavor() != PlatformFlavor::LinuxOnChromium); platform_flavor() != PlatformFlavor::LinuxOnChromium);
//wxGetApp().removable_drive_manager()->set_exporting_finished(true); wxGetApp().removable_drive_manager()->set_exporting_finished(true);
}else */ }else
//if (exporting_status == ExportingStatus::EXPORTING_TO_LOCAL && !has_error) if (exporting_status == ExportingStatus::EXPORTING_TO_LOCAL && !has_error)
// notification_manager->push_exporting_finished_notification(last_output_path, last_output_dir_path, false); notification_manager->push_exporting_finished_notification(last_output_path, last_output_dir_path, false);
} }
exporting_status = ExportingStatus::NOT_EXPORTING; exporting_status = ExportingStatus::NOT_EXPORTING;
@ -8172,16 +8170,16 @@ void Plater::export_gcode(bool prefer_removable)
} }
default_output_file = fs::path(Slic3r::fold_utf8_to_ascii(default_output_file.string())); default_output_file = fs::path(Slic3r::fold_utf8_to_ascii(default_output_file.string()));
AppConfig &appconfig = *wxGetApp().app_config; AppConfig &appconfig = *wxGetApp().app_config;
//RemovableDriveManager &removable_drive_manager = *wxGetApp().removable_drive_manager(); RemovableDriveManager &removable_drive_manager = *wxGetApp().removable_drive_manager();
// Get a last save path, either to removable media or to an internal media. // Get a last save path, either to removable media or to an internal media.
std::string start_dir = appconfig.get_last_output_dir(default_output_file.parent_path().string(), prefer_removable); std::string start_dir = appconfig.get_last_output_dir(default_output_file.parent_path().string(), prefer_removable);
/*if (prefer_removable) { if (prefer_removable) {
// Returns a path to a removable media if it exists, prefering start_dir. Update the internal removable drives database. // Returns a path to a removable media if it exists, prefering start_dir. Update the internal removable drives database.
start_dir = removable_drive_manager.get_removable_drive_path(start_dir); start_dir = removable_drive_manager.get_removable_drive_path(start_dir);
if (start_dir.empty()) if (start_dir.empty())
// Direct user to the last internal media. // Direct user to the last internal media.
start_dir = appconfig.get_last_output_dir(default_output_file.parent_path().string(), false); start_dir = appconfig.get_last_output_dir(default_output_file.parent_path().string(), false);
}*/ }
fs::path output_path; fs::path output_path;
{ {
@ -8209,8 +8207,8 @@ void Plater::export_gcode(bool prefer_removable)
} }
if (! output_path.empty()) { if (! output_path.empty()) {
//bool path_on_removable_media = removable_drive_manager.set_and_verify_last_save_path(output_path.string()); bool path_on_removable_media = removable_drive_manager.set_and_verify_last_save_path(output_path.string());
bool path_on_removable_media = false; //bool path_on_removable_media = false;
p->notification_manager->new_export_began(path_on_removable_media); p->notification_manager->new_export_began(path_on_removable_media);
p->exporting_status = path_on_removable_media ? ExportingStatus::EXPORTING_TO_REMOVABLE : ExportingStatus::EXPORTING_TO_LOCAL; p->exporting_status = path_on_removable_media ? ExportingStatus::EXPORTING_TO_REMOVABLE : ExportingStatus::EXPORTING_TO_LOCAL;
p->last_output_path = output_path.string(); p->last_output_path = output_path.string();
@ -8279,13 +8277,20 @@ void Plater::export_gcode_3mf()
p->notification_manager->new_export_began(path_on_removable_media); p->notification_manager->new_export_began(path_on_removable_media);
p->exporting_status = path_on_removable_media ? ExportingStatus::EXPORTING_TO_REMOVABLE : ExportingStatus::EXPORTING_TO_LOCAL; p->exporting_status = path_on_removable_media ? ExportingStatus::EXPORTING_TO_REMOVABLE : ExportingStatus::EXPORTING_TO_LOCAL;
//BBS do not save last output path //BBS do not save last output path
//p->last_output_path = output_path.string(); p->last_output_path = output_path.string();
p->last_output_dir_path = output_path.parent_path().string(); p->last_output_dir_path = output_path.parent_path().string();
int curr_plate_idx = get_partplate_list().get_curr_plate_index(); int curr_plate_idx = get_partplate_list().get_curr_plate_index();
export_3mf(output_path, SaveStrategy::Silence | SaveStrategy::SplitModel | SaveStrategy::WithGcode | SaveStrategy::SkipModel, curr_plate_idx); // BBS: silence export_3mf(output_path, SaveStrategy::Silence | SaveStrategy::SplitModel | SaveStrategy::WithGcode | SaveStrategy::SkipModel, curr_plate_idx); // BBS: silence
// update lost output dir
RemovableDriveManager& removable_drive_manager = *wxGetApp().removable_drive_manager();
bool on_removable = removable_drive_manager.is_path_on_removable_drive(p->last_output_dir_path);
// update last output dir
appconfig.update_last_output_dir(output_path.parent_path().string(), false); appconfig.update_last_output_dir(output_path.parent_path().string(), false);
p->notification_manager->push_exporting_finished_notification(output_path.string(), p->last_output_dir_path, false); p->notification_manager->push_exporting_finished_notification(output_path.string(), p->last_output_dir_path, on_removable);
} }
} }
@ -8925,11 +8930,12 @@ void Plater::print_job_finished(wxCommandEvent &evt)
} }
// Called when the Eject button is pressed. // Called when the Eject button is pressed.
/*void Plater::eject_drive() void Plater::eject_drive()
{ {
wxBusyCursor wait; wxBusyCursor wait;
wxGetApp().removable_drive_manager()->set_and_verify_last_save_path(p->last_output_dir_path);
wxGetApp().removable_drive_manager()->eject_drive(); wxGetApp().removable_drive_manager()->eject_drive();
}*/ }
void Plater::take_snapshot(const std::string &snapshot_name) { p->take_snapshot(snapshot_name); } void Plater::take_snapshot(const std::string &snapshot_name) { p->take_snapshot(snapshot_name); }
//void Plater::take_snapshot(const wxString &snapshot_name) { p->take_snapshot(snapshot_name); } //void Plater::take_snapshot(const wxString &snapshot_name) { p->take_snapshot(snapshot_name); }

View file

@ -332,7 +332,7 @@ public:
int export_config_3mf(int plate_idx = -1, Export3mfProgressFn proFn = nullptr); int export_config_3mf(int plate_idx = -1, Export3mfProgressFn proFn = nullptr);
//BBS jump to nonitor after print job finished //BBS jump to nonitor after print job finished
void print_job_finished(wxCommandEvent &evt); void print_job_finished(wxCommandEvent &evt);
//void eject_drive(); void eject_drive();
void take_snapshot(const std::string &snapshot_name); void take_snapshot(const std::string &snapshot_name);
//void take_snapshot(const wxString &snapshot_name); //void take_snapshot(const wxString &snapshot_name);

View file

@ -442,7 +442,14 @@ bool RemovableDriveManager::set_and_verify_last_save_path(const std::string &pat
#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS #ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
this->update(); this->update();
#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS #endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
#ifdef __APPLE__
m_last_save_path = path;
#else
m_last_save_path = this->get_removable_drive_from_path(path); m_last_save_path = this->get_removable_drive_from_path(path);
#endif
m_exporting_finished = false; m_exporting_finished = false;
return ! m_last_save_path.empty(); return ! m_last_save_path.empty();
} }

View file

@ -49,7 +49,7 @@ public:
RemovableDriveManager() = default; RemovableDriveManager() = default;
RemovableDriveManager(RemovableDriveManager const&) = delete; RemovableDriveManager(RemovableDriveManager const&) = delete;
void operator=(RemovableDriveManager const&) = delete; void operator=(RemovableDriveManager const&) = delete;
~RemovableDriveManager() { assert(! m_initialized); } ~RemovableDriveManager() { /*assert(! m_initialized);*/ }
// Start the background thread and register this window as a target for update events. // Start the background thread and register this window as a target for update events.
// Register for OSX notifications. // Register for OSX notifications.