|
Lines 70-75
Link Here
|
| 70 |
import org.eclipse.swt.custom.CTabFolderEvent; |
70 |
import org.eclipse.swt.custom.CTabFolderEvent; |
| 71 |
import org.eclipse.swt.custom.CTabItem; |
71 |
import org.eclipse.swt.custom.CTabItem; |
| 72 |
import org.eclipse.swt.custom.StackLayout; |
72 |
import org.eclipse.swt.custom.StackLayout; |
|
|
73 |
import org.eclipse.swt.events.DisposeEvent; |
| 74 |
import org.eclipse.swt.events.DisposeListener; |
| 73 |
import org.eclipse.swt.events.KeyEvent; |
75 |
import org.eclipse.swt.events.KeyEvent; |
| 74 |
import org.eclipse.swt.events.KeyListener; |
76 |
import org.eclipse.swt.events.KeyListener; |
| 75 |
import org.eclipse.swt.events.SelectionEvent; |
77 |
import org.eclipse.swt.events.SelectionEvent; |
|
Lines 270-278
Link Here
|
| 270 |
public void launchChanged(ILaunch launch) {} |
272 |
public void launchChanged(ILaunch launch) {} |
| 271 |
|
273 |
|
| 272 |
public void launchRemoved(ILaunch launch) { |
274 |
public void launchRemoved(ILaunch launch) { |
| 273 |
IMemoryBlockRetrieval retrieval = ((IMemoryBlockRetrieval) launch.getAdapter(IMemoryBlockRetrieval.class)); |
275 |
// For CDT launch is not adaptable to memory rendering, but the debug targets do. |
| 274 |
if(retrieval != null) |
276 |
for (IDebugTarget target : launch.getDebugTargets()) { |
| 275 |
releaseTabFolder(retrieval); |
277 |
IMemoryBlockRetrieval retrieval = ((IMemoryBlockRetrieval) target.getAdapter(IMemoryBlockRetrieval.class)); |
|
|
278 |
if(retrieval != null) |
| 279 |
releaseTabFolder(retrieval); |
| 280 |
} |
| 276 |
} |
281 |
} |
| 277 |
|
282 |
|
| 278 |
public IMemoryRenderingContainer getContainer(String id) { |
283 |
public IMemoryRenderingContainer getContainer(String id) { |
|
Lines 366-372
Link Here
|
| 366 |
|
371 |
|
| 367 |
private CTabFolder createTabFolder(Composite parent) |
372 |
private CTabFolder createTabFolder(Composite parent) |
| 368 |
{ |
373 |
{ |
| 369 |
CTabFolder folder = new CTabFolder(parent, SWT.NO_REDRAW_RESIZE | SWT.NO_TRIM | SWT.FLAT); |
374 |
final CTabFolder folder = new CTabFolder(parent, SWT.NO_REDRAW_RESIZE | SWT.NO_TRIM | SWT.FLAT); |
| 370 |
|
375 |
|
| 371 |
ColorRegistry reg = JFaceResources.getColorRegistry(); |
376 |
ColorRegistry reg = JFaceResources.getColorRegistry(); |
| 372 |
Color c1 = reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_START"), //$NON-NLS-1$ |
377 |
Color c1 = reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_START"), //$NON-NLS-1$ |
|
Lines 376-392
Link Here
|
| 376 |
folder.setSimple(PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS)); |
381 |
folder.setSimple(PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS)); |
| 377 |
folder.setBorderVisible(true); |
382 |
folder.setBorderVisible(true); |
| 378 |
|
383 |
|
|
|
384 |
// listener to dispose rendering resources for each closed tab |
| 379 |
folder.addCTabFolder2Listener(new CTabFolder2Adapter() { |
385 |
folder.addCTabFolder2Listener(new CTabFolder2Adapter() { |
| 380 |
public void close(CTabFolderEvent event) { |
386 |
public void close(CTabFolderEvent event) { |
| 381 |
event.doit = false; |
387 |
event.doit = true; |
| 382 |
CTabItem item = (CTabItem) event.item; |
388 |
CTabItem item = (CTabItem) event.item; |
| 383 |
IMemoryRenderingContainer container = (IMemoryRenderingContainer) item.getData(KEY_CONTAINER); |
389 |
disposeTab(item); |
| 384 |
fCurrentContainers.remove( container ); |
390 |
} |
|
|
391 |
}); |
| 392 |
|
| 393 |
// listener to dispose rendering resources for all tab items when view part is closed |
| 394 |
folder.addDisposeListener(new DisposeListener() { |
| 395 |
public void widgetDisposed(DisposeEvent e) { |
| 396 |
for(CTabItem tab : folder.getItems()) { |
| 397 |
disposeTab(tab); |
| 398 |
} |
| 399 |
folder.removeDisposeListener(this); |
| 385 |
} |
400 |
} |
| 386 |
}); |
401 |
}); |
| 387 |
return folder; |
402 |
return folder; |
| 388 |
} |
403 |
} |
| 389 |
|
404 |
|
|
|
405 |
/** |
| 406 |
* dispose rendering resources associated with the tab item |
| 407 |
* @param item |
| 408 |
*/ |
| 409 |
private void disposeTab(CTabItem item ) { |
| 410 |
if (item.isDisposed()) |
| 411 |
return; |
| 412 |
|
| 413 |
IMemoryRenderingContainer container = (IMemoryRenderingContainer) item.getData(KEY_CONTAINER); |
| 414 |
fCurrentContainers.remove( container ); |
| 415 |
IMemoryRendering rendering = (IMemoryRendering) item.getData(KEY_RENDERING); |
| 416 |
// always deactivate rendering before disposing it. |
| 417 |
rendering.deactivated(); |
| 418 |
rendering.dispose(); |
| 419 |
} |
| 420 |
|
| 390 |
private CTabItem createTab(CTabFolder tabFolder, int index) { |
421 |
private CTabItem createTab(CTabFolder tabFolder, int index) { |
| 391 |
int swtStyle = SWT.CLOSE; |
422 |
int swtStyle = SWT.CLOSE; |
| 392 |
CTabItem tab = new CTabItem(tabFolder, swtStyle, index); |
423 |
CTabItem tab = new CTabItem(tabFolder, swtStyle, index); |
|
Lines 505-518
Link Here
|
| 505 |
else |
536 |
else |
| 506 |
{ |
537 |
{ |
| 507 |
CTabFolder newFolder = this.createTabFolder(fRenderingsComposite); |
538 |
CTabFolder newFolder = this.createTabFolder(fRenderingsComposite); |
| 508 |
newFolder.addCTabFolder2Listener(new CTabFolder2Adapter() { |
539 |
|
| 509 |
public void close(CTabFolderEvent event) { |
|
|
| 510 |
event.doit = true; |
| 511 |
CTabItem item = (CTabItem) event.item; |
| 512 |
IMemoryRenderingContainer container = (IMemoryRenderingContainer) item.getData(KEY_CONTAINER); |
| 513 |
fCurrentContainers.remove( container ); |
| 514 |
} |
| 515 |
}); |
| 516 |
newFolder.addSelectionListener(new SelectionListener() |
540 |
newFolder.addSelectionListener(new SelectionListener() |
| 517 |
{ |
541 |
{ |
| 518 |
public void widgetDefaultSelected(SelectionEvent e) {} |
542 |
public void widgetDefaultSelected(SelectionEvent e) {} |
|
Lines 647-658
Link Here
|
| 647 |
if(folder != null) |
671 |
if(folder != null) |
| 648 |
{ |
672 |
{ |
| 649 |
for(CTabItem tab : folder.getItems()) { |
673 |
for(CTabItem tab : folder.getItems()) { |
| 650 |
IMemoryRenderingContainer container = (IMemoryRenderingContainer) tab.getData(KEY_CONTAINER); |
674 |
disposeTab(tab); |
| 651 |
fCurrentContainers.remove( container ); |
|
|
| 652 |
tab.dispose(); |
| 653 |
} |
675 |
} |
| 654 |
} |
676 |
} |
| 655 |
fContextFolders.remove(context); |
677 |
fContextFolders.remove(context); |
|
|
678 |
folder.dispose(); |
| 679 |
|
| 680 |
if (fStackLayout.topControl.equals(folder)) { |
| 681 |
handleUnsupportedSelection(); |
| 682 |
} |
| 656 |
} |
683 |
} |
| 657 |
|
684 |
|
| 658 |
class SelectionProviderAdapter implements ISelectionProvider { |
685 |
class SelectionProviderAdapter implements ISelectionProvider { |