Saturday, May 8, 2010

Creating a consistent RCP GUI

We are developing an RCP application and after sometime we realized that our views/editors are not consistent in the common functionalities they provide to the user. I came up with a style/consistency guide to address this.

Views/Editors: (Some apply to dialog/wizards also)

1) Make sure all fields have tooltips
2) Make sure tab functionality works
3) Make sure field validation is done for text fields (no characters in number fields, no numbers in character fields etc.,)
4) Make sure to set initial focus to a primary field
5) Make sure to add a dynamic free text filter for all explorer trees and tables/tree tables
6) Make sure to add sorting functionality for all tables
7) Make sure to do long running operations in background thread. If it is a big operation use jobs framework, else use BusyIndicator so that user has clue of what is going on.
8) Make sure all strings are externalized. If not applicable, make sure to add //$NON-NLS-1$ comment
9) Make sure to add context sensitive id to views/editors so that Context sensitive help works
10) Make sure to add cheat sheet for the new view/editor
11) Make sure to dispose resources in dispose() method
12) In the case of editors, make sure that equals/hashCode for editor input is done right so that multiple editors do not open when opening the same element
13) In the case of editors, make sure that editor has input factory so that the editor is persisted properly
14) Make sure to develop the view/editor using MVP pattern
15) Make sure to put model/presenter in core (non UI) bundle and add test cases for them

We normally don't find these requirements in a user story, since user story would normally talk about business functionality. I think this would help in creating a consistent UI and also make the code better. This would also help the testers to know what to look for in every view/editor and raise a bug if a particular one does not support it. Even though this mainly addresses RCP GUI, many of these points would apply for any GUI.

Do you have any comments on these or have more to add? Your comments are welcome.

No comments: