Progress Indication
Author: Dusan Pavlica, Jindrich Dinga
Version: Final draft
Last update: 10/12/05
Content
1. Introduction
Responsiveness is "the software's ability to keep up with users and not make them wait." Responsiveness is often cited as the strongest factor in users' satisfaction with software applications and has been linked to users' productivity, as well.
The basic advice regarding response times:
- 0.1 second is about the limit for having the user feel that the system is reacting instantaneously, meaning that no special feedback is necessary except to display the result.
- 1.0 second is about the limit for the user's flow of thought to stay uninterrupted, even though the user will notice the delay. Normally, no special feedback is necessary during delays of more than 0.1 but less than 1.0 second, but the user does lose the feeling of operating directly on the data.
- 10 seconds is about the limit for keeping the user's attention focused on the dialog. For longer delays, users will want to perform other tasks while waiting for the computer to finish, so they should be given feedback indicating when the computer expects to be done. Feedback during the delay is especially important if the response time is likely to be highly variable, since users will then not know what to expect.
2. Requirements
Progress Indication should consist of
- full indication in a dialog for foreground tasks, full indication on status bar for background tasks
- simplified indication (e.g. hour-glass cursor) for short-time tasks
- blocking and non-blocking progress indication
- possibility to display more concurrently running tasks
- possibility to nest subtasks into a task
- starting tasks in both foreground and background
- possibility to cancel a task
3. Tasks dividing (examples)
Short-time tasks
- node expansion
- modifications in Java editor like override methods, fix imports
- fast open
- file opening in editor
- help opening, help search
- wizard processing including
- project creating
- test creating
- new Java file
- debugging (watches, expressions, connecting)
- many database actions - DB querying, command execution, logging, browsing the content
For proposed solution for short-time tasks, please click here.
Long-time background tasks
- project building
- project execution
- search (basic find, task list)
- Javadoc search
- VCS activities - all commands executed here
- J2EE deployment and all remote operations accessing J2EE servers
For proposed solution for long-time foreground/background tasks, click here.
Long-time foreground-only tasks
- startup - initialization of various parts of the platform, loading and starting modules
- shutdown - shutdown of modules, shutdown of various parts of the platform
- project open & close - project initialization and class path scanning + class index deserialization
- project import
- J2SE/J2EE platform management - changing of class path which invokes class path scanning + class index deserialization
- refactoring, more generally find usages
- installing new module without IDE restart
For proposed solution for long-time foreground-only tasks, click here.
4. UI design
Short-time tasks
For short-time tasks ( < 1.0 seconds), the pointer feedback should appear. The wait pointer indicates that an operation is in progress and the user cannot do other tasks. For all supported platforms the default wait pointer should be used. Next table shows some examples of wait cursors:
Macintosh |
Microsoft Windows |
CDE |
Long-time background tasks
The tasks, which can run on foreground/background should automatically start on background. Duration of these tasks is > 1.0 seconds.
Progress indication use cases
- The length of the process is estimated
- by time (when time is known)
- by percentage
| 1. Length of the process is estimated | |
by time (if it is known) |
|
by percentage |
|
2. Length of the process is estimated and then is changed to indefinite or is indefinite and then is estimated |
|
| 3. Length of the process is indefinite |
|
Note: If it is possible to find out, how much time the process will take, the time should be displayed. Otherwise percents will be displayed.
Proposed solution of progress indication in status line
The task, which can run on the background, is minimized to the status line and is represented as a progress bar there. The status line can be divided into two parts. The left part of status line is destinated for different kind of information (e.g. Build successful, etc.) and takes about 80% of status line width (by default). The rest of the status line is dedicated for progress bar, information about position and mode (these information is visible only when Source Editor is visible or focused - not implemented) and some icons. Progress bar, as well as icons have default position. It means when icons are not displayed in the staus line, progress bar stays at the same position (a separator is always visible).
All running processes display their names on the left from progress bar by default. Name of the last task, which was invoked, is displayed in the status line. If this task finishes earlier then the previous task, the previous task will be displayed.
Note: In the future, if there are any system tasks then the last user-invoked task is displayed in the status line by default. Tasks started automatically, without explicit user action (aka system tasks), are only listed in the popup if a user-invoked task is currently running. When the task displayed on the status line finishes, a running user-invoked task is promoted to the status line or if not present then a running system task is promoted to the status line.
Note: Special case is, when a user wants to watch certain process. After invoking this action from the pop-up window, details about that process are displayed in the status line and that process becomes superior to other processes. It means, if a user invokes another task, this task will not be displayed in the status line until:
1. the last selected task finishes or
2. user selects this task from the pop-up window
The area of progress bar is click able. On a single click the pop-up window is displayed. The area of progress indication also has a mouse over effect and the appropriate tool tip is displayed. The tool tip displays: "<number of currently running processes> running tasks. Click for details.".
MDI mode

figure 1 - proposed solution of progress indication in MDI mode
SDI mode
In SDI mode, the status line is situated under the toolbar (figure 2). The position and mode area are omitted there. These areas are situated in the Source editor status line (figure 3).

figure 2 - proposed solution of progress indication in SDI mode

figure 3 - place of Position and Mode area in SDI mode
Contextual menu
There is possible to invoke a contextual menu (with actions named below) on the name of the process as well as on its progress indication in the status line.

figure 4 - contextual menu invoked on the progress indication area
Show Processes - opens the pop-up window
Show Output - opens the appropriate "output" window (valid only when the "output" window exists)
Cancel Process - cancels and removes the process from the pop-up list (valid only when it is possible to cancel task)
Proposed solution of pop-up window
If a user clicks on "progress bar area" in the status line, the pop-up window is invoked.
In the pop-up window, there are displayed only running tasks. If a task finishes successfully or fails, then it is deleted from the list. For additional behavior of appropriate output windows see this section.
The pop-up window can be divided into two parts. First part (name of the process) takes about 70% of the pop-up window's width and the second part (progress bar and cancel button) takes approximately 30% of the width (progress bar in the pop-up window has same sizes as progress bar in the status line). The dynamical text can use whole width of the pop-up window.
This window is capable to display up to 3 task (figure 5). If the user invokes more tasks, then a scroll bar will appear. The pop-up window is expandable: if there is one running task, the pop up window's height is same as the height of the running task. For two tasks the pop-up window's height is same as the width of two displayed tasks, etc.
The pop-up window contains:
- Names of the running processes - shows the name of the running process, Dynamical text shows detailed information about the task
- Progress bar - indicates the progress of running tasks
- Cancel button - this button should appear only when a task is possible to cancel, otherwise there is no icon. By pressing this button, a modal dialog should appear and states "Are you sure you want to cancel <name of the task>?". NO - the task continues, YES - the task is cancelled and deleted from the list. Tool tip for this button should state:

figure 5 - proposed solution of pop-up window
In the pop-up window, the user can choose a process, which wants to see in the status line, by clicking on its progress indication. Then the name of the process becomes Bold as an indication that user watches this task in status line. The progress bar has "Select link" mouse over gesture and its tool tip should state: ![]()
Note: The last activated task, which is in the status line, is written in Bold style in the pop-up window unless the user invokes another task or wants to watch some certain task.
If the user wants to see more details about progress of the task, than it is displayed in one row (dynamical text), they can double click on the name of the process and the appropriate window will appear.
Contextual menu
Contextual menu is invokable on every row in the pop-up window and displays three actions, which can be performed in the certain time (see figure 6).

figure 6 - contextual menu invoked on a row in the pop-up window
Show Output - opens the appropriate "output" window (valid only when the "output" window exists)
Watch Process - puts process to the status line
Cancel Process - cancels and removes the process from the pop-up list
Keyboard navigation
The progress pop-up window can be invoked from the Window menu (if there are no running tasks "Processes" (P mnemonic) menu item is disabled) and a user can move between rows using arrows. "Processes" menu item is placed below "HTTP monitor" menu item.
The contextual menu is invokable by using Shift+F10 shortcut, ESC cancels the contextual menu (pop-up window). In the contextual menu user can move between items using arrows. For better comfort, user can use these keystrokes (when focused in the pop-up window):
- Show Output - Enter
- Watch process - Space
- Cancel process - Delete
Colors
Colors of the text |
|
| name of the process | black |
dynamical text (selected) |
115,115,115 204,204,204 |
for other platforms click here.
![]() |
![]() |
figure 7 - pop-up window sizes and colors |
|
Proposed names for background tasks
Type of the task |
Proposed name for the task |
project building |
Building JavaApp1 |
| search - basic find | Searching for getMessage |
| search - task list | Searching for the tasks |
| Javadoc search | Searching for getMess in Javadoc |
| VCS activities | Command Check out is running Command Update is running etc. |
If the name of the task does not fit into the area of the pop-up window, then the name will be truncated and ellipses are added (see picture below), tooltip for truncated names is available.
![]()
figure 8 - truncating of the long task names
Note: Progress indication, which is contained in To Do and VCS output windows, will be omitted.
Long-time foreground-only tasks
This kind of tasks block the user from working with IDE. A modal dialog, which is displayed, should give a feedback, when the task will be done. The modal dialog should display a progress bar, detailed information about the task as well as estimated time (percentage) in the bottom area of the dialog. For proposed solution of modal dialogs see figure 9a, 9b .

figure 9a - proposed solution of progress indication in modal dialog (Find Usages)

figure 9b - proposed solution of progress indication in modal dialog (Parsing)
Refactoring
This task can be split up into two parts. In the first part, a modal dialog states, that system is collecting usages and in the second part, the usages are displayed in output window. After performing "Do refactoring" action a progress indication appears. This indication can be omitted there and be moved to the status line. "Do Refactoring" toggle button should be moved to the right and after its pressing this button is disabled. To cancel this task is not possible.

figure 10 - new appearance of the Refactoring window
5. Suggestions how the "output" windows should behave
As it is mentioned in paragraph about pop-up window, successfully finished tasks or failed tasks are deleted from the list. Addition to that, there should be also some indication (output windows) with information about status of these tasks.
1. Failed tasks:
If a task fails appropriate "output" window, which carries the information, will be opened automatically (valid only when the tasks has an "output" window).
2. Successfully finished tasks:
If a task finishes successfully appropriate "output" window, which carries the information, is opened only when the information contained in that window is important for the users.
In the status line, there should be an information about status of task for processes theirs "output" window is not displayed or they do not have this window.
Note: If a last user-invoked task is displayed in the progress indication area in the status line, there should not be any information about starting of this task in the information area of status line.
Note 2: If a process finished with some result and this result is displayed in the status line, the result should be deleted from the status line if same process is invoked.
6. Open issues
Stop action in "output" windows
In the progress indication, there is possible to cancel tasks. The user should have possibility to cancel these tasks in their "output" windows as well, so that is why we should consider about adding "Stop" button into "output" windows (valid only when the tasks allow to be cancelled).
7. Appendix: Proposed usecases for progress indication
Content of usecases
- startup
- shutdown
- paste
- d'n'd
- help
- update center
- refresh
- scanning
- new project creation
- project importing
- find in projects
- project - wide ant tasks
- find usages
- refactoring actions
- refactoring - Undo(Redo)
- synchronize
- To-Do window
- start/stop server
- deployment progress monitor window
- new database connection dialog
- VCS login
- VCS module selector
- VCS commands
- diff
- attach
| startup - currently progress only in splash screen (various initialization steps one by one) |
![]() |
|
| d'n'd - IZ 55160 drag and drop blocks UI - similar to the paste IZ 27744 case |
|
|
|
| Help/Help Contents - first invocation is covered by a progress because indexing is taking some time |
![]() |
|
| File/Refresh All Files - currently only status bar message appears, should behave like a regular background task with progress indication |
|
|
|
| VCS's Login dialog in the Add Versioned Directory wizard - has a proprietary progress bar, should be replaced with the shared progress component |
|
![]() |
|
|
|

























