This document contains a list of minor features and technical stuff that
should be implemented when time permits it. The TODO list is updated
frequently as new ideas crop up during programming.

For a broader view of how the application will develop over time, you
should see the ReleasePlan document.


Priority 1 (important)
----------------------
- add application icon
- after selecting File-Open (and possibly other menu commands), the table
  should get the focus automatically so that Cmd-A can immediately select
  all items, without having to use the mouse to give the focus to the
  table
- password should not appear in clear text in result window. update
  README if you implement this
- add basic file checks (exists, readable) to AceExpanderThread; this
  will provide better error handling than what unace can provide; it
  will also prevent the unnecessary creation of a folder when the archive
  file does not exist or cannot be read

Priority 2 (nice to have)
-------------------------
- table should be highlighted in some way while a valid drag hovers over it
- better file handling when a new item is created or its filename is
  set: e.g. what happens when it's a symlink? when it's an alias?
  when we don't have read permissions?  
- double click on table item expands it
- show spinning cursor while application launches
- entire path should be shown in tooltip for items in preferences dialog
- cancel button should become default button ("Enter" button) while
  expansion is in progress
- get more information about this:
  when the application is run from ProjectBuilder, Cocoa prints out the
  following warning to the application's output window when the
  variant of NSOpenPanel.runModalInDirectory() is invoked where the parent
  window can be specified and the open panel is opened as a sheet:

  *** WARNING: Method runModalForDirectory:file:types:relativeToWindow: in class NSOpenPanel is obsolete and will be removed in release GM ***
- make dialogs/windows smaller so that the application is less intrusive
  on the user's desktop

Priority 3 (not important)
--------------------------
- user default: set the number of documents in the File-OpenRecent menu
- user default: choose destination folder only once per expand batch
- create test files that produce comments, that can be listed verbosely,
  and that require the "assume yes" option.
- user default: stop processing when a failure occurs
- preferences dialog: reset to factory settings -> removes all defaults in
  the application domain
- show main window when it is hidden and the user clicks on the
  application's dock icon
- delete key should also remove selected items
- in MainMenu.nib, the menu item "remove selected" should be marked with
  the "Backspace" key; the invisible button can then be removed
- when the user chooses the unace executable in the preferences dialog,
  a check should be made if the chosen file really is executable.
  This seems to be not so easy in Java, although in Obj-C the class
  NSFileManager can be used (isExecutableFileAtPath)
- show an icon in the preferences in the popup button for selecting the
  unace executable and the destination folder
- find out what the following message in the ProjectBuilder output window
  means:
  2004-06-18 03:10:48.430 AceExpander[1018] *** _NSAutoreleaseNoPool(): Object 0x15dd310 of class NSCFArray autoreleased with no pool in place - just leaking
- if a filename in the content list drawer starts with "*" it's password
  protected -> mark the file as such
- if the content list drawer or the result window don't show anything
  because the user selected more than one item -> indicate this somehow
- write drawer state (hidden/shown) to user defaults

Mac OS X 10.3
-------------
- when changing to Mac OS X 10.3, the following deprecated things
  should be corrected (maybe use pre-processor #ifdefs to keep old code
  so that it can still be run on Mac OS X 10.2):
  - in the model: NSTableView.selectedRowEnumerator() should be replaced by
    NSTableView.selectedRowIndexes()
  - in the model: NSTableView.selectRow() should be replaced by
    NSTableView.selectRowIndexes()
- in Mac OS X 10.3, use Cocoa bindings to manage preferences. See
  http://developer.apple.com/cocoa/cocoabindings.html
