blob: cd274ee951422b9271e4856d92d3079afa609858 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2004 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.wst.css.ui.internal.views.contentoutline;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleDeclItem;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSValue;
import org.eclipse.wst.css.ui.internal.CSSUIPlugin;
import org.eclipse.wst.sse.core.internal.provisional.INodeAdapterFactory;
import org.eclipse.wst.sse.ui.internal.contentoutline.PropertyChangeUpdateActionContributionItem;
import org.eclipse.wst.sse.ui.internal.provisional.views.contentoutline.StructuredContentOutlineConfiguration;
import org.eclipse.wst.sse.ui.internal.view.events.NodeSelectionChangedEvent;
public class CSSContentOutlineConfiguration extends StructuredContentOutlineConfiguration {
private final String OUTLINE_SORT_PREF = "outline-sort"; //$NON-NLS-1$
private IContentProvider fContentProvider = null;
private ILabelProvider fLabelProvider = null;
public CSSContentOutlineConfiguration() {
super();
}
public IContributionItem[] createToolbarContributions(TreeViewer viewer) {
IContributionItem[] items = super.createToolbarContributions(viewer);
SortAction sortAction = new SortAction(viewer, CSSUIPlugin.getDefault().getPreferenceStore(), OUTLINE_SORT_PREF);
IContributionItem sortItem = new PropertyChangeUpdateActionContributionItem(sortAction);
if (items == null) {
items = new IContributionItem[1];
items[0] = sortItem;
} else {
IContributionItem[] combinedItems = new IContributionItem[items.length + 1];
combinedItems[0] = sortItem;
System.arraycopy(items, 0, combinedItems, 1, items.length);
items = combinedItems;
}
return items;
}
public IContentProvider getContentProvider(TreeViewer viewer) {
if (fContentProvider == null && getFactory() != null)
fContentProvider = new JFaceNodeContentProviderCSS((INodeAdapterFactory) getFactory());
return fContentProvider;
}
public ILabelProvider getLabelProvider(TreeViewer viewer) {
if (fLabelProvider == null && getFactory() != null)
fLabelProvider = new JFaceNodeLabelProviderCSS((INodeAdapterFactory) getFactory());
return fLabelProvider;
}
public List getNodes(List nodes) {
List filteredNodes = new ArrayList(nodes);
List targetNodes = new ArrayList();
Iterator i = filteredNodes.iterator();
while (i.hasNext()) {
Object obj = i.next();
if (obj instanceof ICSSNode) {
ICSSNode node = (ICSSNode) obj;
short nodeType = node.getNodeType();
if (node instanceof ICSSValue) {
while (node != null && !(node instanceof ICSSStyleDeclItem)) {
node = node.getParentNode();
}
} else if (nodeType == ICSSNode.STYLEDECLARATION_NODE) {
node = node.getParentNode();
} else if (nodeType == ICSSNode.MEDIALIST_NODE) {
node = node.getParentNode();
}
if (node != null) {
obj = node;
}
}
targetNodes.add(obj);
}
return targetNodes;
}
public List getSelectedNodes(NodeSelectionChangedEvent event) {
return getNodes(event.getSelectedNodes());
}
/**
* @deprecated use key directly (no need for generator)
*/
public String getSortPreferenceKey() {
// return PreferenceKeyGenerator.generateKey(OUTLINE_SORT_PREF, getDeclaringID());
return OUTLINE_SORT_PREF;
}
/* (non-Javadoc)
* @see org.eclipse.wst.sse.ui.views.contentoutline.StructuredContentOutlineConfiguration#getPreferenceStore()
*/
protected IPreferenceStore getPreferenceStore() {
return CSSUIPlugin.getDefault().getPreferenceStore();
}
}