From 7ac909f87e2849f7a2ba595901692748bd748b54 Mon Sep 17 00:00:00 2001 From: butlerpd Date: Thu, 5 Jun 2025 01:09:48 +0000 Subject: [PATCH 1/6] First fix for PDF viewing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes were: qtgui/Utilities/DocViewWidget.py/DocViewWidow 234+ settings.setAttribute(web_view.settings().PluginsEnabled, True) 235+ settings.setAttribute(web_view.settings().PdfViewerEnabled, True) qtgui/MainWindow/GuiManager.py 1330 - webbrowser.open("https://www.sasview.org/docs/user/tutorial.html") 1330+ tutorialfile = “/user/tutorial.html” 1331 + self.showHelp(tutorialfilel) --- docs/sphinx-docs/source/user/working.rst | 2 ++ src/sas/qtgui/MainWindow/GuiManager.py | 3 ++- src/sas/qtgui/Utilities/DocViewWidget.py | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/sphinx-docs/source/user/working.rst b/docs/sphinx-docs/source/user/working.rst index 5ca192d3fc..09b77a0877 100644 --- a/docs/sphinx-docs/source/user/working.rst +++ b/docs/sphinx-docs/source/user/working.rst @@ -14,6 +14,8 @@ Working with SasView Example Data + Tutorials + Writing a Plugin Model Scripting Interface to Sasmodels diff --git a/src/sas/qtgui/MainWindow/GuiManager.py b/src/sas/qtgui/MainWindow/GuiManager.py index aada50d482..0bcc3012af 100644 --- a/src/sas/qtgui/MainWindow/GuiManager.py +++ b/src/sas/qtgui/MainWindow/GuiManager.py @@ -1327,7 +1327,8 @@ def actionTutorial(self): Open the page with tutorial PDF links """ - webbrowser.open("https://www.sasview.org/docs/user/tutorial.html") + tutorialfile = "/user/tutorial.html" + self.showHelp(tutorialfile) def actionAcknowledge(self): """ diff --git a/src/sas/qtgui/Utilities/DocViewWidget.py b/src/sas/qtgui/Utilities/DocViewWidget.py index f1424ac142..782f21f74b 100644 --- a/src/sas/qtgui/Utilities/DocViewWidget.py +++ b/src/sas/qtgui/Utilities/DocViewWidget.py @@ -230,6 +230,8 @@ def loadHtml(self): # Allows QtWebEngine to access MathJax and code highlighting APIs settings.setAttribute(QtWebEngineCore.QWebEngineSettings.LocalContentCanAccessRemoteUrls, True) settings.setAttribute(QtWebEngineCore.QWebEngineSettings.LocalContentCanAccessFileUrls, True) + settings.setAttribute(QtWebEngineCore.QWebEngineSettings.WebAttribute.PluginsEnabled, True) + settings.setAttribute(QtWebEngineCore.QWebEngineSettings.WebAttribute.PdfViewerEnabled, True) self.webEngineViewer.load(url) # Show widget From 806e729bec01368c00afee90c749e8b28b67ff11 Mon Sep 17 00:00:00 2001 From: butlerpd Date: Fri, 6 Jun 2025 01:59:55 +0000 Subject: [PATCH 2/6] Fix to document download urls not working Just had to capture the download request signal and accept it. However python files to not seem to actually download. Also our implementatin of QtWebEngine makes the download so silent the use thinks nothing is happening so added a logging.warning to force the log explorer open and a message generated --- src/sas/qtgui/Utilities/DocViewWidget.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/sas/qtgui/Utilities/DocViewWidget.py b/src/sas/qtgui/Utilities/DocViewWidget.py index 782f21f74b..a485174343 100644 --- a/src/sas/qtgui/Utilities/DocViewWidget.py +++ b/src/sas/qtgui/Utilities/DocViewWidget.py @@ -109,6 +109,7 @@ def initializeSignals(self): self.communicate.documentationRegeneratedSignal.connect(self.refresh) self.communicate.closeSignal.connect(self.onClose) self.webEngineViewer.urlChanged.connect(self.updateTitle) + self.webEngineViewer.page().profile().downloadRequested.connect(self.onDownload) def onEdit(self): """Open editor (TabbedModelEditor) window.""" @@ -150,6 +151,11 @@ def onShow(self): Keep as a separate method to allow for additional functionality when opening """ self.show() + + def onDownload(self, download_item): + _filename = download_item.url().fileName() + logging.warning(f"downloading your file: {_filename}") + download_item.accept() def regenerateIfNeeded(self): """ @@ -230,8 +236,6 @@ def loadHtml(self): # Allows QtWebEngine to access MathJax and code highlighting APIs settings.setAttribute(QtWebEngineCore.QWebEngineSettings.LocalContentCanAccessRemoteUrls, True) settings.setAttribute(QtWebEngineCore.QWebEngineSettings.LocalContentCanAccessFileUrls, True) - settings.setAttribute(QtWebEngineCore.QWebEngineSettings.WebAttribute.PluginsEnabled, True) - settings.setAttribute(QtWebEngineCore.QWebEngineSettings.WebAttribute.PdfViewerEnabled, True) self.webEngineViewer.load(url) # Show widget From 427d2ed3152de44ef44fa353a54af62b11e60bf5 Mon Sep 17 00:00:00 2001 From: butlerpd Date: Fri, 6 Jun 2025 16:11:22 +0000 Subject: [PATCH 3/6] Make download message a bit more clear --- src/sas/qtgui/Utilities/DocViewWidget.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sas/qtgui/Utilities/DocViewWidget.py b/src/sas/qtgui/Utilities/DocViewWidget.py index a485174343..40048532d6 100644 --- a/src/sas/qtgui/Utilities/DocViewWidget.py +++ b/src/sas/qtgui/Utilities/DocViewWidget.py @@ -154,7 +154,7 @@ def onShow(self): def onDownload(self, download_item): _filename = download_item.url().fileName() - logging.warning(f"downloading your file: {_filename}") + logging.warning(f"downloading your file: {_filename} to your default download directory") download_item.accept() def regenerateIfNeeded(self): From 874d1e4bb97b06f5a820cbf14b1bdfbbae0f7eee Mon Sep 17 00:00:00 2001 From: butlerpd Date: Sun, 8 Jun 2025 22:17:51 +0000 Subject: [PATCH 4/6] and now add proper checking that download actually completes. --- src/sas/qtgui/Utilities/DocViewWidget.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/sas/qtgui/Utilities/DocViewWidget.py b/src/sas/qtgui/Utilities/DocViewWidget.py index 40048532d6..8390a106a3 100644 --- a/src/sas/qtgui/Utilities/DocViewWidget.py +++ b/src/sas/qtgui/Utilities/DocViewWidget.py @@ -153,10 +153,16 @@ def onShow(self): self.show() def onDownload(self, download_item): - _filename = download_item.url().fileName() - logging.warning(f"downloading your file: {_filename} to your default download directory") download_item.accept() - + download_item.isFinishedChanged.connect(lambda: self.onDownloadFinished(download_item)) + + def onDownloadFinished(self, item): + _filename = item.downloadFileName() + if item.state() == item.DownloadState.DownloadCompleted: + logging.warning(f"your file: {_filename} was downloaded to your default download directory") + else: + logging.error(f"FAILED TO DOWNLOAD: {_filename} is unavailable") + def regenerateIfNeeded(self): """ Determines whether a file needs to be regenerated. From 5e9e84cfe7c67546e139191c6332e8e8115dee85 Mon Sep 17 00:00:00 2001 From: butlerpd Date: Mon, 9 Jun 2025 00:34:56 +0000 Subject: [PATCH 5/6] First test of PDF viewere --- docs/sphinx-docs/source/user/tutorial.rst | 4 ++-- src/sas/qtgui/Utilities/DocViewWidget.py | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/sphinx-docs/source/user/tutorial.rst b/docs/sphinx-docs/source/user/tutorial.rst index 383e549518..f290bd0222 100644 --- a/docs/sphinx-docs/source/user/tutorial.rst +++ b/docs/sphinx-docs/source/user/tutorial.rst @@ -7,9 +7,9 @@ Tutorials .. note:: In Windows use [Alt]-[Cursor left] to return to the previous page -:download:`Getting Started with Sasview ` +Getting Started with Sasview -:download:`Subtracting a Model Calculation from Experimental Data ` +:ref:`Subtracting a Model Calculation from Experimental Data ` :download:`Basic 1D Fitting in Sasview ` diff --git a/src/sas/qtgui/Utilities/DocViewWidget.py b/src/sas/qtgui/Utilities/DocViewWidget.py index 8390a106a3..c957ff7439 100644 --- a/src/sas/qtgui/Utilities/DocViewWidget.py +++ b/src/sas/qtgui/Utilities/DocViewWidget.py @@ -242,6 +242,8 @@ def loadHtml(self): # Allows QtWebEngine to access MathJax and code highlighting APIs settings.setAttribute(QtWebEngineCore.QWebEngineSettings.LocalContentCanAccessRemoteUrls, True) settings.setAttribute(QtWebEngineCore.QWebEngineSettings.LocalContentCanAccessFileUrls, True) + #settings.setAttribute(QtWebEngineCore.QWebEngineSettings.PluginsEnabled, True) + #settings.setAttribute(QtWebEngineCore.QWebEngineSettings.PdfViewerEnabled, True) self.webEngineViewer.load(url) # Show widget From 7a3a43cf354ef796e7ad4c17d4ed708dddcf72cb Mon Sep 17 00:00:00 2001 From: butlerpd Date: Mon, 9 Jun 2025 02:16:18 +0000 Subject: [PATCH 6/6] And now enable the PDF viewer Note this does not enable the tutorials to be loaded into the viewer. They are still html programmed as forced downloaded somewhere in the build system --- src/sas/qtgui/Utilities/DocViewWidget.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/sas/qtgui/Utilities/DocViewWidget.py b/src/sas/qtgui/Utilities/DocViewWidget.py index c957ff7439..0e8c998677 100644 --- a/src/sas/qtgui/Utilities/DocViewWidget.py +++ b/src/sas/qtgui/Utilities/DocViewWidget.py @@ -240,10 +240,11 @@ def loadHtml(self): url = self.processUrl() settings = self.webEngineViewer.settings() # Allows QtWebEngine to access MathJax and code highlighting APIs + # and enables the Pdf Viewer. Note that setting is enabled by default + # but requires PluginsEnabled to be True first settings.setAttribute(QtWebEngineCore.QWebEngineSettings.LocalContentCanAccessRemoteUrls, True) settings.setAttribute(QtWebEngineCore.QWebEngineSettings.LocalContentCanAccessFileUrls, True) - #settings.setAttribute(QtWebEngineCore.QWebEngineSettings.PluginsEnabled, True) - #settings.setAttribute(QtWebEngineCore.QWebEngineSettings.PdfViewerEnabled, True) + settings.setAttribute(QtWebEngineCore.QWebEngineSettings.PluginsEnabled, True) self.webEngineViewer.load(url) # Show widget