From c99f4921cacecfc4e540d54cbcff0cdc4b1f97fa Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Mon, 18 Jan 2016 14:41:50 +0100 Subject: [PATCH] Implemented GZ tool variables saving and loading --- src/Mod/Ship/shipGZ/TaskPanel.py | 195 ++++++++++++++++++++++++++++++- src/Mod/Ship/shipGZ/TaskPanel.ui | 9 +- 2 files changed, 197 insertions(+), 7 deletions(-) diff --git a/src/Mod/Ship/shipGZ/TaskPanel.py b/src/Mod/Ship/shipGZ/TaskPanel.py index 9f87d58d8d..3737a52507 100644 --- a/src/Mod/Ship/shipGZ/TaskPanel.py +++ b/src/Mod/Ship/shipGZ/TaskPanel.py @@ -37,10 +37,12 @@ class TaskPanel: self.ui = Paths.modulePath() + "/shipGZ/TaskPanel.ui" def accept(self): + if self.lc is None: + return False + self.save() return True def reject(self): - self.preview.clean() return True def clicked(self, index): @@ -69,7 +71,7 @@ class TaskPanel: form = mw.findChild(QtGui.QWidget, "TaskPanel") form.angle = self.widget(QtGui.QLineEdit, "Angle") - form.n_points = self.widget(QtGui.QSpinBox, "NPoints") + form.n_points = self.widget(QtGui.QSpinBox, "NumPoints") form.var_draft = self.widget(QtGui.QCheckBox, "VariableDraft") form.var_trim = self.widget(QtGui.QCheckBox, "VariableTrim") self.form = form @@ -98,6 +100,108 @@ class TaskPanel: def initValues(self): """ Set initial values for fields """ + # Look for selected loading conditions (Spreadsheets) + self.lc = None + selObjs = Gui.Selection.getSelection() + if not selObjs: + msg = QtGui.QApplication.translate( + "ship_console", + "A loading condition instance must be selected before using" + " this tool (no objects selected)", + None, + QtGui.QApplication.UnicodeUTF8) + App.Console.PrintError(msg + '\n') + return True + for i in range(len(selObjs)): + obj = selObjs[i] + try: + if obj.TypeId != 'Spreadsheet::Sheet': + continue + except ValueError: + continue + # Check if it is a Loading condition: + # B1 cell must be a ship + # B2 cell must be the loading condition itself + doc = App.ActiveDocument + try: + if obj not in doc.getObjectsByLabel(obj.get('B2')): + continue + ships = doc.getObjectsByLabel(obj.get('B1')) + ship = None + for s in ships: + if s is None or not s.PropertiesList.index("IsShip"): + continue + ship = s + break + if ship is None: + continue + except ValueError: + continue + # Let's see if several loading conditions have been selected (and + # prompt a warning) + if self.lc: + msg = QtGui.QApplication.translate( + "ship_console", + "More than one loading condition have been selected (the" + " extra loading conditions will be ignored)", + None, + QtGui.QApplication.UnicodeUTF8) + App.Console.PrintWarning(msg + '\n') + break + self.lc = obj + self.ship = ship + if not self.lc: + msg = QtGui.QApplication.translate( + "ship_console", + "A loading condition instance must be selected before using" + " this tool (no valid loading condition found at the selected" + " objects)", + None, + QtGui.QApplication.UnicodeUTF8) + App.Console.PrintError(msg + '\n') + return True + + # We have a valid loading condition, let's set the initial field values + angle_format = USys.getAngleFormat() + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.angle = self.widget(QtGui.QLineEdit, "Angle") + form.n_points = self.widget(QtGui.QSpinBox, "NumPoints") + form.var_draft = self.widget(QtGui.QCheckBox, "VariableDraft") + form.var_trim = self.widget(QtGui.QCheckBox, "VariableTrim") + form.angle.setText(Locale.toString(angle_format.format(90.0))) + # Try to use saved values + props = self.ship.PropertiesList + try: + props.index("GZAngle") + form.angle.setText(Locale.toString(angle_format.format( + self.ship.GZAngle.getValueAs( + USys.getAngleUnits()).Value))) + except: + pass + try: + props.index("GZNumPoints") + form.n_points.setValue(self.ship.GZNumPoints) + except ValueError: + pass + try: + props.index("GZVariableDraft") + if self.ship.GZVariableDraft: + form.var_draft.setCheckState(QtCore.Qt.Checked) + else: + form.var_draft.setCheckState(QtCore.Qt.Unchecked) + except ValueError: + pass + try: + props.index("GZVariableTrim") + if self.ship.GZVariableTrim: + form.var_trim.setCheckState(QtCore.Qt.Checked) + else: + form.var_trim.setCheckState(QtCore.Qt.Unchecked) + except ValueError: + pass + + return False def retranslateUi(self): @@ -112,10 +216,10 @@ class TaskPanel: self.widget(QtGui.QLabel, "AngleLabel").setText( QtGui.QApplication.translate( "ship_gz", - "Angle", + "Maximum angle", None, QtGui.QApplication.UnicodeUTF8)) - self.widget(QtGui.QLabel, "NPointsLabel").setText( + self.widget(QtGui.QLabel, "NumPointsLabel").setText( QtGui.QApplication.translate( "ship_gz", "Number of points", @@ -127,7 +231,7 @@ class TaskPanel: "Variable draft", None, QtGui.QApplication.UnicodeUTF8)) - self.widget(QtGui.QCheckBox, "VariableDraft").setTooltip( + self.widget(QtGui.QCheckBox, "VariableDraft").setToolTip( QtGui.QApplication.translate( "ship_gz", "The ship will be moved to the equilibrium draft for each" + \ @@ -141,7 +245,7 @@ class TaskPanel: "Variable trim", None, QtGui.QApplication.UnicodeUTF8)) - self.widget(QtGui.QCheckBox, "VariableTrim").setTooltip( + self.widget(QtGui.QCheckBox, "VariableTrim").setToolTip( QtGui.QApplication.translate( "ship_gz", "The ship will be rotated to the equilibrium trim angle for" + \ @@ -150,7 +254,86 @@ class TaskPanel: None, QtGui.QApplication.UnicodeUTF8)) + def save(self): + """ Saves the data into ship instance. """ + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.angle = self.widget(QtGui.QLineEdit, "Angle") + form.n_points = self.widget(QtGui.QSpinBox, "NumPoints") + form.var_draft = self.widget(QtGui.QCheckBox, "VariableDraft") + form.var_trim = self.widget(QtGui.QCheckBox, "VariableTrim") + angle = Units.Quantity(Locale.fromString( + form.angle.text())).getValueAs('deg').Value + n_points = form.n_points.value() + var_draft = form.var_draft.isChecked() + var_trim = form.var_trim.isChecked() + + props = self.ship.PropertiesList + try: + props.index("GZAngle") + except ValueError: + try: + tooltip = str(QtGui.QApplication.translate( + "ship_gz", + "GZ curve tool angle selected [deg]", + None, + QtGui.QApplication.UnicodeUTF8)) + except: + tooltip = "GZ curve tool angle selected [deg]" + self.ship.addProperty("App::PropertyAngle", + "GZAngle", + "Ship", + tooltip) + self.ship.GZAngle = '{} deg'.format(angle) + try: + props.index("GZNumPoints") + except ValueError: + try: + tooltip = str(QtGui.QApplication.translate( + "ship_areas", + "GZ curve tool number of points selected", + None, + QtGui.QApplication.UnicodeUTF8)) + except: + tooltip = "GZ curve tool number of points selected" + self.ship.addProperty("App::PropertyInteger", + "GZNumPoints", + "Ship", + tooltip) + self.ship.GZNumPoints = n_points + try: + props.index("GZVariableDraft") + except ValueError: + try: + tooltip = str(QtGui.QApplication.translate( + "ship_areas", + "GZ curve tool variable draft selection", + None, + QtGui.QApplication.UnicodeUTF8)) + except: + tooltip = "GZ curve tool variable draft selection" + self.ship.addProperty("App::PropertyBool", + "GZVariableDraft", + "Ship", + tooltip) + self.ship.GZVariableDraft = var_draft + try: + props.index("GZVariableTrim") + except ValueError: + try: + tooltip = str(QtGui.QApplication.translate( + "ship_areas", + "GZ curve tool variable trim angle selection", + None, + QtGui.QApplication.UnicodeUTF8)) + except: + tooltip = "GZ curve tool variable trim angle selection" + self.ship.addProperty("App::PropertyBool", + "GZVariableTrim", + "Ship", + tooltip) + self.ship.GZVariableTrim = var_trim def createTask(): panel = TaskPanel() diff --git a/src/Mod/Ship/shipGZ/TaskPanel.ui b/src/Mod/Ship/shipGZ/TaskPanel.ui index 3db2d8d0bc..36fa605a32 100644 --- a/src/Mod/Ship/shipGZ/TaskPanel.ui +++ b/src/Mod/Ship/shipGZ/TaskPanel.ui @@ -24,7 +24,14 @@ - + + + 2 + + + 11 + +