lcduieventlistener.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 253 行

JAVA
253
字号
/* *    * * Copyright  1990-2007 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 com.sun.midp.lcdui;import com.sun.midp.events.*;import javax.microedition.lcdui.CustomItem;import com.sun.midp.security.Permissions;import com.sun.midp.security.SecurityToken;import com.sun.midp.log.Logging;import com.sun.midp.log.LogChannels;/** * This is the event listener for LCDUI events. */public class LCDUIEventListener implements EventListener {// ------- Private Data Members ------- //    /** The DisplayManager object handling the display events. */    private ItemEventConsumer itemEventConsumer;    /** Cached reference to the MIDP event queue. */    private EventQueue eventQueue;// -------- Constructor --------- //    /**     * The constructor for the default event handler for LCDUI.     *     * @param  token security token that controls instance creation.     * @param theEventQueue the event queue     * @param  theItemEventConsumer handler for item events     */    public LCDUIEventListener(        SecurityToken token,        EventQueue theEventQueue,        ItemEventConsumer theItemEventConsumer) {                    token.checkIfPermissionAllowed(Permissions.MIDP);                eventQueue = theEventQueue;        itemEventConsumer = theItemEventConsumer;        /*         * All events handled by this object are of [ackage private          * LCDUIEvent class, so only this object knows how to          * decode their fields.          */        eventQueue.registerEventListener(EventTypes.SCREEN_CHANGE_EVENT, this);        eventQueue.registerEventListener(EventTypes.SCREEN_REPAINT_EVENT, this);        eventQueue.registerEventListener(EventTypes.INVALIDATE_EVENT, this);        eventQueue.registerEventListener(EventTypes.ITEM_EVENT, this);        eventQueue.registerEventListener(EventTypes.CALL_SERIALLY_EVENT, this);    }// ------- Public Methods -------- //    /**     * Preprocess an event that is being posted to the event queue.     *      * @param newEvent event being posted     *     * @param waitingEvent previous event of this type waiting in the     *     queue to be processed     *      * @return true to allow the post to continue, false to not post the     *     event to the queue     */    public boolean preprocess(Event newEvent, Event waitingEvent) {        switch (newEvent.getType()) {        case EventTypes.INVALIDATE_EVENT:        case EventTypes.CALL_SERIALLY_EVENT:            return preprocessAllowOnlyOneEvent(newEvent, waitingEvent);        case EventTypes.SCREEN_CHANGE_EVENT:            return preprocessScreenChangeEvent                        (newEvent, waitingEvent);        // case EventTypes.ITEM_EVENT:         default:            return true;        }    }    /**     * Process an event.     *     * @param event event to process     */    public void process(Event event) {        LCDUIEvent lcduiEvent = (LCDUIEvent)event;                switch (event.getType()) {        case EventTypes.SCREEN_CHANGE_EVENT:            /*             * Target DisplayEventConsumer is obtained directly              * from event field.             * Assumed that target consumer is not null.             */            lcduiEvent.display.handleScreenChangeEvent(lcduiEvent.nextScreen);            return;        case EventTypes.SCREEN_REPAINT_EVENT:            /*             * Target DisplayEventConsumer is obtained directly             * from event field.             * Assumed that target consumer is not null.             */            lcduiEvent.display.handleScreenRepaintEvent();            return;        case EventTypes.INVALIDATE_EVENT:            /*             * Target DisplayEventConsumer is obtained directly              * from event field.             * Assumed that target consumer is not null.             */            lcduiEvent.display.handleInvalidateEvent();            return;        case EventTypes.ITEM_EVENT:            /*             * Item Events are processed by ItemEventConsumer.             */            itemEvent(lcduiEvent);            return;                    case EventTypes.CALL_SERIALLY_EVENT:            /*             * Target DisplayEventConsumer is obtained directly              * from event field.             * Assumed that target consumer is not null.             */            lcduiEvent.display.handleCallSeriallyEvent();            return;                    default:            if (Logging.REPORT_LEVEL <= Logging.WARNING) {                Logging.report(Logging.WARNING, LogChannels.LC_CORE,                               "unknown system event (" +                               event.getType() + ")");            }        }    }// ------- Private Event Handling Routines -------- //    /**     * Preprocess an event to only allow one in the queue     * at once.     *     * @param genericEvent1 LCDUI event     * @param genericEvent2 waiting LCDUI event     *     * @return true if the event should be put in the queue, false if     * the event should not be put in the queue because it has been merged     * with the event currently waiting in the queue.     */    private boolean preprocessAllowOnlyOneEvent(        Event genericEvent1,         Event genericEvent2) {        if (genericEvent2 == null) {            // There is no other event, queue this event            return true;        }        return false;    }    /**     * Preprocess a screen change event to only allow one with the same     * screen in the queue at once.     *     * @param genericEvent1 LCDUI event     * @param genericEvent2 waiting LCDUI event     *     * @return true if the event should be put in the queue, false if     * the event should not be put in the queue because it is duplicate     * of the event currently waiting in the queue.     */    private boolean preprocessScreenChangeEvent(Event genericEvent1,            Event genericEvent2) {        LCDUIEvent newEvent;        LCDUIEvent waitingEvent;        if (genericEvent2 == null) {            // There is no other event, queue this event            return true;        }        newEvent = (LCDUIEvent)genericEvent1;        waitingEvent = (LCDUIEvent)genericEvent2;        if (newEvent.nextScreen != waitingEvent.nextScreen) {             // The events are different, queue this event             return true;        }        // The events are the same event , do not queue this event        return false;    }    /**     * Processes event of ITEM_EVENT class     *     * @param lcduiEvent LCDUI event to be processed     */    private void itemEvent(LCDUIEvent lcduiEvent) {        switch (lcduiEvent.minorCode) {        case LCDUIEvent.ITEM_STATE_CHANGED:            itemEventConsumer.handleItemStateChangeEvent(                lcduiEvent.changedItem);            break;        case LCDUIEvent.ITEM_SIZE_REFRESH:            itemEventConsumer.handleItemSizeRefreshEvent(                (CustomItem)lcduiEvent.changedItem);            break;        default:            if (Logging.REPORT_LEVEL <= Logging.WARNING) {                Logging.report(Logging.WARNING, LogChannels.LC_CORE,                               "ITEM_EVENT invalid minor code (" +                               lcduiEvent.minorCode + ")");            }            break;        }        return;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?