G# Framework Version: 1.4.3 January 20th, 2012 The G# Framework is a free, award winning add-on toolkit for LabVIEW that adds reference based object-oriented support. It takes advantage of the new data value reference structure in LabVIEW 2009 together with the native classes and will add a full object-oriented support with excellent performance. This is the new generation of object-oriented support that makes LabVIEW as powerful as any object-oriented language. The G# Framework is a National Instrument Compatible with LabVIEW Gold product and was awarded "Add-On of the Year for Community" at NI Week 2011. Copyright © 2010-2011, AddQ Consulting, www.addq.se All rights reserved. G# is a registered trademark of AddQ Consulting. The “COMPATIBLE WITH LABVIEW” logo is a trademark of National Instruments Corporation and is used under a license from National Instruments Corporation. The G# Framework software program is a product of AddQ Consulting, not National Instruments Corporation, and AddQ Consulting is solely responsible for the G# Framework software program. Neither AddQ Consulting, nor any of the software programs and other goods and services offered by AddQ Consulting, are affiliated with, endorsed by or sponsored by National Instruments Corporation. ## SUPPORTED LABVIEW VERSIONS ## LabVIEW 2009 Full Development System or higher ## SUPPORTED OPERATING SYSTEMS ## Windows XP/Vista/7/Server 2003 R2 (32bit)/Server 2008 R2(64 bit) Red Hat Enterprise Linux WS 4 or later, openSUSE 10.3 or later Note: G# Framework will probably work on all LabVIEW supported platforms, but is not tested. ## INSTALLATION ## 1. Unzip the zip-file. 2. Run the G#Installer.vi in the installation zip-file. 3. Press 'Install' button. 4. Restart LabVIEW. 5. Done! ## UNINSTALLATION ## 1. Run the G#Installer.vi in the installation zip-file. 2. Press 'Uninstall' button. 3. Restart LabVIEW. 4. Done! ## EXAMPLES ## There are a lot of examples of how to use the G# Framework in /examples/AddQ/G#. These examples are also searchable in the LabVIEW “Find Examples…”. Search for “G#”. ## SUPPORT ## Help is available in: /help/_AddQ/Gsharp.chm (if you have trouble view this file, please right-click on the file in Explorer and select Properties and there is a button called 'Unblock') or visit the online manual: http://www.addq.se/document/GsharpOnlineManual.htm For support issues, please contact: support@addq.se. Our policy is to respond within one working day. We will not support issues regarding object-oriented design, but we can of course offer this as consultant services. Please contact: sales@addq.se Please join the G# community group for more information, discussions and ideas at: http://decibel.ni.com/content/groups/gsharp For information about the latest version and updates, please visit G# Framework website (http://www.addq.se/gsharp) ## LICENSE ## 3-clause license ("New BSD License" or "Modified BSD License") (http://en.wikipedia.org/wiki/BSD_license#3-clause_license_.28.22New_BSD_License.22_or_.22Modified_BSD_License.22.29) -------------------------------------------------------------------- BSD LICENSE (http://www.opensource.org/licenses/BSD-3-Clause) YOU MAY SUBLICENSE THIS SOFTWARE IN ANY WAY THAT DOES NOT CONFLICT WITH THIS LICENSE. Copyright (c) 2010-2011, AddQ Consulting All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of AddQ nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------- ## RELEASE HISTORY ## G# Framework 1.4.3 * Modified installer. Mac installation didn't work out as expected on Mac, but should be fixed now. * Updated examples for default constructor and static classes. G# 1.4.0 * Updated G#Object_StartExternalCreateProcess() and G#Object_StopExternalCreateProcess() to also register and unregister the top-level VIs start the process. Process will not be stopped until all top-level VIs stop running. Cause also a small change i GC. Credits to Mike Lyons who came up with the idea. ----------------- G# Framework 1.4.2 * Modified G#Installer file permissions. Should work on Mac OS now. * Launching help for Windows 7 64-bit machines didn't work. Fixed. G# IDE * Bugfix - Clone method to new class. If source class is locked or read-only, method wasn't allowed to be copied. * Bugfix - Clone method to new class. If destination is locked or read-only, IDE didn't check this and cause an error. * Bugfix - VI Icon Editor - it was possible to change color on protected and private methods. * Fixed - G# Examples - Didn't show up on LabVIEW 2011. G# 1.3.6 * Minor change in Kernel Delete state. An object is now unregistered before its queue is destroyed. ----------------- G# Framework 1.4.1 G# IDE * No changes G# 1.3.5 Fixed: * Serialization and Deserialization now work for aggregated objects. Only binary is supported, not XML for aggregated objects. ----------------- G# Framework 1.4.0 New feature: * In LV2011: Edit->Create SubVI will popup a G# IDE dialog (name, scope, description and icon) if VI is part of a G# class. * The selected connector pane pattern, will now be set as default in LabVIEW, else will not the correct pattern be used when creating a new sub-VI. * Added new feature 'Clone Method to New Class'. * Added new features 'Delete Property' and 'Rename Property'. Fixed: * Icon Dialogs - when the Cancel button was hidden, it was still possible to close window. * Icon overlays in project environment is now only applied to G# recognized classes, to avoid conflicts with other toolkits. * Renaming or changing scope of a method in the "utils" folder actually moved the methods to either public, protected or private folder, should stay in the "utils" folder. * Creating a property that would cause a VI name with an already existing VI in the class caused an error. A check is now performed. * Clone/Rename method didn't check if a method name existed in a different scope, causing an error if the same method existed in another scope. * Create Class - if abstract was marked, the constructor was not set as protected. * Create Method - if abstract method template is selected, the dynamic dispatch option is now enabled and greyed out. * G# Properties - access scope is now set on the property definition folder instead of the property methods directly. * G# Debugger - decreased the height of the G# Debugger window slightly in order to match 720 pixels resolution. G# 1.3.4 Fixed: * G#Object_ConvertToMoreGeneric - Converting to classes contained in lvlibs caused an error 1527. Fixed. * G#Object_GetParent - Updated way to get parent reference type. Didn't work for built exe files else. * G#RemoteProxy_CreateProxyObject - Create or lookup existing flag wasn't connected. ----------------- G# IDE 1.3.1 Fixed: * Exporting and importing description when a library contained a class didn't work. * Exporting and importing description to txt-file, VIs occur multiple times when classes or VIs contained in a library. Now only once. * Exporting and importing descriptions to txt-file, error in, error out, reference in and reference out is not included in the file anymore. * Exporting and importing descriptions to txt-file, G# utils methods was included. Now these are not included anymore. ----------------- G# IDE 1.3.0 Remote Debugger Edition New: * Added G#DebugServer for remote debugging and updated G#Debugger to connect to this G#DebugServer. * G#IDE updated to meet requirements of LabVIEW 2011. * An error log is now generated in the temporary folder named "G#IDE error log #.log" when an error occurs in the G# IDE. * Added support for 5x3x3x5 connector pane pattern. Fixed: * Create Method - Creating a method with same name but different scope, caused an IDE error. * Convert Classes to G# - Native LabVIEW classes that should be ignored, caused the converter to create an error if it was missing a parent class. * G#Interface - Removed all "Call Parent Method" with a direct insert of the method. This call was not allowed in LV2011. * Shortcut 'CTRL + .' (abort VI) caused all IDE dialogs to stop and caused LabVIEW to hang. * Create Class - when using 4x2x2x4 or 5x3x3x5 connector pane patterns, all methods in the class weren't set to this pattern, except for the overriden methods from G#Object. Changed: * G# Template - Constructor, moved base class constructor to be called after the attributes been initialized. G# 1.3.3 Added: * New G#Object util method - G#Object_ConvertToMoreGeneric. This method will convert a subclass reference into a more generic parent reference including the run-time type. Changed: * When creating a new object with the 'Create' method, a new object is always created (just as before). If this object was named, the name was not saved and showed in the G#Debugger, but now the name will appear in the G#Debugger and also reported correctly in the GetObjectStatus method. ----------------- G# IDE 1.2.5 Changed: * G# Debugger - Aggregated objects are now highlighted in the debugger. Rearranged controls on the panels. Fixed: * Changing an icon with dark background with white bodytext and changing to a private scope, didn't change body text from white to black, causing the icon body to be completly white. * G# Debugger - items were allowed to be drag and dropped in the tree controls. Disabled this. * Clone/Rename method - if a method had a class reference out additional output, it could accidental become set dynamical dispatch. * Implemented a check in Create/Rename/Clone dialogs that the class path is not too long. * Create Property - custom types are now set correctly as controls and indicators and not as empty clusters or arrays. G# 1.3.2 Changed: * Moved XMLSerializeIgnore from utils to protected folder. Fixed: * Bugfix - G#Object_GenericDefaultConstructor and G#Object_GenericConstructor. Wrong error code if library is corrupt. G# 1.3.1 Changed: * Serialization and Deserialization now have an additional input "include aggregates". If, true aggregated objects will be serialized/deserialized. * If serialized data contains no data for aggregated data, these will not be deserialized (would else cause an error, because there is no valid data). G# 1.3.0 Changed: * Added new util method - GetAggregatedObjects. This utility method returns a list of all aggregated objects recursively. * Added new util method - GetObjectGraph. This utility method returns a list of all objects and the objects that are dependent. * Added new protected method - XMLSerializeIgnore. If implemented, a list of attributes to be ignored when deserializing the object could be added. * Serialize and Deserialize - these will now serialize the aggregated objects recursively and make a complete serialization of the entire object tree. Both theses methods are now set reentrant due to recursion. * Deserialize - this will now accept an invalid reference just for type and will automtically create the objects. * Modified Garbage Collector: - Reset user counter before killing the objects. Destructor will only run once for each object. - Object dependency graph is now analyzed before destroying the objects. Objects that no other objects are dependent of will be destroyed first. ----------------- G# IDE 1.2.4 Fixed: * When using Rename Method to only change method scope, the dialog doesn't popup and colors of icon is automatically changed. * Renaming or cloning a type def control always set file extension to .vi, instead of .ctl. * G# Debugger - when monitoring an object and the user counter was updated, the G#Debugger didn't updated "# of Users". G# 1.2.3 Changed: * Updated some descriptions * Removed the application instances added in 1.2.2. It was not suppose to be included in release. * Improved Clone() performance. ----------------- G# 1.2.2 Changed: * Updated the G# event to always add the application instance as the last element of the parameters. ----------------- G# IDE 1.2.3 Bugfix: * Dialog Create Method - In some situation when changing between normal and overriding method, it was possible to create a method without any template was selected, causing an error. * Change Inheritance - Call parent methods was replaced with a static call to the parent method, causing incorrect behavior sometimes in the classes using dependency injection. G# 1.2.1 Changes: * Set NewDebugObject.vi as reentrant. ----------------- G# IDE 1.2.2 Bugfixes: * G# Debugger - trace was cleared when switching from trace tab to object tab and back. G# 1.2.0 New features: * Added utility method G#Object_Clone.vi. Clones an object and makes an identical copy of it. Bugfixes: * Added better error management for G#Object_GenericCreate.vi, G#Object_GenericDefaultConstructor.vi and G#Object_GenericOpen.vi. ----------------- G# IDE 1.2.1 Bugfixes: * If body background color cause body text to be white, the VIs in a new created class didn't update body text color. * New classes didn't apply "Place as icons" and "Autogrow" if enabled in LabVIEW options. * G# Debugger - updating of attributes didn't work after a "refresh". A toggling was needed to another object and back before it updates. * Dialog Create Method - if selecting a method template that doesn't have any references, the dynamic dispatch option was visible. * Convert Classes to G# - An error dialog came up them updating G# classes. Changed: * G3 templates - changed default behaviour of class attributes. G# 1.1.1 * Updated G# event comments. G# 1.1.0 * Improved performance in garbage collection. * Added possibility to create a debug object (if no valid object reference is provided as input), when running in Active Debug mode in the G#Debugger. Requires to update the template. -------------------------------------------------- G# IDE 1.2.0 New features: * Added Property possibility. If LabVIEW 2010 new native properties will be used. Bugfixes: * Library icon editor didn't work correctly * Minor bugfixes. -------------------------------------------------- G# IDE 1.1.2 Bugfix: * Expanding class icon headers made method icons cleared. * Bugfix - G#Debugger didn't always update new objects in object tree correctly. * Bugfix - G#Debugger, new objects wasn't added at the end of the tree. -------------------------------------------------- G# IDE 1.1.1 Changed: * Added "Bold" option to icon texts. * Bugfix in Change Inheritance, G3 templates didn't update correctly. * Updated help. -------------------------------------------------- G# IDE 1.1.0.0 Changed: * Bugfix - Icon overlay when creating classes didn't always apply until project was reloaded. * Added G# IDE Options Dialog - Selects connector pane and color of LvNative classes * New methods now follows LabVIEW option settings if FP terminals is placed as icons and structures places as auto grow. * Override methods now follow parent methods connector pane. * All "unknown classes" like classes from other providers are now treated as LvNative classes. * Updated help. -------------------------------------------------- G# IDE 1.0.2.3 Changed: * Bugfix in G#Debugger - Garbage collector didn't work. * Minor fixes in dialogs. * Updated Help. G# 1.0.1.7 Changed: * Wire appearance changed. -------------------------------------------------- G# IDE 1.0.2.2 Changed: * Updated G# Debugger indicator to more system looks. * Updated G# IDE with link buttons to the webpage for support. * Updated the Linux help directly to the online manual. * Minor fixes in dialogs. * Updated Help. G# 1.0.1.6 Changed: * Updated G# to use error codes in range 400040 to 400059 instead of -8000 to -8013. -------------------------------------------------- G# IDE 1.0.2.1 Changed: * G# function palette - added possibility to paste a "modify attribute" In Place Element Structure directly into the code. Removed the sub palette "Memory Control". * Bugfix - The change to system controls cause the "Help" button to toggle on "return"-key, making it impossible to enter multiline descriptions in the dialogs. G# 1.0.1.5 Changed: * Added Window titles in the G#Object methods. Looks much better in the palette view. * Renamed indicator controls to use "#" instead of "nr". -------------------------------------------------- G# IDE 1.0.2.0 Changed: * Updated all dialogs to use system controls and indicators instead of modern. * Updated help with more details regarding operating system capabilities and support policy. -------------------------------------------------- G# IDE 1.0.1.9 Fixed: * Bugfix - Dialog Create Class - Abstract option was not always visible. * Bugfix - Class Project Icon overlay wasn't correctly updated when creating an abstract class. * Skip tabbing was not set for controls outside the dialog windows. Changed: * Added support to preload G# StarUML Plug-in (if installed) * Updated Help. * Changed G#BaseTemplateG3 to use the new G# modify attribute structure instead of the "old" in the method templates. * Decrease size of all method templates to support smaller resolution of the screen. New features: * Update to G# - converting from OpenGOOP is now also supported. -------------------------------------------------- G# IDE 1.0.1.8 Fixed: * Bugfix - Update classes to G# didn't work. * Bugfix - error out in the G#SubtemplateG3 was not wired in the Kernel.vi. Changed: * Updated Help. G# 1.0.1.4 Changed: * Bugfix - GetClassType() - Changed load options from 0x10 to (0x10 OR 0x20). In run-time a load dialog could appear when loading vi.lib VIs. -------------------------------------------------- G# IDE 1.0.1.7 Fixed: * Bugfix - The Edit attribute popup menus didn't grey out when not applicable, causing an error if selecting them. * Bugfix - Creating Static classes still made project icon grey instead of light green. * Bugfix - When changing between normal and override method could cause an invalid state in selection of method template causing an error. * Bugfix - Cloning a methods of a read-only class, warning was shown, but IDE still continued cloning the method. * Bugfix - Lots of changes if classes and methods are read-only. * Bugfix - On popup menu for a class didn't disable all items it should for different kind of classes. * Bugfix - Adding methods to an interface, now dynamic dispatch is always required. * Bugfix - Implementing Interface - derived methods wasn't included. Modified: * On popup menu for a class - creating methods and type defs are now before editing attributes. * Painted all panel background AddQ Grey. G# 1.0.1.3 Changed: * When creating an object with "no registration" option, it will not be created by external create process (if running). -------------------------------------------------- G# IDE 1.0.1.6 Changed: * Added new popup menu feature - Edit attribute and edit class attribute * Renamed menu itemes - Add method -> Create method and Add type def-> Create type def. Documentation didn't match. * Updated help to also contain popup menu description. -------------------------------------------------- G# IDE 1.0.1.5 Fixed: * Bugfix - Cloning a read-only method caused an error. * Bugfix - Icon Editor - a linebreak occured when using capital letters in text for each character. * Bugfix - Edit VI icon and Edit VI description. If class was read only, these action wasn't allowed, but they are. -------------------------------------------------- G# IDE 1.0.1.4 Fixed: * Bugfix - Adding private methods caused an error. Changed: * G#Debugger - Painted panel AddQ grey. * When adding methods, rename, cloning methods or type def, items are shown (expanded) in the project environment. ------------------------------------------------------------------- G# IDE 1.0.1.3 Fixed: * Rename class - bugfix, menues wasn't treated correctly. * Rename method - bugfix, callers wasn't always updated correctly. * Bugfix - The G#BaseTemplateG3 and G#SubTemplateG3 had missing methods.ini files causing it impossible to create methods. Changed: * Updated all dialogs to AddQ "look and feel". * Updated help. * Added lvclass property "SetMustOverride?" if the method is declared "Abstract" in Create Method Dialog. G# 1.0.1.2 Changed: * Deserialize - xml implementation could now handle if serialization data doesn't exact match. * G# Debugger - changed StartDebugger VI to use a static reference instead. ------------------------------------------------------------------- G# IDE 1.0.1.2 Fixed: * All change in template names wasn't changed everywhere. * Import and Export descriptions didn't treat line breaks correctly. * Bugfix in Icon Editor - using a template VI didn't work. * Minor changes in examples. Changed: * Added separator line when right-clicking on a VI or a project in the popup-menu. * Project export descriptions now also export the description of each control and indicator that is connected to the connector pane. * Import and export descriptions will now also change control descriptions. * Internal changes in paths to support Linux. New features: * Added "Import description" to the on-pop menu for project. * Added online help. G# 1.0.1.1 Changed: * Updated control descriptions + online help. * Changed timeout times to -1 instead of 10000 ms. * Bugfix in Deserialize - XML didn't work for Linux. ------------------------------------------------------------------- G# IDE 1.0.1.1 Fixed: * G# version wasn't shown in "Version information dialog". * Clone Class - An error occurred if the project was "Untitled". * Edit description - didn't work for VIs and controls. * Update to G# classes - bug, New, Delete and GetObjectStatus, didn't replace as they should. ------------------------------------------------------------------- G# IDE 1.0.1.0 Changes: * Internal changes in file structure to meet the "Compatible with LabVIEW" requirements. * Updated IDE to use latest NI-provider AddQ ini-files. * Changed names on template G#BaseTemplateG3, G#SubTemplateG3. * Updated examples to make them searchable in the LabVIEW "Search Examples". * Added G# as new menu category. New features: *Added "Auto Generate Folder" options to dialogs: CreateClass, RenameClass and CloneClass. G# 1.0.1.0 * G#Debugger - Resized window to be a bit smaller in Y-led. * Changed all error codes to be in range -8000 to -8012. Defined an error map in project\error * G#Object_GetClassType() - changed option 0x20 to 0x10 when loading. * Replaced all "Delete element" to get last element in array, by checking size and index last element ------------------------------------------------------------------- G# 1.0.0.21 Fixed: * Internal change in G#Event create when using External create Process. Debugger could cause G#Event to become invalid. * Updated G#Debugger to detected if G#Event has been changed. * G#Debugger - Drag and drop was not disabled! * G#Debugger - Added possibility to manually start external create process (without Active Debug). ------------------------------------------------------------------- G# 1.0.0.20 Fixed: * Added output reference on SendUserEvent(). * Internal change on G#Event, owner is registered. There was a reference leak for External Create Process. * Internal performance refactoring. * Removed reentrant from Garbage Collector. ------------------------------------------------------------------- G# 1.0.0.19 Fixed: * Removed the static strictly types VI server calls in 1.0.0.18. It had an unexpected behaviour by locking up the project environment. * Bugfix in GarbageCollector. External Create Process mustn't be killed before common queues are killed, caused a reference leak. * Bugfix in StartExtProcess. UserEvent must be created before ext process is executed, else there will be a reference leak. ------------------------------------------------------------------- G# 1.0.0.18 Fixed: * GenericOpen() and GenericDefaultConstructor() has now a static strictly types VI server call to sub-VI, this way callers doesn't need to be reentrant.