/******************************************************************************* * Copyright (c) 2009 Paul VanderLei, Simon Archer, Jeff McAffer and others. All * rights reserved. This program and the accompanying materials are made available * under the terms of the Eclipse Public License v1.0 and Eclipse Distribution License * v1.0 which accompanies this distribution. The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License * is available at http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Paul VanderLei, Simon Archer, Jeff McAffer - initial API and implementation *******************************************************************************/ package org.eclipse.examples.toast.internal.swt.audio; import org.eclipse.examples.toast.crust.widgets.ImageButton; import org.eclipse.examples.toast.dev.radio.IRadio; import org.eclipse.examples.toast.dev.radio.IRadioListener; import org.eclipse.swt.widgets.Label; public class RadioController implements IRadioListener { private ImageButton[] presetElements; private Label frequencyElement; private IRadio device; private boolean displayed; protected RadioController() { displayed = false; } private String convertFrequency(int frequency) { int whole = frequency / 10; int fraction = frequency % 10; StringBuffer buffer = new StringBuffer(6); buffer.append(whole); buffer.append('.'); buffer.append(fraction); return buffer.toString(); } public void frequencyChanged(int frequency) { updateFrequency(frequency); } public void bindElements(Label frequencyElement, ImageButton[] presetElements) { this.frequencyElement = frequencyElement; this.presetElements = presetElements; device.addListener(this); } public void bindDevice(IRadio device) { this.device = device; } public void unbind() { frequencyElement = null; presetElements = null; device.removeListener(this); device = null; } public void setDisplayed(boolean displayed) { if (displayed && !this.displayed) { this.displayed = true; updateAllElements(); } else { this.displayed = displayed; } } public void frequencyDown() { device.frequencyDown(); } public void frequencyUp() { device.frequencyUp(); } public void seekDown() { device.seekDown(); } public void seekUp() { device.seekUp(); } public void tuneToPreset(int presetIndex) { device.tuneToPreset(presetIndex); } // Private private void updatePreset(int presetIndex, int frequency) { if (displayed && (presetElements != null)) { ImageButton presetElement = presetElements[presetIndex]; if (presetElement != null) { presetElement.setText(convertFrequency(frequency)); presetElement.redraw(); } } } private void updateFrequency(int frequency) { if (displayed) { if (frequencyElement != null) { frequencyElement.setText(convertFrequency(frequency)); frequencyElement.redraw(); } } } private void updateAllElements() { updateFrequency(device.getFrequency()); for (int i = 0; i < presetElements.length; i++) { updatePreset(i, device.getPreset(i)); } } }