A while back AQ issued a request to finish some code located in <resource>\Framework\Providers\LVClassLibrary\NewAccessors
The with great power come great responsibility line always stuck in my head and it was on my to-do list however, it took me a while to look at it (plus my scripting skills have improved slightly since then ).
Basically the code operates on a Class which has other Classes as Data Members (composition) and allows the end user to create an API that wraps the required Data Member methods (delegation):
I have now finished off the existing code and bolted on a UI and included it with LVOOP Assistant.
I made this a separate thread for a few reasons (not discussed here).
Feedback on this feature would be really appreciated.
I thought I'd put it out for testing and to get feedback.
The aim of this tool is to speed up development.
This wasn't my first choice in how to design the GUI etc... integrating it into the current LVOOP GUI's that ship with LabVIEW would be grand, but these are locked.
So this way was by far the easiest for me.
My next mission is to see if I can get this natively included with LabVIEW
Instructions:
Class A contains other Classes as Data Members
Nesting of Data Members (stored in clusters) is also supported
Public methods are may be selected
In this case Class B is Friends with A - which means A can have B's community-scoped on their block diagram
Private and Protected scoped methods are not supported as
Private would break
Protected is not logical as LabVIEW does not allow a Child as a Data Member of a Parent
The script is accessed through the Project Provider by right-clicking on a Class (that contains data members) and selecting LVOOP Assistant >> Create Element Wrappers
The GUI will appear and allow the end user to select the Data Member that will be worked on as well the methods that will be wrapped
Public methods and green, Community methods are blue
Click a method to check/uncheck it, or use the buttons to batch check/uncheck etc...
In the example Data Member 2 is chosen - which is an instance of Class B, which has the following methods
Clicking OK creates the following methods for Class A
What is happening from a scripting perspective is that Class B's method is copied
Converted to a Class A method
Class A's BD is cleared, then the method is delegated to Class B.
Here is a demonstration (no sound)
<!-- copy and paste. Modify height and width if desired. --> <object id="scPlayer" width="957" height="652" type="application/x-shockwave-flash" data="http://content.screencast.com/users/jgcode/folders/LVOOP%20Assistant/media/d749a41d-0411-46de-a9ac-2df37c6dc6f9/jingswfplayer.swf" > <param name="movie" value="http://content.screencast.com/users/jgcode/folders/LVOOP%20Assistant/media/d749a41d-0411-46de-a9ac-2df37c6dc6f9/jingswfplayer.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#FFFFFF" /> <param name="flashVars" value="thumb=http://content.screencast.com/users/jgcode/folders/LVOOP%20Assistant/media/d749a41d-0411-46de-a9ac-2df37c6dc6f9/FirstFrame.jpg&containerwidth=957&containerheight=652&content=http://content.screencast.com/users/jgcode/folders/LVOOP%20Assistant/media/d749a41d-0411-46de-a9ac-2df37c6dc6f9/LVOOP%20Assistant%20-%20CEW.swf&blurover=false" /> <param name="allowFullScreen" value="true" /> <param name="scale" value="showall" /> <param name="allowScriptAccess" value="always" /> <param name="base" value="http://content.screencast.com/users/jgcode/folders/LVOOP%20Assistant/media/d749a41d-0411-46de-a9ac-2df37c6dc6f9/" /> Unable to display content. Adobe Flash is required.</object>
Enjoy!
-JG
Example Code in LabVIEW 2011
cew example_LV2011.zip