Proposed menus:

File
    New window ^N
    New tab ^T
x   Open ^O
    Open Recent
    Save ^S
    Save As...
    Save Window As...
    Save Selection As...
x   Reload
x   Close ^W
    Delete image on disk
    Preferences ^,
x   Quit ^Q

Edit
    Cut (??? is this the same as clear?)
    Copy
    Paste
    Clear Region of Interest
    Prioritize Region of Interest
    Crop Region of Interest
    Select all images ^A
    Annotate

Image ?

View
x   Fit image (zoom to fill current window)
x   Fit window (adjust window to fit current zoom level of image)
x   Full screen
x   Channel mode (color, red, green, blue, alpha, luminance)
    View as depth, false, random
x   Zoom in
x   Zoom out
x   Stop up/down
x   Gamma up/down
x   Toggle last image
    Foreground/background images
x   Prev/next image
x   Prev/next subimage
x   Prev/next channel
    Subtract (image difference against last)
    Stereo mode

Tools
    Mouse mode (zoom/pan, select, wipe)
          [ note: In zoom/pan mode, L/R click is zoom in/out, middle
            drag is pan, shift-drag is select. ]
x   Pixel view
    Thumbnails
    Hide controls
    Disconnect
    Overwrite render
    Store render
    Show error log

Help

---

Standard tags:

    int oiio:bitspersample - for the *file* -- may differ from what format implies)
    string compression - name of compression scheme to use
    string planarconfig - "separate" or "contiguous"
    string datetime - "yyyy:mm:dd hh:mm:ss" (TIFF DateTime, OpenEXR capDate)
    string copyright (TIFF Copyright, OpenEXR owner)  [ should it be owner? ]
    string artist (TIFF Artist)
    string name (TIFF DocumentName)
    string host (TIFF HostName)
    string description (TIFF ImageDescription)
    string software (TIFF Software)
    string make (TIFF Make)
    string model (TIFF Model)
    string textureformat
    string wrapmodes
    matrix worldtocamera
    matrix worldtoscreen
    float fovcot
    int[nchannels] bitspersample ? - allow per-channel description?
    int xresolution (pixels per resolutionunit)
    int yresolution
    string resolutionunit ("none", "in", "cm")
    float pixelaspectratio
    int orientation ???
    float aperture
    float exposuretime
    float fstop
    float focallength

    tiff-specific:
        tiff_Predictor
        tiff_RowsPerStrip
        tiff_SubfileType
        tiff_PhotometricInterpretation
        tiff_Planarconfig 

    openexr-specific
        openexr_foo - arbitrary float, int, matrix, string

        exif_ShutterSpeedValue

---

Assumptions about in-core image representation (NOT file!):

* Pixel data are 8- 16- or 32-bit int (signed or unsigned), 16- 32- or
  16-bit float.  NOTHING ELSE.  No <8 bit images, or pixels boundaries
  that aren't byte boundaries.  Files with <8 bits will appear to the 
  client as 8-bit unsigned grayscale images.

* Color space is grayscale or RGB.  XYZ, CMYK, YUV, or other
  non-spectral pixel data are converted to RGB upon reading.  (Though
  you could write a custom ImageIO plugin that would preserve some other
  color space upon read, or convert to some other color space upon
  write.)

* All color channels have the same data format.  Upon read, an
  ImageInput ought to convert all channels to the one with the highest
  precision in the file.

* All image channels in a subimage are sampled at the same resolution.
  For file formats that allow some channels to be subsampled, they will
  be automatically up-resed to the highest resolution channel in the
  subimage.

* Color information is always in the order R, G, B, and the alpha
  channel, if any, always follows RGB, and z channel (if any) always
  follows alpha.  So if a file actually stores ABGR, the plugin is
  expected to rearrange it as RGBA.

---


operations
        zoom (in + out)         (ctrl-+/-, alt-left mouse)
        drag/pan                (always middle mouse)
        select (a rectangle)    (shift-left mouse)
        draw (lines)
        info/pick

selectors
        none
        shift
        ctrl
        alt

buttons
        left
        right
        middle

middle should always pan
shift-left should always select
alt-mouse should always zoom

operations
        zoom (in + out)         (ctrl-+/-, alt-left mouse)
        drag/pan                (always middle mouse)
        select (a rectangle)    (shift-left mouse)
        draw (lines)
        info/pick

selectors
        none
        shift
        ctrl
        alt

buttons
        left
        right
        middle

middle should always pan
shift-left should always select
alt-mouse should always zoom
