]> SALOME platform Git repositories - modules/parametric.git/blob - src/salome/parametric/gui/wizard.py
Salome HOME
Replace Eficas by a custom GUI for the definition of execution parameters
[modules/parametric.git] / src / salome / parametric / gui / wizard.py
1 # Copyright (C) 2012 EDF
2 #
3 # This file is part of SALOME PARAMETRIC module.
4 #
5 # SALOME PARAMETRIC module is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Lesser General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # SALOME PARAMETRIC module is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU Lesser General Public License for more details.
14 #
15 # You should have received a copy of the GNU Lesser General Public License
16 # along with SALOME PARAMETRIC module.  If not, see <http://www.gnu.org/licenses/>.
17
18 from PyQt4 import QtCore, QtGui
19
20 import salome
21 import SalomePyQt
22 sgPyQt = SalomePyQt.SalomePyQt()
23
24 from wizard_ui import Ui_Wizard
25 from selectvars import SelectVarsFrame
26 from definevalues import DefineValuesFrame
27 from execparams import ExecParamsFrame
28 from salome.parametric.study import ParametricVariable, ParametricStudy, ParametricStudyEditor
29
30
31 class Wizard(QtGui.QWidget, Ui_Wizard):
32
33   def __init__(self, parent = None):
34     QtGui.QWidget.__init__(self, parent)
35     self.setupUi(self)
36     self.connect(self.nextButton, QtCore.SIGNAL("clicked()"), self.next_step)
37     self.connect(self.previousButton, QtCore.SIGNAL("clicked()"), self.previous_step)
38     self.connect(self.OKButton, QtCore.SIGNAL("clicked()"), self.validate)
39     self.connect(self.cancelButton, QtCore.SIGNAL("clicked()"), self.close)
40     self.step_labels = []
41     for i in range(len(self.step_texts)):
42       self.step_labels.append(QtGui.QLabel(self))
43       self.stepLayout.addWidget(self.step_labels[i])
44     self.select_vars_frame = SelectVarsFrame(self)
45     self.define_values_frame = DefineValuesFrame(self)
46     self.exec_params_frame = ExecParamsFrame(self)
47     self.step_frames = [self.select_vars_frame,
48                         self.define_values_frame,
49                         self.exec_params_frame]
50     for frame in self.step_frames:
51       self.innerFrame.layout().addWidget(frame)
52     self.curstep = 0
53     self.step()
54     self.entry = None
55     self.view_id = None
56
57   def next_step(self):
58     self.curstep += 1
59     self.step()
60
61   def previous_step(self):
62     self.curstep -= 1
63     self.step()
64
65   def step(self):
66     for i in range(len(self.step_texts)):
67       if i == self.curstep:
68         self.step_labels[i].setText("<b>" + self.tr(self.step_texts[i]) + "</b>")
69         self.step_frames[i].show()
70       else:
71         self.step_labels[i].setText(self.tr(self.step_texts[i]))
72         self.step_frames[i].hide()
73     if self.curstep == 0:
74       self.previousButton.hide()
75     else:
76       self.previousButton.show()
77     if self.curstep == len(self.step_texts)-1:
78       self.nextButton.hide()
79       self.OKButton.show()
80     else:
81       self.nextButton.show()
82       self.OKButton.hide()
83     if self.step_methods[self.curstep] is not None:
84       self.step_methods[self.curstep](self)
85
86   def define_values(self):
87     exchange_vars = self.select_vars_frame.getSelectedExchangeVariables()
88     self.define_values_frame.set_variables(exchange_vars.inputVarList)
89
90   def validate(self):
91     param_study = ParametricStudy()
92     # Input variables
93     for (name, range_widget) in self.define_values_frame.varwidgets.iteritems():
94       minval = range_widget.fromSpinBox.value()
95       maxval = range_widget.toSpinBox.value()
96       step = range_widget.stepSpinBox.value()
97       var = ParametricVariable(name, minval, maxval, step)
98       param_study.add_input_variable(var)
99     # Output variables
100     exch_vars = self.select_vars_frame.getSelectedExchangeVariables()
101     for outvar in exch_vars.outputVarList:
102       param_study.add_output_variable(outvar.name)
103     # Execution parameters
104     self.exec_params_frame.gui_to_study(param_study)
105
106     # Save to Salome study
107     ed = ParametricStudyEditor()
108     if self.entry is not None:
109       ed.set_parametric_study_at_entry(param_study, self.entry)
110     else:
111       ed.add_parametric_study(param_study)
112     salome.sg.updateObjBrowser(0)
113     self.close()
114
115   def set_study(self, param_study):
116     self.entry = param_study.entry
117     self.select_vars_frame.set_vars_from_param_study(param_study)
118     self.define_values_frame.set_ranges_from_param_study(param_study)
119     self.exec_params_frame.study_to_gui(param_study)
120
121   def close(self):
122     QtGui.QWidget.close(self)
123     if self.view_id is not None:
124       sgPyQt.closeView(self.view_id)
125
126   step_texts = ["Step 1: Parametric Variables",
127                 "Step 2: Sample Definition",
128                 "Step 3: Execution Parameters"]
129
130   step_methods = [None,
131                   define_values,
132                   None]