/******************************************************************************* * 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(); } @Override 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); } }