File Browser

From ParaQ Wiki
Jump to navigationJump to search

Overview

This page discusses current and future design issues for the ParaView file browser.

Requirements

  • Grouping of animation files to improve responsiveness of the UI
  • Store / retrieve user favorites
  • Local and remote file browsing
  • Enter paths manually
  • Display a list of parents to the current directory
  • Provide quick access to "special" folders, e.g. "Home", "Desktop", "My Favorites", etc.
  • Multiselect related files, e.g. separate geometry and attribute files
  • Display additional file attributes, e.g. size, create date, modify date, etc

Optional Requirements

  • Provide create directory / delete / rename functionality?
  • File previewing?

Current Design

Interface

The pqFileDialog class provides a common graphical user interface for both local and remote file browsing:

  • The left-hand pane provides a server-specific list of "special" folders (e.g. Windows drives, "Home", "Desktop", "My Favorites", etc).
  • The right-hand pane displays the contents of the currently-visible directory.
  • The "Look in" combo-box lists the parent directories of the currently-visible directory, allowing rapid navigation "upwards" in the filesystem.
  • Users may use the "File name" line entry to select files through manual entry. The user may enter absolute or relative paths. Relative paths are interpreted relative to the currently visible directory.
  • Incomplete: related files (e.g. numbered animation files) can be grouped and expanded/collapsed to decrease clutter and make the UI more responsive.
  • Proposed: users could drag-and-drop files and directories from the right-hand pane to the left-hand pane, where they will be retained as "favorites".

File browser.png

Implementation

The ParaQ client defines an abstract interface for file-browsing back-ends, class pqFileDialogModel. The two implementations of pqFileDialogModel are pqLocalFileDialogModel and pqServerFileDialogModel, which implement the required functionality for browsing the local host and a connected PVS server, respectively. pqFileDialog is the Qt user interface component that acts as a "front end" for an instance of pqFileDialogModel.

Note: pqFileDialog displays data from pqFileDialogModel using the Qt abstract model concepts. The file dialog models display files using the conventions of the underlying filesystem (local or remote). As an example, this means that pqFileDialog may display file paths using forward or reverse slashes, depending on the type of server it is connected to. For this reason, pqFileDialog should not attempt to perform file-path-manipulation, such as joining paths, splitting paths, etc. pqFileDialog model provides methods to perform all path manipulation required by pqFileDialog, so that the back-end implementations can perform those operations correctly for the underlying filesystems.

The following vtkPVServerFileListing APIs are used for remote file browsing:

  • GetCurrentWorkingDirectory - like it says.
  • GetSpecial - returns a list of "special" directories / files, including Windows drive letters, "home", "desktop", "my documents", and other platform-specific special files. Returns an absolute path and label for each directory / file.
  • ActiveFileName
  • ActiveFileIsDirectory
  • GetDirectoryListing

Proposals

Integrate Server Selection and File Browsing

Currently, some users have expressed confusion when they perform a File > Open operation and are immediately confronted with the Server Startup dialog. Server startup is necessary in this case because we need a server connection before we can display information for the user to browse, however we would like to look at ways to make this process more intuitive. One suggestion is to integrate server selection and file browsing into a single dialog:

Proposed file browser with server connection functionality

In this case the upper-left-hand pane can be used to select servers, and the lower-left-hand and right-hand panes display favorites and file information for the selected server. The dialog would default to the "builtin" (local) server the first time it is used, so that it would display local filesystem information without having to make a server connection. Double-clicking a server in the upper-left-hand pane would initiate a connection to that server, and the dialog would display the connected server's filesystem. If the user opens a file with a server already connected, the dialog would default to displaying that server's filesystem. There are still some outstanding problems with this approach - "casual" server browsing is not supported. At the moment, choosing a server in the uppoer-left-hand pane means dropping any existing server connection and connecting to the new server before browsing can begin. We would need to protect against unintentional data loss in this case (in the future, support for multiple server connections per-client could make this a non-issue).

Odds-and-Ends

  • Single click on right panel should select it and update the UI. Currently, this is a double click.
    • This isn't consistent with the Windows or Gnome dialogs? Tshead 11:51, 28 Sep 2006 (EDT)
  • Division between left and right panel should be a draggable separator, defaulted to a standard, small size. If the user drags this division, that state should be saved as a setting that is applied every time the app comes up.
  • Remove the '.' and '..' entry.
  • Alphabetizing the items should follow windows standards - should not take into account capitalization (currently it does)
  • Filename field must be 'sortable'
  • Support multiple information fields in the UI - common file info fields. Sorting, on/off and movement of the fields must be supported. Movement of the fields must be saved in state. Sorting needn't be.
    • Currently, the local file browser does support additional fields. The remote file browser does not (need to add support for additional fields in the the server manager API).
  • The list on the right shouldn't have the tree decoration. This can be fixed in designer.
    • The right hand pane is a tree because it can expand/collapse groups of files. This feature is currently implemented but underutilized. Tshead 11:51, 28 Sep 2006 (EDT)

Remote Server API

The following operations will need to be implemented by the vtkPVServerFileListing API to support optional requirements:

  • GetFileGroups - returns a list of directories and a list of "file groups". A file group may contain one-to-many files and is represented by a label and a file count. Note that this means that grouping of related files is performed on the server-side, to reduce network traffic.
  • GetFileGroup - returns the list of files (one-to-many) contained within a given group. Returns filename, file size, and last modification date for each file.
  • AddFavorite - stores a label & absolute path on the server in per-user storage as a user "favorite". The label acts as a unique key.
  • DeleteFavorite - deletes a favorite path from server per-user storage. A label is supplied as a unique key.
  • CreateDirectory - takes an absolute path as input and creates a new directory on the server.
  • Remove - takes an absolute path as input and deletes a directory / file on the server.
  • Move - takes two absolute paths as input and renames the given directory / file on the server.
  • Read - takes an absolute path, a file offset, and a buffer length as input and reads the given range of data from a file (client-side preview)
  • GetPreview - takes an absolute path, width, and height as input, and returns a bitmap image with given dimensions (server-side preview)