Developing User Interfaces
CMSC 498B
Spring 2002
Prof. Ben Bederson
Project #5
Due May 18th, 2002


Purpose

The purpose of this program is to bring together all the skills you have learned throughout the semester to create a complete application with a novel and complex user interface in C#.

Two projects are described here, and you must do one of them.  You can either do the projects individually or in a group of two people (in which case you must do the extra listed requirements).  It is up to you to decide which project you will do, if you will work in a group, and who your partner will be.

Problem 1: Drag-and-pop

You are going to implement the drag-and-pop interaction concept described at www.patrickbaudisch.com (click on Projects) for the Windows desktop.  You should read the paper (emailed separately), watch the movie, and play with the Flash demo to understand the desired interaction.  To make this project easier, we have provided you with a C# utility and testing program that returns the position and image for each icon on the desktop (IconManager.zip).  The project will be graded out of 60 points, with points distributed within the following sections as shown.  The description here is minimal as you are expected to read the paper, and interpret the necessary details to make the system work.  While the resulting system won't be a fully functional system (since you won't support real drag-and-drop based launching), your system should be good enough to run controlled experiments with.  I may ask the implementer(s) of the best system if we can use their code in an experiment (and then include them as co-authors of any paper we write).

1. (20 points) Implement stretching gum visualization.  Demonstrate this works with a simple standalone application that shows several icons stretched in several directions.

2. (30 points) Implement interaction with layout.  Use the supplied utility program to create a transparent overlay on top of the real desktop with icons that move and behave like the real ones.  Moving an icon should pop all icons towards it.  You should implement selection, program launching, and dragging, but not marquee selection.  When dropping an icon on an actual or popped icon, the program should make a "pop" noise, and return the icons to their starting position, and animate the popped icons back to their starting place. 

3. (10 points) Implement motion-based selection of which icons pop as described in the paper (that is, only icons that sit in the general direction that the user starts dragging an icon in should pop).  Implement gesture (motion in reverse direction) to return popped icons to their original location.

--- Groups must also implement #4 and #5.  Group projects will be graded out of 90, and then scaled down to 60.

4. (10 points) Use region management to ensure animations are smooth.  All animations should be based on real elapsed time, and thus the frame-rate, but not the animation time should be dependent on the computer speed.  Animation should be implemented with slow-in-slow-out movement.

5. (20 points) Long gummy visualizations should be rendered efficiently, even when they lie along the diagonal.  This means you'll have to use region management to draw just the part that is needed.  You must implement 4 versions, and compare the performance of each by having menu options to render animations with each version, and print to the console the timing results.  The 4 versions are:

 

Problem 2: Adaptive Explorer

Implement Windows Explorer with an adaptive tree widget in the left pane so that infrequently used items are hidden behind ellipses (...).  You should write this program from scratch to look and behave as much like the actual Windows Explorer as possible (i.e., copy Explorer's icons).  The goal is to create a real alternate file browser.

1. (30 points) Implement the basics - menu, toolbar, address bar, hierarchy view, file view, and status bar.  But you don't have to implement every feature of these components.  The required features are:

2. (30 points) Modify the hierarchy view to adapt to the user's behavior.  Calculate the recency and frequency of use of each folder and hide items that are not recent or frequently used enough behind ellipses.  It is up to you to come up with an algorithm that works well.  You can consider giving some controls (or configurations) to users to set parameters that control how the algorithms work.  You should hide each contiguous sequence of items to hide with a ellipses in place - so you could end up with several ellipses.  Clicking on the ellipses should redisplay those hidden items, and items that are displayed after being hidden should be visually indicated as such.  Opening an ellipses should be as stable as possible with as many items as possible not moving. There should be a "hide" button above the hierarchy view which re-hides all opened ellipses.  You must document how your algorithm works.  It is up to you to decide how to store the usage information - but consider that you must pick a mechanism that will scale up to arbitrarily large file systems, and that you must support read-only directories (meaning that you can't rely on storing information in each folder.)

--- Groups must also implement #4 and #5.  Group projects will be graded out of 90, and then scaled down to 60.

3. (15 points) Implement Cut, Copy, Paste, Rename, and Undo

4. (15 points) Implement a different version of ellipses so that all hidden items from a given directory are hidden under a single ellipses at the end of that directory.  Give users control over which version they want through a Tools/Options menu.

Submitting

Submit your program the same way you submitted the other projects, by creating a zip file of all the source code files related to your project, login to a Unix WAM computer, and run the WAM submit program.  This is course CMSC 498B, Section 0101, Project #5.