QGIS/python/plugins/processing/gui/HelpEditionDialog.py

154 lines
5.7 KiB
Python
Raw Normal View History

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'
2012-10-05 23:28:47 +02:00
# This will get replaced with a git SHA1 when you do a git archive
2012-10-05 23:28:47 +02:00
__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 *
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
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'
2012-09-15 18:25:25 +03:00
def __init__(self, alg):
2012-12-03 19:50:02 +02:00
QDialog.__init__(self)
2013-09-03 21:59:14 +02:00
self.setupUi(self)
2012-09-15 18:25:25 +03:00
self.alg = alg
self.descriptions = {}
2012-09-15 18:25:25 +03:00
if self.alg.descriptionFile is not None:
helpfile = alg.descriptionFile + '.help'
2012-09-15 18:25:25 +03:00
if os.path.exists(helpfile):
f = open(helpfile, 'rb')
2012-09-15 18:25:25 +03:00
self.descriptions = pickle.load(f)
self.currentName = self.ALG_DESC
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:
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. Check that \
you have permission to modify the help \
file. You might not have permission if \
you are editing an example 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'
2012-09-15 18:25:25 +03:00
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'
2012-09-15 18:25:25 +03:00
for out in self.alg.outputs:
s += '<h3>' + out.description + '</h3>\n'
s += '<p>' + self.getDescription(out.name) + '</p>\n'
2012-09-15 18:25:25 +03:00
return s
def fillTree(self):
item = TreeDescriptionItem('Algorithm description', self.ALG_DESC)
2012-09-15 18:25:25 +03:00
self.tree.addTopLevelItem(item)
parametersItem = TreeDescriptionItem('Input parameters', None)
2012-09-15 18:25:25 +03:00
self.tree.addTopLevelItem(parametersItem)
for param in self.alg.parameters:
item = TreeDescriptionItem(param.description, param.name)
parametersItem.addChild(item)
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)
2012-09-15 18:25:25 +03:00
self.tree.addTopLevelItem(item)
item = TreeDescriptionItem('Algorithm help written by',
self.ALG_HELP_CREATOR)
2012-09-15 18:25:25 +03:00
self.tree.addTopLevelItem(item)
def changeItem(self):
item = self.tree.currentItem()
if isinstance(item, TreeDescriptionItem):
if self.currentName:
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:
return self.descriptions[name].replace('\n', '<br>')
2012-09-15 18:25:25 +03:00
else:
return ''
2012-09-15 18:25:25 +03:00
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)