EiffelRibbon is a library of classes with an associated tool which allows the integration of the Microsoft Windows "Ribbon" into graphical user interfaces programmed with EiffelVision 2 and targeted to Microsoft Windows. The ribbon is part of a revamped user interface approach introduced by Microsoft with the 2007 release of the Microsoft Office applications. So you've experienced the ribbon if you've used Microsoft Word, PowerPoint, or Excel from 2007 or later.

Note: Although EiffelRibbon classes work with EiffelVision 2 which is multi-platform, systems using EiffelRibbon can be targeted only to the Microsoft Windows platform.

A ribbon on a window

Figure 1: A ribbon at the top of a window.

The EiffelRibbon library contains the classes that are used to implement the ribbon facilities. The classes in the EiffelRibbon library all have class names beginning "EV_", the default prefix for EiffelVision 2 classes. So the EiffelRibbon classes can be seen as an extension to the EiffelVision 2 library. If you've used EiffelVision 2 to create applications with graphical user interfaces, then the EiffelRibbon class won't look unfamiliar to you. However, unlike other EiffelVision 2 classes, the EiffelRibbon classes only work in applications targeted to Microsoft Windows.

To gain a detailed understanding of the goals of Microsoft's Ribbon technology including some guidelines on designing effective ribbons, see the '''Ribbons''' page on Microsoft's MSDN site.

The EiffelRibbon design tool helps you configure a ribbon in much the same way that EiffelBuild (ES Builder) helps you layout a GUI application.

The EiffelRibbon Library

The EiffelRibbon library contains the classes necessary to add ribbons to EiffelVision 2 applications. As stated above, you won't really need to use the library directly. Rather, you use the EiffelRibbon tool to build an application that uses the library classes.

Still you may find it interesting to browse the classes in the library. You'll see that as in the EiffelVision 2 library, many of the classes are there to provide support for the various elements that can be used in an application. Most of the class names for EiffelRibbon-specific elements begin with the prefix "EV_RIBBON". Some examples are: EV_RIBBON_BUTTON, EV_RIBBON_DROP_DOWN_GALLERY, and EV_RIBBON_COMBO_BOX_ITEM. Again, similar to EiffelVision 2, the class EV_RIBBON_COMBO_BOX_ITEM models an item for a EV_RIBBON_COMBO_BOX.

So, here again, if you are familiar with EiffelVision 2, then EiffelRibbon should not seem very foreign to you.

EiffelRibbon Applications

When you build an application with the EiffelRibbon tool, it generates classes for you. These classes are often clients or heirs to classes in the EiffelRibbon library. The classes generated for the objects on your ribbon should look familiar to you as well. For example, as with EiffelBuild, for each ribbon object, say a button, there will be a class ending with the suffix "_IMP" which will get regenerated each time you request the EiffelRibbon tool to generate classes. Also generated is an heir to that class with a name that does not include the suffix. This class you are free to edit, as it will not be regenerated. It is in these editable classes that you provide the action sequences for your ribbon objects' behaviors.

The class shown in the Edit pane of EiffelStudio in Figure 2 is a portion of a generated class BUTTON_CHANGE_SMALL_IMAGE, representing a ribbon button, from one of the EiffelRibbon examples. BUTTON_CHANGE_SMALL_IMAGE is a heir to BUTTON_CHANGE_SMALL_IMAGE_IMP. You can see that in the redefined version of create_interface_objects code has been added to add an agent to the select_actions for the ribbon button. In this case, it's an inline agent that will toggle the associated image back and forth between two different images.

An EiffelRibbon application in EiffelStudio.

Figure 2.

Project modes

EiffelRibbon projects can be built in one of two different project modes. The project mode is selected from the Project menu of the EiffelRibbon design tool.

The default mode, called DLL mode, is the most all encompassing project mode. It has the advantage that the full capabilities of EiffelRibbon are accessible. In DLL mode, a separate DLL is created to contain the generated code for each ribbon created for the project.

The alternative to DLL mode is Application mode. Application mode allows almost all the capabilities of DLL mode, but includes all ribbon code in the project's executable image (.exe). For this reason, it is necessary to re-freeze the project after changes when using Application mode. Re-freezing is not necessary in DLL mode.

Both modes allow multiple ribbons to be created for multiple windows. However certain restrictions apply in Application mode that do not apply in DLL mode. In DLL mode, different DLL's are created for each ribbon. These DLL's are separate and do not share data. However, in Application mode, a number of ribbon facilities, including the help button, the quick access toolbar, and the mini toolbar, are shared among all the ribbons defined. In DLL mode, these facilities are not shared and as such can be different for each ribbon.

Usage notes

System requirements

To use the EiffelRibbon library and tools you must have:

  1. Windows 7
  2. The Microsoft C compiler provided with either:
    1. Windows SDK 7.0 or greater
    2. Visual Studio 2008 or greater

Current state of development

Initial distribution:

  • The EiffelRibbon library is not usable directly. The EiffelRibbon design tool allows you to design a ribbon and will generate code that relies on the EiffelRibbon library.
  • A class EV_RIBBON_TITLED_WINDOW is provided with the library. EV_RIBBON_TITLED_WINDOW is a descendant of the standard EiffelVision 2 class EV_TITLED_WINDOW. The ribbon classes generated by EiffelRibbon tool can be added only to instances of EV_RIBBON_TITLED_WINDOW.

Known issues and limitations

Initial distribution:

  • Resizing policy is not yet supported.
  • When working in Application Mode, it is necessary to freeze the target system each time the EiffelRibbon code is regenerated. This is not necessary in DLL Mode.