Tech ENABLE_DRAG_AND_DROP_FIX set as default

This commit is contained in:
enricoturri1966 2021-02-17 14:52:58 +01:00
parent 349ce7fd50
commit 77be228b75
4 changed files with 0 additions and 200 deletions

View file

@ -77,7 +77,6 @@
//===================
#define ENABLE_2_3_0_BETA1 1
#define ENABLE_DRAG_AND_DROP_FIX (1 && ENABLE_2_3_0_BETA1)
#define ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN (1 && ENABLE_2_3_0_BETA1)

View file

@ -1933,15 +1933,11 @@ void GUI_App::MacOpenFiles(const wxArrayString &fileNames)
start_new_slicer(non_gcode_files, true);
} else {
if (! files.empty()) {
#if ENABLE_DRAG_AND_DROP_FIX
wxArrayString input_files;
for (size_t i = 0; i < non_gcode_files.size(); ++i) {
input_files.push_back(non_gcode_files[i]);
}
this->plater()->load_files(input_files);
#else
this->plater()->load_files(files, true, true);
#endif
}
for (const wxString &filename : gcode_files)
start_new_gcodeviewer(&filename);

View file

@ -1375,200 +1375,16 @@ public:
private:
Plater* m_plater;
#if !ENABLE_DRAG_AND_DROP_FIX
static const std::regex pattern_drop;
static const std::regex pattern_gcode_drop;
#endif // !ENABLE_DRAG_AND_DROP_FIX
};
#if !ENABLE_DRAG_AND_DROP_FIX
const std::regex PlaterDropTarget::pattern_drop(".*[.](stl|obj|amf|3mf|prusa)", std::regex::icase);
const std::regex PlaterDropTarget::pattern_gcode_drop(".*[.](gcode|g)", std::regex::icase);
enum class LoadType : unsigned char
{
Unknown,
OpenProject,
LoadGeometry,
LoadConfig
};
class ProjectDropDialog : public DPIDialog
{
wxRadioBox* m_action{ nullptr };
public:
ProjectDropDialog(const std::string& filename);
int get_action() const { return m_action->GetSelection() + 1; }
protected:
void on_dpi_changed(const wxRect& suggested_rect) override;
};
ProjectDropDialog::ProjectDropDialog(const std::string& filename)
: DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY,
from_u8((boost::format(_utf8(L("%s - Drop project file"))) % SLIC3R_APP_NAME).str()), wxDefaultPosition,
wxDefaultSize, wxDEFAULT_DIALOG_STYLE)
{
SetFont(wxGetApp().normal_font());
wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL);
const wxString choices[] = { _L("Open as project"),
_L("Import geometry only"),
_L("Import config only") };
main_sizer->Add(new wxStaticText(this, wxID_ANY,
_L("Select an action to apply to the file") + ": " + from_u8(filename)), 0, wxEXPAND | wxALL, 10);
m_action = new wxRadioBox(this, wxID_ANY, _L("Action"), wxDefaultPosition, wxDefaultSize,
WXSIZEOF(choices), choices, 0, wxRA_SPECIFY_ROWS);
int action = std::clamp(std::stoi(wxGetApp().app_config->get("drop_project_action")),
static_cast<int>(LoadType::OpenProject), static_cast<int>(LoadType::LoadConfig)) - 1;
m_action->SetSelection(action);
main_sizer->Add(m_action, 1, wxEXPAND | wxRIGHT | wxLEFT, 10);
wxBoxSizer* bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
wxCheckBox* check = new wxCheckBox(this, wxID_ANY, _L("Don't show again"));
check->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent& evt) {
wxGetApp().app_config->set("show_drop_project_dialog", evt.IsChecked() ? "0" : "1");
});
bottom_sizer->Add(check, 0, wxEXPAND | wxRIGHT, 5);
bottom_sizer->Add(CreateStdDialogButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND | wxLEFT, 5);
main_sizer->Add(bottom_sizer, 0, wxEXPAND | wxALL, 10);
SetSizer(main_sizer);
main_sizer->SetSizeHints(this);
}
void ProjectDropDialog::on_dpi_changed(const wxRect& suggested_rect)
{
const int em = em_unit();
SetMinSize(wxSize(65 * em, 30 * em));
Fit();
Refresh();
}
#endif // !ENABLE_DRAG_AND_DROP_FIX
bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &filenames)
{
#if !ENABLE_DRAG_AND_DROP_FIX
std::vector<fs::path> paths;
#endif // !ENABLE_DRAG_AND_DROP_FIX
#ifdef WIN32
// hides the system icon
this->MSWUpdateDragImageOnLeave();
#endif // WIN32
#if ENABLE_DRAG_AND_DROP_FIX
return (m_plater != nullptr) ? m_plater->load_files(filenames) : false;
#else
// gcode viewer section
if (wxGetApp().is_gcode_viewer()) {
for (const auto& filename : filenames) {
fs::path path(into_path(filename));
if (std::regex_match(path.string(), pattern_gcode_drop))
paths.push_back(std::move(path));
}
if (paths.size() > 1) {
wxMessageDialog(static_cast<wxWindow*>(m_plater), _L("You can open only one .gcode file at a time."),
wxString(SLIC3R_APP_NAME) + " - " + _L("Drag and drop G-code file"), wxCLOSE | wxICON_WARNING | wxCENTRE).ShowModal();
return false;
}
else if (paths.size() == 1) {
m_plater->load_gcode(from_path(paths.front()));
return true;
}
return false;
}
// editor section
for (const auto &filename : filenames) {
fs::path path(into_path(filename));
if (std::regex_match(path.string(), pattern_drop))
paths.push_back(std::move(path));
else if (std::regex_match(path.string(), pattern_gcode_drop))
start_new_gcodeviewer(&filename);
else
return false;
}
if (paths.empty())
// Likely all paths processed were gcodes, for which a G-code viewer instance has hopefully been started.
return false;
// searches for project files
for (std::vector<fs::path>::const_reverse_iterator it = paths.rbegin(); it != paths.rend(); ++it) {
std::string filename = (*it).filename().string();
if (boost::algorithm::iends_with(filename, ".3mf") || boost::algorithm::iends_with(filename, ".amf")) {
LoadType load_type = LoadType::Unknown;
if (!m_plater->model().objects.empty()) {
if (wxGetApp().app_config->get("show_drop_project_dialog") == "1") {
ProjectDropDialog dlg(filename);
if (dlg.ShowModal() == wxID_OK) {
int choice = dlg.get_action();
load_type = static_cast<LoadType>(choice);
wxGetApp().app_config->set("drop_project_action", std::to_string(choice));
}
}
else
load_type = static_cast<LoadType>(std::clamp(std::stoi(wxGetApp().app_config->get("drop_project_action")),
static_cast<int>(LoadType::OpenProject), static_cast<int>(LoadType::LoadConfig)));
}
else
load_type = LoadType::OpenProject;
if (load_type == LoadType::Unknown)
return false;
switch (load_type) {
case LoadType::OpenProject: {
m_plater->load_project(from_path(*it));
break;
}
case LoadType::LoadGeometry: {
Plater::TakeSnapshot snapshot(m_plater, _L("Import Object"));
std::vector<fs::path> in_paths;
in_paths.emplace_back(*it);
m_plater->load_files(in_paths, true, false);
break;
}
case LoadType::LoadConfig: {
std::vector<fs::path> in_paths;
in_paths.emplace_back(*it);
m_plater->load_files(in_paths, false, true);
break;
}
}
return true;
}
}
// other files
wxString snapshot_label;
assert(!paths.empty());
if (paths.size() == 1) {
snapshot_label = _L("Load File");
snapshot_label += ": ";
snapshot_label += wxString::FromUTF8(paths.front().filename().string().c_str());
}
else {
snapshot_label = _L("Load Files");
snapshot_label += ": ";
snapshot_label += wxString::FromUTF8(paths.front().filename().string().c_str());
for (size_t i = 1; i < paths.size(); ++i) {
snapshot_label += ", ";
snapshot_label += wxString::FromUTF8(paths[i].filename().string().c_str());
}
}
Plater::TakeSnapshot snapshot(m_plater, snapshot_label);
m_plater->load_files(paths);
return true;
#endif // ENABLE_DRAG_AND_DROP_FIX
}
// State to manage showing after export notifications and device ejecting
@ -2160,7 +1976,6 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
// Initialize the Undo / Redo stack with a first snapshot.
this->take_snapshot(_L("New Project"));
#if ENABLE_DRAG_AND_DROP_FIX
this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent& evt) {
BOOST_LOG_TRIVIAL(trace) << "Received load from other instance event.";
wxArrayString input_files;
@ -2170,12 +1985,6 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
wxGetApp().mainframe->Raise();
this->q->load_files(input_files);
});
#else
this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent &evt) {
BOOST_LOG_TRIVIAL(trace) << "Received load from other instance event.";
this->load_files(evt.data, true, true);
});
#endif // ENABLE_DRAG_AND_DROP_FIX
this->q->Bind(EVT_INSTANCE_GO_TO_FRONT, [this](InstanceGoToFrontEvent &) {
bring_instance_forward();
});
@ -4927,7 +4736,6 @@ std::vector<size_t> Plater::load_files(const std::vector<std::string>& input_fil
return p->load_files(paths, load_model, load_config, imperial_units);
}
#if ENABLE_DRAG_AND_DROP_FIX
enum class LoadType : unsigned char
{
Unknown,
@ -5107,7 +4915,6 @@ bool Plater::load_files(const wxArrayString& filenames)
return true;
}
#endif // ENABLE_DRAG_AND_DROP_FIX
void Plater::update() { p->update(); }

View file

@ -151,10 +151,8 @@ public:
std::vector<size_t> load_files(const std::vector<boost::filesystem::path>& input_files, bool load_model = true, bool load_config = true, bool imperial_units = false);
// To be called when providing a list of files to the GUI slic3r on command line.
std::vector<size_t> load_files(const std::vector<std::string>& input_files, bool load_model = true, bool load_config = true, bool imperial_units = false);
#if ENABLE_DRAG_AND_DROP_FIX
// to be called on drag and drop
bool load_files(const wxArrayString& filenames);
#endif // ENABLE_DRAG_AND_DROP_FIX
const wxString& get_last_loaded_gcode() const { return m_last_loaded_gcode; }