Front-End
The interactive part
Frameworks
We have decided to base our efforts on the Eclipse Java Application framework. It provides with a very quick and solid starting point. We will develop Fritzing as a stand-alone application (not a plug-in) using several Eclipse projects.
Eclipse has several powerful libraries that integrate with SWT and are ideal for developing the kind of editor that we have in mind, such as:
- Rich Client Platform (RCP) as the application framework
- Standard Widget Toolkit (SWT) as the GUI toolkit
- Graphical Editor Framework (GEF) and Graphic Modeling Framework (GMF) for developing graphical editors
- Eclipse Modeling Framework (EMF) for code-generation and structured models (helpful for generating human-readable file formats)
- Graphical Modeling Framework (GMF) for tieing together GEF and EMF, and generating the basic code
Good starting points for us are the GEF examples (especially the Logic Example) and Stanford's d.tools project.
The UI is supposed to resemble that of Processing, so that we have to skin some of SWT. This means subclassing some of the widgets, but shouldn't be too much work for just a few items.
Original Evaluation
The choice of the framework was open at the beginning, with the following options.
Java
Besides the standard GUI toolkits AWT and Swing, there is the Standard Widget Toolkit (SWT) from the Eclipse project. It provides extensive features, uses a modern programming model and is constantly improved and extended. It integrates with several other powerful Eclipse projects that suit our needs, like RCP, GEF and EMF.
Another very interesting opportunity is the Java version of Qt, called QtJambi. Qt is supposed to be the most powerful cross-platform framework.
While Java is certainly the most widely known language among designers, it could be problematic technically to integrate existing EDA tools with it. Those are all in C++ or C, and the wrapping strategies that exist are usually cumbersome. On the other hand we do not necessarily want a tight integration.
Python
Python is also an easy to learn language and quite a few designers are familiar with it through things like NodeBox and Blender. The advantage of Python is that it can integrate more closely with applications written in C/C++, because it is written in C itself. The major cross-system GUI toolkits all have a python binding, like wxPython for wxWidgets and PyGTK for GTK+. Here's an overview of Python GUIs. There are a number of vector graphics libraries, e.g., pyCairo or Mirra (interactive).
Flash
Finally, there's also the opportunity to develop in Flash. Adobe has recently made strong efforts to make it more developer-friendly with ActionScript 3, the Flex environment, and AIR. Certainly the user base is large, too, but not so much in terms of Flash for application development. I do not think that it is ready yet for larger applications in terms of flexibility, performance and stability, and integration with native code would be problematic.
