2819
How to Programmatically Add a Legend to an iTool
This sample program demonstrates how a user can programmatically control the location of a legend in an iTool window. Although this example uses iPlot the locations also apply to other iTools as well.
Allowable legend positions for 'Legend_Location':
Top Left = 1
Top Center = 2
Top Right = 3 (default location)
Bottom Left = 4
Bottom Center = 5
Bottom Right = 6
Steps
- Use the TOOL keyword to the ITGETCURRENT function to retrieve the object reference to the currently active iTool.The variable 'idTool' will contain the iTool's object identifier, and the variable 'oTool' will contain the iTool's object reference.
- Call the inherited IDLitTool::DoAction method to execute the 'insert' operation on the selected item i.e. Legend.
- Use the inherited IDLitTool::FindIdentifiers method to retrieve the full object identifier of the iTool component object- in this case 'annotation'.
- Use a loop to display the different locations for all the legend annotations put location action into the undo-redo buffer and refresh window.
- Finally use the IDLitTool::CommitActions method to commit all pending transactions to the undo-redo buffer and refresh the current window.
This method is designed to be used in conjunction with the IDLitTool::DoSetProperty method.
Pro iTool_Add_legend ;Start an iPlot with some random sample data iPlot, randomu(s,15) ; 1) Retrieve the object reference to the currently-active iTool idTool = itGetCurrent(tool=oTool) ; 2) Initiate the action to execute idTool = otool->DoAction('Operations/Insert/Legend') ; 3) Determine the full object indentifier. Uncomment to show that ; it is the annotation layer. This is a needed keyword... ;print, oTool -> FindIdentifiers('*LEGEND') ; Get full object identifier of the Legend object legendID = oTool -> FindIdentifiers('*LEGEND', /ANN) ; 4) Loop used to display the different locations for the legend for i=1,6 do begin ; Change the property (location) void = oTool -> DoSetProperty(legendID[0], 'LEGEND_LOCATION', i ) ; 5) Put location action into undo-redo buffer and refresh window oTool -> CommitActions wait, 1.0 endfor END