Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/debug
diff options
context:
space:
mode:
authorMikhail Khodjaiants2007-02-12 16:49:54 +0000
committerMikhail Khodjaiants2007-02-12 16:49:54 +0000
commit85fa4bbdc861a76fa58c3c0509ee6481f2ab4919 (patch)
tree2614852ffd9d8fab81a16cbfc4a83841c8b8b640 /debug
parentea377723db87e5d4afb732673d57132ae762afef (diff)
downloadorg.eclipse.cdt-85fa4bbdc861a76fa58c3c0509ee6481f2ab4919.tar.gz
org.eclipse.cdt-85fa4bbdc861a76fa58c3c0509ee6481f2ab4919.tar.xz
org.eclipse.cdt-85fa4bbdc861a76fa58c3c0509ee6481f2ab4919.zip
Bug 173792: Modules view needs to catch up with 3.3M5. Added ModuleMementoProvider.
Diffstat (limited to 'debug')
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java13
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleMementoProvider.java75
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java121
3 files changed, 182 insertions, 27 deletions
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java
index 1931722717d..b7fbc32a2b7 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java
@@ -15,10 +15,13 @@ import org.eclipse.cdt.debug.core.model.ICModule;
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
import org.eclipse.cdt.debug.internal.ui.views.modules.ModuleContentProvider;
import org.eclipse.cdt.debug.internal.ui.views.modules.ModuleLabelProvider;
+import org.eclipse.cdt.debug.internal.ui.views.modules.ModuleMementoProvider;
import org.eclipse.cdt.debug.internal.ui.views.modules.ModuleProxyFactory;
import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactoryAdapter;
/**
@@ -29,7 +32,7 @@ public class CDebugElementAdapterFactory implements IAdapterFactory {
private static IElementLabelProvider fgModuleLabelProvider = new ModuleLabelProvider();
private static IElementContentProvider fgModuleContentProvider = new ModuleContentProvider();
private static IModelProxyFactoryAdapter fgModuleProxyFactory = new ModuleProxyFactory();
-
+ private static IElementMementoProvider fgModuleMementoProvider = new ModuleMementoProvider();
/* (non-Javadoc)
* @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
@@ -62,6 +65,11 @@ public class CDebugElementAdapterFactory implements IAdapterFactory {
return fgModuleProxyFactory;
}
}
+ if ( adapterType.equals( IElementMementoProvider.class ) ) {
+ if ( adaptableObject instanceof IModuleRetrieval ) {
+ return fgModuleMementoProvider;
+ }
+ }
return null;
}
@@ -72,7 +80,8 @@ public class CDebugElementAdapterFactory implements IAdapterFactory {
return new Class[] {
IElementLabelProvider.class,
IElementContentProvider.class,
- IModelProxyFactoryAdapter.class
+ IModelProxyFactoryAdapter.class,
+ IElementMementoProvider.class,
};
}
}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleMementoProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleMementoProvider.java
new file mode 100644
index 00000000000..dd473c10749
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleMementoProvider.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2007 ARM 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:
+ * ARM - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.debug.internal.ui.views.modules;
+
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.debug.core.CDIDebugModel;
+import org.eclipse.cdt.debug.core.model.ICModule;
+import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.internal.ui.model.elements.ElementMementoProvider;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.ui.IMemento;
+
+/**
+ * org.eclipse.cdt.debug.internal.ui.views.modules.ModuleMementoProvider:
+ * //TODO Add description.
+ */
+public class ModuleMementoProvider extends ElementMementoProvider {
+
+ /**
+ * memento attribute
+ */
+ private static final String ELEMENT_NAME = "ELEMENT_NAME"; //$NON-NLS-1$
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.model.elements.ElementMementoProvider#encodeElement(java.lang.Object, org.eclipse.ui.IMemento, org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext)
+ */
+ protected boolean encodeElement( Object element, IMemento memento, IPresentationContext context ) throws CoreException {
+ if ( element instanceof IModuleRetrieval ) {
+ // attempt to maintain expansion for target ????
+ memento.putString( ELEMENT_NAME, CDIDebugModel.getPluginIdentifier() );
+ }
+ else if ( element instanceof ICModule ) {
+ memento.putString( ELEMENT_NAME, ((ICModule)element).getName() );
+ }
+ else if ( element instanceof ICElement ) {
+ memento.putString( ELEMENT_NAME, ((ICElement)element).getElementName() );
+ }
+ else {
+ return false;
+ }
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.model.elements.ElementMementoProvider#isEqual(java.lang.Object, org.eclipse.ui.IMemento, org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext)
+ */
+ protected boolean isEqual( Object element, IMemento memento, IPresentationContext context ) throws CoreException {
+ String mementoName = memento.getString( ELEMENT_NAME );
+ if ( mementoName != null ) {
+ String elementName = null;
+ if ( element instanceof IModuleRetrieval ) {
+ elementName = CDIDebugModel.getPluginIdentifier();
+ }
+ else if ( element instanceof ICModule ) {
+ elementName = ((ICModule)element).getName();
+ }
+ else if ( element instanceof ICElement ) {
+ elementName = ((ICElement)element).getElementName();
+ }
+ if ( elementName != null ) {
+ return elementName.equals( mementoName );
+ }
+ }
+ return false;
+ }
+}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java
index 1acd54816f7..108410bf153 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java
@@ -10,6 +10,11 @@
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.views.modules;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Iterator;
@@ -92,7 +97,10 @@ import org.eclipse.ui.IPerspectiveListener;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.WorkbenchException;
+import org.eclipse.ui.XMLMemento;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.console.actions.TextViewerAction;
import org.eclipse.ui.texteditor.IUpdate;
@@ -124,6 +132,18 @@ public class ModulesView extends AbstractDebugView implements IDebugContextListe
interface ICursorListener extends MouseListener, KeyListener {
}
+ protected String PREF_STATE_MEMENTO = "pref_state_memento."; //$NON-NLS-1$
+
+ /**
+ * the preference name for the view part of the sash form
+ */
+ protected static final String SASH_VIEW_PART = CDebugUIPlugin.getUniqueIdentifier() + ".SASH_VIEW_PART"; //$NON-NLS-1$
+
+ /**
+ * the preference name for the details part of the sash form
+ */
+ protected static final String SASH_DETAILS_PART = CDebugUIPlugin.getUniqueIdentifier() + ".SASH_DETAILS_PART"; //$NON-NLS-1$
+
/**
* The UI construct that provides a sliding sash between the modules tree
* and the detail pane.
@@ -630,19 +650,17 @@ public class ModulesView extends AbstractDebugView implements IDebugContextListe
fDetailViewer.getTextWidget().setWordWrap( on );
}
- /* (non-Javadoc)
- * @see org.eclipse.ui.IViewPart#saveState(org.eclipse.ui.IMemento)
- */
- public void saveState( IMemento memento ) {
- super.saveState( memento );
- SashForm sashForm = getSashForm();
- if ( sashForm != null ) {
- int[] weights = sashForm.getWeights();
- memento.putInteger( SASH_WEIGHTS + "-Length", weights.length ); //$NON-NLS-1$
- for( int i = 0; i < weights.length; i++ ) {
- memento.putInteger( SASH_WEIGHTS + "-" + i, weights[i] ); //$NON-NLS-1$
- }
+ /**
+ * Saves the current state of the viewer
+ * @param memento the memento to write the viewer state into
+ */
+ public void saveViewerState( IMemento memento ) {
+ if ( fSashForm != null && !fSashForm.isDisposed() ) {
+ int[] weights = fSashForm.getWeights();
+ memento.putInteger( SASH_VIEW_PART, weights[0] );
+ memento.putInteger( SASH_DETAILS_PART, weights[1] );
}
+ getModulesViewer().saveState( memento );
}
/* (non-Javadoc)
@@ -650,22 +668,43 @@ public class ModulesView extends AbstractDebugView implements IDebugContextListe
*/
public void init( IViewSite site, IMemento memento ) throws PartInitException {
super.init( site, memento );
- if ( memento != null ) {
- Integer bigI = memento.getInteger( SASH_WEIGHTS + "-Length" ); //$NON-NLS-1$
- if ( bigI == null ) {
- return;
+
+ PREF_STATE_MEMENTO = PREF_STATE_MEMENTO + site.getId();
+ IPreferenceStore store = CDebugUIPlugin.getDefault().getPreferenceStore();
+ String string = store.getString( PREF_STATE_MEMENTO );
+ if ( string.length() > 0 ) {
+ ByteArrayInputStream bin = new ByteArrayInputStream( string.getBytes() );
+ InputStreamReader reader = new InputStreamReader( bin );
+ try {
+ XMLMemento stateMemento = XMLMemento.createReadRoot( reader );
+ setMemento( stateMemento );
+ }
+ catch( WorkbenchException e ) {
}
- int numWeights = bigI.intValue();
- int[] weights = new int[numWeights];
- for( int i = 0; i < numWeights; i++ ) {
- bigI = memento.getInteger( SASH_WEIGHTS + "-" + i ); //$NON-NLS-1$
- if ( bigI == null ) {
- return;
+ finally {
+ try {
+ reader.close();
+ bin.close();
+ }
+ catch( IOException e ) {
}
- weights[i] = bigI.intValue();
}
- if ( weights.length > 0 ) {
- setLastSashWeights( weights );
+ }
+
+ IMemento mem = getMemento();
+ setLastSashWeights( DEFAULT_SASH_WEIGHTS );
+ setLastSashWeights( DEFAULT_SASH_WEIGHTS );
+ if ( mem != null ) {
+ Integer sw = mem.getInteger( SASH_VIEW_PART );
+ if ( sw != null ) {
+ int view = sw.intValue();
+ sw = mem.getInteger( SASH_DETAILS_PART );
+ if ( sw != null ) {
+ int details = sw.intValue();
+ if ( view > -1 & details > -1 ) {
+ setLastSashWeights( new int[] { view, details } );
+ }
+ }
}
}
site.getWorkbenchWindow().addPerspectiveListener( this );
@@ -946,4 +985,36 @@ public class ModulesView extends AbstractDebugView implements IDebugContextListe
manager.setErrorMessage( null );
manager.setMessage( null );
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.PageBookView#partDeactivated(org.eclipse.ui.IWorkbenchPart)
+ */
+ public void partDeactivated( IWorkbenchPart part ) {
+ String id = part.getSite().getId();
+ if ( id.equals( getSite().getId() ) ) {
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ OutputStreamWriter writer = new OutputStreamWriter( bout );
+
+ try {
+ XMLMemento memento = XMLMemento.createWriteRoot( "ModulesViewMemento" ); //$NON-NLS-1$
+ saveViewerState( memento );
+ memento.save( writer );
+
+ IPreferenceStore store = CDebugUIPlugin.getDefault().getPreferenceStore();
+ String xmlString = bout.toString();
+ store.putValue( PREF_STATE_MEMENTO, xmlString );
+ }
+ catch( IOException e ) {
+ }
+ finally {
+ try {
+ writer.close();
+ bout.close();
+ }
+ catch( IOException e ) {
+ }
+ }
+ }
+ super.partDeactivated( part );
+ }
}

Back to the top