ApCoCoA-1:Eclipse GUI

From ApCoCoAWiki
Revision as of 14:52, 9 June 2009 by (talk)

The Eclipse GUI Project: Goal of the Project

The overall goal of the project can be described as follows:

 To create a state of the art, platform independent Graphical User Interface for faster CoCoAL program and prototype development.

Project Plan

Phase 1: Introduce a comfortable Editor covering as much features as provided by the Emacs interface.

Currently in Progress

  • Test if Xtext is suitable for generating a comfortable CoCoA Language editor.
  • Add autocompletion
  • Add autoformatting / indentation
  • Template mechanism + Toggeling
  • Add Plugins for the external binaries ApCoCoA uses
  • Make a downloadable Eclipse+ApCoCoA bundle
  • Create splash screen and icons

Current ToDos

  • Show documentation when hovering over functions
  • Adapt syntax coloring and make it configurable in the preferences
  • Provide an outline of the files being edited
  • Complete ApCoCoA perspective
  • Refactor console views and communication to CoCoA process (relate to Eclipse launching mechanism)
  • Wishlist: Parsing of the CoCoA instream (the results) to provide flexible representation of the results
  • Improve JUnit framework
  • Provide a seperate plugin zip file
  • Let user switch interactive behaviour of the current ApCoCoA editor window
  • Provide a view on the history
  • Hint, when in interactive mode and apcocoa is not started
  • Open files not in the workspace
  • Add packages-representation node to the project view (make packages files available easily)
  • Error annotation, link the error message to the corresponding part in the editor
  • Send only the selected part of the editor window to the interpreter
  • Add cheat sheets.
  • Search the system PATH for already installed ApCoCoA


  • Move project from CVS to subversion (2009-04-03)


Quick and dirty notes for myself, thought as a basis for extending to a proper developer documentation ....

General Links

Developing the ApCoCoA Plug-ins for Eclipse within Eclipse

  • Get Eclipse for RCP/Plug-in Developers from [1]. If you also develop ApCoCoALib, install the CDT features on top of it.
  • Create a new workspace directory (e.g. moccha). This will be convenient since you will have several plug-ins open to learn from (see below).
  • Install the Subclipse Plug-in by adding the site http://subclipse.tigris.org/update_1.4.x under Help > Software Updates... > Available Software.
  • Using the repository from svn://apcocoa.org/, check out the following directories under Moccha (File > New > Other... > SVN > Checkout Projects from SVN):
    • Moccha/org.apcocoa/trunk (the feature we deliver)
    • Moccha/org.apcocoa.eclipse/trunk (the plug-in related Java sources)
    • Moccha/org.apcocoa.eclipse.doc/trunk (the HTML documentation plug-in)
  • You can browse the code of other plugins (which is a great way to learn to know the Eclipse internals) as follows:
    • In the Eclipse package explorer: Right click > Import...
    • Plug-in development > Plug-ins and Fragments. Next.
    • Select 'Binary projects with linked content' in the 'Import As' section. This is a resource friendly way to import the Plug-in code. Next.
    • Select the plugins you would like to explore and browse. Finish.

Issues with Eclipse

There is this whole discussion concerning if to put the project specific .*-files under version control or not. We decided to put them under version control in order to have a consistent build process across the team. I will add some more comments on the pros and cons of the different approaches and in particular our experience as the project goes on.


Examples in our GUI: Starting external ApCoCoA process, sending CoCoAL code to esternal ApCoCoA process, history forward/back, starting Server.

To add a command, extend these extension points in the plugin.xml:

  • org.eclipse.ui.commands: here just an ID together with other attributes (name, category,...) for a certain command is defined.
  • org.eclipse.ui.handlers: this is the link between the command ID and an actual handler, ie. a class that does something when the command is called. It is possible to implement more than one handler to a certain command and to determine certain conditions when to use which handler (elements activeWhen and enabledWhen
  • org.eclipse.ui.menues: here the actual visible menu and toolbar contributions are defined along with declarations, when they are visible, eg. they are visible when, say, an editor "is in a certain context".
  • org.eclipse.ui.contexts: this defines a context which is referenced by the visibility check of the menus, toolbars,... The context is set by the following code snippet in the class ApCoCoAEditor.
 IContextService contextService = (IContextService) getSite().getService(IContextService.class);

Using the Eclipse Help System for ApCoCoA Help


Just for redundancy, the previous link mentions among others the following links:

Preparing a new release