2012-10-05 23:28:47 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
"""
|
|
|
|
***************************************************************************
|
|
|
|
HelpEditionDialog.py
|
|
|
|
---------------------
|
|
|
|
Date : August 2012
|
|
|
|
Copyright : (C) 2012 by Victor Olaya
|
|
|
|
Email : volayaf at gmail dot com
|
|
|
|
***************************************************************************
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
***************************************************************************
|
|
|
|
"""
|
|
|
|
|
|
|
|
__author__ = 'Victor Olaya'
|
|
|
|
__date__ = 'August 2012'
|
|
|
|
__copyright__ = '(C) 2012, Victor Olaya'
|
|
|
|
# This will get replaced with a git SHA1 when you do a git archive
|
|
|
|
__revision__ = '$Format:%H$'
|
|
|
|
|
2012-09-15 18:25:25 +03:00
|
|
|
import os
|
|
|
|
import pickle
|
2012-12-03 19:50:02 +02:00
|
|
|
from PyQt4.QtCore import *
|
|
|
|
from PyQt4.QtGui import *
|
2013-09-02 20:34:36 +02:00
|
|
|
from qgis.core import *
|
2013-08-12 20:44:27 +02:00
|
|
|
from processing.ui.ui_DlgHelpEdition import Ui_DlgHelpEdition
|
2012-12-03 19:50:02 +02:00
|
|
|
|
|
|
|
class HelpEditionDialog(QDialog, Ui_DlgHelpEdition):
|
2012-09-15 18:25:25 +03:00
|
|
|
|
|
|
|
ALG_DESC = "ALG_DESC"
|
|
|
|
ALG_CREATOR = "ALG_CREATOR"
|
|
|
|
ALG_HELP_CREATOR = "ALG_HELP_CREATOR"
|
|
|
|
|
|
|
|
def __init__(self, alg):
|
2012-12-03 19:50:02 +02:00
|
|
|
QDialog.__init__(self)
|
2013-09-02 20:34:36 +02:00
|
|
|
|
|
|
|
self.setupUi(self)
|
|
|
|
|
2012-09-15 18:25:25 +03:00
|
|
|
self.alg = alg
|
|
|
|
self.descriptions = {}
|
|
|
|
if self.alg.descriptionFile is not None:
|
|
|
|
helpfile = alg.descriptionFile + ".help"
|
|
|
|
if os.path.exists(helpfile):
|
|
|
|
f = open(helpfile, "rb")
|
|
|
|
self.descriptions = pickle.load(f)
|
|
|
|
self.currentName = self.ALG_DESC
|
2013-05-05 19:41:54 +02:00
|
|
|
if self.ALG_DESC in self.descriptions:
|
|
|
|
self.text.setText(self.descriptions[self.ALG_DESC])
|
2012-12-03 19:50:02 +02:00
|
|
|
self.tree.itemClicked.connect(self.changeItem)
|
|
|
|
|
2012-09-15 18:25:25 +03:00
|
|
|
self.fillTree()
|
|
|
|
self.updateHtmlView()
|
|
|
|
|
2012-12-03 19:50:02 +02:00
|
|
|
def reject(self):
|
2012-09-15 18:25:25 +03:00
|
|
|
self.descriptions = None
|
2012-12-03 19:50:02 +02:00
|
|
|
QDialog.reject(self)
|
2012-09-15 18:25:25 +03:00
|
|
|
|
2012-12-03 19:50:02 +02:00
|
|
|
def accept(self):
|
|
|
|
self.descriptions[self.currentName] = unicode(self.text.toPlainText())
|
2012-09-15 18:25:25 +03:00
|
|
|
if self.alg.descriptionFile is not None:
|
2013-09-02 20:34:36 +02:00
|
|
|
try:
|
|
|
|
f = open(self.alg.descriptionFile + ".help", "wb")
|
|
|
|
pickle.dump(self.descriptions, f)
|
|
|
|
f.close()
|
|
|
|
except Exception, e:
|
|
|
|
QMessageBox.warning(self, "Error saving help file",
|
|
|
|
"Help file could not be saved."
|
|
|
|
"\nCheck that you have permission to modify the help file.\n"
|
|
|
|
"You might not have permission if you are editing an example\n"
|
|
|
|
"model or script, since they are stored on the installation folder")
|
2012-12-03 19:50:02 +02:00
|
|
|
QDialog.accept(self)
|
2012-09-15 18:25:25 +03:00
|
|
|
|
|
|
|
def getHtml(self):
|
|
|
|
s = "<h2>Algorithm description</h2>\n"
|
|
|
|
s += "<p>" + self.getDescription(self.ALG_DESC) + "</p>\n"
|
|
|
|
s += "<h2>Input parameters</h2>\n"
|
|
|
|
for param in self.alg.parameters:
|
|
|
|
s += "<h3>" + param.description + "</h3>\n"
|
|
|
|
s += "<p>" + self.getDescription(param.name) + "</p>\n"
|
|
|
|
s += "<h2>Outputs</h2>\n"
|
|
|
|
for out in self.alg.outputs:
|
|
|
|
s += "<h3>" + out.description + "</h3>\n"
|
|
|
|
s += "<p>" + self.getDescription(out.name) + "</p>\n"
|
|
|
|
return s
|
|
|
|
|
|
|
|
def fillTree(self):
|
|
|
|
item = TreeDescriptionItem("Algorithm description", self.ALG_DESC)
|
|
|
|
self.tree.addTopLevelItem(item)
|
|
|
|
parametersItem = TreeDescriptionItem("Input parameters", None)
|
|
|
|
self.tree.addTopLevelItem(parametersItem)
|
|
|
|
for param in self.alg.parameters:
|
|
|
|
item = TreeDescriptionItem(param.description, param.name)
|
|
|
|
parametersItem.addChild(item)
|
2012-12-03 19:50:02 +02:00
|
|
|
outputsItem = TreeDescriptionItem(self.tr("Outputs"), None)
|
2012-09-15 18:25:25 +03:00
|
|
|
self.tree.addTopLevelItem(outputsItem)
|
|
|
|
for out in self.alg.outputs:
|
|
|
|
item = TreeDescriptionItem(out.description, out.name)
|
|
|
|
outputsItem.addChild(item)
|
|
|
|
item = TreeDescriptionItem("Algorithm created by", self.ALG_CREATOR)
|
|
|
|
self.tree.addTopLevelItem(item)
|
|
|
|
item = TreeDescriptionItem("Algorithm help written by", self.ALG_HELP_CREATOR)
|
|
|
|
self.tree.addTopLevelItem(item)
|
|
|
|
|
|
|
|
def changeItem(self):
|
|
|
|
item = self.tree.currentItem()
|
|
|
|
if isinstance(item, TreeDescriptionItem):
|
|
|
|
if self.currentName:
|
2012-12-03 19:50:02 +02:00
|
|
|
self.descriptions[self.currentName] = unicode(self.text.toPlainText())
|
2012-09-15 18:25:25 +03:00
|
|
|
name = item.name
|
|
|
|
if name:
|
2012-12-03 19:50:02 +02:00
|
|
|
self.text.setEnabled(True)
|
2012-09-15 18:25:25 +03:00
|
|
|
self.updateHtmlView()
|
|
|
|
self.currentName = name
|
|
|
|
if name in self.descriptions:
|
|
|
|
self.text.setText(self.descriptions[name])
|
|
|
|
else:
|
2012-12-03 19:50:02 +02:00
|
|
|
self.text.clear()
|
|
|
|
else:
|
|
|
|
self.currentName = None
|
|
|
|
self.text.clear()
|
|
|
|
self.text.setEnabled(False)
|
|
|
|
self.updateHtmlView()
|
2012-09-15 18:25:25 +03:00
|
|
|
|
|
|
|
def updateHtmlView(self):
|
|
|
|
self.webView.setHtml(self.getHtml())
|
|
|
|
|
|
|
|
def getDescription(self, name):
|
2012-12-03 19:50:02 +02:00
|
|
|
if name in self.descriptions:
|
2012-09-15 18:25:25 +03:00
|
|
|
return self.descriptions[name]
|
|
|
|
else:
|
|
|
|
return ""
|
|
|
|
|
2012-12-03 19:50:02 +02:00
|
|
|
class TreeDescriptionItem(QTreeWidgetItem):
|
2012-09-15 18:25:25 +03:00
|
|
|
def __init__(self, description, name):
|
|
|
|
QTreeWidgetItem.__init__(self)
|
|
|
|
self.name = name
|
|
|
|
self.description = description
|
|
|
|
self.setText(0, description)
|