Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 312098 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/cdt/debug/ui/memory/memorybrowser/GoToAddressBarWidget.java (-3 / +70 lines)
Lines 11-18 Link Here
11
11
12
package org.eclipse.cdt.debug.ui.memory.memorybrowser;
12
package org.eclipse.cdt.debug.ui.memory.memorybrowser;
13
13
14
import org.eclipse.core.runtime.IStatus;
14
import org.eclipse.jface.dialogs.IDialogConstants;
15
import org.eclipse.jface.dialogs.IDialogConstants;
16
import org.eclipse.jface.fieldassist.ControlDecoration;
17
import org.eclipse.jface.fieldassist.FieldDecoration;
18
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
15
import org.eclipse.swt.SWT;
19
import org.eclipse.swt.SWT;
20
import org.eclipse.swt.events.ModifyEvent;
21
import org.eclipse.swt.events.ModifyListener;
16
import org.eclipse.swt.layout.GridData;
22
import org.eclipse.swt.layout.GridData;
17
import org.eclipse.swt.layout.GridLayout;
23
import org.eclipse.swt.layout.GridLayout;
18
import org.eclipse.swt.widgets.Button;
24
import org.eclipse.swt.widgets.Button;
Lines 24-29 Link Here
24
public class GoToAddressBarWidget {
30
public class GoToAddressBarWidget {
25
	
31
	
26
	private Text fExpression;
32
	private Text fExpression;
33
	private ControlDecoration fEmptyExpression;
34
	private ControlDecoration fWrongExpression;
35
	
27
	private Button fOKButton;
36
	private Button fOKButton;
28
	private Button fOKNewTabButton;
37
	private Button fOKNewTabButton;
29
	private Composite fComposite;
38
	private Composite fComposite;
Lines 47-64 Link Here
47
		layout.marginLeft = 0;
56
		layout.marginLeft = 0;
48
		fComposite.setLayout(layout);
57
		fComposite.setLayout(layout);
49
	
58
	
50
		fExpression = new Text(fComposite, SWT.SINGLE | SWT.BORDER);
59
		fExpression = createExpressionField(fComposite);
51
		fExpression.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
52
		
60
		
53
		fOKButton = new Button(fComposite, SWT.NONE);
61
		fOKButton = new Button(fComposite, SWT.NONE);
54
		fOKButton.setText(Messages.getString("GoToAddressBarWidget.Go")); //$NON-NLS-1$
62
		fOKButton.setText(Messages.getString("GoToAddressBarWidget.Go")); //$NON-NLS-1$
63
		fOKButton.setEnabled(false);
55
		
64
		
56
		fOKNewTabButton = new Button(fComposite, SWT.NONE);
65
		fOKNewTabButton = new Button(fComposite, SWT.NONE);
57
		fOKNewTabButton.setText(Messages.getString("GoToAddressBarWidget.NewTab")); //$NON-NLS-1$
66
		fOKNewTabButton.setText(Messages.getString("GoToAddressBarWidget.NewTab")); //$NON-NLS-1$
67
		fOKNewTabButton.setEnabled(false);
58
		
68
		
59
		return fComposite;
69
		return fComposite;
60
	}
70
	}
61
	
71
72
	private Text createExpressionField(Composite parent) {
73
		Text expression = new Text(parent, SWT.SINGLE | SWT.BORDER);
74
		expression.addModifyListener(new ModifyListener() {
75
			public void modifyText(ModifyEvent e) {
76
				updateButtons();
77
			}
78
		});
79
		fEmptyExpression = new ControlDecoration(expression, SWT.LEFT | SWT.CENTER);
80
		fEmptyExpression.setDescriptionText("Enter an expression to position rendering");
81
		FieldDecoration fieldDecoration = FieldDecorationRegistry.getDefault()
82
		.getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED);
83
		fEmptyExpression.setImage(fieldDecoration.getImage());
84
85
		fWrongExpression = new ControlDecoration(expression, SWT.LEFT | SWT.TOP);
86
		fieldDecoration = FieldDecorationRegistry.getDefault()
87
		.getFieldDecoration(FieldDecorationRegistry.DEC_ERROR);
88
		fWrongExpression.setImage(fieldDecoration.getImage());
89
		fWrongExpression.hide();
90
		
91
		// leave enough room for decorators
92
		GridData data = new GridData(GridData.FILL_HORIZONTAL);
93
		data.horizontalIndent = Math.max(fEmptyExpression.getImage().getBounds().width, fWrongExpression.getImage().getBounds().width);
94
		expression.setLayoutData(data);
95
		return expression;
96
	}
97
		
98
	protected void updateButtons() {
99
		boolean empty = fExpression.getText().trim().length() == 0;
100
		
101
		fOKNewTabButton.setEnabled(!empty);
102
		fOKButton.setEnabled(!empty);
103
		
104
		if (empty) 
105
			fEmptyExpression.show();
106
		else 
107
			fEmptyExpression.hide();
108
109
		clearError();
110
	}
111
112
	private void clearError() {
113
		fWrongExpression.hide();
114
	}
115
62
	public int getHeight()
116
	public int getHeight()
63
	{
117
	{
64
		int height = fComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
118
		int height = fComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
Lines 83-86 Link Here
83
	{
137
	{
84
		return fExpression;
138
		return fExpression;
85
	}
139
	}
140
	
141
	/**
142
	 * decorate expression field according to the status
143
	 * @param message
144
	 */
145
	public void handleExpressionStatus(final IStatus message) {
146
		if (message.isOK()) {
147
			clearError();
148
		} else {
149
			fWrongExpression.setDescriptionText(message.getMessage());
150
			fWrongExpression.show();
151
		}
152
	}
86
}
153
}
(-)src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java (-18 / +26 lines)
Lines 36-42 Link Here
36
import org.eclipse.debug.core.model.IMemoryBlockRetrievalExtension;
36
import org.eclipse.debug.core.model.IMemoryBlockRetrievalExtension;
37
import org.eclipse.debug.core.model.MemoryByte;
37
import org.eclipse.debug.core.model.MemoryByte;
38
import org.eclipse.debug.internal.ui.memory.MemoryRenderingManager;
38
import org.eclipse.debug.internal.ui.memory.MemoryRenderingManager;
39
import org.eclipse.debug.internal.ui.views.memory.MemoryViewUtil;
40
import org.eclipse.debug.ui.DebugUITools;
39
import org.eclipse.debug.ui.DebugUITools;
41
import org.eclipse.debug.ui.contexts.DebugContextEvent;
40
import org.eclipse.debug.ui.contexts.DebugContextEvent;
42
import org.eclipse.debug.ui.contexts.IDebugContextListener;
41
import org.eclipse.debug.ui.contexts.IDebugContextListener;
Lines 345-356 Link Here
345
			
344
			
346
			if(inNewTab || activeFolder.getSelection() == null)
345
			if(inNewTab || activeFolder.getSelection() == null)
347
			{
346
			{
348
				CTabItem item = createTab(activeFolder, activeFolder.getSelectionIndex() + 1);
347
				try {
349
				populateTabWithRendering(item, retrieval, context);
348
					IMemoryBlock block = createMemoryBlock(retrieval, expression, context); //$NON-NLS-1$
350
				setTabFolder(retrieval, activeFolder);
349
					CTabItem item = createTab(activeFolder, activeFolder.getSelectionIndex() + 1);
351
				activeFolder.setSelection(item);
350
					populateTabWithRendering(item, retrieval, context, block);
352
				getSite().getSelectionProvider().setSelection(new StructuredSelection(item.getData(KEY_RENDERING)));
351
					setTabFolder(retrieval, activeFolder);
353
			}
352
					activeFolder.setSelection(item);
353
					getSite().getSelectionProvider().setSelection(new StructuredSelection(item.getData(KEY_RENDERING)));
354
				} catch (DebugException e1) {
355
					fGotoAddressBar.handleExpressionStatus(new Status(Status.ERROR, MemoryBrowserPlugin.PLUGIN_ID, 
356
							Messages.getString("MemoryBrowser.FailedToGoToAddressTitle"), e1));
357
					return;
358
				} 
359
			} 
354
			
360
			
355
			final IRepositionableMemoryRendering rendering = (IRepositionableMemoryRendering) activeFolder.getSelection().getData(KEY_RENDERING);
361
			final IRepositionableMemoryRendering rendering = (IRepositionableMemoryRendering) activeFolder.getSelection().getData(KEY_RENDERING);
356
			final String gotoExpression = getAddressSpacePrefix() + expression;
362
			final String gotoExpression = getAddressSpacePrefix() + expression;
Lines 366-379 Link Here
366
							if(((IMemoryBlockExtension) rendering.getMemoryBlock()).supportBaseAddressModification())
372
							if(((IMemoryBlockExtension) rendering.getMemoryBlock()).supportBaseAddressModification())
367
								((IMemoryBlockExtension) rendering.getMemoryBlock()).setBaseAddress(newBase);
373
								((IMemoryBlockExtension) rendering.getMemoryBlock()).setBaseAddress(newBase);
368
							rendering.goToAddress(newBase);
374
							rendering.goToAddress(newBase);
375
							fGotoAddressBar.handleExpressionStatus(Status.OK_STATUS);
369
							runOnUIThread(new Runnable(){
376
							runOnUIThread(new Runnable(){
370
								public void run()
377
								public void run()
371
								{
378
								{
372
									updateLabel(activeFolder.getSelection(), rendering);
379
									updateLabel(activeFolder.getSelection(), rendering);
373
								}
380
								}
374
							});
381
							});
375
						} catch (DebugException e1) {
382
						} catch (final DebugException e1) {
376
							MemoryViewUtil.openError(Messages.getString("MemoryBrowser.FailedToGoToAddressTitle"), "", e1);  //$NON-NLS-1$
383
							// widgets update require Display 
384
							runOnUIThread(new Runnable(){
385
								public void run() {
386
									fGotoAddressBar.handleExpressionStatus(new Status(Status.ERROR, MemoryBrowserPlugin.PLUGIN_ID, 
387
											Messages.getString("MemoryBrowser.FailedToGoToAddressTitle"), e1));
388
								}
389
							});
377
						}
390
						}
378
					}
391
					}
379
				}.start();
392
				}.start();
Lines 632-638 Link Here
632
				{
645
				{
633
					fStackLayout.topControl = tabFolder;
646
					fStackLayout.topControl = tabFolder;
634
				}
647
				}
635
				else
648
				else 
636
				{
649
				{
637
					tabFolder = this.createTabFolder(fRenderingsComposite);
650
					tabFolder = this.createTabFolder(fRenderingsComposite);
638
					tabFolder.addSelectionListener(new SelectionListener()
651
					tabFolder.addSelectionListener(new SelectionListener()
Lines 643-652 Link Here
643
						}
656
						}
644
					});
657
					});
645
					
658
					
646
					tabFolder.setData(KEY_RETRIEVAL, retrieval);
659
					tabFolder.setData(KEY_RETRIEVAL, retrieval);					
647
					
648
					CTabItem item = createTab(tabFolder, 0);
649
					populateTabWithRendering(item, retrieval, context);
650
					setTabFolder(retrieval, tabFolder);
660
					setTabFolder(retrieval, tabFolder);
651
					
661
					
652
					fStackLayout.topControl = getTabFolder(retrieval);
662
					fStackLayout.topControl = getTabFolder(retrieval);
Lines 678-684 Link Here
678
		store.setValue(PREF_DEFAULT_RENDERING, defaultRenderingTypeId);
688
		store.setValue(PREF_DEFAULT_RENDERING, defaultRenderingTypeId);
679
	}
689
	}
680
	
690
	
681
	private void populateTabWithRendering(final CTabItem tab, final IMemoryBlockRetrieval retrieval, Object context)
691
	private void populateTabWithRendering(final CTabItem tab, final IMemoryBlockRetrieval retrieval, Object context, IMemoryBlock block)
682
	{
692
	{
683
		IMemoryRenderingType type = DebugUITools.getMemoryRenderingManager().getRenderingType(getDefaultRenderingTypeId());
693
		IMemoryRenderingType type = DebugUITools.getMemoryRenderingManager().getRenderingType(getDefaultRenderingTypeId());
684
		try {
694
		try {
Lines 711-719 Link Here
711
				public void removeMemoryRendering(IMemoryRendering rendering) {}
721
				public void removeMemoryRendering(IMemoryRendering rendering) {}
712
				
722
				
713
			};
723
			};
714
			
724
						
715
			IMemoryBlock block = createMemoryBlock(retrieval, "0", context); //$NON-NLS-1$
716
			
717
			fCurrentContainers.add(container);
725
			fCurrentContainers.add(container);
718
			rendering.init(container, block);
726
			rendering.init(container, block);
719
			rendering.createControl(tab.getParent());
727
			rendering.createControl(tab.getParent());

Return to bug 312098