mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-06 05:37:04 +08:00
Implemented GUI::load_presets to check file existence.
This commit is contained in:
parent
9812e6a81c
commit
292bfdcfb2
@ -1,6 +1,7 @@
|
||||
#include <wx/wxprec.h>
|
||||
#ifndef WX_PRECOMP
|
||||
#include <wx/wx.h>
|
||||
#include <wx/dir.h>
|
||||
#endif
|
||||
#include <wx/display.h>
|
||||
#include <wx/filefn.h>
|
||||
@ -29,9 +30,13 @@ bool App::OnInit()
|
||||
wxString enc_datadir = encode_path(datadir);
|
||||
|
||||
const wxString& slic3r_ini {datadir + "/slic3r.ini"};
|
||||
const wxString& print_ini {datadir + "/print"};
|
||||
const wxString& printer_ini {datadir + "/printer"};
|
||||
const wxString& material_ini {datadir + "/filament"};
|
||||
this->preset_ini[static_cast<int>(preset_t::Print)] = {datadir + "/print"};
|
||||
this->preset_ini[static_cast<int>(preset_t::Printer)] = {datadir + "/printer"};
|
||||
this->preset_ini[static_cast<int>(preset_t::Material)] = {datadir + "/filament"};
|
||||
const wxString& print_ini = this->preset_ini[static_cast<int>(preset_t::Print)];
|
||||
const wxString& printer_ini = this->preset_ini[static_cast<int>(preset_t::Printer)];
|
||||
const wxString& material_ini = this->preset_ini[static_cast<int>(preset_t::Material)];
|
||||
|
||||
|
||||
// if we don't have a datadir or a slic3r.ini, prompt for wizard.
|
||||
bool run_wizard = (wxDirExists(datadir) && wxFileExists(slic3r_ini));
|
||||
@ -162,6 +167,31 @@ void App::restore_window_pos(wxTopLevelWindow* window, const wxString& name ) {
|
||||
}
|
||||
|
||||
void App::load_presets() {
|
||||
for (size_t group = 0; group < preset_types; ++group) {
|
||||
Presets& preset_list = this->presets.at(group);
|
||||
wxString& ini = this->preset_ini.at(group);
|
||||
// keep external or dirty presets
|
||||
preset_list.erase(std::remove_if(preset_list.begin(), preset_list.end(),
|
||||
[](const Preset& t) -> bool { return (t.external && t.file_exists()) || t.dirty(); }),
|
||||
preset_list.end());
|
||||
if (wxDirExists(ini)) {
|
||||
auto sink { wxDirTraverserSimple() };
|
||||
sink.file_cb = ([&preset_list, group] (const wxString& filename) {
|
||||
if (std::find_if(preset_list.begin(), preset_list.end(),
|
||||
[filename] (const Preset& t)
|
||||
{ return filename.ToStdString() == t.name; }) != preset_list.end()) return;
|
||||
wxString path, name, ext;
|
||||
wxFileName::SplitPath(filename, &path, &name, &ext);
|
||||
preset_list.push_back(Preset(path.ToStdString(), (name + ext).ToStdString(), static_cast<preset_t>(group)));
|
||||
});
|
||||
|
||||
wxDir dir(ini);
|
||||
dir.Traverse(sink, "*.ini");
|
||||
|
||||
Slic3r::Log::debug("file") << "found " << preset_list.size() << " files " << "\n";
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
for my $group (qw(printer filament print)) {
|
||||
my $presets = $self->{presets}{$group};
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <wx/wxprec.h>
|
||||
#ifndef WX_PRECOMP
|
||||
#include <wx/wx.h>
|
||||
#include <wx/dir.h>
|
||||
#endif
|
||||
|
||||
#include <wx/settings.h>
|
||||
@ -157,6 +158,24 @@ extern std::unique_ptr<Settings> ui_settings;
|
||||
|
||||
wxString trim_zeroes(wxString in);
|
||||
|
||||
/// Extensible directory traversal sink, cribbed from wxwidgets docs
|
||||
class wxDirTraverserSimple : public wxDirTraverser
|
||||
{
|
||||
public:
|
||||
std::function<void(const wxString&)> file_cb {nullptr};
|
||||
std::function<void(const wxString&)> dir_cb {nullptr};
|
||||
wxDirTraverserSimple() { }
|
||||
virtual wxDirTraverseResult OnFile(const wxString& filename)
|
||||
{
|
||||
if (this->file_cb != nullptr) this->file_cb(filename);
|
||||
return wxDIR_CONTINUE;
|
||||
}
|
||||
virtual wxDirTraverseResult OnDir(const wxString& dirname)
|
||||
{
|
||||
if (this->dir_cb != nullptr) this->file_cb(dirname);
|
||||
return wxDIR_CONTINUE;
|
||||
}
|
||||
};
|
||||
|
||||
}} // namespace Slic3r::GUI
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user