/*******************************************************************************
* Copyright (c) 2010-2015 Henshin developers. 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:
* TU Berlin, University of Luxembourg, SES S.A.
*******************************************************************************/
/**
*
*/
package de.tub.tfs.henshin.editor.figure.transformation_unit;
import java.util.Iterator;
import org.eclipse.draw2d.ActionEvent;
import org.eclipse.draw2d.ActionListener;
import org.eclipse.draw2d.Button;
import org.eclipse.draw2d.ChangeEvent;
import org.eclipse.draw2d.ChangeListener;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.Panel;
import org.eclipse.draw2d.XYLayout;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
/**
* The Class CounterIFigure.
*
* @author Johann Schmidt
*
* The Class CounterIFigure.
*/
public class CounterIFigure extends Panel {
/** The decrement. */
private Button decrement;
/** The increment. */
private Button increment;
/** The counter. */
private Label counter;
/** The value. */
private Integer value;
/** The decrement container. */
private Rectangle decrementContainer;
/** The increment container. */
private Rectangle incrementContainer;
/** The counter container. */
private Rectangle counterContainer;
/**
* Instantiates a new counter i figure.
*
* @param startValue
* the start value
*/
public CounterIFigure(Integer startValue) {
super();
setLayoutManager(new XYLayout());
this.value = startValue;
decrement = new Button("<");
decrement.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
if (value > 0) {
value--;
if (value == 0) {
value = -1;
}
counter.setText(value.toString());
fireStateChanged();
}
}
});
decrementContainer = new Rectangle(0, 0, 15, 20);
add(decrement, decrementContainer);
counter = new Label(value.toString());
counterContainer = new Rectangle(15, 0, 30, 20);
add(counter, counterContainer);
increment = new Button(">");
increment.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
value++;
if (value == 0) {
value = 1;
}
counter.setText(value.toString());
fireStateChanged();
}
});
incrementContainer = new Rectangle(45, 0, 15, 20);
add(increment, incrementContainer);
setSize(60, 20);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.draw2d.Figure#setSize(int, int)
*/
@Override
public void setSize(int w, int h) {
super.setSize(w, h);
counterContainer.setSize(w - 30, h);
incrementContainer.setLocation(w - 15, 0);
}
/**
* Gets the value.
*
* @return the value
*/
public synchronized Integer getValue() {
return value;
}
/**
* Sets the value.
*
* @param value
* the new value
*/
public synchronized void setValue(Integer value) {
this.value = value;
counter.setText(value.toString());
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.draw2d.Figure#setBackgroundColor(org.eclipse.swt.graphics
* .Color)
*/
@Override
public void setBackgroundColor(Color bg) {
decrement.setBackgroundColor(bg);
increment.setBackgroundColor(bg);
counter.setBackgroundColor(bg);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.draw2d.Figure#setForegroundColor(org.eclipse.swt.graphics
* .Color)
*/
@Override
public void setForegroundColor(Color fg) {
decrement.setForegroundColor(fg);
increment.setForegroundColor(fg);
counter.setForegroundColor(fg);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.draw2d.Figure#setEnabled(boolean)
*/
@Override
public void setEnabled(boolean value) {
decrement.setEnabled(value);
increment.setEnabled(value);
counter.setEnabled(value);
super.setEnabled(value);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.draw2d.Figure#setFont(org.eclipse.swt.graphics.Font)
*/
@Override
public void setFont(Font f) {
decrement.setFont(f);
increment.setFont(f);
counter.setFont(f);
}
/**
* Adds the change listener.
*
* @param listener
* the listener
*/
public void addChangeListener(ChangeListener listener) {
addListener(ChangeListener.class, listener);
}
/**
* Fire state changed.
*/
protected void fireStateChanged() {
ChangeEvent change = new ChangeEvent(this, "Value");
Iterator<?> listeners = getListeners(ChangeListener.class);
while (listeners.hasNext())
((ChangeListener) listeners.next()) // Leave newline for debug
// stepping
.handleStateChanged(change);
}
}