diff options
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AbstractMemoryViewPane.java')
-rw-r--r-- | org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AbstractMemoryViewPane.java | 345 |
1 files changed, 168 insertions, 177 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AbstractMemoryViewPane.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AbstractMemoryViewPane.java index ab2747bb7..09164c325 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AbstractMemoryViewPane.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AbstractMemoryViewPane.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2011 IBM Corporation and others. + * Copyright (c) 2004, 2013 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 @@ -11,7 +11,6 @@ *******************************************************************************/ package org.eclipse.debug.internal.ui.views.memory; - import java.util.Enumeration; import java.util.Hashtable; @@ -44,43 +43,43 @@ import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPart; -public abstract class AbstractMemoryViewPane implements IMemoryBlockListener, ISelectionListener, SelectionListener, IMemoryView, ISelectionChangedListener, IMemoryViewPane, IDebugContextListener, IDebugEventSetListener{ - +public abstract class AbstractMemoryViewPane implements IMemoryBlockListener, ISelectionListener, SelectionListener, IMemoryView, ISelectionChangedListener, IMemoryViewPane, IDebugContextListener, IDebugEventSetListener { + public static final String BEGINNING_POPUP = "popUpBegin"; //$NON-NLS-1$ protected static final StructuredSelection EMPTY = new StructuredSelection(); - + protected Composite fViewPaneCanvas; protected StackLayout fStackLayout; protected ViewTabEnablementManager fViewTabEnablementManager; protected CTabFolder fEmptyTabFolder; - protected Hashtable fTabFolderForDebugView = new Hashtable(); + protected Hashtable<Integer, CTabFolder> fTabFolderForDebugView = new Hashtable<Integer, CTabFolder>(); protected boolean fVisible; - protected Hashtable fRenderingInfoTable; - protected IMemoryBlockRetrieval fKey; // store the key for current tab folder + protected IMemoryBlockRetrieval fKey; // store the key for current tab + // folder protected ViewPaneSelectionProvider fSelectionProvider; protected IViewPart fParent; protected String fPaneId; private Composite fCanvas; protected String fLabel; - + private volatile boolean fIsDisposed = false; - public AbstractMemoryViewPane(IViewPart parent) - { + public AbstractMemoryViewPane(IViewPart parent) { super(); fParent = parent; fSelectionProvider = new ViewPaneSelectionProvider(); } - + /** * Create the content of the view pane + * * @param parent the parent composite * @param paneId the id of the pane to create * @param label the label for the new pane * @return the control of the view pane */ - public Control createViewPane(Composite parent, String paneId, String label) - { + @Override + public Control createViewPane(Composite parent, String paneId, String label) { fPaneId = paneId; fLabel = label; fCanvas = new Composite(parent, SWT.NONE); @@ -99,7 +98,7 @@ public abstract class AbstractMemoryViewPane implements IMemoryBlockListener, IS // memory view area Composite memoryViewAreaParent = fCanvas; - Composite subCanvas = new Composite(memoryViewAreaParent, SWT.NONE); + Composite subCanvas = new Composite(memoryViewAreaParent, SWT.NONE); fViewPaneCanvas = subCanvas; fStackLayout = new StackLayout(); GridData memoryAreaData = new GridData(); @@ -109,196 +108,180 @@ public abstract class AbstractMemoryViewPane implements IMemoryBlockListener, IS memoryAreaData.horizontalAlignment = SWT.FILL; fViewPaneCanvas.setLayout(fStackLayout); fViewPaneCanvas.setLayoutData(memoryAreaData); - + fViewTabEnablementManager = new ViewTabEnablementManager(); - + fEmptyTabFolder = new CTabFolder(fViewPaneCanvas, SWT.NULL); setTabFolder(fEmptyTabFolder); - + addListeners(); - + Object context = DebugUITools.getPartDebugContext(fParent.getSite()); - if (context != null) - { + if (context != null) { IMemoryBlockRetrieval retrieval = MemoryViewUtil.getMemoryBlockRetrieval(context); - if (retrieval != null) + if (retrieval != null) { createFolder(retrieval); + } } - + fVisible = true; - + return fCanvas; } - - protected void addListeners() - { + + protected void addListeners() { MemoryViewUtil.getMemoryBlockManager().addListener(this); fParent.getViewSite().getPage().addSelectionListener(this); DebugUITools.addPartDebugContextListener(fParent.getSite(), this); DebugPlugin.getDefault().addDebugEventListener(this); } - - protected void removeListeners() - { + + protected void removeListeners() { MemoryViewUtil.getMemoryBlockManager().removeListener(this); fParent.getViewSite().getPage().removeSelectionListener(this); - DebugUITools.removePartDebugContextListener(fParent.getSite(), this); - if (fStackLayout.topControl != null) - { - CTabFolder old = (CTabFolder)fStackLayout.topControl; - - if (!old.isDisposed()) - { + DebugUITools.removePartDebugContextListener(fParent.getSite(), this); + if (fStackLayout.topControl != null) { + CTabFolder old = (CTabFolder) fStackLayout.topControl; + + if (!old.isDisposed()) { old.removeSelectionListener(this); old.removeSelectionListener(fViewTabEnablementManager); } } DebugPlugin.getDefault().removeDebugEventListener(this); } - - protected void setTabFolder(CTabFolder folder) - { - if (fStackLayout.topControl != null) - { - CTabFolder old = (CTabFolder)fStackLayout.topControl; - - if (!old.isDisposed()) - { + + protected void setTabFolder(CTabFolder folder) { + if (fStackLayout.topControl != null) { + CTabFolder old = (CTabFolder) fStackLayout.topControl; + + if (!old.isDisposed()) { old.removeSelectionListener(this); old.removeSelectionListener(fViewTabEnablementManager); } } - + fStackLayout.topControl = folder; - - if (folder.getItemCount() > 0) - { + + if (folder.getItemCount() > 0) { CTabItem selectedItem = folder.getSelection(); - - if (selectedItem != null) - { + + if (selectedItem != null) { Object selected = getCurrentSelection(); - if (selected != null) - { + if (selected != null) { fSelectionProvider.setSelection(new StructuredSelection(selected)); - } - else - { + } else { fSelectionProvider.setSelection(AbstractMemoryViewPane.EMPTY); } } - } - else - { + } else { fSelectionProvider.setSelection(AbstractMemoryViewPane.EMPTY); } - + folder.addSelectionListener(this); folder.addSelectionListener(fViewTabEnablementManager); - } - - - private void createFolder(IMemoryBlockRetrieval memRetrieval) - { - //if we've got a tabfolder to go with the IMemoryBlockRetrieval, display it + } + + private void createFolder(IMemoryBlockRetrieval memRetrieval) { + // if we've got a tabfolder to go with the IMemoryBlockRetrieval, + // display it Integer key = MemoryViewUtil.getHashCode(memRetrieval); if (fTabFolderForDebugView.containsKey(key)) { - if (fStackLayout.topControl != (CTabFolder)fTabFolderForDebugView.get(key)) { - setTabFolder((CTabFolder)fTabFolderForDebugView.get(key)); + if (fStackLayout.topControl != fTabFolderForDebugView.get(key)) { + setTabFolder(fTabFolderForDebugView.get(key)); fViewPaneCanvas.layout(); } - } else { //otherwise, add a new one + } else { // otherwise, add a new one fTabFolderForDebugView.put(key, new CTabFolder(fViewPaneCanvas, SWT.NULL)); - setTabFolder((CTabFolder)fTabFolderForDebugView.get(key)); + setTabFolder(fTabFolderForDebugView.get(key)); fViewPaneCanvas.layout(); } } + @Override public IMemoryViewTab getTopMemoryTab() { - - if (fStackLayout.topControl instanceof CTabFolder) - { - CTabFolder folder = (CTabFolder)fStackLayout.topControl; - if (!folder.isDisposed()) - { + + if (fStackLayout.topControl instanceof CTabFolder) { + CTabFolder folder = (CTabFolder) fStackLayout.topControl; + if (!folder.isDisposed()) { int index = folder.getSelectionIndex(); if (index >= 0) { CTabItem tab = folder.getItem(index); - return (IMemoryViewTab)tab.getData(); + return (IMemoryViewTab) tab.getData(); } } } return null; } - - protected void disposeTab(CTabItem tabItem) - { - if (tabItem == null) + + protected void disposeTab(CTabItem tabItem) { + if (tabItem == null) { return; - - // dispose the tab item in case the view tab has not + } + + // dispose the tab item in case the view tab has not // cleaned up the tab item - if (!tabItem.isDisposed()) - { + if (!tabItem.isDisposed()) { tabItem.dispose(); - } + } } - protected void emptyFolder() - { + protected void emptyFolder() { setTabFolder(fEmptyTabFolder); if (!fViewPaneCanvas.isDisposed()) { fViewPaneCanvas.layout(); } } - - public void addSelectionListener(ISelectionChangedListener listener) - { - if (fSelectionProvider == null) + + @Override + public void addSelectionListener(ISelectionChangedListener listener) { + if (fSelectionProvider == null) { fSelectionProvider = new ViewPaneSelectionProvider(); - + } + fSelectionProvider.addSelectionChangedListener(listener); } - - public void removeSelctionListener(ISelectionChangedListener listener) - { - if (fSelectionProvider == null) + + @Override + public void removeSelctionListener(ISelectionChangedListener listener) { + if (fSelectionProvider == null) { return; - + } + fSelectionProvider.removeSelectionChangedListener(listener); } - - public ISelectionProvider getSelectionProvider() - { + + @Override + public ISelectionProvider getSelectionProvider() { return fSelectionProvider; } - public void handleDebugEvents(DebugEvent[] events) - { - for (int i = 0; i < events.length; i++) - { + @Override + public void handleDebugEvents(DebugEvent[] events) { + for (int i = 0; i < events.length; i++) { Object source = events[i].getSource(); - if (events[i].getKind() == DebugEvent.TERMINATE && source instanceof IMemoryBlockRetrieval) - { - if (isDisposed()) + if (events[i].getKind() == DebugEvent.TERMINATE && source instanceof IMemoryBlockRetrieval) { + if (isDisposed()) { return; + } - //When a memory block retrieval terminates, it and its - //tab folders should be removed from our map. - final IMemoryBlockRetrieval ret = (IMemoryBlockRetrieval)source; - if (ret != null) - { + // When a memory block retrieval terminates, it and its + // tab folders should be removed from our map. + final IMemoryBlockRetrieval ret = (IMemoryBlockRetrieval) source; + if (ret != null) { Display.getDefault().asyncExec(new Runnable() { + @Override public void run() { - if (isDisposed()) + if (isDisposed()) { return; + } Integer key = MemoryViewUtil.getHashCode(ret); Object folder = fTabFolderForDebugView.get(key); - if (folder != null && folder != fEmptyTabFolder) - { - //remove the tab folder , and all contained tab items + if (folder != null && folder != fEmptyTabFolder) { + // remove the tab folder , and all contained tab + // items disposeOfFolder((CTabFolder) folder); fTabFolderForDebugView.remove(key); } @@ -309,53 +292,48 @@ public abstract class AbstractMemoryViewPane implements IMemoryBlockListener, IS } } - - - public void dispose() - { - if (isDisposed()) + @Override + public void dispose() { + if (isDisposed()) { return; + } fIsDisposed = true; removeListeners(); - + // dispose empty folders fEmptyTabFolder.dispose(); - + // dispose all other folders try { - Enumeration enumeration = fTabFolderForDebugView.elements(); + Enumeration<CTabFolder> enumeration = fTabFolderForDebugView.elements(); - while (enumeration.hasMoreElements()) - { - CTabFolder tabFolder = (CTabFolder)enumeration.nextElement(); + while (enumeration.hasMoreElements()) { + CTabFolder tabFolder = enumeration.nextElement(); disposeOfFolder(tabFolder); } // Clear the table as all CTabFolder's have been dipose()d fTabFolderForDebugView.clear(); - } catch (Exception e) { - + } catch (Exception e) { + DebugUIPlugin.logErrorMessage("Exception occurred when the Memory View is disposed."); //$NON-NLS-1$ - } + } } /** - * Helper method to dispose of a tab folder, - * and of any tab items it contains. - * Must be called from the UI thread. + * Helper method to dispose of a tab folder, and of any tab items it + * contains. Must be called from the UI thread. + * * @param tabFolder the {@link CTabFolder} to dispose * */ - private void disposeOfFolder(CTabFolder tabFolder) - { - if (!tabFolder.isDisposed()) - { + private void disposeOfFolder(CTabFolder tabFolder) { + if (!tabFolder.isDisposed()) { // if tab folder is not empty, dipose view tabs CTabItem[] tabs = tabFolder.getItems(); - for (int i=0; i<tabs.length; i++) - { + for (int i = 0; i < tabs.length; i++) { disposeTab(tabs[i]); } @@ -363,82 +341,95 @@ public abstract class AbstractMemoryViewPane implements IMemoryBlockListener, IS } } - public void setVisible(boolean visible) - { + @Override + public void setVisible(boolean visible) { fVisible = visible; - + IMemoryViewTab currentTab = getTopMemoryTab(); - if (currentTab != null) + if (currentTab != null) { currentTab.setEnabled(visible); + } } + @Override public void selectionChanged(SelectionChangedEvent event) { ISelection selection = event.getSelection(); - selectionChanged(fParent,selection); - + selectionChanged(fParent, selection); + fSelectionProvider.setSelection(selection); } - + /** * @return the unique identifier of the view pane */ - public String getPaneId() - { + public String getPaneId() { return fPaneId; } - - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.views.memory.IMemoryViewPane#getControl() + + /* + * (non-Javadoc) + * @see + * org.eclipse.debug.internal.ui.views.memory.IMemoryViewPane#getControl() */ + @Override public Control getControl() { return fCanvas; } - - public boolean isVisible() - { + + @Override + public boolean isVisible() { return fVisible; } - - public String getLabel() - { + + public String getLabel() { return fLabel; } - - protected boolean isDisposed() - { + + protected boolean isDisposed() { return fIsDisposed; } - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.memory.IMemoryBlockListener#MemoryBlockAdded(org.eclipse.debug.core.model.IMemoryBlock) + /* + * (non-Javadoc) + * @see + * org.eclipse.debug.internal.core.memory.IMemoryBlockListener#MemoryBlockAdded + * (org.eclipse.debug.core.model.IMemoryBlock) */ - abstract public void memoryBlocksAdded(IMemoryBlock[] memoryBlocks); - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.core.memory.IMemoryBlockListener#MemoryBlockRemoved(org.eclipse.debug.core.model.IMemoryBlock) + @Override + abstract public void memoryBlocksAdded(IMemoryBlock[] memoryBlocks); + + /* + * (non-Javadoc) + * @see org.eclipse.debug.internal.core.memory.IMemoryBlockListener# + * MemoryBlockRemoved(org.eclipse.debug.core.model.IMemoryBlock) */ + @Override abstract public void memoryBlocksRemoved(final IMemoryBlock[] memoryBlocks); - /* (non-Javadoc) - * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection) + /* + * (non-Javadoc) + * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui. + * IWorkbenchPart, org.eclipse.jface.viewers.ISelection) */ + @Override abstract public void selectionChanged(IWorkbenchPart part, ISelection selection); - + /** * @return current selection from the view pane */ abstract public Object getCurrentSelection(); - + /** - * retore the view pane based on current selection from the debug view - * and the memory blocks and renderings currently exist + * retore the view pane based on current selection from the debug view and + * the memory blocks and renderings currently exist */ + @Override abstract public void restoreViewPane(); - + /** * @return actions to be contributed to the view pane's toolbar */ + @Override abstract public IAction[] getActions(); } |