Monday, August 10, 2009

RAD Studio 2010: ToolsAPI enhancements

With all the news filtering out about new IDE features and enhancements in RAD Studio 2010, I wanted to provide a quick "highlight" list of new things in the ToolsAPI, several of which correspond directly to new features. It should give you an idea of new things you can accomplish via IDE addins. Each bullet item also indicates the new or enhanced interfaces associated with the new feature.



  • Support for creating dockable views in the IDE. This was previously achievable using the technique described by Allen in this article: http://edn.embarcadero.com/article/21114. Now, however, there is an official ToolsAPI way to do this. The TStrings Debugger Visualizer source can serve as one example of using the new interface. Pertinent interfaces: INTACustomDockableForm and INTAServices

  • Support for plugging in addtional views in the editor space. There is support for creating new top-level editor tabs (similar to the debugger’s CPU View or Modules view and the new C++ Class Explorer) as well as creating additional bottom-level tabs (similar to the "Code", "Design" and "History" tabs). I have a very simple example that creates both types of tabs. I’ll try to get it cleaned up and posted to CodeCentral soon. Pertinent interfaces: INTACustomEditorView, INTACustomEditorViewState, INTACustomEditorViewStatusPanel, INTACustomEditorSubView, and IOTAEditorViewServices and INTAEditorServices.

  • Support for IDE Insight. Stay tuned to Mark’s blogs for more information here. Pertinent interfaces: INTAIDEInsightItem, IOTAIDEInsightCategory, IOTAIDEInsightNotifier, and IOTAIDEInsghtServices.

  • There is enhanced support for adding menu items into the Project Manager local menu. The support provides more flexibility in terms of when and where your menu items appear. Pertinent interfaces: IOTAProjectMenuItemCreatorNotifier, IOTAProjectManager, IOTAProjectMenuContext, and IOTAProjectManagerMenu.

  • IOTAProject has been enhanced to provide more complete information about which files make up a project, as well as providing better information regarding file renames and deletions. Pertinent interface: IOTAProject.

  • Support for wrtiting and registering debugger visualizers. There are sample visualizers that ship with RAD Studio 2010 that demonstrate how to use these interfaces. You can find the source in the Source\Win32\Visualizers directory under the Rad Studio 2010 installation directory. Pertinent interfaces: IOTADebuggerVisualizer, IOTADebuggerVisualizerValueReplacer, IOTADebuggerVisualizerExternalViewer, IOTADebuggerVisualizerExternalViewerUpdater, and IOTADebuggerServices.

  • Several debugger interfaces have been enhanced to support new features in the debugger (thread-specific breakpoints, freezing/thawing threads), as well as providing access to other information from the debugger (thread names, asking whether a particular type descends from another type, better access to module breakpoints). Pertinent interfaces: IOTAThread, IOTABreakpoint, and IOTADebuggerServices.

  • Support for build system notifications (CompileStarted/CompileFinished events for Projects and ProjectGroups) as well as other build system services. Pertinent interfaces: IOTACompileNotifier and IOTACompileServices.

  • New support for adding version control systems to the IDE. Pertinent interfaces: IOTAVersionControlNotifier and IOTAVersionControlServices.

  • The IOTAElideActions interface (code folding support) has been enhanced to allow more code folding actions to be accessed via the ToolsAPI. Pertinent interface: IOTAElideActions.


As always, the source code comments in the ToolsAPI.pas unit is the place to look for information for most of these ToolsAPI additions.


And just because I’m sure someone will ask, there is still no "official" documentation of the ToolsAPI, though I’ve had several inquiries from the documentation team about reviving the old (circa Delphi 7) ToolsAPI documentation. So it wouldn’t surprise me to see the official documentation return in one form or another sometime in the future.

No comments: