/*
 *   
 *
 * Copyright  1990-2006 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 javax.microedition.lcdui.Displayable;

/**
 * This interface provides a set of methods to handle 
 * display-related events: user input, drawing, 
 * callbacks that are assosiated with displays.
 *
 * Implementor of this I/F shall be instance specific 
 * i.e. associated with a Display object instance 
 * (ex. Display.DisplayEventConsumerImpl class).
 *
 * Therefore it is assumed that target identification 
 * (displayId -> Display/DisplayAccess/DisplayEventConsumerImpl) 
 * is done before calling I/F methods in EventListener.
 *
 */
public interface DisplayEventConsumer {
    
    /*
     * LOCAL USER INPUT EVENTS - produced by Native code
     *
     * KEY/non-IME
     * KEY/IME
     * PEN or POINTER (what name is better?)
     * CMD
     * PEER_CHANGED
     * 
     */
    
    /**
     * Called by event delivery when a key press,release or repeate event 
     * needs to be processed.
     *
     * @param keyType key press, release or repeate
     *        is one of EventConstants.PRESSED, EventConstants.RELEASED,
     *        EventConstants.REPEATED.
     * @param keyCode key code to process
     */
    public void handleKeyEvent(int keyType, int keyCode);
    
    /**
     * Called by event delivery when an input method event is processed.
     *
     * @param inputText string to process
     */
    public void handleInputMethodEvent(String inputText);

    /**
     * Called by event delivery when a pointer press,release or drag event 
     * needs to be processed.
     *
     * @param pointerType pointer press, release or drag
     *        is one of EventConstants.PRESSED, EventConstants.RELEASED,
     *        or EventConstants.DRAGGED.     
     * @param x x-coordinate of the pointer event
     * @param y y-coordinate of the pointer event
     */
    public void handlePointerEvent(int pointerType, int x, int y);

    /**
     * Called by event delivery when an abstract Command is fired.
     * The parameter is an index into the list of Commands that are
     * current, i.e. those associated with the visible Screen.
     *
     * TBD: param screenId Id of the command target (Displayable) 
     * @param cmdId command Id 
     */
    public void handleCommandEvent(/* int screenId, */ int cmdId);

    /**
     * Called by event delivery to notify an ItemLF in current DisplayableLF
     * of a change in its native peer state.
     *
     * @param modelVersion the version of the peer's data model
     * @param itemPeerId the id of the ItemLF's peer whose state has changed
     * @param hint some value that is interpreted only between the peers
     */
    public void handlePeerStateChangeEvent(
            int modelVersion, 
            int itemPeerId, 
            int hint);

    /*
     * LOCAL DISPLAY MANAGEMENT EVENTS
     *
     * REPAINT - invoked through RepaintEventListener
     * SCREEN_CHANGE
     * INVALIDATE
     */

    /**
     * Called by event delivery when a repaint should occur.
     *
     * @param x1 The origin x coordinate of the repaint region
     * @param y1 The origin y coordinate of the repaint region
     * @param x2 The bounding x coordinate of the repaint region
     * @param y2 The bounding y coordinate of the repaint region
     * @param target The optional paint target
     */
    public void handleRepaintEvent(
            int x1, int y1, 
            int x2, int y2, 
            Object target);

    /**
     * Called by event delivery when a screen change needs to occur.
     *
     * @param screen The Displayable to make current in the Display
     */
    public void handleScreenChangeEvent(Displayable screen);

    /**
     * Called by event delivery to process a Form invalidation.
     */
    public void handleInvalidateEvent();

    /*
     * LOCAL CALLBACK MANAGEMEMT EVENTS
     *
     * CALL_SERIALLLY
     */
    
    /**
     * Called by event delivery to batch process 
     * all pending serial callbacks. 
     */
    public void handleCallSeriallyEvent();
    
    
    /*
     * ITEM EVENTS - not associated with a particular Display.
     *
     * ITEM_CHANGED/STATE_CHANGE
     * ITEM_CHANGED/SIZE_REFRESH
     * ITEM_CHANGED/MAKE_VISIBLE
     *
     * Now processed by ItemEventConsumer. 
     */


     /*
      * Called by event delivery when size of screen was changed.
      */
     public void handleRotationEvent();
}
