package com.hundsun.ares.studio.ui.action;
import java.util.Arrays;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IMemento;
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 com.hundsun.ares.studio.ui.ARESPreferences;
import com.hundsun.ares.studio.ui.ARESUI;
public class ARESNavitagorViewActionProvider extends CommonActionProvider {
private IActionBars actionBars;
private ICommonActionExtensionSite extensionSite;
private IExtensionStateModel stateModel;
private CommonLayoutActionGroup layoutActionGroup;
private ToggleShowCategoryAction showCategoryAction;
private boolean hasAddedShowCateMenu;
private String extensionId;
private boolean enabled;
private IExtensionActivationListener fMenuUpdater= new IExtensionActivationListener() {
public void onExtensionActivation(String viewerId, String[] theNavigatorExtensionIds, boolean isCurrentlyActive) {
if (extensionSite != null && actionBars != null) {
int search= Arrays.binarySearch(theNavigatorExtensionIds, extensionId);
if (search > -1) {
if (isMyViewer(viewerId)) {
if (wasEnabled(isCurrentlyActive))
layoutActionGroup.fillActionBars(actionBars);
else
if (wasDisabled(isCurrentlyActive))
layoutActionGroup.unfillActionBars(actionBars);
// else no change
}
enabled= isCurrentlyActive;
}
}
}
private boolean isMyViewer(String viewerId) {
String myViewerId= extensionSite.getViewSite().getId();
return myViewerId != null && myViewerId.equals(viewerId);
}
private boolean wasDisabled(boolean isActive) {
return enabled && !isActive;
}
private boolean wasEnabled(boolean isActive) {
return !enabled && isActive;
}
};
public ARESNavitagorViewActionProvider() {
}
public void init(ICommonActionExtensionSite site) {
this.extensionSite = site;
this.stateModel = site.getExtensionStateModel();
layoutActionGroup = new CommonLayoutActionGroup(site.getStructuredViewer(), stateModel);
extensionId = site.getExtensionId();
INavigatorActivationService activationService= extensionSite.getContentService().getActivationService();
activationService.addExtensionActivationListener(fMenuUpdater);
// enabled= true;
showCategoryAction = new ToggleShowCategoryAction(stateModel, site.getStructuredViewer());
}
public void fillActionBars(IActionBars actionBars) {
this.actionBars = actionBars;
layoutActionGroup.fillActionBars(actionBars);
if (!hasAddedShowCateMenu) {
this.actionBars.getMenuManager().add(showCategoryAction);
//this.actionBars.getToolBarManager().add(showCategoryAction);
hasAddedShowCateMenu = true;
}
}
public void restoreState(IMemento memento) {
IPreferenceStore store = ARESUI.getDefault().getPreferenceStore();
layoutActionGroup.setFlatLayout(store.getBoolean(ARESPreferences.FLATLAYOUT));
boolean showCategory = store.getBoolean(ARESPreferences.SHOW_CATEGORY);
showCategoryAction.setShowCategory(showCategory);
showCategoryAction.setChecked(showCategory);
}
public void dispose() {
super.dispose();
extensionSite.getContentService().getActivationService().removeExtensionActivationListener(fMenuUpdater);
}
}