Design of Lookmarks: Difference between revisions

From ParaQ Wiki
Jump to navigationJump to search
No edit summary
No edit summary
 
(16 intermediate revisions by 2 users not shown)
Line 8: Line 8:


'''What doesn't a lookmark save?'''
'''What doesn't a lookmark save?'''
Note: these won't be a priority in the first-pass implementation of lookmark, but within the lookmark framework it will be possible to save them in the future.
* multiple views
* multiple views
* plots - though it would be nice to be able to save a lookmark of plots as well
* plots - though it would be nice to be able to save a lookmark of plots as well
* anything saved with the application state


: These should be temporary limitations. I am guessing these will be feature requests in the future and the lookmark framework should not make it impossible or very hard to implement these in the future. If lookmarks are implemented on top of the state functionality, adding these in the future would be easy. [[User:Berk|Berk]] 16:20, 29 Jan 2007 (EST)
'''Creating a Lookmark:'''
* There will be a "Create Lookmark" wizard available from the menu just like custom filters. It will consist of a single page with a line widget for the lookmark's name. A button at the bottom will create the lookmark (for the currently selected view), adding it to the Lookmark Inspector (see "Managing Lookmarks").


'''Creating a Lookmark:'''
:* Aside: Why allow the user to turn on/off saving time, camera, and reader? Consider the following use case. The user opens some data, manipulates the camera to find an area of interest, then wants to apply a set of operations but retain the current time, camera, and reader. The reason he can't use a custom filter is because he wants certain internal display properties of the lookmark's filters to be restored. When would the user want to save time? When he comes across something interesting in his data at an exact position, timestep, etc that he wants to save for later or export to a file to share with a colleague.
* There will be a "Create Lookmark" wizard available from the menu just like custom filters. It will consist of a single page with a line widget for the lookmark's name followed by checkboxes (checked by default) for whether or not to save: the reader(s), camera properties, and time. A button at the bottom will create the lookmark (for the currently selected view), adding it to the toolbar.
* There will also be a second way of creating a lookmark. Each view will have a lookmark button next to its frame-splitting icons that will display the Lookmark wizard described above.  
** Aside: Why allow the user to turn on/off saving time, camera, and reader? Consider the following use case. The user opens some data, manipulates the camera to find an area of interest, then wants to apply a set of operations but retain the current time, camera, and reader. The reason he can't use a custom filter is because he wants certain internal display properties of the lookmark's filters to be restored. When would the user want to save time? When he comes across something interesting in his data at an exact position, timestep, etc that he wants to save for later or export to a file to share with a colleague.
 
* There will also be a second way of creating a lookmark. Each view will have a lookmark button next to its frame-splitting icons that will display the Lookmark wizard described above. In thinking about ways for the lookmark wizard not to have to be displayed, here are some options:
:<font color="red">I've decided that instead of giving the user the option of what to save when a lookmark is created, just save everything by default, then provide them with the option in the lookmark inspector to restore the saved time/camera/reader(s) as they see fit. This way any lookmark can act like a filter-only (i.e. customfilter+displays) object. So we'll take out the checkboxes in the creation dialog. But I'm going to add a text field to allow the user to write comments that will be saved with the lookmark.  
**Have the reader|camera|time options be located in the application settings so that pressing the lookmark button will simply create a lookmark based on what those values are set at. Con: may be too hidden if the user finds himself changing these options frequently.
 
** Have a checkable drop-down menu next to each view's lookmark button that lists the reader|camera|time options. Con: Do we sync the state of this menu across all the views or not? Either way, its probably not going to be obvious to the user.
: In the creation dialog we could have a checkbox at the bottom that says something to the effect of: "Do not display this dialog box in the future. Create lookmark automatically using a default name.
 
: Berk, should we ask the folks at elevation design to create the icon for creating a lookmark?"</font>


'''Invoking a Lookmark:'''
'''Invoking a Lookmark:'''
* All other sources in the view in which the lookmark is being displayed will be set invisible first
* All other sources in the view in which the lookmark is being displayed will be set invisible first
* A new entry in the pipeline browser will be displayed. Its label will be the name of the lookmark. It will be a collapseable/expandable entity denoted by a +/- sign in front (expanded initially) where its children are the readers and filters making up the lookmark. By making it collapseable, we provide a tool against potential cluttering of the pipeline browser after invoking several lookmarks. By grouping a lookmark's readers and filters under one root node, it becomes clear to the user which ones belong to the lookmark.
* As a first pass, if the lookmark includes readers, it will first try to open the data file at the path it was at when the lookmark was created. If the file(s) have since been moved or deleted, the user will be asked to select a new one from a browser. But in the future we want a way for a lookmark that includes readers to be applied to a different dataset than the one it was created with.  
:: Adding a lookmark to the pipeline browser in this manner won't work. The pipeline browser shows pipeline relationships (source to sink). The only grouping allowed is the server the pipeline is on. Adding a lookmark grouping might work if the lookmark has no inputs. As soon as you add external inputs to the mix, the relationship graph may be impossible to decipher. For consistency, I think we should avoid using the pipeline browser to show anything but the pipeline relationships.
* The sources that make up the lookmark are added to the pipeline browser just like when state is loaded manually
:: --[[User:Mark|Mark Richardson]] 15:05, 25 Jan 2007 (EST)
* By allowing lookmarks (made up only of filters) to be applied to different datasets, we become susceptible to robustness issues. For example, what happens if a lookmark's filter is colored or thresholded by a variable that isn't in the new dataset? The user will get an error message and paraview should not crash. If we improve the error dialog some, this may not be a big issue. After seeing the error, the user can go and select another array to color by or threshold by.  
::: I concur with Mark, but for less technical reasons.  Lookmarks simply capture and restore state.  When the state is restored, it should be added to the GUI (e.g. the pipeline browser) just like any other means of creating state (such as doing it manually).  Furthermore, just adding the lookmark to the pipeline browser without that grouping simplifies the GUI (such as making the following bullet a non-issue).
::: --[[User:Kmorel|Ken]] 17:53, 26 Jan 2007 (EST)
::: In case it matters, I agree with Ken and Mark :-) [[User:Berk|Berk]] 16:17, 29 Jan 2007 (EST)
* Turning on/off the visibility of a lookmark (via its eyeball icon) will turn on/off the visibility *only of its visible internal filters and readers*. The reason for doing this is to make it easy for a user to display in a new view a lookmark that already been invoked in a different one. The visibility of internal filters/readers can still be manually changed in the normal way. 
* By allowing lookmarks (made up only of filters) to be applied to different datasets, we become susceptible to robustness issues. For example, what happens if a lookmark's filter is colored or thresholded by a variable that isn't in the new dataset? We need to gracefully detect which properties it was unable to resolve and prompt the user. Not sure how difficult this is going to be.


'''Managing Lookmarks:'''
'''Managing Lookmarks:'''
* Like custom filters, have a Lookmark Manager where you can import, export, and remove lookmarks
* Also be able to organize, annotate, ... ?


'''Differentiating between Lookmarks and Custom Filters:'''
A Lookmark Inspector (a dockable window) can be displayed (where? laid out vertically to the right of the render windows?). Here the user will be able to import, export, and remove lookmarks. Lookmarks can be organized hierarchically and each lookmark entry will include metadata about that lookmark (a thumbnail preview, name, comments, dataset(s) if any, time of creation(?), ...).


When a lookmark is created, it will be displayed in the toolbar, in its own section, just like custom filters. But how will the user know/remember which grouping contains lookmarks and which custom filters? One possible solution is to have a lookmark's icon in the toolbar be a snapshot of the view from when it was created (like in ParaView 2). This has the added benefit of providing a visual cue before actually invoking the lookmark. Con: small size of icon won't reveal all that much detail; we lose control of the what the icons look like in the toolbar
:<font color="red">Following the relationship between the Pipeline Browser and the Object Inspector, there will now be two dock widgets on the right side of the screen: a Lookmark Browser and a Lookmark Inspector. The browser will display the icon and name of each lookmark. It will be responsible for importing, exporting, removing, creating(?) lookmarks. The inspector will then display the metadata for the currently selected lookmark(s). When multiple lookmarks are selected, it will only display the properties that it makes sense to, such as whether or not to restore their time|camera|reader(s) when invoked. This way the user doesn't have to visit each lookmark to modify these settings. I'm still thinking about what sort of metadata the user might want but here are some ideas.
:* an enlarged lookmark icon
:* comments (the the user made about the lookmark at the time of creation, but that can be edited as well)
:* the name(s) of the dataset(s) used to create the lookmark
:* whether or not to restore the lookmark's time when loaded
:* whether or not to restore the lookmark's camera properties when loaded
:* whether or not to restore the lookmark's reader(s) (or use the exisiting ones) when loaded
:* the version of ParaView it was created on (this might be important for backwards compatibility)
:* data/time it was created
:* a snapshot of the structure of the pipeline it will load


'''Ideas for differentiating between Lookmarks that contain readers and those that don't''':
:Question - how important is it to people to be able to organize lookmarks into a hierarchy/tree structure? I know of one user here who wants it. What I may do is put it on the stack for 3.2. </font>
* Icons of lookmarks with readers can have a "D" (for Data) overlayed in one of the icon's corners.  
 
* Lookmarks that contain only filters get grouped in the custom filter toolbar.
'''Dealing with Filter-Only Lookmarks:'''
* ???
 
As a first pass, lookmarks will save and restore any readers that existed at the time of creation. But we also want to be able to use a lookmark on a different dataset. Currently this is an unresolved issue. Since a lookmark is just a subset of state, how do you specify inputs?


'''Dealing with Multiple Views:'''
'''Dealing with Multiple Views:'''
Line 53: Line 59:
We eventually want to be able to create a lookmark with multiple readers or filters as inputs but as a first-pass we will only support one.
We eventually want to be able to create a lookmark with multiple readers or filters as inputs but as a first-pass we will only support one.


'''Miscellaneous:'''
'''Miscellaneous:'''  
 
* Lookmarks, like custom filters, from a previous ParaView session should automatically be loaded into the toolbar. <font color="red"> This has been implemented. When the application exits, the contents of the lookmark inspector is converted to an XML format where each lookmark is its own element with attributes (name, comments, etc). It also has a nested element that is the server manager state represented as XML. I'm saving all this in the pqSettings under the key "LookmarkInspectorState". Then when paraview is launched again, this string is parsed and used to populate the lookmark browser.
* When a reader is selected either in the Pipeline Browser or in the Statistics Inspector, all lookmarks associated with that data could get highlighted in the Lookmark Browser.</font>
 
'''Random Ideas:''' Most of these features will have to wait until 3.2 if they are implemented at all.
* <font color="red"> Be able to drag a lookmark from the lookmark browser to the view you want it displayed in.</font>
* A right click on a lookmark's icon in the toolbar displays a menu with options to remove the lookmark, and perhaps a "Preview" option that displays a larger image of the icon (I think VolView has something similar)
* A right click on a lookmark's icon in the toolbar displays a menu with options to remove the lookmark, and perhaps a "Preview" option that displays a larger image of the icon (I think VolView has something similar)
* Provide an advanced option (maybe in the application settings) which, when set, displays lookmarks in a new view when they are invoked  
* Provide an advanced option (maybe in the application settings) which, when set, displays lookmarks in a new view when they are invoked  
* Provide a preview of the internal pipeline of a lookmark (similar to the one in the Input Editor)
* Provide a preview of the internal pipeline of a lookmark (similar to the one in the Input Editor)
* Lookmarks, like custom filters, from a previous ParaView session should automatically be loaded into the toolbar.
* A one-click mechanism for turning on/off the visibility in a view of a lookmark that has already been created (i.e. added to the pipeline browser).
:: We should probably delay these features (with the exception of the last one) for now.  Let's keep the implementation as simple as possible.
:: --[[User:Kmorel|Ken]] 17:53, 26 Jan 2007 (EST)

Latest revision as of 15:32, 6 February 2007

The following discusses how the user should interact with lookmarks and the design issues that arise.

What can you save with a lookmark?

  • the state (including displays) of the sources (and all their inputs) that are visible in the current view.
  • time
  • camera state
  • center of rotation

What doesn't a lookmark save? Note: these won't be a priority in the first-pass implementation of lookmark, but within the lookmark framework it will be possible to save them in the future.

  • multiple views
  • plots - though it would be nice to be able to save a lookmark of plots as well

Creating a Lookmark:

  • There will be a "Create Lookmark" wizard available from the menu just like custom filters. It will consist of a single page with a line widget for the lookmark's name. A button at the bottom will create the lookmark (for the currently selected view), adding it to the Lookmark Inspector (see "Managing Lookmarks").
  • Aside: Why allow the user to turn on/off saving time, camera, and reader? Consider the following use case. The user opens some data, manipulates the camera to find an area of interest, then wants to apply a set of operations but retain the current time, camera, and reader. The reason he can't use a custom filter is because he wants certain internal display properties of the lookmark's filters to be restored. When would the user want to save time? When he comes across something interesting in his data at an exact position, timestep, etc that he wants to save for later or export to a file to share with a colleague.
  • There will also be a second way of creating a lookmark. Each view will have a lookmark button next to its frame-splitting icons that will display the Lookmark wizard described above.
I've decided that instead of giving the user the option of what to save when a lookmark is created, just save everything by default, then provide them with the option in the lookmark inspector to restore the saved time/camera/reader(s) as they see fit. This way any lookmark can act like a filter-only (i.e. customfilter+displays) object. So we'll take out the checkboxes in the creation dialog. But I'm going to add a text field to allow the user to write comments that will be saved with the lookmark.
In the creation dialog we could have a checkbox at the bottom that says something to the effect of: "Do not display this dialog box in the future. Create lookmark automatically using a default name.
Berk, should we ask the folks at elevation design to create the icon for creating a lookmark?"

Invoking a Lookmark:

  • All other sources in the view in which the lookmark is being displayed will be set invisible first
  • As a first pass, if the lookmark includes readers, it will first try to open the data file at the path it was at when the lookmark was created. If the file(s) have since been moved or deleted, the user will be asked to select a new one from a browser. But in the future we want a way for a lookmark that includes readers to be applied to a different dataset than the one it was created with.
  • The sources that make up the lookmark are added to the pipeline browser just like when state is loaded manually
  • By allowing lookmarks (made up only of filters) to be applied to different datasets, we become susceptible to robustness issues. For example, what happens if a lookmark's filter is colored or thresholded by a variable that isn't in the new dataset? The user will get an error message and paraview should not crash. If we improve the error dialog some, this may not be a big issue. After seeing the error, the user can go and select another array to color by or threshold by.

Managing Lookmarks:

A Lookmark Inspector (a dockable window) can be displayed (where? laid out vertically to the right of the render windows?). Here the user will be able to import, export, and remove lookmarks. Lookmarks can be organized hierarchically and each lookmark entry will include metadata about that lookmark (a thumbnail preview, name, comments, dataset(s) if any, time of creation(?), ...).

Following the relationship between the Pipeline Browser and the Object Inspector, there will now be two dock widgets on the right side of the screen: a Lookmark Browser and a Lookmark Inspector. The browser will display the icon and name of each lookmark. It will be responsible for importing, exporting, removing, creating(?) lookmarks. The inspector will then display the metadata for the currently selected lookmark(s). When multiple lookmarks are selected, it will only display the properties that it makes sense to, such as whether or not to restore their time|camera|reader(s) when invoked. This way the user doesn't have to visit each lookmark to modify these settings. I'm still thinking about what sort of metadata the user might want but here are some ideas.
  • an enlarged lookmark icon
  • comments (the the user made about the lookmark at the time of creation, but that can be edited as well)
  • the name(s) of the dataset(s) used to create the lookmark
  • whether or not to restore the lookmark's time when loaded
  • whether or not to restore the lookmark's camera properties when loaded
  • whether or not to restore the lookmark's reader(s) (or use the exisiting ones) when loaded
  • the version of ParaView it was created on (this might be important for backwards compatibility)
  • data/time it was created
  • a snapshot of the structure of the pipeline it will load
Question - how important is it to people to be able to organize lookmarks into a hierarchy/tree structure? I know of one user here who wants it. What I may do is put it on the stack for 3.2.

Dealing with Filter-Only Lookmarks:

As a first pass, lookmarks will save and restore any readers that existed at the time of creation. But we also want to be able to use a lookmark on a different dataset. Currently this is an unresolved issue. Since a lookmark is just a subset of state, how do you specify inputs?

Dealing with Multiple Views:

As a first pass, a lookmark can only be created of a single (the current) view.

Dealing with Multiple Inputs:

We eventually want to be able to create a lookmark with multiple readers or filters as inputs but as a first-pass we will only support one.

Miscellaneous:

  • Lookmarks, like custom filters, from a previous ParaView session should automatically be loaded into the toolbar. This has been implemented. When the application exits, the contents of the lookmark inspector is converted to an XML format where each lookmark is its own element with attributes (name, comments, etc). It also has a nested element that is the server manager state represented as XML. I'm saving all this in the pqSettings under the key "LookmarkInspectorState". Then when paraview is launched again, this string is parsed and used to populate the lookmark browser.
  • When a reader is selected either in the Pipeline Browser or in the Statistics Inspector, all lookmarks associated with that data could get highlighted in the Lookmark Browser.

Random Ideas: Most of these features will have to wait until 3.2 if they are implemented at all.

  • Be able to drag a lookmark from the lookmark browser to the view you want it displayed in.
  • A right click on a lookmark's icon in the toolbar displays a menu with options to remove the lookmark, and perhaps a "Preview" option that displays a larger image of the icon (I think VolView has something similar)
  • Provide an advanced option (maybe in the application settings) which, when set, displays lookmarks in a new view when they are invoked
  • Provide a preview of the internal pipeline of a lookmark (similar to the one in the Input Editor)
  • A one-click mechanism for turning on/off the visibility in a view of a lookmark that has already been created (i.e. added to the pipeline browser).