| /******************************************************************************* |
| * Copyright (c) 2007 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| ******************************************************************************/ |
| |
| package org.eclipse.ui.internal; |
| |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.ui.IMemento; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.PartInitException; |
| import org.eclipse.ui.views.IStickyViewDescriptor; |
| import org.eclipse.ui.views.IViewRegistry; |
| |
| /** |
| * @since 3.3 |
| * |
| */ |
| class StickyViewManager32 implements IStickyViewManager { |
| |
| // a mapping of perspectives to a set of stickyviews that have been activated in that perspective. |
| // this map is persisted across sessions |
| private Map stickyPerspectives = new HashMap(7); |
| |
| private IWorkbenchPage page; |
| |
| public StickyViewManager32(IWorkbenchPage page) { |
| this.page = page; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.internal.IStickyViewManager#remove(java.lang.String) |
| */ |
| public void remove(String pespectiveId) { |
| stickyPerspectives.remove(pespectiveId); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.internal.IStickyViewManager#add(java.lang.String, java.util.Set) |
| */ |
| public void add(String pespectiveId, Set stickyViewList) { |
| stickyPerspectives.put(pespectiveId, stickyViewList); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.internal.IStickyViewManager#clear() |
| */ |
| public void clear() { |
| stickyPerspectives.clear(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.internal.IStickyViewManager#update(org.eclipse.ui.IWorkbenchPage, org.eclipse.ui.internal.Perspective, org.eclipse.ui.internal.Perspective) |
| */ |
| public void update(Perspective oldPersp, Perspective newPersp) { |
| if (newPersp != null && oldPersp != null) { |
| Set activatedStickyViewsInThisPerspective = (Set) stickyPerspectives |
| .get(newPersp.getDesc().getId()); |
| if (activatedStickyViewsInThisPerspective == null) { |
| activatedStickyViewsInThisPerspective = new HashSet(7); |
| stickyPerspectives.put(newPersp.getDesc().getId(), |
| activatedStickyViewsInThisPerspective); |
| } |
| IViewRegistry viewReg = WorkbenchPlugin.getDefault() |
| .getViewRegistry(); |
| IStickyViewDescriptor[] stickyDescs = viewReg.getStickyViews(); |
| for (int i = 0; i < stickyDescs.length; i++) { |
| final String viewId = stickyDescs[i].getId(); |
| try { |
| // show a sticky view if it was in the last perspective and hasn't already been activated in this one |
| if (oldPersp.findView(viewId) != null |
| && !activatedStickyViewsInThisPerspective |
| .contains(viewId)) { |
| page.showView(viewId, null, IWorkbenchPage.VIEW_CREATE); |
| activatedStickyViewsInThisPerspective.add(viewId); |
| } |
| } catch (PartInitException e) { |
| WorkbenchPlugin |
| .log( |
| "Could not open view :" + viewId, new Status(IStatus.ERROR, WorkbenchPlugin.PI_WORKBENCH, IStatus.ERROR, "Could not open view :" + viewId, e)); //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| } |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.internal.IStickyViewManager#save(org.eclipse.ui.IMemento) |
| */ |
| public void save(IMemento memento) { |
| IMemento stickyState = memento.createChild(IWorkbenchConstants.TAG_STICKY_STATE); |
| Iterator itr = stickyPerspectives.entrySet().iterator(); |
| while (itr.hasNext()) { |
| Map.Entry entry = (Map.Entry) itr.next(); |
| String perspectiveId = (String) entry.getKey(); |
| Set activatedViewIds = (Set) entry.getValue(); |
| IMemento perspectiveState = stickyState.createChild( |
| IWorkbenchConstants.TAG_PERSPECTIVE, perspectiveId); |
| for (Iterator i = activatedViewIds.iterator(); i.hasNext();) { |
| String viewId = (String) i.next(); |
| perspectiveState.createChild(IWorkbenchConstants.TAG_VIEW, |
| viewId); |
| } |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.internal.IStickyViewManager#restore(org.eclipse.ui.IMemento) |
| */ |
| public void restore(IMemento memento) { |
| // restore the sticky activation state |
| IMemento stickyState = memento |
| .getChild(IWorkbenchConstants.TAG_STICKY_STATE); |
| |
| if (stickyState != null) { |
| IMemento[] stickyPerspMems = stickyState |
| .getChildren(IWorkbenchConstants.TAG_PERSPECTIVE); |
| for (int i = 0; i < stickyPerspMems.length; i++) { |
| String perspectiveId = stickyPerspMems[i].getID(); |
| Set viewState = new HashSet(7); |
| stickyPerspectives.put(perspectiveId, viewState); |
| IMemento[] viewStateMementos = stickyPerspMems[i] |
| .getChildren(IWorkbenchConstants.TAG_VIEW); |
| for (int j = 0; j < viewStateMementos.length; j++) { |
| viewState.add(viewStateMementos[j].getID()); |
| } |
| } |
| } |
| } |
| } |