Skip to content

Commit

Permalink
Arch: Add right-click option to schedules to (re)generate result spre…
Browse files Browse the repository at this point in the history
…adsheet
  • Loading branch information
yorikvanhavre committed Jul 18, 2019
1 parent 4c52b12 commit 82dd7f0
Showing 1 changed file with 24 additions and 12 deletions.
36 changes: 24 additions & 12 deletions src/Mod/Arch/ArchSchedule.py
Expand Up @@ -119,16 +119,18 @@ def onChanged(self,obj,prop):
sp = FreeCAD.ActiveDocument.addObject("Spreadsheet::Sheet","Result")
obj.Result = sp

def setSpreadsheetData(self,obj):
def setSpreadsheetData(self,obj,force=False):

"""Fills a spreadsheet with the stored data"""

if not hasattr(self,"data"):
self.execute(obj)
if not hasattr(self,"data"):
return
if not self.data:
return
if not obj.Result:
if obj.CreateSpreadsheet:
if obj.CreateSpreadsheet or force:
import Spreadsheet
sp = FreeCAD.ActiveDocument.addObject("Spreadsheet::Sheet","Result")
obj.Result = sp
Expand Down Expand Up @@ -217,20 +219,20 @@ def execute(self,obj):
else:
inv = False
prop = args[0].upper()
val = args[1].upper()
fval = args[1].upper()
if prop == "TYPE":
prop == "IFCTYPE"
if inv:
if prop in props:
csprop = o.PropertiesList[props.index(prop)]
if args[1].upper() in getattr(o,csprop).upper():
if fval in getattr(o,csprop).upper():
ok = False
else:
if not (prop in props):
ok = False
else:
csprop = o.PropertiesList[props.index(prop)]
if not (args[1].upper() in getattr(o,csprop).upper()):
if not (fval in getattr(o,csprop).upper()):
ok = False
if ok:
nobjs.append(o)
Expand Down Expand Up @@ -288,6 +290,9 @@ def execute(self,obj):
d = getattr(d,v)
if hasattr(d,"Value"):
d = d.Value
except:
FreeCAD.Console.PrintWarning(translate("Arch","Unable to retrieve value from object")+": "+o.Name+"."+".".join(vals)+"\n")
else:
if verbose:
if tp and unit:
v = fs.format(FreeCAD.Units.Quantity(d,tp).getValueAs(unit).Value)
Expand All @@ -303,9 +308,7 @@ def execute(self,obj):
self.data["C"+str(li)] = unit
else:
self.data["B"+str(li)] = str(d)
except:
FreeCAD.Console.PrintWarning(translate("Arch","Unable to retrieve value from object")+": "+o.Name+"."+".".join(vals)+"\n")
else:

if not sumval:
sumval = d
else:
Expand Down Expand Up @@ -395,6 +398,15 @@ def getDefaultDisplayMode(self):
def setDisplayMode(self,mode):
return mode

def setupContextMenu(self,vobj,menu):
action1 = QtGui.QAction(QtGui.QIcon(":/icons/Arch_Schedule.svg"),"Attach spreadsheet",menu)
QtCore.QObject.connect(action1,QtCore.SIGNAL("triggered()"),self.attachSpreadsheet)
menu.addAction(action1)

def attachSpreadsheet(self):
if hasattr(self,"Object"):
self.Object.Proxy.setSpreadsheetData(self.Object,force=True)


class ArchScheduleTaskPanel:

Expand Down Expand Up @@ -460,10 +472,10 @@ def __init__(self,obj=None):
# center over FreeCAD window
mw = FreeCADGui.getMainWindow()
self.form.move(mw.frameGeometry().topLeft() + mw.rect().center() - self.form.rect().center())

# maintain above FreeCAD window
self.form.setWindowFlags(self.form.windowFlags() | QtCore.Qt.WindowStaysOnTopHint)

self.form.show()

def add(self):
Expand Down Expand Up @@ -631,9 +643,9 @@ def accept(self):
return True

def reject(self):

"""Close dialog without saving"""

self.form.hide()
return True

Expand Down

0 comments on commit 82dd7f0

Please sign in to comment.