EiffelVision2

EiffelVision2 is a platform independent Graphical User Interface (GUI) library that allows easy, simultaneous development of Windowed applications for any Windows or Unix based platforms.  Heavily relying on Eiffel Software's premier EiffelBase library, EiffelVision2 has been designed primarily with ease of use in mind. 

Using EiffelVision2, developers can access all necessary GUI components, called widgets (buttons, windows, list views) as well as truly graphical elements such as points, lines, arcs, polygons and the like -- to develop the most modern, highly  functional graphical interactive applications.

Architecture

EiffelVision2 relies on a two-tiered architecture illustrated by the following figure:

The two tiers play complementary roles:

  • At the top level, EiffelVision2 provides fully portable graphics; and
  • At the lower level, platform-specific libraries cover the graphical mechanisms of graphics platforms such as Windows and GTK.       

Design

EiffelVision2 provides programmers with high-level classes, that provide all mechanism and data structures needed to build advanced user interfaces for deployment on almost all platforms without having to worry about detailed requirements of toolkits.

The abstract design has been derived from an analysis of user interfaces. Therefore we have classes with names like MENU, WINDOW, BUTTON, LINE or POLYGON. The features of these classes are simple, clearly defined properties or commands, like the feature `minimize' (a command) on WINDOW or `text' (a property of type STRING) on BUTTON. 

Implementation

For flexibility, EiffelVision2 is built using the bridge pattern. This means that every platform-dependant component of the library consist of two classes, plus an implementation class for each platform (currently two). One is the interface. All the features of interfaces do nothing except delegate the call to the implementation object which is coupled to it. This object has the static type of the implementation-interface with the name of the interface class, with _I appended to it. From this implementation-interface, implementation classes inherit to implement platform-specific features.