WINDOWBUILDER PROPERTY SHEET LIBRARY ------------------------------------- This project is a fork of a subset of the WindowBuilder Eclipse plugin: http://www.eclipse.org/windowbuilder/ Specifically, it contains the subset of WindowBuilder related to the propertysheet, intended for reuse in AOSP by the ADT plugin. The fork was modified as follows: * Started with revision 424 from the trunk: http://dev.eclipse.org/svnroot/tools/org.eclipse.windowbuilder/trunk * Extracted the property package from org.eclipse.wb.core: src/org/eclipse/wb/internal/core/model/property and then everything it transitively references. This turns out to be a lot. I then started pruning out references to code we don't need, such as support for editing Java constructs such as enums, or dealing with a Java code model, etc. This means some of the files have been edited to remove methods and fields. For example, the property category code was modified to no longer support the persistent storage of categories. * The WindowBuilder code depended on a number of Apache Commons libraries such as collections, lang, etc. Since ADT already uses Guava, which provides a lot of the same functionality, I replaced all the Commons calls with Guava calls in order to avoid having to make ADT depend on (and load at runtime) the Commons libraries. * Finally, the propertysheet code was made into a library instead of a plugin, such that it can be loaded into the ADT plugin. This meant mostly rewriting the DesignerPlugin class. It has kept its name (since a lot of code references it for logging, resource loading etc), but it is no longer an actual plugin. Instead it has init and dispose methods for use by the AdtPlugin, and for logging it delegates to the ADT plugin, etc. * Icons were moved into the DesignerPlugin package such that the resource loading code could use a relative path, since with an absolute path it would be looking in the embedding plugin's resources. * To be consistent with the ADT codebase, I converted the files from \r\n to \n newlines. Other than that, all formatting was left unmodified. * Removed unused resources such as unreferences colors from IColorConstants, unneeded messages from ModelMessages, and so on. * Note also that this Eclipse project is using a modified version of the standard ADT Eclipse compiler settings: methods overriding other methods and interfaces *without* using an @Override annotation are ignored, since they were not using @Override annotations in the WindowBuilder source base. ADT ENHANCEMENTS ------------------ * I also modified the propertysheet in a few ways to add features needed by ADT. These are all bracketed in the codebase with // BEGIN ADT MODIFICATIONS ... // END ADT MODIFICATIONS Specifically, I made the property table able to expand all and collapse all. Properties have sorting priorities, and have separate name and title attributes (and tooltips show the property name rather than the title.) Text property editors allow field completion by providing IContentProposalProvider (and optionally ILabelProvider) instances via their getAdapter method. And the property table will color values differently based on whether the property is modified. (This allows us to draw default attributes differently). Finally, the propertysheet now supports "expand by default" (and for certain categories to be excluded, such as deprecations). WINDOW DOCKING --------------- The window docking support (the "FlyoutControlComposite" and supporting classes) was also included, since it's used to present the property sheet view in ADT. This code was also modified in a couple of minor ways, using the same modification markers as above: - Support invisible children (where the whole flyout is hidden) - Added a "dismiss hover" method used to hide a temporary hover (needed when the hovers are used with native drag & drop) - Added a listener interface and notification when window states chane (used to auto-zoom the layout canvas when windows are collapsed or expanded). - Changed the sizeall cursor used for dragging composites from the SWT SIZE_ALL cursor to the HAND cursor since (at least on Mac) the cursor looked wrong for docking. UPDATES -------- We should keep an eye on the propertysheet code in WindowBuilder and migrate bug fixes and feature enhancements. To do that, first check out revision 424 from http://dev.eclipse.org/svnroot/tools/org.eclipse.windowbuilder/trunk That's the same baseline that this fork was based on. You can limit the checkout to just the org.eclipse.wb.core tree. Then check out the newest revision of WindowBuilder in a separate directory. Now diff the two trees. Look for diffs in the packages related to the propertysheet; this is going to be the packages that are present in this library. If any of the diffs are related to the propertysheet or supporting code, apply them to this library, and then update this document to contain the new baseline revision (use 'svnversion .' to get the number). Note that the diffs may need some rewriting if they reference Apache Commons code. Note that the ComponentsPropertiesPage.java class which is the main window in WindowBuilder is not used in our implementation; we instead have the PropertySheetPage class in ADT, so changes in that class should be checked to see whether they apply to our property sheet page (which uses the PropertyTable in a similar way, but obviously is based around our own UI model rather than the WindowBuilder ObjectInfo model.