Arch: Windows: Added 'invert opening' and 'invert hinge' context menu items + task panel buttons
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user