From 3a6a8d27f01efd42ace4d95babc1c58fa4510f42 Mon Sep 17 00:00:00 2001
From: calvin
Date: Wed, 18 Feb 2009 19:05:16 +0000
Subject: [PATCH] Added help to the GUI client
git-svn-id: https://linkchecker.svn.sourceforge.net/svnroot/linkchecker/trunk/linkchecker@3964 e7d03fd6-7b0d-0410-9947-9c21f3af8025
---
TODO.txt | 1 -
doc/Makefile | 81 +++++++++++++++++++--------
doc/lccollection.qhc | Bin 0 -> 12288 bytes
doc/lccollection.qhcp | 23 ++++++++
doc/lcdoc.qch | Bin 0 -> 29696 bytes
doc/lcdoc.qhp | 13 +++++
linkcheck/gui/__init__.py | 71 +++++++++++++++++++++--
linkcheck/gui/linkchecker_ui_main.py | 6 +-
linkcheck/gui/ui/main.ui | 6 ++
9 files changed, 173 insertions(+), 28 deletions(-)
create mode 100644 doc/lccollection.qhc
create mode 100644 doc/lccollection.qhcp
create mode 100644 doc/lcdoc.qch
create mode 100644 doc/lcdoc.qhp
diff --git a/TODO.txt b/TODO.txt
index 878e9cc7..e2a060bf 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -1,3 +1,2 @@
- [GUI] Store checked links in urldata list; display in a QTreeWidget;
columns result (as icon), URL, name; doubleclick opens property popup
-- [GUI] Integrate sphinx documentation
diff --git a/doc/Makefile b/doc/Makefile
index ada3687c..c15d655a 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -11,17 +11,52 @@ PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
-.PHONY: help clean html web pickle htmlhelp latex changes linkcheck homepage test po4a api
+.PHONY: help clean html web pickle htmlhelp latex changes linkcheck
-all: clean html compress
+all:
+ @echo "Available targets: build-html build-htmlhelp"
+
+build-html: clean html
+
+build-htmlhelp: clean htmlhelp helpfiles
html:
mkdir -p build/html build/doctrees
- $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html
- rm build/html/_static/Makefile build/html/_static/favicon*.png
+ $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/html
+ rm build/html/_static/Makefile
+ rm build/html/_static/default.css
+ rm build/html/_static/*.js
+ rm build/html/_static/contents.png
+ rm build/html/_static/plus.png
+ rm build/html/_static/file.png
+ rm build/html/_static/minus.png
+ rm build/html/_static/navigation.png
+ rm build/html/_static/rightsidebar.css
+ rm build/html/_static/stickysidebar.css
+ rm build/html/_static/sphinxdoc.css
+ rm build/html/_static/traditional.css
@echo
@echo "Build finished. The HTML pages are in build/html."
+htmlhelp:
+ mkdir -p build/htmlhelp build/doctrees
+ $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp
+ rm build/htmlhelp/LinkChecker*
+ rm build/htmlhelp/_static/Makefile
+ rm build/htmlhelp/_static/default.css
+ rm build/htmlhelp/_static/*.js
+ rm build/htmlhelp/_static/contents.png
+ rm build/htmlhelp/_static/plus.png
+ rm build/htmlhelp/_static/file.png
+ rm build/htmlhelp/_static/minus.png
+ rm build/htmlhelp/_static/navigation.png
+ rm build/htmlhelp/_static/rightsidebar.css
+ rm build/htmlhelp/_static/stickysidebar.css
+ rm build/htmlhelp/_static/sphinxdoc.css
+ rm build/htmlhelp/_static/traditional.css
+ @echo
+ @echo "Build finished. The HTML pages are in build/htmlhelp."
+
pickle:
mkdir -p build/pickle build/doctrees
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle
@@ -36,13 +71,6 @@ json:
@echo
@echo "Build finished; now you can process the JSON files."
-htmlhelp:
- mkdir -p build/htmlhelp build/doctrees
- $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp
- @echo
- @echo "Build finished; now you can run HTML Help Workshop with the" \
- ".hhp project file in build/htmlhelp."
-
latex:
mkdir -p build/latex build/doctrees
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex
@@ -66,24 +94,33 @@ linkcheck:
clean:
-rm -rf build/*
-
-homepage: clean html compress
- cp -r build/html/* $(HOME)/public_html/linkchecker.sf.net/htdocs
+ -rm -f *.qhc *.qch
test: html
xmllint --valid --noout build/html/*.html
-po4a:
- po4a --localized-charset=UTF-8 po4a.conf
-
-api:
- epydoc --html -o api --name "LinkChecker source documentation" --url ../index.html ../linkcheck/
-
-
YUICOMP_VERSION=2.4.2
YUICOMP=$(HOME)/src/yuicompressor-$(YUICOMP_VERSION)/build
compress:
python mediacompress.py --overwrite=png,jpg,gif,js,css \
--js-compressor=$(YUICOMP)/yuicompressor-$(YUICOMP_VERSION).jar \
- build/html
+ build
+
+
+HELPFILES = lccollection.qhc
+
+helpfiles: $(HELPFILES)
+
+%.qhc: %.qhcp lcdoc.qhp
+ qcollectiongenerator $< -o $@
+
+
+homepage: build-html compress
+ cp -r build/html/* $(HOME)/public_html/linkchecker.sf.net/htdocs
+
+po4a:
+ po4a --localized-charset=UTF-8 po4a.conf
+
+api:
+ epydoc --html -o api --name "LinkChecker source documentation" --url ../index.html ../linkcheck/
diff --git a/doc/lccollection.qhc b/doc/lccollection.qhc
new file mode 100644
index 0000000000000000000000000000000000000000..e2f4177569d4a8ee6283fc43272635ad80a95f35
GIT binary patch
literal 12288
zcmeHN4OCM{7M}MeB>ao`w;4S7SPUk0t3r)BA{GDad<)@RV-3K>Xi%$
zmJCHfZ7rO0AQ6*5k|jfNQ4A6yK9CC$7fL<~LJ_LEz9G5D5s4tH<3bsw;td6!
z7`PTgDMFDjP7I2N>u_j~N3TL{WIQs95G{j}w1z;=NE8r*xC+P{HN9Nqgp|oNhv(}{
z6))DP8Uneb9OfpurAA5Jt$1wpbTj-E#WdLKf<`w4DkU>8hnJ8*729hoNnlZ^l;p!%
z0m`Prz0Os&X{$XxI+i{l#y7-IfoAkwW&HnhT0BF}An*%9z>Iz!v8XwSPR4VoIaJ>-
zNVONOiZY1J;qm!Yv4O@n#DZ5K9)WDOrhv!Sc!RNfjK*I7$7UicemG2)H_9uI?ctYz
z50`_Bk^w!5BBG%r4o=SD@RVkJN+mII+#5maEFeu)d9y@dBYrJYt3MHqEmk6O*VAhZ
zw}7P-vp77Fh$^0_flVE0s9owvETVxkG
z3`F!1oW=@hw3YwwFhv&^`9Ekqn>S^i&A;d+gBg!O;OC5hi4j?%jp;WK{RXb4-=(i(
zgynQ2_QlQk&d*tLMz)t70Xr0f3_8d|n@W_BY3#saCY=ix&V92&*TAgt~
zOmTX&kbyVO8a3DW*jPl-V3=6_
zC|>}h5k$xgnNZ6^m=Ht&K@K#6zJ6t>~$?o
zt}wC!mMl4Pqp+{9Zd2DSIkA5V)(Y}{5yzV@#w^iJJN*m$7I9RlnXxsAJlGYLGCh!F|+aXvd_yU%A%m!amn*Au?%YQ9l(r2p^~2lqwqTo#BIE*Ccl
zK56x|Sz~Wuv$gr719pqKyjjhK;;g_lpRYcMaSfZYE+}kq*37E7OMVBvT8?ymcf>aH
z#En7ewI`1scI|Pl&8axuw!a|wH&UO2`&*N*eX(Mw-tp>9L!+K2&%`?=;VU(0}UqZzn7*EHBJES~%S9Xzpc_9&crD+j7lRp6Q>lprCB1t)TwV
z6-lU%*MsPLODzX_F7G(+w6ehmw-yyq-L+@Sy4!CJuJ4q7w61h+;qA+r1|8jpZeqki
zX9HGRnRAA|?mu*a8}L?9RjlJwvA8Jt?3re<+l7E@yY`;CNxH9G
zeMPZt9^KY$=8zbC^;qW;n@5}cdV10QW80Fy3i{(G)gS-;wJEk+ZkMLGO?z5ldNERz{Y6Pcg$d%xQ^P13+R{jVaY*ZiEl51;4|g#WXt&dISZDQ41xjorx&F`E{N
zoj;h|+aCJvfoXH5A1_-q$t`jMZ_3QR<@1f}%+oridPSZ#!Bc1dAvth!)e?)xMrR!i
z4#xR!Kj$aqht*lud{`1#y7?v#e9Ns>pC96^xZ~Z*v0dq7b*f3uqCF)WtPlLjx^3t7j{J!YpUKyFXP8{Mdt=Y-
z`#1L{?7DkDJf&*cK9?3>vso5r29k^qMF=YwS}yT?Qh)pl<-Bzx)~9)}i4)u|E!yBx+o%kxD?Zu%<+{50)@jqN?<75*9gvd#xkt1p
zBC)>Uo%OA~?^i?xPv%UVJSl9uY14W4qt{)!|JGl-C;XfIsspV%o;CGs8oUr&hHh<{
z`@>rPXY-bN{IKZYH-|fBu}h-59<|#v4#$f
+
+
+ LinkChecker
+ build/htmlhelp/_static/favicon16x16.png
+ bfk/LinkChecker
+ qthelp://bfk.app.linkchecker/doc/documentation.html
+ false
+ false
+ false
+
+
+
+
+ lcdoc.qhp
+
+
+
+
+ lcdoc.qch
+
+
+
diff --git a/doc/lcdoc.qch b/doc/lcdoc.qch
new file mode 100644
index 0000000000000000000000000000000000000000..c3544d80bafe55ad6abc402fcaf78028a23ad456
GIT binary patch
literal 29696
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
JgKRl~{|7`D4$=Ss
literal 0
HcmV?d00001
diff --git a/doc/lcdoc.qhp b/doc/lcdoc.qhp
new file mode 100644
index 00000000..e000a9f4
--- /dev/null
+++ b/doc/lcdoc.qhp
@@ -0,0 +1,13 @@
+
+
+ bfk.app.linkchecker
+ doc
+
+
+
+
+
+ build/htmlhelp/documentation.html
+
+
+
diff --git a/linkcheck/gui/__init__.py b/linkcheck/gui/__init__.py
index 0e13e82b..8d3ab242 100644
--- a/linkcheck/gui/__init__.py
+++ b/linkcheck/gui/__init__.py
@@ -16,13 +16,14 @@
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
import os
-from PyQt4 import QtCore, QtGui
+from PyQt4 import QtCore, QtGui, QtHelp
from .linkchecker_ui_main import Ui_MainWindow
from .linkchecker_ui_options import Ui_Options
from .. import configuration, checker, director, add_intern_pattern, \
strformat
from ..containers import enum
+DocBaseUrl = "qthelp://bfk.app.linkchecker/doc/build/htmlhelp/"
Status = enum('idle', 'checking', 'stopping')
@@ -40,15 +41,14 @@ class LinkCheckerMain (QtGui.QMainWindow, Ui_MainWindow):
else:
self.output.setFontFamily("mono")
self.checker = Checker()
-
settings = QtCore.QSettings('bfk', configuration.AppName)
settings.beginGroup('mainwindow')
-
if settings.contains('size'):
self.resize(settings.value('size').toSize())
self.move(settings.value('pos').toPoint())
settings.endGroup()
-
+ # Note: we can't use QT assistant here because of the .exe packaging
+ self.assistant = HelpWindow(self, "doc/lccollection.qhc")
self.connect(self.checker, QtCore.SIGNAL("finished()"), self.set_status_idle)
self.connect(self.checker, QtCore.SIGNAL("terminated()"), self.set_status_idle)
self.connect(self.checker, QtCore.SIGNAL("add_message(QString)"), self.add_message)
@@ -57,6 +57,7 @@ class LinkCheckerMain (QtGui.QMainWindow, Ui_MainWindow):
self.connect(self.optionsButton, QtCore.SIGNAL("clicked()"), self.options.exec_)
self.connect(self.actionQuit, QtCore.SIGNAL("triggered()"), self.close)
self.connect(self.actionAbout, QtCore.SIGNAL("triggered()"), self.about)
+ self.connect(self.actionHelp, QtCore.SIGNAL("triggered()"), self.showDocumentation)
self.status = Status.idle
def get_status (self):
@@ -94,6 +95,11 @@ class LinkCheckerMain (QtGui.QMainWindow, Ui_MainWindow):
"""Set idle status. Helper function for signal connections."""
self.status = Status.idle
+ def showDocumentation (self):
+ """Show help page."""
+ url = QtCore.QUrl("%sindex.html" % DocBaseUrl)
+ self.assistant.showDocumentation(url)
+
def closeEvent (self, e=None):
"""Save settings on close."""
settings = QtCore.QSettings('bfk', configuration.AppName)
@@ -187,6 +193,63 @@ Version 2 or later.
self.statusBar.showMessage(msg)
+class HelpWindow (QtGui.QDialog):
+ """A custom help display dialog."""
+
+ def __init__ (self, parent, qhcpath):
+ """Initialize dialog and load qhc help project from given path."""
+ super(HelpWindow, self).__init__(parent)
+ self.engine = QtHelp.QHelpEngine(qhcpath, self)
+ self.engine.setupData()
+ self.setWindowTitle(u"%s Help" % configuration.AppName)
+ self.build_ui()
+
+ def build_ui (self):
+ """Build UI for the help window."""
+ splitter = QtGui.QSplitter()
+ splitter.setOrientation(QtCore.Qt.Vertical)
+ self.browser = HelpBrowser(splitter, self.engine)
+ tree = self.engine.contentWidget()
+ tree.setExpandsOnDoubleClick(False)
+ splitter.addWidget(tree)
+ splitter.addWidget(self.browser)
+ splitter.setSizes((70, 530))
+ hlayout = QtGui.QHBoxLayout()
+ hlayout.addWidget(splitter)
+ self.setLayout(hlayout)
+ self.resize(800, 600)
+ self.connect(self.engine.contentWidget(),
+ QtCore.SIGNAL("linkActivated(QUrl)"),
+ self.browser, QtCore.SLOT("setSource(QUrl)"))
+
+ def showDocumentation (self, url):
+ """Show given URL in help browser."""
+ self.browser.setSource(url)
+ self.show()
+
+
+class HelpBrowser (QtGui.QTextBrowser):
+ """A QTextBrowser that can handle qthelp:// URLs."""
+
+ def __init__ (self, parent, engine):
+ """Initialize and store given HelpEngine instance."""
+ super(HelpBrowser, self).__init__(parent)
+ self.engine = engine
+
+ def setSource (self, url):
+ if url.scheme() == "http":
+ import webbrowser
+ webbrowser.open(str(url.toString()))
+ else:
+ QtGui.QTextBrowser.setSource(self, url)
+
+ def loadResource (self, rtype, url):
+ """Handle qthelp:// URLs, load content from help engine."""
+ if url.scheme() == "qthelp":
+ return QtCore.QVariant(self.engine.fileData(url))
+ return QtGui.QTextBrowser.loadResource(self, rtype, url)
+
+
class LinkCheckerOptions (QtGui.QDialog, Ui_Options):
"""Hold options for current URL to check."""
diff --git a/linkcheck/gui/linkchecker_ui_main.py b/linkcheck/gui/linkchecker_ui_main.py
index 1fc38fc3..3e072527 100644
--- a/linkcheck/gui/linkchecker_ui_main.py
+++ b/linkcheck/gui/linkchecker_ui_main.py
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'ui/main.ui'
#
-# Created: Sat Jan 24 19:15:50 2009
+# Created: Wed Feb 18 19:58:39 2009
# by: PyQt4 UI code generator 4.4.4
#
# WARNING! All changes made in this file will be lost!
@@ -72,8 +72,11 @@ class Ui_MainWindow(object):
self.actionQuit.setObjectName("actionQuit")
self.actionAbout = QtGui.QAction(MainWindow)
self.actionAbout.setObjectName("actionAbout")
+ self.actionHelp = QtGui.QAction(MainWindow)
+ self.actionHelp.setObjectName("actionHelp")
self.menuLinkChecka.addAction(self.actionQuit)
self.menuHelp.addAction(self.actionAbout)
+ self.menuHelp.addAction(self.actionHelp)
self.menubar.addAction(self.menuLinkChecka.menuAction())
self.menubar.addAction(self.menuHelp.menuAction())
self.label.setBuddy(self.urlinput)
@@ -91,5 +94,6 @@ class Ui_MainWindow(object):
self.menuHelp.setTitle(QtGui.QApplication.translate("MainWindow", "Help", None, QtGui.QApplication.UnicodeUTF8))
self.actionQuit.setText(QtGui.QApplication.translate("MainWindow", "Quit", None, QtGui.QApplication.UnicodeUTF8))
self.actionAbout.setText(QtGui.QApplication.translate("MainWindow", "About", None, QtGui.QApplication.UnicodeUTF8))
+ self.actionHelp.setText(QtGui.QApplication.translate("MainWindow", "Help", None, QtGui.QApplication.UnicodeUTF8))
import linkchecker_rc
diff --git a/linkcheck/gui/ui/main.ui b/linkcheck/gui/ui/main.ui
index 8c2ba822..7145da5f 100644
--- a/linkcheck/gui/ui/main.ui
+++ b/linkcheck/gui/ui/main.ui
@@ -123,6 +123,7 @@
Help
+
@@ -138,6 +139,11 @@
About
+
+
+ Help
+
+