diff options
Diffstat (limited to 'debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointUpdater.java')
-rw-r--r-- | debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointUpdater.java | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointUpdater.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointUpdater.java new file mode 100644 index 00000000000..b555f52ce2f --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/breakpoints/CBreakpointUpdater.java @@ -0,0 +1,136 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 QNX Software Systems 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: + * QNX Software Systems - Initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.debug.internal.ui.breakpoints; + +import java.util.Map; +import org.eclipse.cdt.debug.core.ICBreakpointListener; +import org.eclipse.cdt.debug.core.model.ICBreakpoint; +import org.eclipse.cdt.debug.core.model.ICDebugTarget; +import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.model.IBreakpoint; +import org.eclipse.debug.core.model.IDebugTarget; +import org.eclipse.swt.widgets.Display; + +/** + * Provides UI-related handles for the breakpoint events. + */ +public class CBreakpointUpdater implements ICBreakpointListener { + + private static CBreakpointUpdater fInstance; + + public static CBreakpointUpdater getInstance() { + if ( fInstance == null ) { + fInstance = new CBreakpointUpdater(); + } + return fInstance; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.cdt.debug.core.ICBreakpointListener#installingBreakpoint(org.eclipse.debug.core.model.IDebugTarget, + * org.eclipse.debug.core.model.IBreakpoint) + */ + @Override + public boolean installingBreakpoint( IDebugTarget target, IBreakpoint breakpoint ) { + return true; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.cdt.debug.core.ICBreakpointListener#breakpointInstalled(org.eclipse.debug.core.model.IDebugTarget, + * org.eclipse.debug.core.model.IBreakpoint) + */ + @Override + public void breakpointInstalled( final IDebugTarget target, IBreakpoint breakpoint ) { + if ( breakpoint instanceof ICBreakpoint && target instanceof ICDebugTarget ) { + final ICBreakpoint b = (ICBreakpoint)breakpoint; + asyncExec( new Runnable() { + + @Override + public void run() { + try { + if ( b.incrementInstallCount() == 1 ) + DebugPlugin.getDefault().getBreakpointManager().fireBreakpointChanged( b ); + } + catch( CoreException e ) { + CDebugUIPlugin.log( e.getStatus() ); + } + } + } ); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.cdt.debug.core.ICBreakpointListener#breakpointChanged(org.eclipse.debug.core.model.IDebugTarget, + * org.eclipse.debug.core.model.IBreakpoint, java.util.Map) + */ + @Override + public void breakpointChanged( IDebugTarget target, final IBreakpoint breakpoint, @SuppressWarnings("rawtypes") final Map attributes ) { + asyncExec( new Runnable() { + + @Override + public void run() { + try { + Boolean enabled = (Boolean)attributes.get( IBreakpoint.ENABLED ); + breakpoint.setEnabled( (enabled != null) ? enabled.booleanValue() : false ); + Integer ignoreCount = (Integer)attributes.get( ICBreakpoint.IGNORE_COUNT ); + ((ICBreakpoint)breakpoint).setIgnoreCount( (ignoreCount != null) ? ignoreCount.intValue() : 0 ); + String condition = (String)attributes.get( ICBreakpoint.CONDITION ); + ((ICBreakpoint)breakpoint).setCondition( (condition != null) ? condition : "" ); //$NON-NLS-1$ + } + catch( CoreException e ) { + CDebugUIPlugin.log( e.getStatus() ); + } + } + } ); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.cdt.debug.core.ICBreakpointListener#breakpointRemoved(org.eclipse.debug.core.model.IDebugTarget, + * org.eclipse.debug.core.model.IBreakpoint[]) + */ + @Override + public void breakpointsRemoved( IDebugTarget target, final IBreakpoint[] breakpoints ) { + asyncExec( new Runnable() { + + @Override + public void run() { + for ( int i = 0; i < breakpoints.length; ++i ) { + try { + if ( ((ICBreakpoint)breakpoints[i]).decrementInstallCount() == 0 ) + DebugPlugin.getDefault().getBreakpointManager().fireBreakpointChanged( breakpoints[i] ); + } + catch( CoreException e ) { + // ensureMarker throws this exception + // if breakpoint has already been deleted + } + } + } + } ); + } + + public void dispose() { + } + + private void asyncExec( Runnable r ) { + Display display = Display.getDefault(); + if ( display != null ) + display.asyncExec( r ); + } +} |