/******************************************************************************* | |
* Copyright (C) 2010, Stefan Lay <stefan.lay@sap.com> | |
* | |
* 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 | |
*******************************************************************************/ | |
package org.eclipse.example.calc.internal.ui.swt; | |
import org.eclipse.example.calc.Operations; | |
import org.eclipse.example.calc.internal.Calculator; | |
import org.eclipse.example.calc.internal.TextProvider; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.events.SelectionEvent; | |
import org.eclipse.swt.events.SelectionListener; | |
import org.eclipse.swt.layout.GridData; | |
import org.eclipse.swt.layout.GridLayout; | |
import org.eclipse.swt.widgets.Button; | |
import org.eclipse.swt.widgets.Composite; | |
import org.eclipse.swt.widgets.Display; | |
import org.eclipse.swt.widgets.Group; | |
import org.eclipse.swt.widgets.Shell; | |
import org.eclipse.swt.widgets.Text; | |
/* | |
* A simple calculator featuring a SWT | |
* UI. | |
*/ | |
public class CalculatorUI implements TextProvider, SelectionListener { | |
private static final long serialVersionUID = 1L; | |
private Calculator calculator; | |
private Shell shell; | |
private Text display; | |
private Button[] numberButtons; | |
private Button[] cmdButtons; | |
public static void main(String[] args) { | |
Display display = new Display(); | |
Shell shell = new CalculatorUI().open(display); | |
while (!shell.isDisposed()) { | |
if (!display.readAndDispatch()) | |
display.sleep(); | |
} | |
display.dispose(); | |
} | |
private Shell open(Display display) { | |
shell = new Shell(display); | |
setupGUI(); | |
shell.pack(); | |
shell.open(); | |
return shell; | |
} | |
public CalculatorUI() { | |
calculator = new Calculator(this); | |
} | |
private void setupGUI() { | |
shell.setText(Calculator.NAME); | |
GridLayout gridLayout = new GridLayout(); | |
gridLayout.numColumns = 1; | |
gridLayout.marginHeight = gridLayout.marginWidth = 0; | |
shell.setLayout(gridLayout); | |
setupDisplay(); | |
setupNumberButtons(); | |
setupCommandButtons(); | |
} | |
private void setupDisplay() { | |
GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); | |
display = new Text(shell, SWT.BORDER_SOLID | SWT.RIGHT); | |
display.setLayoutData(gridData); | |
display.setText("0"); | |
calculator.setClearText(true); | |
} | |
private void setupNumberButtons() { | |
Composite numberButtonsPanel = new Composite(shell, SWT.NONE); | |
numberButtonsPanel.setLayout(new GridLayout(4, true)); | |
numberButtons = new Button[11]; | |
for (int i = 0; i < numberButtons.length - 1; i++) { | |
addNumberButton(numberButtonsPanel, i, Integer.valueOf(i) | |
.toString()); | |
} | |
addNumberButton(numberButtonsPanel, 10, "."); | |
} | |
private void addNumberButton(Composite parent, int i, String name) { | |
numberButtons[i] = new Button(parent, SWT.PUSH); | |
numberButtons[i].setText(name); | |
numberButtons[i].addSelectionListener(this); | |
} | |
private void setupCommandButtons() { | |
// command buttons | |
Group cmdButtonsPanel = new Group(shell, SWT.NONE); | |
cmdButtonsPanel.setText("Operations"); | |
cmdButtonsPanel.setLayout(new GridLayout(4, true)); | |
cmdButtons = new Button[Operations.INSTANCE.size()]; | |
// make the buttons, set ActionListener and add to panel | |
for (int i = 0; i < cmdButtons.length; i++) { | |
addCommandButton(cmdButtonsPanel, i); | |
} | |
} | |
private void addCommandButton(Composite parent, int i) { | |
cmdButtons[i] = new Button(parent, SWT.NONE); | |
cmdButtons[i].setText(Operations.INSTANCE.getOperationName(i)); | |
cmdButtons[i].addSelectionListener(this); | |
} | |
@Override | |
public void widgetDefaultSelected(SelectionEvent arg0) { | |
// empty | |
} | |
@Override | |
public void widgetSelected(SelectionEvent event) { | |
String str = ((Button) event.getSource()).getText(); | |
calculator.handleButtonClick(str); | |
} | |
@Override | |
public void setDisplayText(String text) { | |
display.setText(text); | |
} | |
@Override | |
public String getDisplayText() { | |
return display.getText(); | |
} | |
} |