package org.fanhongtao.tools.misc;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.fanhongtao.lang.StringUtils;
import org.fanhongtao.swt.BaseShell;
/**
* @author Dharma
* @created 2009-5-18
*/
public class TagCalcShell extends BaseShell
{
private Text tagField;
private Text resultArea;
private Button btnCreateChm;
@Override
public void createContents(Shell shell)
{
shell.setLayout(new GridLayout());
createInputs(shell);
createButtons(shell);
getShell().setSize(400, 300);
}
private void createInputs(Composite parent)
{
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
composite.setLayout(new GridLayout(2, false));
new Label(composite, SWT.NONE).setText("&Tag");
tagField = new Text(composite, SWT.BORDER);
tagField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
tagField.setToolTipText("输入要计算的Tag值");
new Label(composite, SWT.NONE).setText("结果(&R)");
resultArea = new Text(composite, SWT.BORDER | SWT.MULTI);
resultArea.setLayoutData(new GridData(GridData.FILL_BOTH));
resultArea.setToolTipText("计算结果");
}
private void createButtons(Composite parent)
{
Composite composite = new Composite(parent, SWT.NONE);
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.END;
composite.setLayoutData(gridData);
composite.setLayout(new RowLayout());
btnCreateChm = new Button(composite, SWT.NONE);
btnCreateChm.setText("计算(&C)");
btnCreateChm.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
calcTag();
}
});
}
private void calcTag()
{
String tag = tagField.getText().trim();
int value = 0;
try
{
if (tag.toLowerCase().startsWith("0x"))
{
value = Integer.parseInt(tag.substring(2), 16);
}
else
{
value = Integer.parseInt(tag);
}
}
catch (NumberFormatException e)
{
try
{
value = Integer.parseInt(tag, 16);
}
catch (NumberFormatException ex)
{
MessageBox messageBox = new MessageBox(getShell(), SWT.ICON_ERROR);
messageBox.setText("Invalid Tag value");
messageBox.setMessage(ex.getMessage());
messageBox.open();
return;
}
}
if (value < 0)
{
value += 256;
}
StringBuffer buf = new StringBuffer();
buf.append("Hex: ").append(Integer.toHexString(value).toUpperCase()).append(StringUtils.CRLF);
buf.append("Dec: ").append(value).append(StringUtils.CRLF);
if (value > 127)
{
value -= 256;
buf.append("Neg: ").append(value).append(StringUtils.CRLF);
}
resultArea.setText(buf.toString());
}
/**
* @param args
*/
public static void main(String[] args)
{
new TagCalcShell().run("Tag Calc");
}
}