diff --git a/src/slic3r/GUI/ExtraRenderers.cpp b/src/slic3r/GUI/ExtraRenderers.cpp index 4afcdd7e10..c0c4661da5 100644 --- a/src/slic3r/GUI/ExtraRenderers.cpp +++ b/src/slic3r/GUI/ExtraRenderers.cpp @@ -240,7 +240,7 @@ bool BitmapTextRenderer::GetValueFromEditorCtrl(wxWindow* ctrl, wxVariant& value if (!text_editor || text_editor->GetValue().IsEmpty()) return false; - m_was_unusable_symbol = Slic3r::GUI::Plater::has_illegal_filename_characters(text_editor->GetValue()); + m_was_unusable_symbol = Slic3r::GUI::has_illegal_characters(text_editor->GetValue()); if (m_was_unusable_symbol) return false; diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index bc64d28084..9263e0505a 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -481,4 +481,26 @@ bool create_process(const boost::filesystem::path& path, const std::wstring& cmd } #endif //_WIN32 + +bool has_illegal_characters(const wxString& wxs_name) +{ + const std::string name = into_u8(wxs_name); + return has_illegal_characters(name); +} + +bool has_illegal_characters(const std::string& name) +{ + for (size_t i = 0; i < std::strlen(illegal_characters); i++) + if (name.find_first_of(illegal_characters[i]) != std::string::npos) + return true; + + return false; +} + +void show_illegal_characters_warning(wxWindow* parent) +{ + show_error(parent, format_wxstr("%1%\n%2% %3%", _L("The provided name is not valid;"), + _L("the following characters are not allowed:"), illegal_characters)); +} + } } // namespaces GUI / Slic3r diff --git a/src/slic3r/GUI/GUI.hpp b/src/slic3r/GUI/GUI.hpp index 70abef3085..81fae05b18 100644 --- a/src/slic3r/GUI/GUI.hpp +++ b/src/slic3r/GUI/GUI.hpp @@ -29,6 +29,8 @@ class Print; namespace GUI { +static constexpr char illegal_characters[] = "<>:/\\|?*\""; + void disable_screensaver(); void enable_screensaver(); bool debugged(); @@ -102,6 +104,10 @@ void desktop_execute_get_result(wxString command, wxArrayString& output); bool create_process(const boost::filesystem::path& path, const std::wstring& cmd_opt, std::string& error_msg); #endif //_WIN32 +bool has_illegal_characters(const wxString& name); +bool has_illegal_characters(const std::string& name); +void show_illegal_characters_warning(wxWindow* parent); + } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index db5b666ed6..e61d9f454d 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -4553,8 +4553,8 @@ void ObjectList::rename_item() if (new_name.IsEmpty()) return; - if (Plater::has_illegal_filename_characters(new_name)) { - Plater::show_illegal_characters_warning(this); + if (has_illegal_characters(new_name)) { + show_illegal_characters_warning(this); return; } @@ -4780,7 +4780,7 @@ void ObjectList::OnEditingDone(wxDataViewEvent &event) const auto renderer = dynamic_cast(GetColumn(colName)->GetRenderer()); if (renderer->WasCanceled()) - wxTheApp->CallAfter([this]{ Plater::show_illegal_characters_warning(this); }); + wxTheApp->CallAfter([this]{ show_illegal_characters_warning(this); }); #ifdef __WXMSW__ // Workaround for entering the column editing mode on Windows. Simulate keyboard enter when another column of the active line is selected. diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 931475d771..bdd24944db 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -150,29 +150,6 @@ wxDEFINE_EVENT(EVT_SLICING_COMPLETED, wxCommandEvent); wxDEFINE_EVENT(EVT_PROCESS_COMPLETED, SlicingProcessCompletedEvent); wxDEFINE_EVENT(EVT_EXPORT_BEGAN, wxCommandEvent); - -bool Plater::has_illegal_filename_characters(const wxString& wxs_name) -{ - std::string name = into_u8(wxs_name); - return has_illegal_filename_characters(name); -} - -bool Plater::has_illegal_filename_characters(const std::string& name) -{ - const char* illegal_characters = "<>:/\\|?*\""; - for (size_t i = 0; i < std::strlen(illegal_characters); i++) - if (name.find_first_of(illegal_characters[i]) != std::string::npos) - return true; - - return false; -} - -void Plater::show_illegal_characters_warning(wxWindow* parent) -{ - show_error(parent, _L("The provided name is not valid;") + "\n" + - _L("the following characters are not allowed:") + " <>:/\\|?*\""); -} - // Plater::DropTarget class PlaterDropTarget : public wxFileDropTarget @@ -5233,7 +5210,7 @@ void Plater::export_gcode(bool prefer_removable) auto check_for_error = [this](const boost::filesystem::path& path, wxString& err_out) -> bool { const std::string filename = path.filename().string(); const std::string ext = boost::algorithm::to_lower_copy(path.extension().string()); - if (has_illegal_filename_characters(filename)) { + if (has_illegal_characters(filename)) { err_out = _L("The provided file name is not valid.") + "\n" + _L("The following characters are not allowed by a FAT file system:") + " <>:/\\|?*\""; return true; diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index f894cd2fdc..b772d9f786 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -418,10 +418,6 @@ public: wxMenu* layer_menu(); wxMenu* multi_selection_menu(); - static bool has_illegal_filename_characters(const wxString& name); - static bool has_illegal_filename_characters(const std::string& name); - static void show_illegal_characters_warning(wxWindow* parent); - private: void reslice_until_step_inner(int step, const ModelObject &object, bool postpone_error_messages);