Skip to content
This repository has been archived by the owner on Mar 27, 2024. It is now read-only.

Commit

Permalink
Because SWT Spinners include a mandatory Text widget that can only
Browse files Browse the repository at this point in the history
display the spinner's integer value, and we intend to display doubles, I
replaced the spinner with two buttons (decorated using the same native
arrow style).

The tester has also been updated to check for these buttons.

Signed-off-by: Jordan Deyton <jordan.deyton@gmail.com>
  • Loading branch information
jdeyton committed Jun 20, 2015
1 parent 4bf9f46 commit 7fecdfa
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Scale;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.TypedListener;

/**
*
Expand All @@ -40,8 +38,8 @@ public class TimeSliderComposite extends Composite {

private final Scale scale;
private final Text spinnerText;
private final Button spinnerUp;
private final Button spinnerDown;
private final Button spinnerNext;
private final Button spinnerPrev;

private int timestep;
private final List<Double> times;
Expand Down Expand Up @@ -78,45 +76,48 @@ public TimeSliderComposite(Composite parent, int style) {
// spinner.setMinimum(0);
// spinner.setIncrement(1);

spinnerUp = new Button(spinnerComposite, SWT.ARROW | SWT.UP);
spinnerUp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));
spinnerNext = new Button(spinnerComposite, SWT.ARROW | SWT.UP);
spinnerNext
.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));
spinnerNext.setToolTipText("Next Timestep");

spinnerDown = new Button(spinnerComposite, SWT.ARROW | SWT.DOWN);
spinnerDown
spinnerPrev = new Button(spinnerComposite, SWT.ARROW | SWT.DOWN);
spinnerPrev
.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));
spinnerPrev.setToolTipText("Previous Timestep");

scale.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
timestep = scale.getSelection();
spinnerText.setText(times.get(timestep).toString());

spinnerUp.setEnabled(timestep != times.size() - 1);
spinnerDown.setEnabled(timestep != 0);
spinnerNext.setEnabled(timestep != times.size() - 1);
spinnerPrev.setEnabled(timestep != 0);
}
});
spinnerUp.addSelectionListener(new SelectionAdapter() {
spinnerNext.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
timestep++;
scale.setSelection(timestep);
spinnerText.setText(times.get(timestep).toString());
if (timestep == times.size() - 1) {
spinnerUp.setEnabled(false);
spinnerNext.setEnabled(false);
}
spinnerDown.setEnabled(true);
spinnerPrev.setEnabled(true);
}
});
spinnerDown.addSelectionListener(new SelectionAdapter() {
spinnerPrev.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
timestep--;
scale.setSelection(timestep);
spinnerText.setText(times.get(timestep).toString());
if (timestep == 0) {
spinnerDown.setEnabled(false);
spinnerPrev.setEnabled(false);
}
spinnerUp.setEnabled(true);
spinnerNext.setEnabled(true);
}
});
spinnerText.addSelectionListener(new SelectionAdapter() {
Expand Down Expand Up @@ -148,8 +149,8 @@ private void refreshWidgets() {
// Enable/disable the widgets.
boolean enabled = size > 1;
scale.setEnabled(enabled);
spinnerUp.setEnabled(enabled);
spinnerDown.setEnabled(false);
spinnerNext.setEnabled(enabled);
spinnerPrev.setEnabled(false);
spinnerText.setEnabled(enabled);

return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swtbot.swt.finder.SWTBot;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotArrowButton;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotScale;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotSpinner;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;
import org.junit.Test;

Expand All @@ -44,9 +44,6 @@
*/
public class TimeSliderCompositeTester extends AbstractSWTTester {

// TODO Update the spinner tests... We can't use spinners (no way to hide
// its own text widget) and must use buttons instead.

/**
* The time widget that will be tested. This gets initialized before and
* disposed after each test.
Expand Down Expand Up @@ -328,6 +325,11 @@ public void run() {
@Test
public void checkWidgetsEnabled() {

SWTBotScale scale = getTimeScale();
SWTBotArrowButton nextButton = getTimeSpinnerNext();
SWTBotArrowButton prevButton = getTimeSpinnerPrev();
SWTBotText text = getTimeText();

final List<Double> goodTimes = new ArrayList<Double>();
goodTimes.add(1.0);
goodTimes.add(2.0);
Expand All @@ -348,7 +350,8 @@ public void run() {
// None of them should be enabled. Also, the text widget should say N/A.
SWTBot testBot = new SWTBot(testWidget.get());
assertNotEnabled(testBot.scale());
assertNotEnabled(testBot.spinner());
assertNotEnabled(testBot.arrowButton(0));
assertNotEnabled(testBot.arrowButton(1));
assertNotEnabled(testBot.text());
assertEquals(NO_TIMES, testBot.text().getText());

Expand All @@ -362,9 +365,10 @@ public void run() {

// Initially, the test time widget's sub-widgets are enabled because the
// times have been set.
assertEnabled(getTimeScale());
assertEnabled(getTimeSpinner());
assertEnabled(getTimeText());
assertEnabled(scale);
assertEnabled(nextButton);
assertNotEnabled(prevButton); // First timestep... prev is disabled.
assertEnabled(text);

// Setting the times to something with 1 value should disable them.
getDisplay().syncExec(new Runnable() {
Expand All @@ -373,11 +377,12 @@ public void run() {
timeComposite.setTimes(badTimes);
}
});
assertNotEnabled(getTimeScale());
assertNotEnabled(getTimeSpinner());
assertNotEnabled(getTimeText());
assertNotEnabled(scale);
assertNotEnabled(nextButton);
assertNotEnabled(prevButton);
assertNotEnabled(text);
// The text widget's text should be set to the current value.
assertEquals(badTimes.get(0).toString(), getTimeText().getText());
assertEquals(badTimes.get(0).toString(), text.getText());

// Setting the times to something with 2 values should enable them.
getDisplay().syncExec(new Runnable() {
Expand All @@ -386,9 +391,19 @@ public void run() {
timeComposite.setTimes(goodTimes);
}
});
assertEnabled(getTimeScale());
assertEnabled(getTimeSpinner());
assertEnabled(getTimeText());
assertEnabled(scale);
assertEnabled(nextButton);
assertNotEnabled(prevButton); // First timestep... prev is disabled.
assertEnabled(text);

// Setting it to the last timestep should disable the "next" button.
nextButton.click();
assertNotEnabled(nextButton);
assertEnabled(prevButton);
// Setting it to the first timestep should disable the "prev" button.
prevButton.click();
assertEnabled(nextButton);
assertNotEnabled(prevButton);

// Setting the times to something with 0 values should also disable
// them.
Expand All @@ -399,11 +414,12 @@ public void run() {
timeComposite.setTimes(badTimes);
}
});
assertNotEnabled(getTimeScale());
assertNotEnabled(getTimeSpinner());
assertNotEnabled(getTimeText());
assertNotEnabled(scale);
assertNotEnabled(nextButton);
assertNotEnabled(prevButton);
assertNotEnabled(text);
// The text widget's text should be set to N/A.
assertEquals(NO_TIMES, testBot.text().getText());
assertEquals(NO_TIMES, text.getText());

// Restore the times.
getDisplay().syncExec(new Runnable() {
Expand Down Expand Up @@ -503,7 +519,8 @@ public void run() {
public void checkSelectionListenersBySpinner() {

// Get the specific widget that will be used to set the time.
SWTBotSpinner widget = getTimeSpinner();
SWTBotArrowButton nextButton = getTimeSpinnerNext();
SWTBotArrowButton prevButton = getTimeSpinnerPrev();

// Register the second fake listener.
getDisplay().syncExec(new Runnable() {
Expand All @@ -515,7 +532,7 @@ public void run() {

// They should both be notified when the widget is used to change the
// values.
widget.setSelection(widget.getSelection() + widget.getIncrement());
nextButton.click();
assertTrue(fakeListener1.wasNotified());
assertTrue(fakeListener2.wasNotified());

Expand All @@ -529,7 +546,7 @@ public void run() {

// It should not be notified when the widget changes, but the other
// should still be notified.
widget.setSelection(widget.getSelection() - widget.getIncrement());
prevButton.click();
assertFalse(fakeListener2.wasNotified()); // Test this one first!
assertTrue(fakeListener1.wasNotified());

Expand Down Expand Up @@ -760,12 +777,22 @@ private SWTBotScale getTimeScale() {
}

/**
* Gets the SWTBot-wrapped spinner widget for the time steps.
* Gets the SWTBot-wrapped button widget that jumps to the next timestep.
*
* @return The wrapped next button.
*/
private SWTBotArrowButton getTimeSpinnerNext() {
return getBot().arrowButton(0);
}

/**
* Gets the SWTBot-wrapped button widget that jumps to the previous
* timestep.
*
* @return The wrapped spinner widget.
* @return The wrapped previous button.
*/
private SWTBotSpinner getTimeSpinner() {
return getBot().spinner();
private SWTBotArrowButton getTimeSpinnerPrev() {
return getBot().arrowButton(1);
}

/**
Expand Down

0 comments on commit 7fecdfa

Please sign in to comment.