blob: 0f17551fedff7bf52cd197db156427b789b7b392 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2006 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
*******************************************************************************/
package org.eclipse.debug.internal.ui.views.memory.renderings;
import org.eclipse.debug.core.model.MemoryByte;
import org.eclipse.debug.internal.ui.DebugUIMessages;
import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PropertyPage;
public class TableRenderingPropertiesPage extends PropertyPage implements
IWorkbenchPropertyPage {
public TableRenderingPropertiesPage() {
super();
}
protected Control createContents(Composite parent) {
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IDebugUIConstants.PLUGIN_ID + ".TableRenderingPropertiesPage_context"); //$NON-NLS-1$
noDefaultAndApplyButton();
Composite composite = new Composite(parent, SWT.NONE);
if (getElement() instanceof AbstractBaseTableRendering)
{
AbstractBaseTableRendering rendering = (AbstractBaseTableRendering)getElement();
GridLayout compositeLayout = new GridLayout();
compositeLayout.numColumns = 2;
compositeLayout.makeColumnsEqualWidth = false;
composite.setLayout(compositeLayout);
GridData comositeSpec= new GridData();
comositeSpec.grabExcessVerticalSpace= true;
comositeSpec.grabExcessHorizontalSpace= true;
comositeSpec.horizontalAlignment= GridData.FILL;
comositeSpec.verticalAlignment= GridData.CENTER;
composite.setLayoutData(comositeSpec);
String label = rendering.getLabel();
if (label.startsWith("&&")) //$NON-NLS-1$
label = label.replaceFirst("&&", "&"); //$NON-NLS-1$//$NON-NLS-2$
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_1, label);
MemoryByte[] bytes = rendering.getSelectedAsBytes();
if (bytes.length > 0) {
if (rendering.getSelectedAddress() != null)
{
String selectedAddress = "0x" + rendering.getSelectedAddress().toString(16).toUpperCase(); //$NON-NLS-1$
StringBuffer content = new StringBuffer(selectedAddress);
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_2, content.toString());
}
String length = String.valueOf(rendering.getAddressableUnitPerColumn()) + " " + DebugUIMessages.TableRenderingPropertiesPage_3; //$NON-NLS-1$
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_4, length);
String selectedContent = rendering.getSelectedAsString();
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_5, selectedContent);
int addressableSize = rendering.getAddressableSize() * 8;
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_6, String.valueOf(addressableSize) + " " + DebugUIMessages.TableRenderingPropertiesPage_8); //$NON-NLS-1$
boolean endianessKnown = bytes[0].isEndianessKnown();
int endianess = RenderingsUtil.ENDIANESS_UNKNOWN;
if (endianessKnown)
endianess = bytes[0].isBigEndian()?RenderingsUtil.BIG_ENDIAN:RenderingsUtil.LITTLE_ENDIAN;
boolean allBytesKnown = bytes[0].isHistoryKnown();
boolean allBytesUnchanged = bytes[0].isChanged()?false:true;
boolean allBytesReadable = bytes[0].isReadable();
boolean allBytesWritable = bytes[0].isWritable();
if (bytes.length > 1)
{
for (int i=1; i<bytes.length; i++)
{
if (endianessKnown)
{
int byteEndianess = bytes[i].isBigEndian()?RenderingsUtil.BIG_ENDIAN:RenderingsUtil.LITTLE_ENDIAN;
if (endianess != RenderingsUtil.ENDIANESS_UNKNOWN && endianess != byteEndianess)
endianess = RenderingsUtil.ENDIANESS_UNKNOWN;
}
if (!bytes[i].isHistoryKnown())
allBytesKnown = false;
if (bytes[i].isChanged())
allBytesUnchanged = false;
if (!bytes[i].isReadable())
allBytesReadable = false;
if (!bytes[i].isWritable())
allBytesWritable = false;
}
}
boolean isChanged = allBytesKnown && !allBytesUnchanged;
if (allBytesKnown)
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_9, String.valueOf(isChanged));
else
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_10, DebugUIMessages.TableRenderingPropertiesPage_11);
String dataEndian = DebugUIMessages.TableRenderingPropertiesPage_12;
if (endianessKnown)
{
if (endianess == RenderingsUtil.BIG_ENDIAN)
dataEndian = DebugUIMessages.TableRenderingPropertiesPage_13;
else if (endianess == RenderingsUtil.LITTLE_ENDIAN)
dataEndian = DebugUIMessages.TableRenderingPropertiesPage_14;
else
dataEndian = DebugUIMessages.TableRenderingPropertiesPage_15;
}
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_16, dataEndian);
if (rendering instanceof AbstractIntegerRendering)
{
AbstractIntegerRendering intRendering = (AbstractIntegerRendering)rendering;
String displayEndian = DebugUIMessages.TableRenderingPropertiesPage_17;
endianess = intRendering.getDisplayEndianess();
if (endianess == RenderingsUtil.BIG_ENDIAN)
displayEndian = DebugUIMessages.TableRenderingPropertiesPage_18;
else if (endianess == RenderingsUtil.LITTLE_ENDIAN)
displayEndian = DebugUIMessages.TableRenderingPropertiesPage_19;
else
{
if (endianessKnown)
displayEndian = dataEndian;
else
displayEndian = DebugUIMessages.TableRenderingPropertiesPage_20;
}
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_21, displayEndian);
}
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_22, String.valueOf(allBytesReadable));
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_23, String.valueOf(allBytesWritable));
}
else
{
String selectedAddress = "0x" + rendering.getSelectedAddress().toString(16).toUpperCase(); //$NON-NLS-1$
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_25, selectedAddress);
int unitsPerLine = rendering.getAddressableUnitPerLine();
addProperty(composite, DebugUIMessages.TableRenderingPropertiesPage_26, String.valueOf(unitsPerLine));
}
}
return composite;
}
private void addProperty(Composite composite, String labelStr, String contentStr)
{
Label label = new Label(composite, SWT.NONE);
label.setText(labelStr);
Label text = new Label(composite, SWT.WRAP );
text.setText(contentStr);
}
}