001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package javax.microedition.lcdui;
028:
029: /**
030: * Look & feel implementation for <code>Gauge</code> using platform widget.
031: */
032: class GaugeLFImpl extends ItemLFImpl implements GaugeLF {
033:
034: /**
035: * Creates <code>GaugeLF</code> for the passed in <code>Gauge</code>.
036: *
037: * @param gauge the <code>Gauge</code> object associated with this
038: * look&feel.
039: */
040: GaugeLFImpl(Gauge gauge) {
041:
042: super (gauge);
043:
044: this .gauge = gauge;
045: }
046:
047: // *****************************************************
048: // Public methods
049: // *****************************************************
050:
051: /**
052: * Notifies L&F of a value change in the corresponding
053: * <code>Gauge</code>.
054: *
055: * @param oldValue the old value set in the <code>Gauge</code>
056: * @param newValue the new value set in the <code>Gauge</code>
057: */
058: public void lSetValue(int oldValue, int newValue) {
059: // little optimization to avoid calling into native
060: // in cases where unnecessary
061: if (nativeId != DisplayableLFImpl.INVALID_NATIVE_ID) {
062: // Only update native resource if it exists.
063: setValue0(nativeId, newValue, gauge.maxValue);
064:
065: lRequestInvalidate(true, true);
066: }
067: }
068:
069: /**
070: * Notifies L&F of a maximum value change in the corresponding
071: * <code>Gauge</code>.
072: *
073: * @param oldMaxValue the old maximum value set in the <code>Gauge</code>
074: * @param newMaxValue the new maximum value set in the <code>Gauge</code>
075: */
076: public void lSetMaxValue(int oldMaxValue, int newMaxValue) {
077: if (nativeId != DisplayableLFImpl.INVALID_NATIVE_ID) {
078: // Only update native resource if it exists.
079: setValue0(nativeId, gauge.value, newMaxValue);
080: lRequestInvalidate(true, true);
081: }
082: }
083:
084: /**
085: * Gets the current value.
086: *
087: * @return the current value
088: */
089: public int lGetValue() {
090: return gauge.value;
091: }
092:
093: /**
094: * Notification of a change in its peer state.
095: * Update Java peer with user input.
096: *
097: * @param hint the new value of an interactive gauge
098: *
099: * @return always <code>true</code> so to notify
100: * <code>ItemStateListener</code>
101: */
102: boolean uCallPeerStateChanged(int hint) {
103: synchronized (Display.LCDUILock) {
104: // Update Java peer with the new value
105: gauge.value = hint;
106: }
107: // Indicate to Form to notify ItemStateListener
108: return true;
109: }
110:
111: // *****************************************************
112: // Package private methods
113: // *****************************************************
114:
115: /**
116: * Determine if this <code>Item</code> should have a newline after it.
117: *
118: * @return <code>true</code> if it should have a newline after
119: */
120: boolean equateNLA() {
121: if (super .equateNLA()) {
122: return true;
123: }
124:
125: return ((gauge.layout & Item.LAYOUT_2) != Item.LAYOUT_2);
126: }
127:
128: /**
129: * Determine if this <code>Item</code> should have a newline before it.
130: *
131: * @return <code>true</code> if it should have a newline before
132: */
133: boolean equateNLB() {
134: if (super .equateNLB()) {
135: return true;
136: }
137:
138: return ((gauge.layout & Item.LAYOUT_2) != Item.LAYOUT_2);
139: }
140:
141: /**
142: * Create native resource for current <code>Gauge</code>.
143: * Override function in <code>ItemLFImpl</code>.
144: *
145: * @param ownerId Owner screen's native resource id
146: */
147: void createNativeResource(int ownerId) {
148: nativeId = createNativeResource0(ownerId, gauge.label,
149: gauge.layout, gauge.interactive, gauge.maxValue,
150: gauge.value);
151: }
152:
153: /**
154: * KNI function that creates native resource for current
155: * <code>Gauge</code>.
156: *
157: * @param ownerId Owner screen's native resource id
158: * (<code>MidpDisplayable *</code>)
159: * @param label label string of this <code>Item</code>
160: * @param layout layout directive associated with this <code>Item</code>
161: * @param interactive indicates whether gauge is interactive or not
162: * @param maxValue the maximum value for this gauge
163: * @param initialValue the current value of the gauge
164: *
165: * @return native resource id (<code>MidpItem *</code>) of this
166: * <code>Gauge</code>
167: */
168: private native int createNativeResource0(int ownerId, String label,
169: int layout, boolean interactive, int maxValue,
170: int initialValue);
171:
172: /**
173: * KNI function that sets the current and maximum values on the native
174: * resource corresponding to the current <code>Gauge</code>.
175: *
176: * @param nativeId native resource id for this <code>Item</code>
177: * @param newValue new value of the current <code>Gauge</code>
178: * @param newMaxValue new maximum value of the current <code>Gauge</code>
179: */
180: private native void setValue0(int nativeId, int newValue,
181: int newMaxValue);
182:
183: /**
184: * <code>Gauge</code> instance associated with this view.
185: */
186: private Gauge gauge;
187:
188: } // GaugeView
|