Skip to content

Commit 15dfeff

Browse files
author
volayaf
committed
fixed problem when editing help and saving R scripts
git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@230 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
1 parent 9c84243 commit 15dfeff

File tree

4 files changed

+61
-26
lines changed

4 files changed

+61
-26
lines changed

src/sextante/r/EditRScriptDialog.py

+39-21
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,88 @@
11
from PyQt4 import QtCore, QtGui
22
from PyQt4.QtCore import *
33
from PyQt4.QtGui import *
4-
from sextante.r.RUtils import RUtils
5-
import pickle
64
from sextante.gui.HelpEditionDialog import HelpEditionDialog
5+
import pickle
6+
from sextante.r.RAlgorithm import RAlgorithm
7+
from sextante.r.RUtils import RUtils
78

89
class EditRScriptDialog(QtGui.QDialog):
910
def __init__(self, alg):
1011
self.alg = alg
12+
if self.alg is not None:
13+
self.filename = self.alg.descriptionFile
14+
else:
15+
self.filename = None
1116
QtGui.QDialog.__init__(self)
1217
self.setModal(True)
1318
self.setupUi()
1419
self.update = False
1520
self.help = None
1621

1722
def setupUi(self):
23+
self.resize(600,400)
1824
self.setWindowTitle("Edit script")
19-
self.resize(600, 350)
2025
layout = QVBoxLayout()
2126
self.text = QtGui.QTextEdit()
2227
self.text.setObjectName("text")
2328
self.text.setEnabled(True)
29+
self.buttonBox = QtGui.QDialogButtonBox()
30+
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
2431
if self.alg != None:
2532
self.text.setText(self.alg.script)
26-
self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Close)
2733
self.editHelpButton = QtGui.QPushButton()
28-
self.editHelpButton.setText("Edit model help")
34+
self.editHelpButton.setText("Edit script help")
2935
self.buttonBox.addButton(self.editHelpButton, QtGui.QDialogButtonBox.ActionRole)
36+
QObject.connect(self.editHelpButton, QtCore.SIGNAL("clicked()"), self.editHelp)
37+
self.saveButton = QtGui.QPushButton()
38+
self.saveButton.setText("Save")
39+
self.buttonBox.addButton(self.saveButton, QtGui.QDialogButtonBox.ActionRole)
40+
self.closeButton = QtGui.QPushButton()
41+
self.closeButton.setText("Close")
42+
self.buttonBox.addButton(self.closeButton, QtGui.QDialogButtonBox.ActionRole)
43+
QObject.connect(self.saveButton, QtCore.SIGNAL("clicked()"), self.saveAlgorithm)
44+
QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), self.cancelPressed)
3045
layout.addWidget(self.text)
3146
layout.addWidget(self.buttonBox)
3247
self.setLayout(layout)
33-
self.connect(self.buttonBox, SIGNAL("accepted()"), self.saveAlgorithm)
34-
self.connect(self.buttonBox, SIGNAL("rejected()"), self.cancelPressed)
35-
self.connect(self.editHelpButton, SIGNAL("clicked()"), self.editHelp)
3648
QtCore.QMetaObject.connectSlotsByName(self)
3749

50+
3851
def editHelp(self):
39-
dlg = HelpEditionDialog(self.alg)
52+
if self.alg is None:
53+
alg = RAlgorithm(None, unicode(self.text.toPlainText()))
54+
else:
55+
alg = self.alg
56+
dlg = HelpEditionDialog(alg)
4057
dlg.exec_()
4158
#We store the description string in case there were not saved because there was no
4259
#filename defined yet
43-
if self.alg.descriptionFile is None and dlg.descriptions:
60+
if self.alg is None and dlg.descriptions:
4461
self.help = dlg.descriptions
4562

63+
4664
def saveAlgorithm(self):
47-
if self.alg!=None:
48-
filename = self.alg.descriptionFile
49-
else:
50-
filename = QtGui.QFileDialog.getSaveFileName(self, "Save Script", RUtils.RScriptsFolder(), "R-SEXTANTE scripts (*.rsx)")
65+
if self.filename is None:
66+
self.filename = QtGui.QFileDialog.getSaveFileName(self, "Save Script", RUtils.RScriptsFolder(), "SEXTANTE R script (*.rsx)")
5167

52-
if filename:
53-
#self.alg.descriptionFile = filename
54-
text = self.text.toPlainText()
55-
fout = open(filename, "w")
68+
if self.filename:
69+
text = str(self.text.toPlainText())
70+
if self.alg is not None:
71+
self.alg.script = text
72+
fout = open(self.filename, "w")
5673
fout.write(text)
5774
fout.close()
5875
self.update = True
5976
#if help strings were defined before saving the model for the first time, we do it here
6077
if self.help:
61-
f = open(filename + ".help", "wb")
78+
f = open(self.filename + ".help", "wb")
6279
pickle.dump(self.help, f)
6380
f.close()
6481
self.help = None
6582
QtGui.QMessageBox.information(self, "Script saving", "Script was correctly saved.")
66-
self.close()
83+
else:
84+
self.filename = None
6785

6886
def cancelPressed(self):
69-
self.update = False
87+
#self.update = False
7088
self.close()

src/sextante/r/RAlgorithm.py

+19-3
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,30 @@ def getCopy(self):
3737
newone.provider = self.provider
3838
return newone
3939

40-
def __init__(self, descriptionfile):
40+
def __init__(self, descriptionFile, script=None):
4141
GeoAlgorithm.__init__(self)
42-
self.descriptionFile = descriptionfile
43-
self.defineCharacteristicsFromFile()
42+
self.script = script
43+
self.descriptionFile = descriptionFile
44+
if script is not None:
45+
self.defineCharacteristicsFromScript()
46+
if descriptionFile is not None:
47+
self.defineCharacteristicsFromFile()
4448

4549
def getIcon(self):
4650
return QtGui.QIcon(os.path.dirname(__file__) + "/../images/r.png")
4751

52+
def defineCharacteristicsFromScript(self):
53+
lines = self.script.split("\n")
54+
self.silentOutputs = []
55+
self.name = "[Unnamed algorithm]"
56+
self.group = "User R scripts"
57+
for line in lines:
58+
if line.startswith("##"):
59+
try:
60+
self.processParameterLine(line.strip("\n"))
61+
except:
62+
pass
63+
4864
def defineCharacteristicsFromFile(self):
4965
self.script = ""
5066
self.commands=[]
+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
##layer = raster
1+
##[Example scripts]=group
2+
##layer = raster
23
##showplots
34
hist(as.matrix(layer))

src/sextante/script/EditScriptDialog.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def setupUi(self):
3131
if self.alg != None:
3232
self.text.setText(self.alg.script)
3333
self.editHelpButton = QtGui.QPushButton()
34-
self.editHelpButton.setText("Edit model help")
34+
self.editHelpButton.setText("Edit script help")
3535
self.buttonBox.addButton(self.editHelpButton, QtGui.QDialogButtonBox.ActionRole)
3636
QObject.connect(self.editHelpButton, QtCore.SIGNAL("clicked()"), self.editHelp)
3737
self.saveButton = QtGui.QPushButton()

0 commit comments

Comments
 (0)