blob: 71f409dd1bf87a788cab4480e58e369e204f8b5c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2008 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.jdt.internal.ui.navigator;
import java.util.Arrays;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.actions.ActionContext;
import org.eclipse.ui.navigator.CommonActionProvider;
import org.eclipse.ui.navigator.ICommonActionExtensionSite;
import org.eclipse.ui.navigator.IExtensionActivationListener;
import org.eclipse.ui.navigator.IExtensionStateModel;
import org.eclipse.ui.navigator.INavigatorActivationService;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.navigator.IExtensionStateConstants.Values;
/**
* Contributes the following actions to the menu on behalf of the JDT content
* extension.
*
* <ul>
* <li>{@link CommonLayoutActionGroup}. Contributes the "Package Presentation>" submenu in the View's drop down menu (not right-click).</li>
* </ul>
*/
public class JavaNavigatorViewActionProvider extends CommonActionProvider {
private static final int HIERARCHICAL_LAYOUT= 0x1;
private static final int FLAT_LAYOUT= 0x2;
private static final String TAG_LAYOUT= "org.eclipse.jdt.internal.ui.navigator.layout"; //$NON-NLS-1$
private IExtensionStateModel fStateModel;
private CommonLayoutActionGroup fLayoutActionGroup;
private ICommonActionExtensionSite fExtensionSite;
private String fExtensionId;
private IActionBars fActionBars;
private boolean fEnabled= false;
private IExtensionActivationListener fMenuUpdater= new IExtensionActivationListener() {
public void onExtensionActivation(String viewerId, String[] theNavigatorExtensionIds, boolean isCurrentlyActive) {
if (fExtensionSite != null && fActionBars != null) {
int search= Arrays.binarySearch(theNavigatorExtensionIds, fExtensionId);
if (search > -1) {
if (isMyViewer(viewerId)) {
if (wasEnabled(isCurrentlyActive))
fLayoutActionGroup.fillActionBars(fActionBars);
else
if (wasDisabled(isCurrentlyActive))
fLayoutActionGroup.unfillActionBars(fActionBars);
// else no change
}
fEnabled= isCurrentlyActive;
}
}
}
private boolean isMyViewer(String viewerId) {
String myViewerId= fExtensionSite.getViewSite().getId();
return myViewerId != null && myViewerId.equals(viewerId);
}
private boolean wasDisabled(boolean isActive) {
return fEnabled && !isActive;
}
private boolean wasEnabled(boolean isActive) {
return !fEnabled && isActive;
}
};
@Override
public void fillActionBars(IActionBars actionBars) {
fActionBars= actionBars;
fLayoutActionGroup.fillActionBars(actionBars);
}
@Override
public void init(ICommonActionExtensionSite site) {
fExtensionSite= site;
fStateModel= fExtensionSite.getExtensionStateModel();
fLayoutActionGroup= new CommonLayoutActionGroup(fExtensionSite.getStructuredViewer(), fStateModel);
INavigatorActivationService activationService= fExtensionSite.getContentService().getActivationService();
activationService.addExtensionActivationListener(fMenuUpdater);
fExtensionId= fExtensionSite.getExtensionId();
fEnabled= true;
}
@Override
public void dispose() {
fLayoutActionGroup.dispose();
fExtensionSite.getContentService().getActivationService().removeExtensionActivationListener(fMenuUpdater);
super.dispose();
}
@Override
public void setContext(ActionContext context) {
super.setContext(context);
}
@Override
public void restoreState(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= JavaPlugin.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);
}
@Override
public void saveState(IMemento aMemento) {
super.saveState(aMemento);
IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
if (fStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT))
store.setValue(TAG_LAYOUT, FLAT_LAYOUT);
else
store.setValue(TAG_LAYOUT, HIERARCHICAL_LAYOUT);
}
}