/*
*
*
* Copyright 1990-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 only, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License version 2 for more details (a copy is
* included at /legal/license.txt).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 or visit www.sun.com if you need additional
* information or have any questions.
*/
package javax.microedition.lcdui;
/**
* Look & feel implementation for <code>Gauge</code> using platform widget.
*/
class GaugeLFImpl extends ItemLFImpl implements GaugeLF {
/**
* Creates <code>GaugeLF</code> for the passed in <code>Gauge</code>.
*
* @param gauge the <code>Gauge</code> object associated with this
* look&feel.
*/
GaugeLFImpl(Gauge gauge) {
super(gauge);
this.gauge = gauge;
}
// *****************************************************
// Public methods
// *****************************************************
/**
* Notifies L&F of a value change in the corresponding
* <code>Gauge</code>.
*
* @param oldValue the old value set in the <code>Gauge</code>
* @param newValue the new value set in the <code>Gauge</code>
*/
public void lSetValue(int oldValue, int newValue) {
// little optimization to avoid calling into native
// in cases where unnecessary
if (nativeId != DisplayableLFImpl.INVALID_NATIVE_ID) {
// Only update native resource if it exists.
setValue0(nativeId, newValue, gauge.maxValue);
lRequestInvalidate(true, true);
}
}
/**
* Notifies L&F of a maximum value change in the corresponding
* <code>Gauge</code>.
*
* @param oldMaxValue the old maximum value set in the <code>Gauge</code>
* @param newMaxValue the new maximum value set in the <code>Gauge</code>
*/
public void lSetMaxValue(int oldMaxValue, int newMaxValue) {
if (nativeId != DisplayableLFImpl.INVALID_NATIVE_ID) {
// Only update native resource if it exists.
setValue0(nativeId, gauge.value, newMaxValue);
lRequestInvalidate(true, true);
}
}
/**
* Gets the current value.
*
* @return the current value
*/
public int lGetValue() {
return gauge.value;
}
/**
* Notification of a change in its peer state.
* Update Java peer with user input.
*
* @param hint the new value of an interactive gauge
*
* @return always <code>true</code> so to notify
* <code>ItemStateListener</code>
*/
boolean uCallPeerStateChanged(int hint) {
synchronized (Display.LCDUILock) {
// Update Java peer with the new value
gauge.value = hint;
}
// Indicate to Form to notify ItemStateListener
return true;
}
// *****************************************************
// Package private methods
// *****************************************************
/**
* Determine if this <code>Item</code> should have a newline after it.
*
* @return <code>true</code> if it should have a newline after
*/
boolean equateNLA() {
if (super.equateNLA()) {
return true;
}
return ((gauge.layout & Item.LAYOUT_2) != Item.LAYOUT_2);
}
/**
* Determine if this <code>Item</code> should have a newline before it.
*
* @return <code>true</code> if it should have a newline before
*/
boolean equateNLB() {
if (super.equateNLB()) {
return true;
}
return ((gauge.layout & Item.LAYOUT_2) != Item.LAYOUT_2);
}
/**
* Create native resource for current <code>Gauge</code>.
* Override function in <code>ItemLFImpl</code>.
*
* @param ownerId Owner screen's native resource id
*/
void createNativeResource(int ownerId) {
nativeId = createNativeResource0(ownerId,
gauge.label, gauge.layout,
gauge.interactive,
gauge.maxValue, gauge.value);
}
/**
* KNI function that creates native resource for current
* <code>Gauge</code>.
*
* @param ownerId Owner screen's native resource id
* (<code>MidpDisplayable *</code>)
* @param label label string of this <code>Item</code>
* @param layout layout directive associated with this <code>Item</code>
* @param interactive indicates whether gauge is interactive or not
* @param maxValue the maximum value for this gauge
* @param initialValue the current value of the gauge
*
* @return native resource id (<code>MidpItem *</code>) of this
* <code>Gauge</code>
*/
private native int createNativeResource0(int ownerId,
String label,
int layout,
boolean interactive,
int maxValue,
int initialValue);
/**
* KNI function that sets the current and maximum values on the native
* resource corresponding to the current <code>Gauge</code>.
*
* @param nativeId native resource id for this <code>Item</code>
* @param newValue new value of the current <code>Gauge</code>
* @param newMaxValue new maximum value of the current <code>Gauge</code>
*/
private native void setValue0(int nativeId,
int newValue,
int newMaxValue);
/**
* <code>Gauge</code> instance associated with this view.
*/
private Gauge gauge;
} // GaugeView