/******************************************************************************* * Copyright (c) 2016 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 org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.ui.IActionBars; import org.eclipse.ui.actions.ActionGroup; import org.eclipse.ui.navigator.IExtensionStateModel; import org.eclipse.jdt.internal.ui.navigator.IExtensionStateConstants.Values; import org.eclipse.jdt.internal.ui.packageview.PackagesMessages; /** * Adds action to toggle display of libraries node. * * @since 3.12 */ public class ShowLibrariesNodeActionGroup extends ActionGroup { private IExtensionStateModel fStateModel; private StructuredViewer fStructuredViewer; private boolean fHasContributedToViewMenu= false; private IAction fShowLibrariesNode= null; private IContributionItem fShowLibrariesNodeItem= null; private class ShowLibrariesNodeAction extends Action { public ShowLibrariesNodeAction() { super(PackagesMessages.LayoutActionGroup_show_libraries_in_group, AS_CHECK_BOX); setChecked(fStateModel.getBooleanProperty(Values.IS_LIBRARIES_NODE_SHOWN)); } /* * @see org.eclipse.jface.action.IAction#run() */ @Override public void run() { boolean showLibrariesNode= isChecked(); if (fStateModel.getBooleanProperty(Values.IS_LIBRARIES_NODE_SHOWN) != showLibrariesNode) { fStateModel.setBooleanProperty(Values.IS_LIBRARIES_NODE_SHOWN, showLibrariesNode); fStructuredViewer.getControl().setRedraw(false); try { fStructuredViewer.refresh(); } finally { fStructuredViewer.getControl().setRedraw(true); } } } } public ShowLibrariesNodeActionGroup(StructuredViewer structuredViewer, IExtensionStateModel stateModel) { super(); fStateModel= stateModel; fStructuredViewer= structuredViewer; } @Override public void fillActionBars(IActionBars actionBars) { if (!fHasContributedToViewMenu) { IMenuManager viewMenu= actionBars.getMenuManager(); if (fShowLibrariesNodeItem == null) { fShowLibrariesNodeItem= new ActionContributionItem(fShowLibrariesNode); } viewMenu.appendToGroup(CommonLayoutActionGroup.LAYOUT_GROUP_NAME, fShowLibrariesNodeItem); fHasContributedToViewMenu= true; } } public void unfillActionBars(IActionBars actionBars) { if (fHasContributedToViewMenu) { if (fShowLibrariesNodeItem != null) { actionBars.getMenuManager().remove(fShowLibrariesNodeItem); fShowLibrariesNodeItem.dispose(); fShowLibrariesNodeItem= null; } fHasContributedToViewMenu= false; } } public void setShowLibrariesNode(boolean showLibrariesNode) { if (fShowLibrariesNode == null) { fShowLibrariesNode= new ShowLibrariesNodeAction(); } fShowLibrariesNode.setChecked(showLibrariesNode); } }