/******************************************************************************* * Copyright (c) 2013 Mentor Graphics 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: * Mentor Graphics - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.internal.ui.commands; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.commands.AbstractDebugCommand; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.progress.UIJob; /** * The enablement of a {@link AbstractDebugCommand} is updated only when the current * debug context is changed. In some cases we need to force an update without changing * the context. This class provides such a functionality. * The proper way is to modify {@link AbstractDebugCommand}. */ public abstract class RefreshableDebugCommand extends AbstractDebugCommand { protected class UpdateEnablementJob extends UIJob { protected UpdateEnablementJob() { super("Update enablement job"); //$NON-NLS-1$ } @Override public IStatus runInUIThread(IProgressMonitor monitor) { // Reseting the current selection in the Debug view will force the enablement update IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window != null) { IWorkbenchPage page = window.getActivePage(); if (page != null) { IViewPart view = page.findView(IDebugUIConstants.ID_DEBUG_VIEW); if (view != null) { IWorkbenchPartSite site = view.getSite(); if (site != null) { ISelectionProvider selProvider = site.getSelectionProvider(); if (selProvider != null) { selProvider.setSelection(selProvider.getSelection()); } } } } } return Status.OK_STATUS; } } protected void updateEnablement() { new UpdateEnablementJob().schedule(); } }