Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RenderingViewPane.java')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RenderingViewPane.java1276
1 files changed, 0 insertions, 1276 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RenderingViewPane.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RenderingViewPane.java
deleted file mode 100644
index a2cf26290..000000000
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RenderingViewPane.java
+++ /dev/null
@@ -1,1276 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 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
- * WindRiver - Bug 192028 [Memory View] Memory view does not
- * display memory blocks that do not reference IDebugTarget
- * ARM - Bug 192028 [Memory View] Memory view does not
- * display memory blocks that do not reference IDebugTarget
- * WindRiver - Bug 216509 [Memory View] typo, s/isMeomryBlockRemoved/isMemoryBlockRemoved
- * Wind River Systems - Ted Williams - [Memory View] Memory View: Workflow Enhancements (Bug 215432)
- *******************************************************************************/
-package org.eclipse.debug.internal.ui.views.memory;
-
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Set;
-
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.model.IMemoryBlock;
-import org.eclipse.debug.core.model.IMemoryBlockRetrieval;
-import org.eclipse.debug.internal.ui.DebugUIPlugin;
-import org.eclipse.debug.internal.ui.views.memory.renderings.CreateRendering;
-import org.eclipse.debug.ui.DebugUITools;
-import org.eclipse.debug.ui.IDebugUIConstants;
-import org.eclipse.debug.ui.contexts.DebugContextEvent;
-import org.eclipse.debug.ui.memory.IMemoryRendering;
-import org.eclipse.debug.ui.memory.IMemoryRenderingContainer;
-import org.eclipse.debug.ui.memory.IMemoryRenderingSite;
-import org.eclipse.debug.ui.memory.IMemoryRenderingSynchronizationService;
-import org.eclipse.debug.ui.memory.IResettableMemoryRendering;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.resource.ColorRegistry;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.SWTException;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabFolder2Adapter;
-import org.eclipse.swt.custom.CTabFolderEvent;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchPreferenceConstants;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.progress.UIJob;
-
-
-
-/**
- * Represents a rendering view pane in the Memory View.
- * This hosts the memory view tabs in the view.
- * @since 3.1
- *
- */
-public class RenderingViewPane extends AbstractMemoryViewPane implements IMemoryRenderingContainer{
-
- public static final String RENDERING_VIEW_PANE_ID = DebugUIPlugin.getUniqueIdentifier() + ".MemoryView.RenderingViewPane"; //$NON-NLS-1$
-
- private Hashtable fTabFolderForMemoryBlock = new Hashtable();
- private Hashtable fMemoryBlockFromTabFolder = new Hashtable();
-
- private ViewPaneRenderingMgr fRenderingMgr;
-
- private IMemoryRenderingSite fRenderingSite;
- private Set fAddedRenderings = new HashSet();
- private Set fAddedMemoryBlocks = new HashSet();
-
- private boolean fCanAddRendering = true;
- private boolean fCanRemoveRendering = true;
-
- private boolean fIsDisposed = false;
-
- /**
- * @param parent is the view hosting this view pane
- * @param paneId is the identifier assigned by the Memory View
- *
- * Pane id is assigned with the following format.
- * Rendering view pane created has its id assigned to
- * org.eclipse.debug.ui.MemoryView.RenderingViewPane.#.
- * # is a number indicating the order of which the rendering view
- * pane is created. First rendering view pane created will have its
- * id assigned to org.eclipse.debug.ui.MemoryView.RenderingViewPane.1.
- * Second rendering view pane created will have its id assigned to
- * org.eclipse.debug.ui.MemoryView.RenderingViewPane.2. and so on.
- * View pane are created from left to right by the Memory View.
- *
- */
- public RenderingViewPane(IViewPart parent) {
- super(parent);
-
- if (parent instanceof IMemoryRenderingSite)
- fRenderingSite = (IMemoryRenderingSite)parent;
- else
- {
- DebugUIPlugin.logErrorMessage("Parent for the rendering view pane is invalid."); //$NON-NLS-1$
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.internal.core.memory.IMemoryBlockListener#MemoryBlockAdded(org.eclipse.debug.core.model.IMemoryBlock)
- */
- public void memoryBlocksAdded(final IMemoryBlock[] memoryBlocks) {
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
-
- if (isDisposed())
- return;
-
- // check condition before doing anything
- if (memoryBlocks == null || memoryBlocks.length <= 0)
- return;
-
- for (int i=0; i<memoryBlocks.length; i++)
- {
- IMemoryBlock memory = memoryBlocks[i];
-
- if (!fTabFolderForMemoryBlock.containsKey(memory))
- {
- createFolderForMemoryBlock(memory);
- }
- fAddedMemoryBlocks.add(memory);
- updateToolBarActionsEnablement();
- }
- }});
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.internal.core.memory.IMemoryBlockListener#MemoryBlockRemoved(org.eclipse.debug.core.model.IMemoryBlock)
- */
- public void memoryBlocksRemoved(final IMemoryBlock[] memoryBlocks) {
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- for (int j=0; j<memoryBlocks.length; j++)
- {
- IMemoryBlock mbRemoved = memoryBlocks[j];
- if (fTabFolderForMemoryBlock == null)
- {
- return;
- }
-
- // get all renderings from this memory block and remove them from the view
- IMemoryRendering[] renderings = fRenderingMgr.getRenderingsFromMemoryBlock(mbRemoved);
-
- for (int k=0; k<renderings.length; k++)
- {
- removeMemoryRendering(renderings[k]);
- }
-
- // remove a the tab folder if the memory block is removed
- CTabFolder tabFolder =
- (CTabFolder) fTabFolderForMemoryBlock.get(mbRemoved);
-
- if (tabFolder == null)
- continue;
-
- fTabFolderForMemoryBlock.remove(mbRemoved);
- fMemoryBlockFromTabFolder.remove(tabFolder);
- IMemoryBlockRetrieval retrieve = MemoryViewUtil.getMemoryBlockRetrieval(mbRemoved);
- if (retrieve != null)
- {
- if (fTabFolderForDebugView.contains(tabFolder))
- {
- fTabFolderForDebugView.remove(MemoryViewUtil.getHashCode(retrieve));
- }
- }
-
- if (!tabFolder.isDisposed()) {
- // dispose all view tabs belonging to the tab folder
- CTabItem[] items = tabFolder.getItems();
-
- for (int i=0; i<items.length; i++)
- {
- disposeTab(items[i]);
- }
-
- // dispose the tab folder
- tabFolder.dispose();
-
- // if this is the top control
- if (tabFolder == fStackLayout.topControl)
- {
-
- // if memory view is visible and have a selection
- // follow memory view's selection
-
- ISelection selection = DebugUIPlugin.getActiveWorkbenchWindow().getSelectionService().getSelection(IDebugUIConstants.ID_MEMORY_VIEW);
- IMemoryBlock mbToSelect = getMemoryBlock(selection);
-
- if (mbToSelect != null)
- {
- // memory view may not have got the event and is still displaying
- // the deleted memory block
- if (mbToSelect != mbRemoved)
- handleMemoryBlockSelection(null, mbToSelect);
- else if ((MemoryViewUtil.getMemoryBlockManager().getMemoryBlocks(retrieve).length > 0))
- {
- mbToSelect = MemoryViewUtil.getMemoryBlockManager().getMemoryBlocks(retrieve)[0];
- handleMemoryBlockSelection(null, mbToSelect);
- }
- else
- {
- emptyFolder();
- }
- }
- else if (MemoryViewUtil.getMemoryBlockManager().getMemoryBlocks(retrieve).length > 0)
- { // get to the next folder
- mbToSelect = MemoryViewUtil.getMemoryBlockManager().getMemoryBlocks(retrieve)[0];
- handleMemoryBlockSelection(null, mbToSelect);
- }
- else
- {
- emptyFolder();
-
- }
- }
-
- // if not the top control
- // no need to do anything
- }
-
- fAddedMemoryBlocks.remove(mbRemoved);
- updateToolBarActionsEnablement();
- }
- }
- });
-
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
- */
- public void selectionChanged(final IWorkbenchPart part, final ISelection selection) {
- if (fIsDisposed)
- return;
-
- // do not schedule job if any of these conditions are true
- if(part == RenderingViewPane.this)
- return;
-
- if (!(selection instanceof IStructuredSelection))
- return;
-
- if (selection == AbstractMemoryViewPane.EMPTY)
- return;
-
- UIJob job = new UIJob("RenderingViewPane selectionChanged"){ //$NON-NLS-1$
-
- public IStatus runInUIThread(IProgressMonitor monitor) {
- try {
-
- if (isDisposed())
- return Status.OK_STATUS;
-
- if (selection.isEmpty())
- {
- // if the event comes from Memory View
- // pick empty tab folder as the memory view is no longer displaying anything
- if (part.getSite().getId().equals(IDebugUIConstants.ID_MEMORY_VIEW))
- {
- if (part == getMemoryRenderingSite().getSite().getPart())
- {
- IMemoryViewTab lastViewTab = getTopMemoryTab();
-
- if (lastViewTab != null)
- lastViewTab.setEnabled(false);
-
- emptyFolder();
- }
- }
-
- // do not do anything if there is no selection
- // In the case when a debug adpater fires a debug event incorrectly, Launch View sets
- // selection to nothing. If the view tab is disabled, it erases all the "delta" information
- // in the content. This may not be desirable as it will cause memory to show up as
- // unchanged when it's actually changed. Do not disable the view tab until there is a
- // valid selection.
-
- return Status.OK_STATUS;
- }
-
- // back up current view tab
- IMemoryViewTab lastViewTab = getTopMemoryTab();
-
- if (!(selection instanceof IStructuredSelection))
- return Status.OK_STATUS;
-
- Object elem = ((IStructuredSelection)selection).getFirstElement();
-
- if (elem instanceof IMemoryBlock)
- {
- // if the selection event comes from this view
- if (part == getMemoryRenderingSite())
- {
- // find the folder associated with the given IMemoryBlockRetrieval
- IMemoryBlock memBlock = (IMemoryBlock)elem;
-
- // should never get here... added code for safety
- if (fTabFolderForMemoryBlock == null)
- {
- if (lastViewTab != null)
- lastViewTab.setEnabled(false);
-
- emptyFolder();
- return Status.OK_STATUS;
- }
-
- handleMemoryBlockSelection(lastViewTab, memBlock);
- }
- }
- }
- catch(SWTException se)
- {
- DebugUIPlugin.log(se);
- }
- return Status.OK_STATUS;
- }};
- job.setSystem(true);
- job.schedule();
- }
-
- public void handleMemoryBlockSelection(final IMemoryViewTab lastViewTab, final IMemoryBlock memBlock) {
- // Do not check if the debug target of mb is removed
- // We should not get into this method if the debug target of the memory block is terminated
- // Memory Block Manager gets the terminate event and would have removed all memory blocks
- // associated with the debug target
- // Therefore, we will never try to set a selection to a memory block whose target is terminated
-
- // check current memory block
- CTabFolder currentFolder = (CTabFolder) fStackLayout.topControl;
- if (currentFolder != null && !currentFolder.isDisposed()) {
- IMemoryBlock currentBlk = (IMemoryBlock) fMemoryBlockFromTabFolder.get(currentFolder);
- if (currentBlk != null) {
- if (currentBlk == memBlock)
- return;
- }
- }
-
- if (getTopMemoryTab() != null) {
- if (getTopMemoryTab().getRendering().getMemoryBlock() == memBlock) {
- return;
- }
- }
-
- // if we've got a tabfolder to go with the IMemoryBlock, display
- // it
- if (fTabFolderForMemoryBlock.containsKey(memBlock)) {
- if (fStackLayout.topControl != (CTabFolder) fTabFolderForMemoryBlock.get(memBlock)) {
- setTabFolder((CTabFolder) fTabFolderForMemoryBlock.get(memBlock));
- fViewPaneCanvas.layout();
- }
- } else { // otherwise, add a new one
- CTabFolder folder = createTabFolder(fViewPaneCanvas);
-
- fTabFolderForMemoryBlock.put(memBlock, folder);
- fMemoryBlockFromTabFolder.put(folder, memBlock);
- setTabFolder((CTabFolder) fTabFolderForMemoryBlock.get(memBlock));
- fViewPaneCanvas.layout();
- fAddedMemoryBlocks.add(memBlock);
-
- newCreateRenderingForFolder(memBlock, folder);
- }
-
- // restore view tabs
- IMemoryRendering[] renderings = fRenderingMgr.getRenderingsFromMemoryBlock(memBlock);
- CTabFolder toDisplay = (CTabFolder) fStackLayout.topControl;
-
- // if only CreateRendering is present, restore renderings
- if (isRestoreViewTabs(toDisplay)) {
- restoreViewTabs(renderings);
- }
-
- // disable last view tab as it becomes hidden
- IMemoryViewTab newViewTab = getTopMemoryTab();
-
- if (lastViewTab != null && lastViewTab != newViewTab) {
- lastViewTab.setEnabled(false);
- }
-
- if (newViewTab != null) {
- // if new view tab is not already enabled, enable it
- if (!newViewTab.isEnabled()) {
- // if the view tab is visible, enable it
- if (fVisible) {
- newViewTab.setEnabled(fVisible);
- }
- }
- }
-
- IMemoryViewTab viewTab = getTopMemoryTab();
- if (viewTab != null)
- setRenderingSelection(viewTab.getRendering());
-
- //set toolbar actions enabled/disabled
- updateToolBarActionsEnablement();
- }
-
- private boolean isRestoreViewTabs(CTabFolder folder)
- {
- if (canAddRendering())
- return (folder.getItemCount() == 1 && getTopMemoryTab().getRendering() instanceof CreateRendering);
- else
- return (folder.getItemCount() == 0);
- }
-
- private int getIndexOfCreateRenderingTab(CTabFolder folder)
- {
- for(int i = 0; i < folder.getItemCount(); i++)
- if(folder.getItem(i).getData() instanceof MemoryViewTab &&
- ((MemoryViewTab) folder.getItem(i).getData()).getRendering() instanceof CreateRendering)
- return i;
-
- return -1;
- }
-
- public void memoryBlockRenderingAdded(final IMemoryRendering rendering) {
-
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
-
- if (isDisposed())
- return;
-
- if (fAddedRenderings.contains(rendering))
- return;
-
- IMemoryBlock memoryblk = rendering.getMemoryBlock();
-
- CTabFolder tabFolder = (CTabFolder) fTabFolderForMemoryBlock.get(memoryblk);
-
- if (tabFolder == null)
- {
- tabFolder = createFolderForMemoryBlock(memoryblk);
- }
-
- if (tabFolder == fStackLayout.topControl)
- {
- // disable current view tab
- if (getTopMemoryTab() != null) {
- deactivateRendering(getTopMemoryTab());
- getTopMemoryTab().setEnabled(false);
- }
- }
- fAddedRenderings.add(rendering);
-
- int index = getIndexOfCreateRenderingTab(tabFolder);
- if (index < 0)
- index = 0;
- CTabItem tab = createTab(tabFolder, index);
-
- MemoryViewTab viewTab = new MemoryViewTab(tab, rendering,getInstance());
- tabFolder.setSelection(tabFolder.indexOf(tab));
-
- if (tabFolder == fStackLayout.topControl)
- {
- setRenderingSelection(viewTab.getRendering());
-
- // disable top view tab if the view pane is not visible
- IMemoryViewTab top = getTopMemoryTab();
- if (top != null)
- top.setEnabled(fVisible);
- }
- else
- {
- deactivateRendering(viewTab);
- viewTab.setEnabled(false);
- }
-
- updateToolBarActionsEnablement();
- }
- });
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.internal.core.memory.IMemoryRenderingListener#MemoryBlockRenderingRemoved(org.eclipse.debug.internal.core.memory.IMemoryRendering)
- */
- public void memoryBlockRenderingRemoved(final IMemoryRendering rendering) {
- final IMemoryBlock memory = rendering.getMemoryBlock();
-
- // need to run the following code on the UI Thread to avoid invalid thread access exception
- Display.getDefault().asyncExec(new Runnable()
- {
- public void run()
- {
- if (!fAddedRenderings.contains(rendering))
- return;
-
- fAddedRenderings.remove(rendering);
-
- CTabFolder tabFolder = (CTabFolder) fStackLayout.topControl;
-
- if (tabFolder.isDisposed())
- return;
-
- CTabItem[] tabs = tabFolder.getItems();
- boolean foundTab = false;
- for (int i = 0; i < tabs.length; i++)
- {
- IMemoryViewTab viewTab = (IMemoryViewTab) tabs[i].getData();
-
- if (tabs[i].isDisposed())
- continue;
-
-
- if (viewTab.getRendering().getMemoryBlock() == memory)
- {
- if (viewTab.getRendering() == rendering)
- {
- foundTab = true;
- disposeTab(tabs[i]);
- break;
- }
-
- }
- }
-
- // if a tab is not found in the current top control
- // this deletion is a result of a debug target termination
- // find memory from other folder and dispose the view tab
- if (!foundTab)
- {
- Enumeration enumeration = fTabFolderForMemoryBlock.elements();
- while (enumeration.hasMoreElements())
- {
- CTabFolder otherTabFolder = (CTabFolder) enumeration.nextElement();
- tabs = otherTabFolder.getItems();
- IMemoryViewTab viewTab = null;
- for (int i = 0; i < tabs.length; i++)
- {
- viewTab = (IMemoryViewTab) tabs[i].getData();
- if (viewTab.getRendering().getMemoryBlock() == memory)
- {
- if (viewTab.getRendering() == rendering)
- {
- foundTab = true;
- disposeTab(tabs[i]);
- break;
- }
- }
- }
- }
- }
- IMemoryViewTab top = getTopMemoryTab();
-
- // update selection
- if (top != null)
- setRenderingSelection(top.getRendering());
-
- updateToolBarActionsEnablement();
- }
- });
-
- }
-
- /**
- * @param viewTab
- */
- protected void setRenderingSelection(IMemoryRendering rendering) {
-
- if (rendering != null)
- {
- fSelectionProvider.setSelection(new StructuredSelection(rendering));
- }
- }
-
- private void restoreViewTabs(IMemoryRendering[] renderings)
- {
- for (int i=0; i<renderings.length; i++)
- {
- memoryBlockRenderingAdded(renderings[i]);
- }
- }
-
- private void handleDebugElementSelection(final IMemoryViewTab lastViewTab, final IAdaptable element)
- {
- // get current memory block retrieval and debug target
- IMemoryBlockRetrieval currentRetrieve = null;
-
- // get tab folder
- CTabFolder tabFolder = (CTabFolder) fStackLayout.topControl;
-
- // get memory block
- IMemoryBlock currentBlock = (IMemoryBlock)fMemoryBlockFromTabFolder.get(tabFolder);
-
- if (currentBlock != null)
- {
- currentRetrieve = MemoryViewUtil.getMemoryBlockRetrieval(currentBlock);
-
- // backup current retrieve and tab folder
- if (currentRetrieve != null && tabFolder != null)
- {
- fTabFolderForDebugView.put(MemoryViewUtil.getHashCode(currentRetrieve), tabFolder);
- }
- }
-
- // find the folder associated with the given IMemoryBlockRetrieval
- IMemoryBlockRetrieval retrieve = MemoryViewUtil.getMemoryBlockRetrieval(element);
-
- // if debug target has changed
- // switch to that tab folder
- if (retrieve != null && retrieve != currentRetrieve)
- {
- Integer key = MemoryViewUtil.getHashCode(retrieve);
- CTabFolder folder = (CTabFolder)fTabFolderForDebugView.get(key);
-
- if (folder != null)
- {
- setTabFolder(folder);
- fTabFolderForDebugView.put(key, folder);
- fViewPaneCanvas.layout();
- }
- else
- {
- // find out if there is any memory block for this debug target
- // and set up tab folder for the memory blocks
- IMemoryBlock blocks[] = MemoryViewUtil.getMemoryBlockManager().getMemoryBlocks(retrieve);
-
- if (blocks.length > 0)
- {
- handleMemoryBlockSelection(null, blocks[0]);
- }
- else
- {
- emptyFolder();
- fTabFolderForDebugView.put(key, fEmptyTabFolder);
- fViewPaneCanvas.layout();
- }
- }
- }
-
- // disable last view tab as it becomes hidden
- IMemoryViewTab newViewTab = getTopMemoryTab();
-
- if (lastViewTab != null && lastViewTab != newViewTab)
- {
- lastViewTab.setEnabled(false);
- }
-
- if (newViewTab != null)
- {
- // if new view tab is not already enabled, enable it
- if (!newViewTab.isEnabled())
- {
- // if the view tab is visible, enable it
- if (fVisible)
- {
- newViewTab.setEnabled(fVisible);
- }
- }
-
- // should only change selection if the new view tab is different
- if (lastViewTab != newViewTab)
- setRenderingSelection(newViewTab.getRendering());
- }
- //set toolbar actions enabled/disabled
- updateToolBarActionsEnablement();
- }
-
- protected void addListeners() {
- super.addListeners();
-
- // must directly listen for selection events from parent's selection provider
- // to ensure that we get the selection event from the tree viewer pane even
- // if the view does not have focuse
- fParent.getSite().getSelectionProvider().addSelectionChangedListener(this);
- }
- protected void removeListeners() {
- super.removeListeners();
- fParent.getSite().getSelectionProvider().removeSelectionChangedListener(this);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
- */
- public void widgetSelected(SelectionEvent e) {
-
- if (getTopMemoryTab() == null)
- return;
-
- IMemoryRendering rendering = getTopMemoryTab().getRendering();
-
- if (rendering != null)
- {
- fSelectionProvider.setSelection(new StructuredSelection(rendering));
- }
-
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
- */
- public void widgetDefaultSelected(SelectionEvent e) {
- }
-
- public Object getCurrentSelection() {
- if (getTopMemoryTab() != null)
- if (getTopMemoryTab().getRendering() != null)
- return getTopMemoryTab().getRendering();
- return null;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.debug.extended.ui.IMemoryView#getAllViewTabs()
- */
- public IMemoryViewTab[] getAllViewTabs() {
-
- // otherwise, find the view tab to display
- CTabFolder folder = (CTabFolder) fStackLayout.topControl;
- CTabItem[] items = folder.getItems();
-
- IMemoryViewTab[] viewTabs = new IMemoryViewTab[folder.getItemCount()];
-
- for(int i=0; i<items.length; i++){
- viewTabs[i] = (IMemoryViewTab)items[i].getData();
- }
-
- return viewTabs;
- }
-
- /* (non-Javadoc)
- * @see com.ibm.debug.extended.ui.IMemoryView#moveToTop(com.ibm.debug.extended.ui.IMemoryViewTab)
- */
- public void moveToTop(IMemoryViewTab viewTab) {
-
- IMemoryViewTab lastViewTab = getTopMemoryTab();
-
- if (viewTab == lastViewTab)
- return;
-
- // otherwise, find the view tab to display
- CTabFolder folder = (CTabFolder) fStackLayout.topControl;
- CTabItem[] items = folder.getItems();
-
- for (int i = 0; i < items.length; i++) {
- IMemoryViewTab tab =
- (IMemoryViewTab) items[i].getData();
- if (viewTab == tab) {
-
- boolean isEnabled = lastViewTab.isEnabled();
-
- // switch to that viewTab
- lastViewTab.setEnabled(false);
- folder.setSelection(i);
-
- setRenderingSelection(tab.getRendering());
-
- getTopMemoryTab().setEnabled(isEnabled && fVisible);
- break;
- }
- }
- }
-
- private CTabFolder createTabFolder(Composite parent)
- {
- CTabFolder folder = new CTabFolder(parent, SWT.NO_REDRAW_RESIZE | SWT.NO_TRIM | SWT.FLAT);
-
- ColorRegistry reg = JFaceResources.getColorRegistry();
- Color c1 = reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_START"), //$NON-NLS-1$
- c2 = reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_END"); //$NON-NLS-1$
- folder.setSelectionBackground(new Color[] {c1, c2}, new int[] {100}, true);
- folder.setSelectionForeground(reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_TEXT_COLOR")); //$NON-NLS-1$
- folder.setSimple(PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS));
- folder.setBorderVisible(true);
- folder.setFont(fViewPaneCanvas.getFont());
-
- folder.addCTabFolder2Listener(new CTabFolder2Adapter() {
- public void close(CTabFolderEvent event) {
- if(event.item.getData() instanceof MemoryViewTab)
- RenderingViewPane.this.removeMemoryRendering(((MemoryViewTab) event.item.getData()).getRendering());
- event.doit = false;
- }
- });
- return folder;
- }
-
- public void restoreViewPane() {
-
- // get current selection from memory view
-
- ISelection selection = null;
- if (fParent.getSite().getSelectionProvider() != null)
- selection = fParent.getSite().getSelectionProvider().getSelection();
-
- IMemoryBlock memoryBlock = null;
- if (selection != null)
- {
- memoryBlock = getMemoryBlock(selection);
- }
-
- if (memoryBlock == null)
- {
- // get selection from this view
- selection = fSelectionProvider.getSelection();
-
- if (MemoryViewUtil.isValidSelection(selection))
- {
- Object elem = ((IStructuredSelection)selection).getFirstElement();
-
- if (!(elem instanceof IMemoryBlock))
- return;
-
- memoryBlock = (IMemoryBlock)elem;
- }
- }
-
- if (memoryBlock == null)
- {
- // get a memory block from current debug context
- IAdaptable context = DebugUITools.getDebugContext();
- if (context != null)
- {
- IMemoryBlockRetrieval retrieval = MemoryViewUtil.getMemoryBlockRetrieval(context);
-
- if (retrieval != null)
- {
- IMemoryBlock[] blocks = DebugPlugin.getDefault().getMemoryBlockManager().getMemoryBlocks(retrieval);
- if (blocks.length > 0)
- memoryBlock = blocks[0];
- }
- }
- }
-
- if (memoryBlock != null)
- {
- if (!fTabFolderForMemoryBlock.containsKey(memoryBlock))
- {
- // create tab folder if a tab folder does not already exist
- // for the memory block
- CTabFolder folder = createTabFolder(fViewPaneCanvas);
-
- fTabFolderForMemoryBlock.put(memoryBlock, folder);
- fMemoryBlockFromTabFolder.put(folder, memoryBlock);
- setTabFolder((CTabFolder)fTabFolderForMemoryBlock.get(memoryBlock));
- IMemoryBlockRetrieval retrieval = MemoryViewUtil.getMemoryBlockRetrieval(memoryBlock);
- if (retrieval != null)
- fTabFolderForDebugView.put(MemoryViewUtil.getHashCode(retrieval), fTabFolderForMemoryBlock.get(memoryBlock));
- else
- DebugUIPlugin.logErrorMessage("Memory block retrieval for memory block is null."); //$NON-NLS-1$
-
- fViewPaneCanvas.layout();
- fAddedMemoryBlocks.add(memoryBlock);
-
- // every time we create a folder, we have to create a CreateRendering
- newCreateRenderingForFolder(memoryBlock, folder);
- }
-
- if (fTabFolderForMemoryBlock.containsKey(memoryBlock))
- {
- CTabFolder toDisplay = (CTabFolder)fTabFolderForMemoryBlock.get(memoryBlock);
-
- if (toDisplay != null)
- {
- setTabFolder(toDisplay);
- IMemoryBlockRetrieval retrieval = MemoryViewUtil.getMemoryBlockRetrieval(memoryBlock);
-
- if (retrieval != null)
- fTabFolderForDebugView.put(MemoryViewUtil.getHashCode(retrieval), toDisplay);
- else
- DebugUIPlugin.logErrorMessage("Memory block retrieval is null for memory block."); //$NON-NLS-1$
-
- fViewPaneCanvas.layout();
-
- // restore view tabs
- IMemoryRendering[] renderings = fRenderingMgr.getRenderingsFromMemoryBlock(memoryBlock);
-
- // if only CreateRendering is present, restore renderings
- if (isRestoreViewTabs(toDisplay))
- {
- restoreViewTabs(renderings);
- }
- }
- }
-
- // disable current storag block
-
- IMemoryViewTab top = getTopMemoryTab();
-
- if (top != null)
- top.setEnabled(fVisible);
- }
- }
-
- public void dispose() {
- fIsDisposed = true;
-
- super.dispose();
-
- fTabFolderForMemoryBlock.clear();
- fTabFolderForMemoryBlock = null;
-
- fMemoryBlockFromTabFolder.clear();
- fMemoryBlockFromTabFolder = null;
-
- fRenderingMgr.dispose();
- fRenderingMgr = null;
-
- fAddedMemoryBlocks.clear();
- fAddedRenderings.clear();
- }
-
- public Control createViewPane(Composite parent, String paneId, String label, boolean canAddRendering, boolean canRemoveRendering) {
- return doCreateViewPane(parent, paneId, label, canAddRendering, canRemoveRendering);
- }
-
- public Control createViewPane(Composite parent, String paneId, String label) {
- return doCreateViewPane(parent, paneId, label, true, true);
- }
-
- /**
- * @param parent
- * @param paneId
- * @param label
- * @param canAddRendering
- * @param canRemoveRendering
- * @return
- */
- private Control doCreateViewPane(Composite parent, String paneId, String label, boolean canAddRendering,
- boolean canRemoveRendering) {
- Control control = super.createViewPane(parent, paneId, label);
- fCanAddRendering = canAddRendering;
- fCanRemoveRendering = canRemoveRendering;
- fRenderingMgr = new ViewPaneRenderingMgr(this);
- PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IDebugUIConstants.PLUGIN_ID + ".MemoryRenderingView_context"); //$NON-NLS-1$
- return control;
- }
-
- public IAction[] getActions() {
- return new IAction[0];
- }
-
- // enable/disable toolbar action
- protected void updateToolBarActionsEnablement()
- {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.internal.ui.views.memory.AbstractMemoryViewPane#emptyFolder()
- */
- protected void emptyFolder() {
- super.emptyFolder();
- updateToolBarActionsEnablement();
- fSelectionProvider.setSelection(AbstractMemoryViewPane.EMPTY);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.internal.ui.views.memory.IRenderingViewPane#addMemoryRendering(org.eclipse.debug.internal.ui.views.memory.IMemoryRendering)
- */
- public void addMemoryRendering(IMemoryRendering rendering) {
-
- if (rendering == null)
- return;
-
- memoryBlockRenderingAdded(rendering);
- fRenderingMgr.addMemoryBlockRendering(rendering);
-
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.internal.ui.views.memory.IRenderingViewPane#removeMemoryRendering(org.eclipse.debug.internal.ui.views.memory.IMemoryRendering)
- */
- public void removeMemoryRendering(IMemoryRendering rendering) {
-
- if (rendering == null)
- return;
-
- memoryBlockRenderingRemoved(rendering);
-
- if (fRenderingMgr != null)
- fRenderingMgr.removeMemoryBlockRendering(rendering);
-
- }
-
- private RenderingViewPane getInstance()
- {
- return this;
- }
-
- private IMemoryBlock getMemoryBlock(ISelection selection)
- {
- if (!(selection instanceof IStructuredSelection))
- return null;
-
- //only single selection of PICLDebugElements is allowed for this action
- if (selection.isEmpty() || ((IStructuredSelection)selection).size() > 1)
- {
- return null;
- }
-
- Object elem = ((IStructuredSelection)selection).getFirstElement();
-
- if (elem instanceof IMemoryBlock)
- return (IMemoryBlock)elem;
- else if (elem instanceof IMemoryRendering)
- return ((IMemoryRendering)elem).getMemoryBlock();
- else
- return null;
- }
-
- private void deactivateRendering(IMemoryViewTab viewTab)
- {
- if (viewTab == null)
- return;
-
- if (!viewTab.isDisposed())
- {
- viewTab.getRendering().deactivated();
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.internal.ui.views.memory.IRenderingViewPane#getMemoryRenderingSite()
- */
- public IMemoryRenderingSite getMemoryRenderingSite() {
- return fRenderingSite;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.ui.memory.IMemoryRenderingContainer#getId()
- */
- public String getId() {
- return getPaneId();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.ui.memory.IMemoryRenderingContainer#getRenderings()
- */
- public IMemoryRendering[] getRenderings() {
- return fRenderingMgr.getRenderings();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.ui.memory.IMemoryRenderingContainer#getActiveRendering()
- */
- public IMemoryRendering getActiveRendering() {
- if (getTopMemoryTab() == null)
- return null;
- return getTopMemoryTab().getRendering();
- }
-
- /**
- * Reset the memory renderings within this view pane.
- * @param memoryBlock - reset renderings associated with the given memory block
- * @param resetVisible - reset what's currently visible if the parameter is true.
- * Otherwise, the view pane will reset all renderings associated with the given
- * memory block.
- */
- public void resetRenderings(IMemoryBlock memoryBlock, boolean resetVisible)
- {
- // if we only reset what's visible and the view pane is not visible
- // do nothing.
- if (resetVisible && !isVisible())
- return;
-
- if(resetVisible)
- {
- IMemoryRendering rendering = getActiveRendering();
- if (rendering != null)
- {
- if (rendering.getMemoryBlock() == memoryBlock)
- {
- if (rendering instanceof IResettableMemoryRendering)
- {
- IResettableMemoryRendering resettableRendering = (IResettableMemoryRendering)rendering;
- try {
- resettableRendering.resetRendering();
- } catch (DebugException e) {
- // do not pop up error message
- // error message is annoying where there are multiple rendering
- // panes and renderings to reset
- }
- }
- }
- }
- }
- else
- {
- // get all renderings associated with the given memory block
- IMemoryRendering[] renderings = fRenderingMgr.getRenderingsFromMemoryBlock(memoryBlock);
-
- // back up current synchronization provider
- IMemoryRendering originalProvider = null;
- IMemoryRenderingSynchronizationService service = getMemoryRenderingSite().getSynchronizationService();
- if (service != null)
- originalProvider = service.getSynchronizationProvider();
-
- for (int i=0; i<renderings.length; i++)
- {
- if (renderings[i] instanceof IResettableMemoryRendering)
- {
- try {
-
- // This is done to allow user to select multiple memory monitors and
- // reset their renderings.
- // In this case, a hidden rendering will not be the sync provider to the sync
- // service. When the reset happens, the top visible address and selected
- // address is not updated in the sync service. When the rendering later
- // becomes visible, the rendering gets the sync info from the sync service
- // and will try to sync up with old information, giving user the impression
- // that the rendering was never reset. By forcing the rendering that we
- // are trying to reset as the synchronization provider, we ensure that
- // the rendering is able to update its sync info even though the rendering
- // is currently hidden.
- if (service != null)
- service.setSynchronizationProvider(renderings[i]);
- ((IResettableMemoryRendering)renderings[i]).resetRendering();
- } catch (DebugException e) {
- // do not pop up error message
- // error message is annoying where there are multiple rendering
- // panes and renderings to reset
- }
- }
- }
-
- // restore synchronization provider
- if (service != null)
- service.setSynchronizationProvider(originalProvider);
- }
- }
-
- private boolean isDisposed()
- {
- return fIsDisposed;
- }
-
- public void showCreateRenderingTab()
- {
- IMemoryRendering activeRendering = RenderingViewPane.this.getActiveRendering();
- if(activeRendering == null)
- return;
-
- IMemoryBlock memoryblk = activeRendering.getMemoryBlock();
-
- final CTabFolder tabFolder = (CTabFolder) fTabFolderForMemoryBlock.get(memoryblk);
- if (tabFolder != null)
- {
- Display.getDefault().asyncExec(new Runnable() {
- public void run()
- {
- int index = getIndexOfCreateRenderingTab(tabFolder);
- if (index >= 0)
- tabFolder.setSelection(index);
- }
- });
- }
- }
-
- public void contextActivated(final ISelection selection) {
-
- UIJob job = new UIJob("contextActivated"){ //$NON-NLS-1$
- public IStatus runInUIThread(IProgressMonitor monitor)
- {
- if (isDisposed())
- return Status.OK_STATUS;
-
- IMemoryViewTab lastViewTab = getTopMemoryTab();
-
- if (MemoryViewUtil.isValidSelection(selection))
- {
- if (!(selection instanceof IStructuredSelection))
- return Status.OK_STATUS;
-
- Object elem = ((IStructuredSelection)selection).getFirstElement();
-
- if (elem instanceof IAdaptable)
- {
- handleDebugElementSelection(lastViewTab, (IAdaptable)elem);
- }
- }
- else
- {
- if (lastViewTab != null)
- lastViewTab.setEnabled(false);
-
- if (fStackLayout.topControl != fEmptyTabFolder)
- emptyFolder();
-
- }
- return Status.OK_STATUS;
- }};
- job.setSystem(true);
- job.schedule();
- }
-
- /**
- * @param memory
- */
- private CTabFolder createFolderForMemoryBlock(IMemoryBlock memory) {
- CTabFolder folder = createTabFolder(fViewPaneCanvas);
-
- fTabFolderForMemoryBlock.put(memory, folder);
- fMemoryBlockFromTabFolder.put(folder, memory);
-
- IMemoryBlockRetrieval retrieval = MemoryViewUtil.getMemoryBlockRetrieval(memory);
- if (retrieval != null)
- {
- fTabFolderForDebugView.put(MemoryViewUtil.getHashCode(retrieval), folder);
- }
- else {
- DebugUIPlugin.logErrorMessage("Memory block retrieval for memory block is null"); //$NON-NLS-1$
- }
-
- newCreateRenderingForFolder(memory, folder);
-
- return folder;
- }
-
- private void newCreateRenderingForFolder(IMemoryBlock memory,
- CTabFolder folder) {
-
- if (!canAddRendering())
- return;
-
- CTabItem newItem = new CTabItem(folder, SWT.NONE);
- CreateRendering rendering = new CreateRendering(getInstance());
- rendering.init(getInstance(), memory);
- new MemoryViewTab(newItem, rendering, getInstance());
- folder.setSelection(0);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextListener#contextEvent(org.eclipse.debug.internal.ui.contexts.provisional.DebugContextEvent)
- */
- public void debugContextChanged(DebugContextEvent event) {
- if ((event.getFlags() & DebugContextEvent.ACTIVATED) > 0) {
- contextActivated(event.getContext());
- }
- }
-
- /**
- * @return whether this container allows user to add rendering manually
- * @since 3.4
- */
- public boolean canAddRendering()
- {
- return fCanAddRendering;
- }
-
- /**
- * @return whether this container allows user to remove rendering manually
- * @since 3.4
- */
- public boolean canRemoveRendering()
- {
- return fCanRemoveRendering;
- }
-
- /**
- * @param tabFolder
- * @param index
- * @return
- */
- private CTabItem createTab(CTabFolder tabFolder, int index) {
- int swtStyle = SWT.CLOSE;
- if (!canRemoveRendering())
- swtStyle = SWT.NONE;
- CTabItem tab = new CTabItem(tabFolder, swtStyle, index);
- return tab;
- }
-}

Back to the top