diff --git a/resources/web/qidi/css/dark.css b/resources/web/qidi/css/dark.css
new file mode 100644
index 0000000..a5f041e
--- /dev/null
+++ b/resources/web/qidi/css/dark.css
@@ -0,0 +1,25 @@
+body {
+ background-color:#4c4c54;
+ font-family: Arial, sans-serif;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
+ margin: 0;
+}
+
+.container {
+ text-align: center;
+ padding: 30px;
+ border-radius: 10px;
+ background-color: #272727;
+ box-shadow: 0 4px 6px rgba(39, 39, 39, 0.1);
+}
+
+h1 {
+ color: #ffffff;
+}
+
+p {
+ color: #ffffff;
+}
\ No newline at end of file
diff --git a/resources/web/qidi/css/home.css b/resources/web/qidi/css/home.css
new file mode 100644
index 0000000..3f4cc4e
--- /dev/null
+++ b/resources/web/qidi/css/home.css
@@ -0,0 +1,18 @@
+body
+{
+ background-color:#eeeeee;
+ font-family: Arial, sans-serif;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
+ margin: 0;
+}
+
+.container {
+ text-align: center;
+ padding: 30px;
+ border-radius: 10px;
+ background-color: #ffffff;
+ box-shadow: 0 4px 6px rgba(39, 39, 39, 0.1);
+}
\ No newline at end of file
diff --git a/resources/web/qidi/missing_connection.html b/resources/web/qidi/missing_connection.html
new file mode 100644
index 0000000..a66ea45
--- /dev/null
+++ b/resources/web/qidi/missing_connection.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+Printer Connection Required
+
+
+
+
+
+
+
+
+
+
+
Printer Connection
+
Please set up your printer connection to view the device.
+

+
+
+
diff --git a/resources/web/qidi/setup_connection.gif b/resources/web/qidi/setup_connection.gif
new file mode 100644
index 0000000..3e28ac8
Binary files /dev/null and b/resources/web/qidi/setup_connection.gif differ
diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index d0db2aa..7873d90 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -18,6 +18,8 @@ set(SLIC3R_GUI_SOURCES
GUI/BitmapCache.hpp
GUI/Widgets/StateColor.cpp
GUI/Widgets/StateColor.hpp
+ GUI/Widgets/WebView.cpp
+ GUI/Widgets/WebView.hpp
GUI/ConfigSnapshotDialog.cpp
GUI/ConfigSnapshotDialog.hpp
GUI/3DScene.cpp
@@ -173,6 +175,8 @@ set(SLIC3R_GUI_SOURCES
Config/Snapshot.hpp
GUI/PrinterWebView.cpp
GUI/PrinterWebView.hpp
+ GUI/GuideWebView.cpp
+ GUI/GuideWebView.hpp
Config/Version.cpp
Config/Version.hpp
Utils/ASCIIFolding.cpp
diff --git a/src/slic3r/GUI/GuideWebView.cpp b/src/slic3r/GUI/GuideWebView.cpp
new file mode 100644
index 0000000..24e3f2b
--- /dev/null
+++ b/src/slic3r/GUI/GuideWebView.cpp
@@ -0,0 +1,88 @@
+#include "GuideWebView.hpp"
+
+#include "I18N.hpp"
+#include "slic3r/GUI/wxExtensions.hpp"
+#include "slic3r/GUI/GUI_App.hpp"
+#include "slic3r/GUI/MainFrame.hpp"
+#include "libslic3r_version.h"
+
+#include
+#include
+#include
+
+#include
+
+namespace pt = boost::property_tree;
+
+namespace Slic3r {
+namespace GUI {
+
+GuideWebView::GuideWebView(wxWindow *parent)
+ : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize)
+ {
+
+ wxBoxSizer* topsizer = new wxBoxSizer(wxVERTICAL);
+ // Create the webview
+ m_browser = WebView::CreateWebView(this, "");
+ if (m_browser == nullptr) {
+ wxLogError("Could not init m_browser");
+ return;
+ }
+
+ SetSizer(topsizer);
+
+ topsizer->Add(m_browser, wxSizerFlags().Expand().Proportion(1));
+
+ //Log backend information
+ //if (wxGetApp().get_mode() == comDevelop) {
+ //wxLogMessage(wxWebView::GetBackendVersionInfo().ToString());
+ //wxLogMessage("Backend: %s Version: %s", m_browser->GetClassInfo()->GetClassName(),
+ // wxWebView::GetBackendVersionInfo().ToString());
+ //wxLogMessage("User Agent: %s", m_browser->GetUserAgent());
+ //}
+
+ //Zoom
+ m_zoomFactor = 100;
+
+ //Connect the idle events
+ Bind(wxEVT_CLOSE_WINDOW, &GuideWebView::OnClose, this);
+
+ }
+
+GuideWebView::~GuideWebView()
+{
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Start";
+ SetEvtHandlerEnabled(false);
+
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " End";
+}
+
+
+void GuideWebView::load_url(wxString& url)
+{
+// this->Show();
+// this->Raise();
+ if (m_browser == nullptr)
+ return;
+ m_browser->LoadURL(url);
+ //m_browser->SetFocus();
+ UpdateState();
+}
+/**
+ * Method that retrieves the current state from the web control and updates the
+ * GUI the reflect this current state.
+ */
+void GuideWebView::UpdateState() {
+ // SetTitle(m_browser->GetCurrentTitle());
+
+}
+
+void GuideWebView::OnClose(wxCloseEvent& evt)
+{
+ this->Hide();
+}
+
+
+
+} // GUI
+} // Slic3r
diff --git a/src/slic3r/GUI/GuideWebView.hpp b/src/slic3r/GUI/GuideWebView.hpp
new file mode 100644
index 0000000..d233051
--- /dev/null
+++ b/src/slic3r/GUI/GuideWebView.hpp
@@ -0,0 +1,53 @@
+#ifndef slic3r_GuideWebView_hpp_
+#define slic3r_GuideWebView_hpp_
+
+
+#include "wx/artprov.h"
+#include "wx/cmdline.h"
+#include "wx/notifmsg.h"
+#include "wx/settings.h"
+#include "wx/webview.h"
+
+#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
+#include
+#include "wx/textctrl.h"
+#include
+
+
+namespace Slic3r {
+namespace GUI {
+
+
+class GuideWebView : public wxPanel {
+public:
+ GuideWebView(wxWindow *parent);
+ virtual ~GuideWebView();
+
+ void load_url(wxString& url);
+ void UpdateState();
+ void OnClose(wxCloseEvent& evt);
+
+private:
+
+ wxWebView* m_browser;
+ long m_zoomFactor;
+
+ // DECLARE_EVENT_TABLE()
+};
+
+} // GUI
+} // Slic3r
+
+#endif /* slic3r_Tab_hpp_ */