|
|
Line 1: |
Line 1: |
− | Storing view state is done in two commons ways, depending
| + | Wiki Roadmap |
− | on whether you want to store settings between
| + | |
− | workbench sessions or across invocations of your view. The first of these
| + | |
− | facilities is found directly on <tt>IViewPart</tt>. When the workbench
| + | |
− | is shut down, the method <tt>saveState</tt> is called on all open views.
| + | |
− | The parameter to this method is an <tt>IMemento</tt>, a simple
| + | |
− | data structure that stores hierarchies of nodes containing numbers
| + | |
− | and strings. Here is an example from the recipe application in the FAQ
| + | |
− | examples, where a view is persisting the current selection of a list viewer
| + | |
− | in a memento:
| + | |
− | <pre>
| + | |
− | private static final String STORE_SELECTION =
| + | |
− | "ShoppingList.SELECTION";
| + | |
− | public void saveState(IMemento memento) {
| + | |
− | super.saveState(memento);
| + | |
− | ISelection sel = viewer.getSelection();
| + | |
− | IStructuredSelection ss = (IStructuredSelection) sel;
| + | |
− | StringBuffer buf = new StringBuffer();
| + | |
− | for (Iterator it = ss.iterator(); it.hasNext();) {
| + | |
− | buf.append(it.next());
| + | |
− | buf.append(',');
| + | |
− | }
| + | |
− | memento.putString(STORE_SELECTION, buf.toString());
| + | |
− | }
| + | |
− | </pre>
| + | |
| | | |
| + | * [http://www.eclipse.org/ohf/ OHF Project Home Page] |
| + | * [http://ohf-dev.blogspot.com/ OHF Committers Blog] |
| | | |
− | When the workbench is reopened, the method
| + | Wiki Content |
− | <tt>init(IViewSite, IMemento)</tt> is called the first time each view
| + | |
− | becomes visible. The <tt>IMemento</tt> will contain all the information
| + | |
− | that was added to it when the workbench was shut down. Note that
| + | |
− | <tt>init</tt> is called before the <tt>createPartControl</tt> method,
| + | |
− | so you will not be able to restore widget state directly from the
| + | |
− | <tt>init</tt> method. You can store the <tt>IMemento</tt> instance in a field
| + | |
− | and restore state later on when your widgets have been created. Continuing
| + | |
− | this example, here is the code for restoring the viewer selection
| + | |
− | when the view is reopened:
| + | |
− | <pre>
| + | |
− | private IMemento memento;
| + | |
− | ...
| + | |
− | public void init(IViewSite site, IMemento memento)
| + | |
− | throws PartInitException {
| + | |
− | super.init(site, memento);
| + | |
− | this.memento = memento;
| + | |
− | }
| + | |
− | public void createPartControl(Composite parent) {
| + | |
− | //create widgets ...
| + | |
− | if (memento == null) return;
| + | |
− | String value = memento.getString(STORE_SELECTION);
| + | |
− | if (value == null) return;
| + | |
− | IStructuredSelection ss = new StructuredSelection(
| + | |
− | value.split(","));
| + | |
− | viewer.setSelection(ss);
| + | |
− | }
| + | |
− | </pre>
| + | |
− | Note that the <tt>IMemento</tt> instance can be <tt>null</tt> if the view state
| + | |
− | was not saved from a previous session: for example, when the view
| + | |
− | is first created.
| + | |
| | | |
| + | [[OHF using SCA]] |
| | | |
− | Another mechanism for persisting view state is the JFace
| + | =OHF Meetings= |
− | <tt>IDialogSettings</tt> facility. The advantage of dialog settings
| + | * [[Face to Face meeting at EclipseCon]] |
− | over the view <tt>save</tt>/<tt>init</tt> mechanism is that you can control when
| + | ** Pictures from the meeting |
− | settings are persisted. The <tt>saveState</tt> method is called only
| + | |
− | if your view is open when the workbench shuts down, so
| + | |
− | it is not useful for storing view state when the view is closed by
| + | |
− | the user. Dialog settings, on the other hand, can be changed
| + | |
− | and persisted whenever you want.
| + | |
− | | + | |
− | | + | |
− | Views commonly use a combination of both dialog settings and
| + | |
− | a memento for persisting view state. Important settings, such as
| + | |
− | filters, sorters, and other view preferences, will be stored as
| + | |
− | dialog settings; more transient attributes, such as selection
| + | |
− | and expansion state, will be stored in the memento only when
| + | |
− | the workbench is being shut down.
| + | |
− | | + | |
− | | + | |
− | == See Also: ==
| + | |
− | | + | |
− | [[FAQ_How_do_I_save_settings_for_a_dialog_or_a_wizard%3F]] | + | |
− | | + | |
− | <hr><font size=-2>This FAQ was originally published in [http://www.eclipsefaq.org Official Eclipse 3.0 FAQs]. Copyright 2004, Pearson Education, Inc. All rights reserved. This text is made available here under the terms of the [http://www.eclipse.org/legal/epl-v10.html Eclipse Public License v1.0].</font>
| + | |