/***************************************************************************** * Copyright (c) 2011 CEA LIST. * * * 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: * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.infra.table.menu.handler.states; import org.eclipse.jface.commands.ToggleState; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.ISelectionService; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; /** * Abstract class for the command using toggle state * In order refresh command state, this class adds a listener on the SelectionService * * */ public abstract class AbstractToggleStateProvider extends ToggleState implements ISelectionListener { /** the selection service */ private ISelectionService serv = null; /** * * Constructor. * */ public AbstractToggleStateProvider() { addSelectionListener(); refreshState(); } /** * add a listener on the selection service */ protected void addSelectionListener() { PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { public void run() { IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); if(window != null) { serv = window.getSelectionService(); if(serv != null) { //serv.addSelectionListener(this); serv.addSelectionListener(AbstractToggleStateProvider.this); } } } }); } /** * * @see org.eclipse.core.commands.State#dispose() * */ @Override public void dispose() { if(this.serv != null) { this.serv.removeSelectionListener(this); } super.dispose(); } /** * * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection) * * @param part * @param selection */ public void selectionChanged(IWorkbenchPart part, ISelection selection) { refreshState(); } /** * Refresh the status of the command */ protected abstract void refreshState(); }