/******************************************************************************* * Copyright (c) 2003, 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 * *******************************************************************************/ package org.eclipse.dltk.internal.ui.navigator; import org.eclipse.dltk.internal.ui.navigator.IExtensionStateConstants.Values; import org.eclipse.dltk.internal.ui.wizards.buildpath.newsourcepage.GenerateBuildPathActionGroup; import org.eclipse.dltk.ui.DLTKUIPlugin; import org.eclipse.dltk.ui.actions.OpenViewActionGroup; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IMemento; import org.eclipse.ui.IViewPart; import org.eclipse.ui.actions.ActionContext; import org.eclipse.ui.navigator.CommonActionProvider; import org.eclipse.ui.navigator.ICommonActionExtensionSite; import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite; import org.eclipse.ui.navigator.IExtensionStateModel; public class ScriptExplorerActionProvider extends CommonActionProvider { private static final int HIERARCHICAL_LAYOUT = 1; private static final int FLAT_LAYOUT = 2; private static final String TAG_LAYOUT = "org.eclipse.dltk.internal.ui.navigator.layout"; //$NON-NLS-1$ private CommonLayoutActionGroup fLayoutActionGroup; private OpenViewActionGroup fOpenViewGroup; private GenerateBuildPathActionGroup fBuildPathGroup; private IExtensionStateModel fStateModel; private boolean fInViewPart = false; private boolean fHasFilledViewMenu = false; public ScriptExplorerActionProvider() { } public void fillActionBars(IActionBars actionBars) { if (!fHasFilledViewMenu) { fLayoutActionGroup.fillActionBars(actionBars); fHasFilledViewMenu = true; } if (fInViewPart) { fOpenViewGroup.fillActionBars(actionBars); fBuildPathGroup.fillActionBars(actionBars); } } public void fillContextMenu(IMenuManager menu) { if (fInViewPart) { fOpenViewGroup.fillContextMenu(menu); fBuildPathGroup.fillContextMenu(menu); } } public void init(ICommonActionExtensionSite site) { ICommonViewerWorkbenchSite workbenchSite = null; if (site.getViewSite() instanceof ICommonViewerWorkbenchSite) { workbenchSite = (ICommonViewerWorkbenchSite) site.getViewSite(); } fStateModel = site.getExtensionStateModel(); fLayoutActionGroup = new CommonLayoutActionGroup(site .getStructuredViewer(), fStateModel); if (workbenchSite != null) { if (workbenchSite.getPart() != null && workbenchSite.getPart() instanceof IViewPart) { IViewPart viewPart = (IViewPart) workbenchSite.getPart(); fOpenViewGroup = new OpenViewActionGroup(viewPart, site .getStructuredViewer()) { protected boolean getShowProperties() { return false; } }; fBuildPathGroup = new GenerateBuildPathActionGroup(viewPart); fInViewPart = true; } } } public void setContext(ActionContext context) { super.setContext(context); if (fInViewPart) { fOpenViewGroup.setContext(context); fBuildPathGroup.setContext(context); } } public void restoreState(IMemento memento) { super.restoreState(memento); restoreLayoutState(memento); } private void restoreLayoutState(IMemento memento) { boolean isCurrentLayoutFlat = true; Integer state = null; if (memento != null) state = memento.getInteger(TAG_LAYOUT); // If no memento try an restore from preference store if (state == null) { IPreferenceStore store = DLTKUIPlugin.getDefault() .getPreferenceStore(); state = new Integer(store.getInt(TAG_LAYOUT)); } if (state.intValue() == FLAT_LAYOUT) isCurrentLayoutFlat = true; else if (state.intValue() == HIERARCHICAL_LAYOUT) isCurrentLayoutFlat = false; fStateModel.setBooleanProperty(Values.IS_LAYOUT_FLAT, isCurrentLayoutFlat); fLayoutActionGroup.setFlatLayout(isCurrentLayoutFlat); } public void saveState(IMemento aMemento) { super.saveState(aMemento); IPreferenceStore store = DLTKUIPlugin.getDefault().getPreferenceStore(); if (fStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT)) store.setValue(TAG_LAYOUT, FLAT_LAYOUT); else store.setValue(TAG_LAYOUT, HIERARCHICAL_LAYOUT); } }