Transition windows were added to EiffelStudio in version 6.2 and are used to inform the user some action is being performed that may take a few seconds or more. They are visual cues to the user, beyond a simple wait cursor, preventing any other UI interaction whilst some foreground task is being processed.
A few examples of the use of transition windows are:
- Switching between edit/debug profiles.
- Submitting exceptions reports, while the report is being posted.
- Rescanning the code template catalog for changes.
Transition windows are shown prior to running a task and are shutdown on the completion of a task.
The Anatomy of a Transition Window
A transition window is composed of three parts; a window, a message and an optional icon. The image below shows the window constituents, each part fully accessible from the
Transition windows are specialized [Popup Windows|pop-up window] but are not susceptible to demanded focusing as with pop-up windows, hence clicking elsewhere in the background will not force with window to close.
Using Transition Windows
There are two usage models for showing and performing actions whilst a transition window is shown. First there is a simplistic approach, letting the transition window do all the work for you, just by setting an action on the window. This approach frees any client from having to retain a reference to a transition window to close it when the action is performed, if necessary.
on_submit_report -- Submits a report. local l_transition: !ES_POPUP_TRANSITION_WINDOW do create l_transition.make_with_icon ( ("Submitting report, please wait...").as_string_32, submit_icon) l_transition.set_action (agent perform_submit) l_transition.show_relative_to_window (dialog) end ... perform_submit -- Performs actual submission. do ... end
Once the action has been performed the transition window will be automatically closed, so there is no need to explictly call
The other approach is to call the action, to be processed when the transition window is shown, explicitly and call
hide on the window after the action has been processed.
on_submit_report -- Submits a report. local l_transition: !ES_POPUP_TRANSITION_WINDOW do create l_transition.make_with_icon ( ("Submitting report, please wait...").as_string_32, submit_icon) l_transition.show_relative_to_window (dialog) perform_submit l_transition.hide end
Because transition windows are based on ESF dialog, they are recycled on closing so no explicit call to
recycle is needed.
Transition windows require a message but an icon is optional. However, it is recommended that every transition window have an icon.
Transition windows are not to be used in place of a wait cursor. They are for prolonged tasks processed at the users request. Too many transition windows will hinder and annoy rather than simply assist in informing the user. For example, it would seem appropriate to show a transition window when loading a project because it can take a few seconds for large projects. However, showing a transition window as the project is loaded seems like it is adding a peripheral step to the opening project process. The are also visual cues that the project is loading from within the IDE and so a transition window here would not be recommended.