Click HERE to download Visual Classworks |
vcww32.exe
~3 MB (Windows platform) |
Release History
7.3.0.0 Project
Oriented
April 26, 2008
This is the most significant release of Visual Classworks for C++ since the very first release!
Features
- All the tools in the Visual Classworks range have undergone a major re-architecture to become project oriented instead of diagram oriented. A new project file (.vccprj) is used to hold information about all the diagrams in a project. Visual Classworks remains compatible with diagram files (.vcm and .vcw) created using previous versions of the tool and has undergone much rigorous testing but according to good practice you should back up your existing projects first before loading them into the new release.
- Creates customer reference definitions if none discovered at startup.
- Now defaults to generating code for relationships when custom reference options are used.
- Examples have been improved. Now includes a compilable Visual C++/MFC sample application.
- New diagram explorer allows you to easily navigate around projects with many class diagrams.
- New recent diagram list allows you to quickly switch between diagrams seemlessly, even across project boundaries.
- New Back and Forward buttons allow you to quickly work back or forward through your diagram history list.
7.2.0.0
April 5, 2008
Features
- Build and run options are now common to all class diagrams in a single directory. This is about the only useful scenario for building and making and so Visual Classworks has now been changed to store a single set of build and run options per project directory. Existing users of this feature will need to adjust their build and run settings to their desired configuration.
- Vista support. Visual Classworks is now compatible with Windows Vista. Previously the application ran but the online help it used did not work under Vista as WinHelp is no longer supported by Vista. Visual Classworks now uses HTML Help to deliver online help.
- New data members and new relationships now default to "private" access. Previously they defaulted to protected but this is not sufficient as classes in the same package can have direct access to a data member which can be prone to much risk.
- Uses XP look and feel for user interface elements.
- When a class name or package/path is changed (typcially during refactoring) the user is asked if they want to automatically update of all projects in the manifest that contain that class. If they choose to perform an automatic update then every project in the manifest is updated to reflect the changes to that class and any related classes are automatically regenerated so that the underlying source files are synchronized. Any healthy project, significant project should be managed by a collection of class diagrams rather than a single, very crowded class diagram so this feature should be very useful for medium to large projects.
- Previously when a class was renamed or moved to a different package/path the old class file remained. Now it is deleted.
- Added new action in class context menu: Hide getters/setters in class icon.
- After a "Resynchronize all projects in manifest" the previously open project is restored.
- "Resynchronize all projects in manifest" no longer opens each project in the slate as it progresses.
- Maximum classname and filename have been extended to 100 chars, maximum package/path name has been extended to 300 chars
- Added "Resynchronize all projects in manifest" feature. This opens every project listed in a src directory's manifest file and performs a resynchronize on each one. This is a great time saver in situations where you may have changed, lets say, pessimistic locking to optimistic locking in the persistence options for each project and you want to regenerate all the meta data files to reflect that change.
- It is now possible to enter carriage returns in the "Copyright" field in the project properties form.
- The Project properties form now allows many more characters in the copyright notice field.
- When creating a new class icon: if source code already exists for that class then the icon will be automatically marked as "Do not manage source code" (does not generate or synchronize source code from this class icon) to avoid overwriting the existing code.
- Wine support!!! Visual Classworks is now compatible with Wine (Windows Emulator on Linux) so now Linux developers can take advantage of Visual Classworks's productivity gains like Windows developers have been since 1996!
- Automatically moves icons close to left and top edges upon opening a project if the icons are too far away from these edges.
-
Allows user to check for new releases if they wish.
-
Improved message that appears when auto-saving a project that has not yet been saved.
- Shows border as a dotted line and sizing improved intuitiveness off scrolling/zooming when moving a class on the top or left edge.
- Vertical and horizontal scroll bars added to the class diagram window replace the slate map control to make it easier and more intuitive to move around larger class diagrams.
- Improved title bar in class diagram printouts.
-
Project name field increased in capacity.
Bug fixes
- Deletion of an abstract method could cause the next concrete method in the source file to also be deleted.
- Fixed problem with some error messages showing "NO_STR" instead of the correct error text.
- Message boxes now behave better after using ALT-TAB to switch to another application.
- Relationship role names which are empty (eg., like those for 'depends' and 'none' relationships) are no longer be selectable – it used to get very confusing - even for our own developers until we worked out what it was!!!
- When attempting to synchronize the source code for an existing class whose source code is no longer present the source file was not regenerated like it should have been.
- Fixed "SHIFT + drag to select" bug - only worked when direction of drag was from top/right to right/bottom.
- Fixed bug which limited the number of classes to 5 in the freeware and trial versions and gave incorrect messages regarding the design not being saved when closing a design. This limitations have been completely removed - there are no class limits to the freeware or trial versions.
-
Fixed problem with View | Entire Slate.
-
Fixed problem with printing design slate when more than one page is required.
- Fixed problem with line thickness of the arrow on inheritance/extends relationships when printing.
- Fixed flickering when displaying Print Preview.
-
Fixed false detection of DEP violation that occurs on some newer processors.
- When saving a C++ project (made in Visual Classworks) as a Java project (made in Javelin) or visa versa then the default filename extension is updated to reflect the new language.
- Project name is no longer reset to “untitled” each time the Project Options form is opened.
- Fixed potential issue while running multiple instances of Visual Classworks at the same time caused by clashing of temporary files used to hold intermediate source file content.
- Editing keep section of a library class comes up with warning – fine but then follows with another warning “InitAccess – already accessed by another process”. This is now fixed by displaying a warning that states that extra sections of library classes are not accessible.
7.0.7.7 July 18, 2006
Features
-
Improved behavior and experience of evaluation mode. Evaluation is now fully functional for 15 days. This means that it will perform exactly like a licensed version for 15 days then you’ll need to purchase a license key to continue operation – fortunately we’ve just made the price so attractive that it will be easy for everyone to own their own legal copy!
-
Added explicit support for the generation of meta-data elements required to support optimistic locking for both JDO and Hibernate. The developer can choose the optimistic locking strategy to use (none, version, timestamp or compare state/columns) and choose a column name to use to store the versioning or timestamp in.
-
Silently saves the project file whenever the members dialog box is closed to reduce the scope of lost data in the event of a power failure or operating system crash.
-
Fixed an endless loop bug in the inbuilt editor when doing a search and replace when the replace text contains the search text as a substring.
Bug fixes
-
Code generation dialog box now forces user to select from the “Implemented by” list box if a code generation is selected. This now avoids a previously possible crash in the case that nothing was selected in this list box.
-
Could not open a method body for editing if a line exceeded 400 characters in length.
-
Fixed some delayed deletion of dialog objects. These eventually would get deleted but now they are deleted immediately after they are used.
7.0.7.2 April 16, 2006
Bug fixes
- Fixed potential unexpected program termination as a result of the way Visual Classworks' in-built editor handles the Ok and File|Save actions when ‘{‘ ‘}’ brackets do not match and the window does not close.
- Fixed in-built editor’s over zealous bracket match check when saving changes to code with multiple ‘{‘ ‘}’ sequences (eg., an ‘extras’ section with 2 inner classes for example).
7.0.7.1 April 14, 2006
Features
- The inbuilt source code editor has been upgraded to a completely new editor that has syntax highlighting, line number display plus improved search and replace functionality.
- Removed message box that appears during generation when a Pattern Wizard has not been fully configured. Now a message appears in the source code instead.
- New ‘Transaction Managing Proxy’ Pattern wizard: The new pattern wizard mechanism streamlines the creation of various patterns. The transaction managing proxy helps create a proxy for an implementation class by implementing all methods of a common super class/base class and wrapping each method call to the implementation class within transaction begin/commit/rollback constructs.
- New ‘Custom Proxy’ Pattern wizard: The new pattern wizard mechanism streamlines the creation of various patterns. The custom proxy helps create a proxy for an implementation class by implementing all methods of a common super class/base class and wrapping each method call to the implementation class within four sections of user customizable code.
- Previously when deleting a class with relationships the tool aborted the operation with a message that said, “Can’t delete class because it has relationships”. Now user is prompted to have the tool automatically remove the relation relationships and then delete the class.
- The class members dialog now displays abstract methods in an italic font to match the way they are displayed in the class icon.
- New ‘Implementor’ Pattern Wizard:. The implementor pattern is activated implicitly whenever a class extends/derives/implements an abstract class or interface. That class’ import/include section will automatically import/include all of the ‘dependencies’ of the base/superclass/interface saving the developer time and avoiding clutter in the class diagram.
- When changing a non abstract method to abstract the developer is now notified that the method’s body will be lost and they are asked to confirm that they wish to proceed.
- If by the addition or modification of a method, a class changes from having no abstract methods to one or more abstract methods and the class’ override type is not currently “Abstract – Must be overridden” then the class will be automatically changed to abstract and the source code will be updated to include the abstract keyword in the class declaration.
- If, in the Class details form, the override type is set to non abstract but the class has one or more abstract methods then the user will be warned that the override type is being set back to “Abstract – must be overridden”
- If a class is flagged as non persistent (transient) then the persistent state of all of its attributes are overridden and treated as transient regardless of the state of the attribute’s persistent flag – it is no longer necessary to turn off persistence for each individual attribute in a non persistent class.
- The visual management of association relationships has undergone significant enhancement in this release. Many aspects of managing an association relationship have been automated to help create intuitive, appealing diagrams with very little mouse interaction.
- Association relationships now adjust their positions intuitively as the classes that they relate to are moved or when their bends ‘nodes’ are moved or created. Attempts are made, wherever possible, to form orthogonal lines (oriented at 0 or 90 degrees) from the class to the first bend node in the relationship or from the class to the other class if there are no bend nodes in the relationship.
- As classes or bend nodes are moved the anchor point(s) automatically shifts themselves to the side of the class icon that is closest to the other class or bend node.
- A new bend node can be added to relationship line simply by clicking and dragging any part of the line.
- Redundant bend nodes are automatically removed (ie., those bend node that form a line with the bend nodes either side of it are not needed) from both association and inheritance (extends) relationships.
- Dragging a horizontal or vertical line will attempt to maintain its vertical or horizontal orientation if possible.
- The “snap to grid” behavior of bend nodes in a relationship has been improved making it easier to create orthogonal lines.
- Increased the length of the source and destination fields in the “Build import specification” dialog box.
- The “Build import specification” process now adds double quotes (“) around source and destination path names to handle paths containing spaces.
- The import process now handles .imp files that contain quoted source and destination file paths containing spaces.
- Curly brace matching is performed when saving a method to avoid saving methods with unmatched braces.
Bug Fixes
- Source code synchronization: When a class’ name or path was modified in the Class Details form not all of the related classes (those that may be dependent on that class and therefore need to ‘import’ it, in Javelin, or ‘#include’ it, in Visual Classworks) were being automatically updated to reflect the change. Occasionally it was necessary to click the “Force resynchronization of all classes” tool bar button to force an update in the underlying source to reflect the changes.
- Cut/Copy/Paste when method not found: If for some reason during a method cut or copy operation the body of a non abstract method could not be found in the source code then no body was output to the source file when the method is pasted. This fixed changes the behavior of the tool such that an empty method with opening and closing { } brackets will be output for the method body when the method is pasted.
- Extra new line characters were being inserted in the imports and fields sections in some cases. This caused a frequently updated file to grow excessive amounts of white space. It is safe to delete this white space in any source files where this has occurred.
- Pasting a non abstract method to an interface: Pasting a non abstract method to an interface correctly changes the method to an abstract method but, incorrectly, the body of the method was added to the interface’s class definition.
- When changing a non abstract method to abstract the method body was not removed from the source code resulting in a compile error.
- Fixed bug: Occasionally line segments were left on screen after moving objects.
- Fixed bug: changing the state of the persistent check box in the relationship properties dialog box did result in the underlying class file being updated to reflect the change.
- Transient keyword not being generated for attributes marked as transient.
- Pasted text is converted to proper windows CR/LF endings if not already in that format.
- Code edited in Javelin/Visual Classworks was appearing with double line spacing when edited in external editors.
- Display message when opening a source file and no default editor has been specified for the extension type.
- Fixed bug when importing existing Java files. New java source files were created without any .java extension.
- Fixed occasional incorrect display of message that curly braces ‘{‘ & ‘}’ are mismatched when hitting ok in the inbuilt editor.
7.0.4.0 December 7, 2005
Bug Fixes
-
Generated setter code now uses ‘this->attributeName’ instead of ‘this.atttributeName’.
7.0.3.0 December 5, 2005
Features
-
C++ only: UFOs generator now includes include header files of persistent, abstract classes in the ‘include’ manifest file (.inc) for each project.
Bug Fixes
-
C++ only: Fixed problem with ‘Persistence Options’ dialog box.
-
Fixed crash when generating persistent support files for a project that has “none” set for the persistence options.
7.0.2.6 December 2, 2005
Features
-
Cut/Copy/Paste of a method now extracts the method body from the associated source file and copies that also. With this feature the task of refactoring an object model and it’s underlying source code has become even faster and easier than before.
-
Access icons (public, protected etc.,) are now UML conformant.
-
Improved various icons throughout the tool.
-
Introduced a file naming short cut - If a class’ filename field is left blank the class’ source files (typically .h and .cpp) will be will be given the same name as the class.
-
The directory separator in the class path field can now been a forward slash character to facilitate generation and management of source code that can be compiled on operating systems that use a forward slash (eg., Linux, Unix).
-
Automatically adds setters and getters after adding an attribute after prompting user.
-
Generates an include even when persistence type is set to none. There may be a UI project with many non persistent UI classes but it would still be convenient for them to have transient relationships with persistent objects (model objects) and so generate imports for these.
-
A default path/package can be configured for each project. Any new classes created in that project be created with the default path/package (which can be changed of course, if desired)
-
Displays multiplicity indicators for all possibilities except ‘1’. ie.,, will display 0..1, 0..*, 1..* at the closest side of the role text. The case of ‘1’ is so common that, in the interests of avoiding clutter, it can be inferred that the absence of a multiplicity indicator indicates ‘1’.
-
Changed default color scheme. Hmmm, much more corporate! You can change it easily if you want in the options menu. Just don’t choose a bright, glary white background like all the UML diagrams you see – white is a great color for paper but not good on a good color for your application backgrounds if you spend a lot of time “at the screen” like we do! We recommend using a soft gray for the modeler/coder’s background.
-
Fixed some redundant error messages.
-
Changed the size of the text used to display role names and notes.
-
Adjusted the naming on a few menu items.
-
Fixed drag/drop cursor when changing order of members.
-
When creating a relationship a much larger choice of association combinations is available in the association type dialog box. These combinations were all available previously but they required extra configuration in the reference options dialog. The most frequently used association types can now be established without the need to perform extra configuration in the reference options dialog.
-
Dependency relationships are now supported and are shown using a dashed line. Dependencies are association relationships that are included in a class diagram to represent a relationship or dependency that is not implemented by attributes in the referring class. The relationship is implied but may be implemented by attributes in a super class or via some other indirectly related classes. Dependency is a special type of “uses” relationship and so in the source file for the dependent class an import will be generated to import the class that it depends on.
-
Generation or resynchronization of a class’ java source file now adds import statements for any association relationships.
-
Evaluation switches to limited max number of classes per project after trial period expires.
-
Automatically creates any directories required by the package structure as indicated by the Package/Path field in the class properties form.
Bugs Fixed
-
Did not regenerate class after an association was added – only after an association was modified.
-
Fixed a problem when importing when the source or destination directory is set to ‘.’, ‘./’ or left blank, meaning import to current directory.
-
Fixed repaint problem at high zoom in levels. This only occurred when the zoom in level was outrageously large. The level of zoom in is now restricted so that repaint issues do not occur.
-
Fixed unexpected program termination in when doing consistency check on the development phases.
-
Fixed small memory leak when selecting all the classes in a hierarchy by Shift+Clicking on a superclass.
6.7.7 VCW Released 14/9/2005
- Added support for Interface classes in Visual Classworks (was previously available in Javelin). Users can now create a class or an interface. Interfaces do not generate .cpp files, only headers and their methods are always pure virtual (must be overridden in an implementing class). Interfaces can be declared persistent in which case extra method prototypes are generated in the class declaration which must be overridden in an implementing class.
- Added context menu option to convert between interface and implementation class types to facilitate and encourage the use of “interface based” design principles.
- Prevents the adding of data members (either via New or by Pasting) to an interface class.
- Removed ability to create “message reponse” method types. These are an old type of method used for creating GUI event handling methods in Borland’s OWL 1.0 library (16 bit!) so we can safely say that no one will need to create any new methods of this type, right?
- UFOS persistence manager does not call streaming methods on implemented interfaces: they are interfaces so they have no data to stream!
- Fixed Check latest release URL – was going to Javelin page.
- Fixed Purchase URL – was going to Javelin purchase page.
6.7.5 VCW Non public release 24/1/2005
- Fixed problem caused by transient initialization fix in previous release. Persistent relationships were only being initialized in the initPersistentData section which is not called from readObject.
6.7.0 VCW Released 31/5/2004
- The .vcm file format now uses persistent object IDs that remain constant for the duration of the life of the object regardless of how many times the project is saved or loaded. This greatly reduces the size of the "diff" produced by source code revision control systems when new objects are added to a project, making review of changes much easier and greatly reducing the risk of two developers making concurrent changes that are non mergeable. Hence this release is much more amiable to collaborative development.
- The code generated for the method "freeResources" for both STL and BIDS persistence options now calls "destroy" on objects that are Subjects (ie., they derive directly or indirectly from a class with the name Subject) instead of just "delete". This is because Subject is the "subject" class in a subject/observer pattern implementation and Subject::destroy() notifies observers that a subject is being deleted before it is deleted which is a good thing. This is a subtle but extremely important point. Subjects can not leave notification until the Subject::~Subject is reached because at that point the object is all but completely destroyed. Some observers may make calls of the subject's methods but these will fail in unpredictable ways if the object is almost completely destroyed. The destroy method performs notification and then calls delete this - at that time there should be no more observers observing this subject.
- Fixed some potential access violations (none of these were reported but its good to preemptively fix them!) and some minor memory leaks.
6.6.4.1 VCW Released 30/3/2004
- Public, protected or private access can be assigned to association relationships. Each data declaration that implements an association will be generated with the appropriate access specifier.
- The position where an association attaches to a class is now only adjusted when necessary when the dimensions of the class change. Previously the position of associations attached on the right or bottom sides were always adjusted whenever the class dimensions changed.
- Member dialog: Fixed crash when drag and drop in list boxes where no items exist.
- Member dialog: Fixed missing drag cursor.
- Fixed some problems when code sections that do not have any real code (ie., just comments) are generated. If a section was generated with no real code then when it was regenerated the comments in that section were duplicated at each regen.
6.6.1 VCW Released 22/9/2003