Arch: Switched structure and window to Units system

This commit is contained in:
Yorik van Havre
2014-04-06 18:47:46 -03:00
parent 95d8536ff3
commit 583d4f4525
4 changed files with 72 additions and 71 deletions

View File

@@ -21,7 +21,7 @@
#* *
#***************************************************************************
import FreeCAD,Draft,ArchComponent,DraftVecUtils,ArchCommands
import FreeCAD,Draft,ArchComponent,DraftVecUtils,ArchCommands,Units
from FreeCAD import Vector
if FreeCAD.GuiUp:
import FreeCADGui
@@ -41,6 +41,7 @@ WindowPresets = ["Fixed", "Open 1-pane", "Open 2-pane", "Sash 2-pane",
"Sliding 2-pane", "Simple door", "Glass door"]
Roles = ["Window","Door"]
def makeWindow(baseobj=None,width=None,height=None,parts=None,name=translate("Arch","Window")):
'''makeWindow(baseobj,[width,height,parts,name]): creates a window based on the
given base 2D object (sketch or draft).'''
@@ -358,6 +359,12 @@ def makeWindowPreset(windowtype,width,height,h1,h2,h3,w1,w2,o1,o2,placement=None
class _CommandWindow:
"the Arch Window command definition"
def __init__(self):
# hack for inputwidgets
global setArchWindowParamFunction
setArchWindowParamFunction = self.setParams
def GetResources(self):
return {'Pixmap' : 'Arch_Window',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Window","Window"),
@@ -373,6 +380,8 @@ class _CommandWindow:
self.Preset = 0
self.baseFace = None
self.wparams = ["Width","Height","H1","H2","H3","W1","W2","O1","O2"]
self.DECIMALS = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("Decimals",2)
self.FORMAT = "%." + str(self.DECIMALS) + "f mm"
# auto mode
if sel:
@@ -487,54 +496,51 @@ class _CommandWindow:
def taskbox(self):
"sets up a taskbox widget"
d = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("Decimals",2)
w = QtGui.QWidget()
ui = FreeCADGui.UiLoader()
w.setWindowTitle(translate("Arch","Window options"))
lay0 = QtGui.QVBoxLayout(w)
grid = QtGui.QGridLayout(w)
# presets box
layp = QtGui.QHBoxLayout()
lay0.addLayout(layp)
labelp = QtGui.QLabel(translate("Arch","Preset"))
layp.addWidget(labelp)
valuep = QtGui.QComboBox()
valuep.addItems(["Create from scratch"]+WindowPresets)
valuep.setCurrentIndex(self.Preset)
layp.addWidget(valuep)
grid.addWidget(labelp,0,0,1,1)
grid.addWidget(valuep,0,1,1,1)
QtCore.QObject.connect(valuep,QtCore.SIGNAL("currentIndexChanged(int)"),self.setPreset)
# image display
self.im = QtSvg.QSvgWidget(":/ui/ParametersWindowFixed.svg")
self.im.setMaximumWidth(200)
lay0.addWidget(self.im)
self.im.setMinimumHeight(120)
grid.addWidget(self.im,1,0,1,2)
self.im.hide()
# parameters
i = 2
for param in self.wparams:
l = QtGui.QHBoxLayout()
lay0.addLayout(l)
lab = QtGui.QLabel(translate("Arch",param).decode("utf8"))
l.addWidget(lab)
setattr(self,"val"+param,QtGui.QDoubleSpinBox())
setattr(self,"val"+param,ui.createWidget("Gui::InputField"))
wid = getattr(self,"val"+param)
wid.setDecimals(d)
wid.setMaximum(99999.99)
if param == "Width":
wid.setValue(self.Width)
wid.setText(self.FORMAT % self.Width)
elif param == "Height":
wid.setValue(self.Height)
wid.setText(self.FORMAT % self.Height)
else:
wid.setValue(self.Thickness)
wid.setText(self.FORMAT % self.Thickness)
setattr(self,param,self.Thickness)
l.addWidget(wid)
l.setEnabled(False)
QtCore.QObject.connect(getattr(self,"val"+param),QtCore.SIGNAL("valueChanged(double)"),self.setParams)
grid.addWidget(lab,i,0,1,1)
grid.addWidget(wid,i,1,1,1)
i += 1
FreeCAD.wid = wid
exec("""def valueChanged(d):
setArchWindowParamFunction('"""+param+"""',d)""")
QtCore.QObject.connect(getattr(self,"val"+param),QtCore.SIGNAL("valueChanged(double)"),valueChanged)
return w
def setParams(self,d):
for param in self.wparams:
setattr(self,param,float(getattr(self,"val"+param).value()))
def setParams(self,param,d):
setattr(self,param,d)
self.tracker.length(self.Width)
self.tracker.height(self.Height)
self.tracker.width(self.W1)
@@ -560,8 +566,8 @@ class _CommandWindow:
else:
self.im.load(":/ui/ParametersWindowDouble.svg")
self.im.show()
for param in self.wparams:
getattr(self,"val"+param).setEnabled(True)
#for param in self.wparams:
# getattr(self,"val"+param).setEnabled(True)
else:
FreeCADGui.Snapper.setSelectMode(True)
self.tracker.off()
@@ -801,6 +807,8 @@ class _ArchWindowTaskPanel:
def __init__(self):
self.obj = None
self.DECIMALS = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("Decimals",2)
self.FORMAT = "%." + str(self.DECIMALS) + "f mm"
self.form = QtGui.QWidget()
self.form.setObjectName("TaskPanel")
self.grid = QtGui.QGridLayout(self.form)
@@ -847,6 +855,7 @@ class _ArchWindowTaskPanel:
# add new
ui = FreeCADGui.UiLoader()
self.newtitle = QtGui.QLabel(self.form)
self.new1 = QtGui.QLabel(self.form)
self.new2 = QtGui.QLabel(self.form)
@@ -856,8 +865,8 @@ class _ArchWindowTaskPanel:
self.field1 = QtGui.QLineEdit(self.form)
self.field2 = QtGui.QComboBox(self.form)
self.field3 = QtGui.QLineEdit(self.form)
self.field4 = QtGui.QLineEdit(self.form)
self.field5 = QtGui.QLineEdit(self.form)
self.field4 = ui.createWidget("Gui::InputField")
self.field5 = ui.createWidget("Gui::InputField")
self.createButton = QtGui.QPushButton(self.form)
self.createButton.setObjectName("createButton")
self.createButton.setIcon(QtGui.QIcon(":/icons/Arch_Add.svg"))
@@ -1013,6 +1022,8 @@ class _ArchWindowTaskPanel:
f.setCurrentIndex(WindowPartTypes.index(t))
else:
f.setCurrentIndex(0)
elif i in [3,4]:
f.setProperty("text",self.FORMAT % float(t))
else:
f.setText(t)
@@ -1030,7 +1041,7 @@ class _ArchWindowTaskPanel:
# if type was not specified or is invalid, we set a default
t = WindowPartTypes[0]
else:
t = str(getattr(self,"field"+str(i+1)).text())
t = str(getattr(self,"field"+str(i+1)).property("text"))
if t in WindowPartTypes:
t = t + "_" # avoiding part names similar to types
if t == "":