New to Ignition here in these recent couple weeks, and I’m at a loss for ideas as to why my power table suddenly stopped allowing me to right click it, when it’s the same as two others in different windows, and the windows are also largely the same with the same references (the other two allow me to right click them).
What’s supposed to happen is you right click anywhere in the table and it brings up an option to export to spreadsheet (xls format). I know, however, that specifically, the code for exporting to excel itself works because I also have that inside a button to the side. For some reason, the small popup won’t appear at all.
Here is the code I have in the Script Editor in the Mouse Release event for the Power Table:
def exportXLS(event):
from java.util import Date
tableName = event.source.parent.getComponent('TableName').text
now = Date()
date = system.db.dateFormat(now,"MM-dd-yyyy")
file = tableName + " " + date
data = event.source.data
dataCol = data.getColumnName(0)
noInfo = "No information found."
if(dataCol == noInfo):
system.gui.messageBox("There is no information to export!","Export Failed")
else:
system.dataset.exportExcel(file,True,data)
menu = system.gui.createPopupMenu(["Export to Spreadsheet"], [exportXLS])
menu.show(event)
A little stumped here, and any help/suggestions are appreciated.
Sorry about this grave digging message: I tried your suggestion (using it in onPopupTrigger) but I get the following error:
Traceback (most recent call last):
File "<extension-method onPopupTrigger>", line 27, in exportXLS
TypeError: getComponent(): 1st arg can't be coerced to int
Well, the short answer is that you don’t need an event.source.parent - if you’re already in an extension method, there’s a self reference back to the originating component.
The long answer has to do with Java Swing’s internals: event.source.parent, from a table, refers to the component itself. The getComponent(<name>) function is only a method on Ignition’s container types - otherwise, you have to use the underlying Java swing method Container.getComponent, which only accepts integers as arguments - each child of a container (and every Java Swing component is a container) is indexed.