blob: c0859de9e9311aec1825be45727ae7c7c80494ac [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 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
* Chris Gross chris.gross@us.ibm.com Bug 107443
*******************************************************************************/
package org.eclipse.ui.internal;
import org.eclipse.ui.IFolderLayout;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.activities.WorkbenchActivityHelper;
import org.eclipse.ui.views.IViewDescriptor;
/**
* This layout is used to define the initial set of views and placeholders
* in a folder.
* <p>
* Views are added to the folder by ID. This id is used to identify
* a view descriptor in the view registry, and this descriptor is used to
* instantiate the <code>IViewPart</code>.
* </p>
*/
public class FolderLayout implements IFolderLayout {
private ViewStack folder;
private PageLayout pageLayout;
private ViewFactory viewFactory;
/**
* Create an instance of a <code>FolderLayout</code> belonging to a
* <code>PageLayout</code>.
*/
public FolderLayout(PageLayout pageLayout, ViewStack folder,
ViewFactory viewFactory) {
super();
this.folder = folder;
this.viewFactory = viewFactory;
this.pageLayout = pageLayout;
}
/* (non-Javadoc)
* @see org.eclipse.ui.IPlaceholderFolderLayout#addPlaceholder(java.lang.String)
*/
public void addPlaceholder(String viewId) {
if (!pageLayout.checkValidPlaceholderId(viewId)) {
return;
}
// Create the placeholder.
PartPlaceholder newPart = new PartPlaceholder(viewId);
linkPartToPageLayout(viewId, newPart);
// Add it to the folder layout.
folder.add(newPart);
}
/* (non-Javadoc)
* @see org.eclipse.ui.IFolderLayout#addView(java.lang.String)
*/
public void addView(String viewId) {
if (pageLayout.checkPartInLayout(viewId)) {
return;
}
try {
IViewDescriptor descriptor = viewFactory.getViewRegistry().find(
ViewFactory.extractPrimaryId(viewId));
if (descriptor == null) {
throw new PartInitException("View descriptor not found: " + viewId); //$NON-NLS-1$
}
if (WorkbenchActivityHelper.filterItem(descriptor)) {
//create a placeholder instead.
addPlaceholder(viewId);
LayoutHelper.addViewActivator(pageLayout, viewId);
} else {
ViewPane newPart = LayoutHelper.createView(pageLayout
.getViewFactory(), viewId);
linkPartToPageLayout(viewId, newPart);
folder.add(newPart);
}
} catch (PartInitException e) {
// cannot safely open the dialog so log the problem
WorkbenchPlugin.log(getClass(), "addView(String)", e); //$NON-NLS-1$
}
}
/**
* Inform the page layout of the new part created
* and the folder the part belongs to.
*/
private void linkPartToPageLayout(String viewId, LayoutPart newPart) {
pageLayout.setRefPart(viewId, newPart);
pageLayout.setFolderPart(viewId, folder);
// force creation of the view layout rec
pageLayout.getViewLayoutRec(viewId, true);
}
/* (non-Javadoc)
* @see org.eclipse.ui.IPlaceholderFolderLayout#getProperty(java.lang.String)
*/
public String getProperty(String id) {
return folder.getProperty(id);
}
/* (non-Javadoc)
* @see org.eclipse.ui.IPlaceholderFolderLayout#setProperty(java.lang.String, java.lang.String)
*/
public void setProperty(String id, String value) {
folder.setProperty(id,value);
}
}