/**
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* 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 gov.redhawk.common.ui.internal.widgets;
import java.util.Vector;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
/**
* Not to be instantiated by clients
*
*/
public class UpDown extends Composite {
private final Button up, down;
private final Vector<SelectionListener> selectionListeners = new Vector<SelectionListener>();
/**
* @param parent
* @param style
*/
public UpDown(final Composite parent, final int style) {
super(parent, style);
this.up = new Button(this, SWT.ARROW | SWT.UP | SWT.BORDER);
this.down = new Button(this, SWT.ARROW | SWT.DOWN | SWT.BORDER);
addListener(SWT.Resize, new Listener() {
@Override
public void handleEvent(final Event e) {
resize();
}
});
this.up.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(final SelectionEvent e) {
// TODO Auto-generated method stub
}
@Override
public void widgetSelected(final SelectionEvent e) {
UpDown.this.widgetSelected(e);
}
});
this.down.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(final SelectionEvent e) {
// TODO Auto-generated method stub
}
@Override
public void widgetSelected(final SelectionEvent e) {
UpDown.this.widgetSelected(e);
}
});
}
private void sendSelectionEvent(final SelectionEvent e) {
final Event te = new Event();
te.widget = this;
final SelectionEvent se = new SelectionEvent(te);
if (e.widget == this.up) {
se.detail = SWT.ARROW_UP;
} else {
se.detail = SWT.ARROW_DOWN;
}
se.widget = this;
final int size = this.selectionListeners.size();
for (int i = 0; i < size; i++) {
final SelectionListener listener = this.selectionListeners.elementAt(i);
listener.widgetSelected(se);
}
}
/**
* @return Button
*/
public Button getUpButton() {
return this.up;
}
/**
* @return Button
*/
public Button getDownButton() {
return this.down;
}
/**
* @param listener
*/
public void addSelectionListener(final SelectionListener listener) {
this.selectionListeners.addElement(listener);
}
/**
* @param listener
*/
public void removeSelectionListener(final SelectionListener listener) {
this.selectionListeners.removeElement(listener);
}
protected void widgetSelected(final SelectionEvent e) {
sendSelectionEvent(e);
}
@Override
public void setEnabled(final boolean enabled) {
this.up.setEnabled(enabled);
this.down.setEnabled(enabled);
super.setEnabled(enabled);
}
/**
*
*/
public void resize() {
final int buttonHeight = this.getSize().y / 2;
this.up.setBounds(0, 0, this.getSize().x, buttonHeight);
this.down.setBounds(0, buttonHeight, this.getSize().x, buttonHeight);
}
@Override
public Point computeSize(final int wHint, final int hHint, final boolean changed) {
final int width = 20, height = 20;
return new Point(width + 2, height + 2);
}
}