Skip to content

Commit 24fec70

Browse files
author
volayaf
committed
fixed #5693
git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@204 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
1 parent caf1f36 commit 24fec70

7 files changed

+108
-37
lines changed

src/sextante/grass/GrassAlgorithm.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ def getIcon(self):
4141

4242
def helpFile(self):
4343
folder = GrassUtils.grassHelpPath()
44-
#if str(folder).strip() != "":
4544
helpfile = str(folder) + os.sep + self.grassName + ".html"
4645
if os.path.exists(helpfile):
4746
return helpfile
@@ -51,7 +50,10 @@ def helpFile(self):
5150

5251
def getParameterDescriptions(self):
5352
descs = {}
54-
helpfile = self.helpFile()
53+
try:
54+
helpfile = self.helpFile()
55+
except WrongHelpFileException:
56+
return descs
5557
if helpfile:
5658
try:
5759
infile = open(helpfile)

src/sextante/gui/Help2Html.py

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import pickle
2+
from sextante.core.SextanteUtils import SextanteUtils
3+
import os
4+
class Help2Html():
5+
6+
ALG_DESC = "ALG_DESC"
7+
ALG_CREATOR = "ALG_CREATOR"
8+
ALG_HELP_CREATOR = "ALG_HELP_CREATOR"
9+
10+
def getHtmlFile(self, alg, helpFile):
11+
if not os.path.exists(helpFile):
12+
return None
13+
self.alg = alg
14+
f = open(helpFile, "rb")
15+
self.descriptions = pickle.load(f)
16+
s = "<h2>Algorithm description</h2>\n"
17+
s += "<p>" + self.getDescription(self.ALG_DESC) + "</p>\n"
18+
s += "<h2>Input parameters</h2>\n"
19+
for param in self.alg.parameters:
20+
s += "<h3>" + param.description + "</h3>\n"
21+
s += "<p>" + self.getDescription(param.name) + "</p>\n"
22+
s += "<h2>Outputs</h2>\n"
23+
for out in self.alg.outputs:
24+
s += "<h3>" + out.description + "</h3>\n"
25+
s += "<p>" + self.getDescription(out.name) + "</p>\n"
26+
filename = SextanteUtils.tempFolder() + os.sep + "temphelp.html"
27+
tempHtml = open(filename, "w")
28+
tempHtml.write(s)
29+
30+
return filename
31+
32+
def getDescription(self, name):
33+
if name in self.descriptions :
34+
return self.descriptions[name]
35+
else:
36+
return ""

src/sextante/gui/ParametersDialog.py

+24-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from PyQt4.QtCore import *
22
from PyQt4.QtGui import *
3-
from PyQt4 import QtCore, QtGui
3+
from PyQt4 import QtCore, QtGui, QtWebKit
44
from sextante.core.QGisLayers import QGisLayers
55
from sextante.parameters.ParameterRaster import ParameterRaster
66
from sextante.parameters.ParameterVector import ParameterVector
@@ -53,10 +53,6 @@ def setupUi(self, dialog, alg):
5353
self.buttonBox = QtGui.QDialogButtonBox()
5454
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
5555
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
56-
self.showHelpButton = QtGui.QPushButton()
57-
self.showHelpButton.setText("Show help")
58-
self.buttonBox.addButton(self.showHelpButton, QtGui.QDialogButtonBox.ActionRole)
59-
QtCore.QObject.connect(self.showHelpButton, QtCore.SIGNAL("clicked()"), self.showHelp)
6056
self.paramTable = ParametersPanel(self.alg, self.dialog)
6157
self.scrollArea = QtGui.QScrollArea()
6258
self.scrollArea.setWidget(self.paramTable)
@@ -70,7 +66,29 @@ def setupUi(self, dialog, alg):
7066
self.verticalLayout = QtGui.QVBoxLayout(dialog)
7167
self.verticalLayout.setSpacing(2)
7268
self.verticalLayout.setMargin(0)
73-
self.verticalLayout.addWidget(self.scrollArea)
69+
self.tabWidget = QtGui.QTabWidget()
70+
self.tabWidget.setMinimumWidth(300)
71+
self.tabWidget.addTab(self.scrollArea, "Parameters")
72+
self.verticalLayout.addWidget(self.tabWidget)
73+
self.webView = QtWebKit.QWebView()
74+
html = None
75+
try:
76+
if self.alg.helpFile():
77+
helpFile = self.alg.helpFile()
78+
else:
79+
html = "<h2>Sorry, no help is available for this algorithm.</h2>"
80+
except WrongHelpFileException, e:
81+
html = e.msg
82+
self.webView.setHtml("<h2>Could not open help file :-( </h2>")
83+
try:
84+
if html:
85+
self.webView.setHtml(html)
86+
else:
87+
url = QtCore.QUrl(helpFile)
88+
self.webView.load(url)
89+
except:
90+
self.webView.setHtml("<h2>Could not open help file :-( </h2>")
91+
self.tabWidget.addTab(self.webView, "Help")
7492
self.verticalLayout.addWidget(self.progressLabel)
7593
self.verticalLayout.addWidget(self.progress)
7694
self.verticalLayout.addWidget(self.buttonBox)
@@ -79,16 +97,6 @@ def setupUi(self, dialog, alg):
7997
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), self.reject)
8098
QtCore.QMetaObject.connectSlotsByName(dialog)
8199

82-
def showHelp(self):
83-
try:
84-
if self.alg.helpFile():
85-
dlg = HTMLViewerDialog(self.alg.helpFile())
86-
dlg.exec_()
87-
else:
88-
QMessageBox.warning(self.dialog, "No help available", "No help is available for the current algorithm.")
89-
except WrongHelpFileException, e:
90-
QMessageBox.warning(self.dialog, "Help", e.msg)
91-
92100

93101
def setParamValues(self):
94102
params = self.alg.parameters

src/sextante/modeler/ModelerAlgorithm.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from sextante.parameters.Parameter import Parameter
1616
from sextante.parameters.ParameterVector import ParameterVector
1717
from sextante.parameters.ParameterTableField import ParameterTableField
18+
from sextante.gui.Help2Html import Help2Html
1819

1920
class ModelerAlgorithm(GeoAlgorithm):
2021

@@ -457,11 +458,11 @@ def updateModelerView(self):
457458
if self.modelerdialog:
458459
self.modelerdialog.repaintModel()
459460

460-
461-
def helpfile(self):
461+
def helpFile(self):
462462
helpfile = self.descriptionFile + ".help"
463463
if os.path.exists(helpfile):
464-
return helpfile
464+
h2h = Help2Html()
465+
return h2h.getHtmlFile(self, helpfile)
465466
else:
466467
return None
467468

src/sextante/modeler/ModelerParametersDialog.py

+24-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from PyQt4.QtCore import *
22
from PyQt4.QtGui import *
3-
from PyQt4 import QtCore, QtGui
3+
from PyQt4 import QtCore, QtGui, QtWebKit
44
from sextante.parameters.ParameterRaster import ParameterRaster
55
from sextante.parameters.ParameterVector import ParameterVector
66
from sextante.parameters.ParameterBoolean import ParameterBoolean
@@ -47,10 +47,6 @@ def setupUi(self):
4747
self.buttonBox = QtGui.QDialogButtonBox()
4848
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
4949
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
50-
self.showHelpButton = QtGui.QPushButton()
51-
self.showHelpButton.setText("Show help")
52-
self.buttonBox.addButton(self.showHelpButton, QtGui.QDialogButtonBox.ActionRole)
53-
QtCore.QObject.connect(self.showHelpButton, QtCore.SIGNAL("clicked()"), self.showHelp)
5450
self.tableWidget = QtGui.QTableWidget()
5551
self.tableWidget.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
5652
self.tableWidget.setColumnCount(2)
@@ -66,23 +62,35 @@ def setupUi(self):
6662
self.verticalLayout = QtGui.QVBoxLayout()
6763
self.verticalLayout.setSpacing(2)
6864
self.verticalLayout.setMargin(0)
69-
self.verticalLayout.addWidget(self.tableWidget)
65+
self.tabWidget = QtGui.QTabWidget()
66+
self.tabWidget.setMinimumWidth(300)
67+
self.tabWidget.addTab(self.tableWidget, "Parameters")
68+
self.webView = QtWebKit.QWebView()
69+
html = None
70+
try:
71+
if self.alg.helpFile():
72+
helpFile = self.alg.helpFile()
73+
else:
74+
html = "<h2>Sorry, no help is available for this algorithm.</h2>"
75+
except WrongHelpFileException, e:
76+
html = e.msg
77+
self.webView.setHtml("<h2>Could not open help file :-( </h2>")
78+
try:
79+
if html:
80+
self.webView.setHtml(html)
81+
else:
82+
url = QtCore.QUrl(helpFile)
83+
self.webView.load(url)
84+
except:
85+
self.webView.setHtml("<h2>Could not open help file :-( </h2>")
86+
self.tabWidget.addTab(self.webView, "Help")
87+
self.verticalLayout.addWidget(self.tabWidget)
7088
self.verticalLayout.addWidget(self.buttonBox)
7189
self.setLayout(self.verticalLayout)
7290
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), self.okPressed)
7391
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), self.cancelPressed)
7492
QtCore.QMetaObject.connectSlotsByName(self)
7593

76-
def showHelp(self):
77-
try:
78-
if self.alg.helpFile():
79-
dlg = HTMLViewerDialog(self.alg.helpFile())
80-
dlg.exec_()
81-
else:
82-
QMessageBox.warning(self.dialog, "No help available", "No help is available for the current algorithm.")
83-
except WrongHelpFileException, e:
84-
QMessageBox.warning(self.dialog, "Help", e.msg)
85-
8694
def getRasterLayers(self):
8795
layers = []
8896
params = self.model.parameters

src/sextante/r/RAlgorithm.py

+8
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from sextante.parameters.ParameterExtent import ParameterExtent
2626
from sextante.parameters.ParameterFile import ParameterFile
2727
from sextante.outputs.OutputFile import OutputFile
28+
from sextante.gui.Help2Html import Help2Html
2829

2930
class RAlgorithm(GeoAlgorithm):
3031

@@ -279,6 +280,13 @@ def getImportCommands(self):
279280
def getRCommands(self):
280281
return self.commands
281282

283+
def helpFile(self):
284+
helpfile = self.descriptionFile + ".help"
285+
if os.path.exists(helpfile):
286+
h2h = Help2Html()
287+
return h2h.getHtmlFile(self, helpfile)
288+
else:
289+
return None
282290

283291
def checkBeforeOpeningParametersDialog(self):
284292
if SextanteUtils.isWindows():

src/sextante/script/ScriptAlgorithm.py

+8
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from sextante.parameters.ParameterFile import ParameterFile
2020
from sextante.outputs.OutputFile import OutputFile
2121
import sys
22+
from sextante.gui.Help2Html import Help2Html
2223

2324
class ScriptAlgorithm(GeoAlgorithm):
2425

@@ -140,6 +141,13 @@ def processAlgorithm(self, progress):
140141
exec(script)
141142
sys.stdout = sys.__stdout__
142143

144+
def helpFile(self):
145+
helpfile = self.descriptionFile + ".help"
146+
if os.path.exists(helpfile):
147+
h2h = Help2Html()
148+
return h2h.getHtmlFile(self, helpfile)
149+
else:
150+
return None
143151

144152
class Redirection():
145153
def __init__(self, progress):

0 commit comments

Comments
 (0)