home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / awt / focusmanager.java < prev    next >
Text File  |  1995-08-11  |  4KB  |  130 lines

  1. /*
  2.  * @(#)FocusManager.java    1.6 95/01/31 David Brown
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. package awt;
  21.  
  22. import java.util.*;
  23.  
  24. /**
  25.  * A class that distributes the focus to a set of focus clients.
  26.  * In order to be able to call grabFocus, a DisplayItem should
  27.  * register with the FocusManager using the addItem method.
  28.  *
  29.  * @see DisplayItem
  30.  * @see FocusManager#addItem
  31.  * @see FocusManager#grabFocus
  32.  * @version 1.6 31 Jan 1995
  33.  * @author David Brown
  34.  */
  35. public class FocusManager {
  36.  
  37.     public DisplayItemWindow diw;
  38.  
  39.     Vector itemlist = new Vector();
  40.     int current_index = 0;
  41.  
  42.     DisplayItem oldFocusItem = null;    // See notifyFocusItems()
  43.  
  44.     public FocusManager (DisplayItemWindow theDiw) {
  45.     diw = theDiw;
  46.     }
  47.  
  48.     /** Add a DisplayItem to our list.  This should be an item
  49.      *  that's interested in getting keyboard events, and should
  50.      *  do something useful with got/lostFocus() events... */
  51.     public void addItem(DisplayItem item) {
  52.     itemlist.addElement(item);
  53.  
  54.     // If this is the very first guy being added to the list,
  55.     // give him the focus.  Otherwise, don't affect the focus at all.
  56.     if (itemlist.size() == 1) {
  57.         current_index = 0;
  58.         notifyFocusItems();
  59.     }
  60.         //System.out.println("FocusManager.addItem:  itemlist.size() now "+itemlist.size());
  61.     }
  62.  
  63.     /** An item sends us this message to ask for the focus */
  64.     public void grabFocus(DisplayItem item) {
  65.     //System.out.println("FocusManager.grabFocus:  ");
  66.     //System.out.println("  this FM is "+this);
  67.     //System.out.println("  item is "+item);
  68.     //System.out.println("  itemlist.size() is "+itemlist.size() );
  69.  
  70.     if (item != oldFocusItem) {
  71.         int found = itemlist.indexOf(item);
  72.         if (found == -1) {
  73.         throw new Exception("grabFocus: item not in itemlist");
  74.         }
  75.         current_index = found;
  76.         notifyFocusItems();
  77.     }
  78.     }
  79.  
  80.     /** Advance the focus to the next item in the list */
  81.     public void nextFocus() {
  82.     if (++current_index >= itemlist.size())
  83.         current_index = 0;
  84.     notifyFocusItems();
  85.     }
  86.  
  87.     /** Back-up the focus to the previous item in the list */
  88.     public void prevFocus() {
  89.     if (--current_index < 0)
  90.         current_index = itemlist.size() - 1;
  91.     if (current_index < 0)
  92.         current_index = 0;
  93.     notifyFocusItems();
  94.     }
  95.  
  96.     /** Reset the focus to the first item in the list */
  97.     public void resetFocus() {
  98.     current_index = 0;
  99.     notifyFocusItems();
  100.     }
  101.  
  102.     /** Return the item which currently has the input focus,
  103.      *  or 0 if there is no item with the input focus. */
  104.     public DisplayItem currentFocusItem() {
  105.     if (itemlist.size() > 0)
  106.         return (DisplayItem) itemlist.elementAt(current_index);
  107.     else
  108.         return (DisplayItem) null;
  109.     }
  110.  
  111.     /** Notify the items that just lost and got the focus.
  112.         This MUST be called any time current_index changes! */
  113.     private void notifyFocusItems() {
  114.     // System.out.println("FocusManager.notifyFocusItems: current_index "+current_index);
  115.  
  116.     if (itemlist.size() > 0) {
  117.         DisplayItem newFocusItem =
  118.         (DisplayItem) itemlist.elementAt(current_index);
  119.         if (newFocusItem != oldFocusItem) {
  120.         if (oldFocusItem != null)
  121.             oldFocusItem.lostFocus();
  122.         if (newFocusItem != null)
  123.             newFocusItem.gotFocus();
  124.         oldFocusItem = newFocusItem;
  125.         }
  126.     }
  127.     }
  128.  
  129. }
  130.