From 1e333f4ef3882d9fc19399dbc62d58cddb676a1e Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 3 Jul 2016 18:41:33 -0300 Subject: [PATCH] Draft: Fixed buggy units display in Draft widgets --- src/Base/UnitsSchemaImperial1.cpp | 6 ++-- src/Mod/Draft/DraftGui.py | 50 +++++++++++++------------------ src/Mod/Draft/DraftTools.py | 8 ++--- 3 files changed, 28 insertions(+), 36 deletions(-) diff --git a/src/Base/UnitsSchemaImperial1.cpp b/src/Base/UnitsSchemaImperial1.cpp index 9f1bbd8aaff3..6506b166e6a5 100644 --- a/src/Base/UnitsSchemaImperial1.cpp +++ b/src/Base/UnitsSchemaImperial1.cpp @@ -193,7 +193,7 @@ QString UnitsSchemaImperialBuilding::schemaTranslate(Base::Quantity quant,double if(unit == Unit::Length){ unitString = QString::fromLatin1("in"); factor = 25.4; - double inchValue = quant.getValue()/25.4; + double inchValue = std::abs(quant.getValue())/25.4; int feet = inchValue/12; double inchPart = inchValue - (double)feet*12; int inches = (int)inchPart; @@ -203,10 +203,12 @@ QString UnitsSchemaImperialBuilding::schemaTranslate(Base::Quantity quant,double fraction = 0.0; } // if the quantity is too small it is rounded to zero - if (quant.getValue() <= 1.5875) + if (std::abs(quant.getValue()) <= 1.5875) return QString::fromLatin1("0"); // build representation std::stringstream output; + if (quant.getValue() < 0) + output << "-"; // feet if (feet > 0) { output << feet << "'"; diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index c36800a3b05d..b4da7f1b5373 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -140,15 +140,9 @@ def displayExternal(internValue,decimals=4,dim='Length',showUnit=True): from FreeCAD import Units if dim == 'Length': - qty = FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Length) - pref = qty.getUserPreferred() - conversion = pref[1] - uom = pref[2] + return FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Length).UserString elif dim == 'Angle': - qty = FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Angle) - pref=qty.getUserPreferred() - conversion = pref[1] - uom = pref[2] + return FreeCAD.Units.Quantity(internValue,FreeCAD.Units.Angle).UserString else: conversion = 1.0 uom = "??" @@ -241,8 +235,9 @@ def __init__(self): self.alock = False self.angle = None self.DECIMALS = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("Decimals",2) - self.FORMAT = makeFormatSpec(self.DECIMALS,'Length') - self.AFORMAT = makeFormatSpec(self.DECIMALS,'Angle') + self.x = 0 + self.y = 0 + self.z = 0 self.uiloader = FreeCADGui.UiLoader() if self.taskmode: @@ -392,13 +387,13 @@ def setupToolBar(self,task=False): self.layout.addLayout(bl) self.labelx = self._label("labelx", xl) self.xValue = self._inputfield("xValue", xl) #width=60 - self.xValue.setText(self.FORMAT % 0) + self.xValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) self.labely = self._label("labely", yl) self.yValue = self._inputfield("yValue", yl) - self.yValue.setText(self.FORMAT % 0) + self.yValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) self.labelz = self._label("labelz", zl) self.zValue = self._inputfield("zValue", zl) - self.zValue.setText(self.FORMAT % 0) + self.zValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) self.pointButton = self._pushbutton("addButton", bl, icon="Draft_AddPoint", width=100) # text @@ -413,20 +408,20 @@ def setupToolBar(self,task=False): self.layout.addLayout(al) self.labellength = self._label("labellength", ll) self.lengthValue = self._inputfield("lengthValue", ll) - self.lengthValue.setText(self.FORMAT % 0) + self.lengthValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) self.labelangle = self._label("labelangle", al) self.angleLock = self._checkbox("angleLock",al,checked=self.alock) self.angleValue = self._inputfield("angleValue", al) - self.angleValue.setText(self.AFORMAT % 0) + self.angleValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Angle).UserString) # shapestring self.labelSSize = self._label("labelSize", self.layout) self.SSizeValue = self._inputfield("SSizeValue", self.layout) #, width=60) - self.SSizeValue.setText(self.FORMAT % 1.0) + self.SSizeValue.setText(FreeCAD.Units.Quantity(1,FreeCAD.Units.Length).UserString) self.labelSTrack = self._label("labelTracking", self.layout) self.STrackValue = self._inputfield("STrackValue", self.layout) #, width=60) - self.STrackValue.setText(self.FORMAT % 0) + self.STrackValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) self.labelSString = self._label("labelString", self.layout) self.SStringValue = self._lineedit("SStringValue", self.layout) self.SStringValue.setText("") @@ -447,12 +442,12 @@ def setupToolBar(self,task=False): self.layout.addLayout(ol) self.offsetLabel = self._label("offsetlabel", ol) self.offsetValue = self._inputfield("offsetValue", ol) - self.offsetValue.setText(self.FORMAT % 0) + self.offsetValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) rl = QtGui.QHBoxLayout() self.layout.addLayout(rl) self.labelRadius = self._label("labelRadius", rl) self.radiusValue = self._inputfield("radiusValue", rl) - self.radiusValue.setText(self.FORMAT % 0) + self.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) self.isRelative = self._checkbox("isRelative",self.layout,checked=self.relativeMode) self.hasFill = self._checkbox("hasFill",self.layout,checked=self.fillmode) self.continueCmd = self._checkbox("continueCmd",self.layout,checked=self.continueMode) @@ -472,7 +467,7 @@ def setupToolBar(self,task=False): self.layout.addLayout(gl) self.gridLabel = self._label("gridLabel", gl) self.gridValue = self._inputfield("gridValue", gl) - self.gridValue.setText(self.FORMAT % 0) + self.gridValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) ml = QtGui.QHBoxLayout() self.layout.addLayout(ml) self.mainlineLabel = self._label("mainlineLabel", ml) @@ -771,10 +766,7 @@ def selectPlaneUi(self): self.gridLabel.show() self.gridValue.show() p = Draft.getParam("gridSpacing",1.0) - if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("UserSchema",0) == 5: - self.gridValue.setText(FreeCAD.Units.Quantity(p,FreeCAD.Units.Length).UserString) - else: - self.gridValue.setText(self.FORMAT % p) + self.gridValue.setText(FreeCAD.Units.Quantity(p,FreeCAD.Units.Length).UserString) self.mainlineLabel.show() self.mainlineValue.show() p = Draft.getParam("gridEvery",10) @@ -869,7 +861,7 @@ def offsetUi(self): self.isCopy.show() self.occOffset.show() self.labelRadius.setText(translate("draft","Distance")) - self.radiusValue.setText(self.FORMAT % 0) + self.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) self.radiusValue.setFocus() self.radiusValue.selectAll() @@ -931,7 +923,7 @@ def trimUi(self,title=translate("draft","Trim")): self.taskUi(title) self.radiusUi() self.labelRadius.setText(translate("draft","Distance")) - self.radiusValue.setText(self.FORMAT % 0) + self.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) self.radiusValue.setFocus() self.radiusValue.selectAll() @@ -939,7 +931,7 @@ def radiusUi(self): self.hideXYZ() self.labelRadius.setText(translate("draft", "Radius")) self.labelRadius.show() - self.radiusValue.setText(self.FORMAT % 0) + self.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) self.radiusValue.show() def textUi(self): @@ -966,7 +958,7 @@ def SSizeUi(self): self.SStringValue.hide() self.continueCmd.hide() self.labelSSize.show() - self.SSizeValue.setText(self.FORMAT % 1.0) + self.SSizeValue.setText(FreeCAD.Units.Quantity(1,FreeCAD.Units.Length).UserString) self.SSizeValue.show() self.SSizeValue.setFocus() @@ -975,7 +967,7 @@ def STrackUi(self): self.labelSSize.hide() self.SSizeValue.hide() self.labelSTrack.show() - self.STrackValue.setText(self.FORMAT % 0) + self.STrackValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) self.STrackValue.show() self.STrackValue.setFocus() diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 3783afa4ef3f..bf15fd549333 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -89,9 +89,7 @@ def msg(text=None,mode=None): def formatUnit(exp,unit="mm"): '''returns a formatting string to set a number to the correct unit''' - d = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("Decimals",2) - f = "%." + str(d) + "f " + unit - return f % exp + return FreeCAD.Units.Quantity(exp,FreeCAD.Units.Length).UserString def selectObject(arg): '''this is a scene even handler, to be called from the Draft tools @@ -1131,7 +1129,7 @@ def action(self,arg): self.drawArc() else: self.ui.labelRadius.setText("Start angle") - self.ui.radiusValue.setText(self.ui.AFORMAT % 0) + self.ui.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Angle).UserString) self.linetrack.p1(self.center) self.linetrack.on() self.step = 2 @@ -2345,7 +2343,7 @@ def action(self,arg): self.center = self.point self.node = [self.point] self.ui.radiusUi() - self.ui.radiusValue.setText(self.ui.AFORMAT % 0) + self.ui.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Angle).UserString) self.ui.hasFill.hide() self.ui.labelRadius.setText("Base angle") self.arctrack.setCenter(self.center)