Arch: Windows: Added 'invert opening' and 'invert hinge' context menu items + task panel buttons

This commit is contained in:
Yorik van Havre
2020-11-19 13:13:38 +01:00
parent cb3666c07a
commit ad8d83a71b

View File

@@ -1119,6 +1119,56 @@ class _ViewProviderWindow(ArchComponent.ViewProviderComponent):
ccol = (ccol[0],ccol[1],ccol[2],t)
return ccol
def setupContextMenu(self,vobj,menu):
if hasattr(self,"Object"):
from PySide import QtCore,QtGui
import Draft_rc
action1 = QtGui.QAction(QtGui.QIcon(":/icons/Arch_Window_Tree.svg"),"Invert opening direction",menu)
QtCore.QObject.connect(action1,QtCore.SIGNAL("triggered()"),self.invertOpening)
menu.addAction(action1)
action2 = QtGui.QAction(QtGui.QIcon(":/icons/Arch_Window_Tree.svg"),"Invert hinge position",menu)
QtCore.QObject.connect(action2,QtCore.SIGNAL("triggered()"),self.invertHinge)
menu.addAction(action2)
def invertOpening(self):
"""swaps the opening modes found in this window"""
pairs = [["Mode"+str(i),"Mode"+str(i+1)] for i in range(1,len(WindowOpeningModes),2)]
self.invertPairs(pairs)
def invertHinge(self):
"""swaps the hinges found in this window"""
pairs = [["Edge6","Edge8"],["Edge5","Edge7"]]
self.invertPairs(pairs)
def invertPairs(self,pairs):
"""scans the WindowParts of this window and swaps the two elements of each pair, if found"""
if hasattr(self,"Object"):
windowparts = self.Object.WindowParts
nparts = []
for part in windowparts:
for pair in pairs:
if pair[0] in part:
part = part.replace(pair[0],pair[1])
break
elif pair[1] in part:
part = part.replace(pair[1],pair[0])
break
nparts.append(part)
if nparts != self.Object.WindowParts:
self.Object.WindowParts = nparts
FreeCAD.ActiveDocument.recompute()
else:
FreeCAD.Console.PrintWarning(translate("Arch","This window has no defined opening")+"\n")
class _ArchWindowTaskPanel:
'''The TaskPanel for Arch Windows'''
@@ -1184,6 +1234,18 @@ class _ArchWindowTaskPanel:
self.delButton.setMaximumSize(QtCore.QSize(70,40))
self.delButton.setEnabled(False)
# invert buttons
self.invertOpeningButton = QtGui.QPushButton(self.baseform)
self.invertOpeningButton.setIcon(QtGui.QIcon(":/icons/Arch_Window_Tree.svg"))
self.invertOpeningButton.clicked.connect(self.invertOpening)
self.grid.addWidget(self.invertOpeningButton, 5, 0, 1, 7)
self.invertOpeningButton.setEnabled(False)
self.invertHingeButton = QtGui.QPushButton(self.baseform)
self.invertHingeButton.setIcon(QtGui.QIcon(":/icons/Arch_Window_Tree.svg"))
self.invertHingeButton.clicked.connect(self.invertHinge)
self.grid.addWidget(self.invertHingeButton, 6, 0, 1, 7)
self.invertHingeButton.setEnabled(False)
# add new
ui = FreeCADGui.UiLoader()
@@ -1366,6 +1428,11 @@ class _ArchWindowTaskPanel:
self.retranslateUi(self.baseform)
self.basepanel.obj = self.obj
self.basepanel.update()
for wp in self.obj.WindowParts:
if ("Edge" in wp) and ("Mode" in wp):
self.invertOpeningButton.setEnabled(True)
self.invertHingeButton.setEnabled(True)
break
def addElement(self):
@@ -1579,11 +1646,22 @@ class _ArchWindowTaskPanel:
self.addp5.setToolTip(QtGui.QApplication.translate("Arch", "If this is checked, the default Offset value of this window will be added to the value entered here", None))
self.field6.setText(QtGui.QApplication.translate("Arch", "Get selected edge", None))
self.field6.setToolTip(QtGui.QApplication.translate("Arch", "Press to retrieve the selected edge", None))
self.invertOpeningButton.setText(QtGui.QApplication.translate("Arch", "Invert opening direction", None))
self.invertHingeButton.setText(QtGui.QApplication.translate("Arch", "Invert hinge position", None))
for i in range(len(WindowPartTypes)):
self.field2.setItemText(i, QtGui.QApplication.translate("Arch", WindowPartTypes[i], None))
for i in range(len(WindowOpeningModes)):
self.field7.setItemText(i, QtGui.QApplication.translate("Arch", WindowOpeningModes[i], None))
def invertOpening(self):
if self.obj:
self.obj.ViewObject.Proxy.invertOpening()
def invertHinge(self):
if self.obj:
self.obj.ViewObject.Proxy.invertHinge()
if FreeCAD.GuiUp: