Files
OrcaSlicer/src/slic3r/GUI/WebGuideDialog.hpp
T
HanifKoh 4895bc03b4 Remove Unused Project Includes and Forward-Declare Where a Type Is Only Referenced (#16099)
* Remove Unused Project Includes and Forward-Declare Where a Type Is Only Referenced

Generated with include-what-you-use and applied conservatively. Only OrcaSlicer's own headers, the ones under src/ and tests/, are removed or forward-declared; standard-library and third-party includes are left alone. An include is removed only when both the Release and the Debug configuration leave it unused, never from inside a conditional block, and never from a file with platform-specific blocks, which only gain includes. Files whose only use of a header sits behind a feature or debug macro (libvgcode's OpenGL ES and marker code, the ARACHNE/TESTS_EXPORT_SVGS debug output) keep their includes.

clonable_ptr.hpp gains #pragma once; it had no include guard and was only safe while Config.hpp was its sole includer.

* Remove Unused Project Includes From Files With Platform-Specific Code

A Linux include-what-you-use run cannot see the code inside _WIN32, __APPLE__ or __linux__ blocks, so its verdict is only taken where nothing the removed header declares, directly or through what it includes, is named inside those blocks. Removals also have to hold in both the Release and Debug configuration and never touch a line inside a conditional block.

* Restore the libslic3r Precompiled Header and Direct Includes Lost in the Platform Pass

The platform-file pass treated pchheader.hpp as an ordinary header and
emptied it, and left GUI_Preview.hpp and 14 other files relying on
headers they no longer reached directly.

* Restore MainFrame.hpp in ParamsDialog.cpp for the Windows-Only Reparent Call

* Include Headers That Files Reached Through Ones the Cleanup Removed

* Drop Includes Duplicated by the Cleanup or by Main's Own Additions

* Leave PreciseSeam.cpp as Main Has It After the Precise Seam Rework
2026-10-05 16:47:17 +08:00

187 lines
5.1 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"
#include <wx/setup.h>
#include "slic3r/GUI/GUI_Utils.hpp"
#include <wx/toplevel.h>
#include <wx/string.h>
#include <wx/event.h>
#include <string>
#include <wx/gdicmn.h>
#include <boost/filesystem/path.hpp>
#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 <atomic>
#include <memory>
#include <unordered_map>
#include <unordered_set>
#include <nlohmann/json.hpp>
#include <boost/thread.hpp>
#include "libslic3r/AppConfig.hpp"
class wxCommandEvent;
class wxIdleEvent;
class wxWebView;
class wxWebViewEvent;
namespace Slic3r { class PresetBundle; }
namespace Slic3r { class PresetUpdater; }
namespace Slic3r::GUI { class GUI_App; }
namespace boost { class thread; }
namespace Slic3r { namespace GUI {
class GuideFrame : public DPIDialog
{
public:
using json = nlohmann::json;
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();
void reset_profile_json();
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:
int GetFilamentInfo(const std::string& VendorDirectory, json& pFilaList, const std::string& filepath,
std::string& sVendor, std::string& sType, std::unordered_set<std::string>& visiting);
GUI_App *m_MainPtr;
AppConfig m_appconfig_new;
wxWebView *m_browser;
wxString m_SectionName;
bool orca_bundle_rsrc;
boost::filesystem::path vendor_dir;
boost::filesystem::path rsrc_vendor_dir;
//First Load
bool bFirstComplete{false};
// Set once in the destructor. Read through `this` by the loading thread
// (joined before `this` dies) and captured as the shared_ptr by CallAfter
// lambdas so they don't touch `this` after 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_ */