mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-16 21:42:43 +00:00
Each vendor's system presets are serialized into a <vendor>.opc cache that the app loads instead of parsing the profile JSONs, falling back to the parse whenever no cache covers what is installed. Shipped builds carry the caches instead of the raw profiles, installing and updating treat a vendor's cache as its installation, and the setup wizard loads through the same path. Per-platform scripts and CI generate the caches at build time; tests and a design doc cover the format and its validation.
166 lines
4.5 KiB
C++
166 lines
4.5 KiB
C++
#ifndef slic3r_WebGuideDialog_hpp_
|
|
#define slic3r_WebGuideDialog_hpp_
|
|
|
|
#include "wx/artprov.h"
|
|
#include "wx/cmdline.h"
|
|
#include "wx/notifmsg.h"
|
|
#include "wx/settings.h"
|
|
#include "wx/webview.h"
|
|
|
|
#if wxUSE_WEBVIEW_IE
|
|
#include "wx/msw/webview_ie.h"
|
|
#endif
|
|
#if wxUSE_WEBVIEW_EDGE
|
|
#include "wx/msw/webview_edge.h"
|
|
#endif
|
|
|
|
#include "wx/webviewarchivehandler.h"
|
|
#include "wx/webviewfshandler.h"
|
|
#include "wx/numdlg.h"
|
|
#include "wx/infobar.h"
|
|
#include "wx/filesys.h"
|
|
#include "wx/fs_arc.h"
|
|
#include "wx/fs_mem.h"
|
|
#include "wx/stdpaths.h"
|
|
#include <wx/frame.h>
|
|
#include <wx/tbarbase.h>
|
|
#include "wx/textctrl.h"
|
|
|
|
#include "GUI_App.hpp"
|
|
#include "libslic3r/PresetBundle.hpp"
|
|
#include "slic3r/Utils/PresetUpdater.hpp"
|
|
|
|
#include <atomic>
|
|
#include <memory>
|
|
#include <unordered_map>
|
|
|
|
#include <nlohmann/json.hpp>
|
|
|
|
#include <boost/thread.hpp>
|
|
|
|
namespace Slic3r { namespace GUI {
|
|
|
|
class GuideFrame : public DPIDialog
|
|
{
|
|
public:
|
|
GuideFrame(GUI_App *pGUI, long style = wxCAPTION | wxCLOSE_BOX | wxSYSTEM_MENU);
|
|
virtual ~GuideFrame();
|
|
|
|
enum GuidePage {
|
|
BBL_WELCOME,
|
|
BBL_REGION,
|
|
BBL_MODELS,
|
|
BBL_FILAMENTS,
|
|
BBL_FILAMENT_ONLY,
|
|
BBL_MODELS_ONLY
|
|
}m_page;
|
|
|
|
//Web Function
|
|
void load_url(wxString &url);
|
|
wxString SetStartPage(GuidePage startpage=BBL_WELCOME, bool load = true);
|
|
|
|
void UpdateState();
|
|
void OnIdle(wxIdleEvent &evt);
|
|
// void OnClose(wxCloseEvent &evt);
|
|
|
|
void OnNavigationRequest(wxWebViewEvent &evt);
|
|
void OnNavigationComplete(wxWebViewEvent &evt);
|
|
void OnDocumentLoaded(wxWebViewEvent &evt);
|
|
void OnNewWindow(wxWebViewEvent &evt);
|
|
void OnError(wxWebViewEvent &evt);
|
|
void OnTitleChanged(wxWebViewEvent &evt);
|
|
void OnFullScreenChanged(wxWebViewEvent &evt);
|
|
void OnScriptMessage(wxWebViewEvent &evt);
|
|
|
|
void OnScriptResponseMessage(wxCommandEvent &evt);
|
|
void RunScript(const wxString &javascript);
|
|
|
|
//Logic
|
|
bool IsFirstUse();
|
|
|
|
//Model - Machine - Filaments
|
|
int LoadProfileData();
|
|
int SaveProfileData();
|
|
int LoadProfileFamily(std::string strVendor, std::string strFilePath);
|
|
void init_guide_paths();
|
|
void on_profile_loaded();
|
|
bool BuildProfileJson(const PresetBundle& bundle, bool require_all_resource_vendors);
|
|
bool BuildProfileDataFromPresetBundle();
|
|
bool BuildProfileDataFromVendors();
|
|
int SaveProfile();
|
|
int GetFilamentInfo( std::string VendorDirectory,json & pFilaList, std::string filepath, std::string &sVendor, std::string &sType);
|
|
|
|
|
|
bool apply_config(AppConfig *app_config, PresetBundle *preset_bundle, const PresetUpdater *updater, bool& apply_keeped_changes);
|
|
bool run();
|
|
|
|
void StrReplace(std::string &strBase, std::string strSrc, std::string strDes);
|
|
std::string w2s(wxString sSrc);
|
|
void GetStardardFilePath(std::string &FilePath);
|
|
bool LoadFile(std::string jPath, std::string & sContent);
|
|
|
|
// install plugin
|
|
int DownloadPlugin();
|
|
int InstallPlugin();
|
|
int ShowPluginStatus(int status, int percent, bool &cancel);
|
|
|
|
void on_dpi_changed(const wxRect &suggested_rect) {}
|
|
|
|
private:
|
|
GUI_App *m_MainPtr;
|
|
AppConfig m_appconfig_new;
|
|
|
|
wxWebView *m_browser;
|
|
wxButton * m_TestBtn;
|
|
|
|
wxString m_SectionName;
|
|
|
|
bool orca_bundle_rsrc;
|
|
boost::filesystem::path vendor_dir;
|
|
boost::filesystem::path rsrc_vendor_dir;
|
|
|
|
//First Load
|
|
bool bFirstComplete{false};
|
|
std::atomic<bool> m_destroy{false};
|
|
// Shared cancel token captured by CallAfter lambdas so they don't touch
|
|
// `this` after the destructor has run and the object is freed.
|
|
std::shared_ptr<std::atomic<bool>> m_cancel_token{std::make_shared<std::atomic<bool>>(false)};
|
|
std::unique_ptr<boost::thread> m_load_task;
|
|
|
|
// User Config
|
|
bool PrivacyUse;
|
|
bool StealthMode;
|
|
std::string m_Region;
|
|
|
|
bool InstallNetplugin;
|
|
bool network_plugin_ready {false};
|
|
|
|
json m_ProfileJson;
|
|
json m_OrcaFilaList;
|
|
std::string m_OrcaFilaLibPath;
|
|
|
|
#if wxUSE_WEBVIEW_IE
|
|
wxMenuItem *m_script_object_el;
|
|
wxMenuItem *m_script_date_el;
|
|
wxMenuItem *m_script_array_el;
|
|
#endif
|
|
// Last executed JavaScript snippet, for convenience.
|
|
wxString m_javascript;
|
|
wxString m_response_js;
|
|
|
|
wxString m_bbl_user_agent;
|
|
std::string m_editing_filament_id;
|
|
|
|
struct CachedFilamentInfo
|
|
{
|
|
int status{-1};
|
|
std::string vendor;
|
|
std::string type;
|
|
};
|
|
std::unordered_map<std::string, CachedFilamentInfo> filament_info_cache;
|
|
};
|
|
|
|
}} // namespace Slic3r::GUI
|
|
|
|
#endif /* slic3r_Tab_hpp_ */
|