001: /*
002: * @(#)PPCScrollbarPeer.java 1.8 06/10/10
003: *
004: * Copyright 1990-2006 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: /**
028: * PPCScrollbarPeer.java
029: *
030: * @author Created by Omnicore CodeGuide
031: */package sun.awt.pocketpc;
032:
033: import sun.awt.peer.*;
034: import java.awt.*;
035: import java.awt.event.*;
036:
037: class PPCScrollbarPeer extends PPCComponentPeer implements
038: ScrollbarPeer {
039: private static native void initIDs();
040:
041: static {
042: initIDs();
043: }
044:
045: boolean ignore;
046:
047: // ComponentPeer overrides
048: public Dimension getMinimumSize() {
049: if (((Scrollbar) target).getOrientation() == Scrollbar.VERTICAL) {
050: return new Dimension(18, 50);
051: } else {
052: return new Dimension(50, 18);
053: }
054: }
055:
056: // ScrollbarPeer implementation
057: public void setValues(int value, int visible, int minimum,
058: int maximum) {
059: if (!ignore) {
060: setValuesNative(value, visible, minimum, maximum);
061: }
062: }
063:
064: native void setValuesNative(int value, int visible, int minimum,
065: int maximum);
066:
067: public native void setLineIncrement(int l);
068:
069: public native void setPageIncrement(int l);
070:
071: // Toolkit & peer internals
072:
073: PPCScrollbarPeer(Scrollbar target) {
074: super (target);
075: ignore = false;
076: }
077:
078: native void create(PPCComponentPeer parent);
079:
080: void initialize() {
081: Scrollbar sb = (Scrollbar) target;
082: setValues(sb.getValue(), sb.getVisibleAmount(),
083: sb.getMinimum(), sb.getMaximum());
084: super .initialize();
085: }
086:
087: void clearRectBeforePaint(Graphics g, Rectangle r) {
088: // Overload to do nothing for native components
089: }
090:
091: // native callbacks
092:
093: void lineUp(int value) {
094: PPCToolkit.postEvent(new Adjustor((Scrollbar) target, value,
095: this , AdjustmentEvent.UNIT_DECREMENT));
096: }
097:
098: void lineDown(int value) {
099: PPCToolkit.postEvent(new Adjustor((Scrollbar) target, value,
100: this , AdjustmentEvent.UNIT_INCREMENT));
101: }
102:
103: void pageUp(int value) {
104: PPCToolkit.postEvent(new Adjustor((Scrollbar) target, value,
105: this , AdjustmentEvent.BLOCK_DECREMENT));
106: }
107:
108: void pageDown(int value) {
109: PPCToolkit.postEvent(new Adjustor((Scrollbar) target, value,
110: this , AdjustmentEvent.BLOCK_INCREMENT));
111: }
112:
113: void dragBegin(int value) {
114: // New event model event -- not supported yet.
115: // ((Scrollbar)target).setValue(value);
116: // WToolkit.postEvent(new Event(target, Event.SCROLL_BEGIN, new Integer(value)));
117: }
118:
119: void dragAbsolute(int value) {
120: PPCToolkit.postEvent(new Adjustor((Scrollbar) target, value,
121: this , AdjustmentEvent.TRACK));
122: }
123:
124: void dragEnd(int value) {
125: // New event model event -- not supported yet.
126: // ((Scrollbar)target).setValue(value);
127: // WToolkit.postEvent(new Event(target, Event.SCROLL_END, new Integer(value)));
128: }
129:
130: /**
131: * DEPRECATED
132: */
133: public Dimension minimumSize() {
134: return getMinimumSize();
135: }
136:
137: /**
138: * This is used to change the Scrollbar on another thread without
139: * deadlocking.
140: */
141: class Adjustor extends AWTEvent implements java.awt.ActiveEvent {
142:
143: Adjustor(Scrollbar sb, int value, PPCScrollbarPeer peer,
144: int type) {
145: super (peer, 0);
146: this .sb = sb;
147: this .value = value;
148: this .peer = peer;
149: this .type = type;
150: consumed = true;
151: }
152:
153: public void dispatch() {
154: sb.setValue(value);
155: peer.ignore = true;
156: PPCToolkit.postEvent(new AdjustmentEvent(sb,
157: AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED, type,
158: value));
159: peer.ignore = false;
160: }
161:
162: int value;
163: Scrollbar sb;
164: PPCScrollbarPeer peer;
165: int type;
166: }
167: }
|