www.pudn.com > Bluegammon蓝牙的应用编程.rar > MenuPage.java
// Copyright (c) 2005 Sony Ericsson Mobile Communications AB // // This software is provided "AS IS," without a warranty of any kind. // ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, // INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A // PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. // // THIS SOFTWARE IS COMPLEMENTARY OF JAYWAY AB (www.jayway.se) package bluegammon.gui.menu; import java.util.Vector; import javax.microedition.lcdui.Image; /** * AMenuPageclass represents a title and a number of choices in aMenu. * TheMenuPage's choices are added asPageItems via the *addItemmethod. * @see bluegammon.gui.menu.Menu * @see bluegammon.gui.menu.PageItem * @author Peter Andersson */ public class MenuPage { /** Left aligned image, right aligned text */ public static final int LAYOUT_LEFT = 0; /** Right aligned image, left aligned text */ public static final int LAYOUT_RIGHT = 1; /** The title of the page */ protected char[] m_title; /** The title image of the page */ protected Image m_titleImage; /** The alignment of title and image */ protected int m_layout = LAYOUT_LEFT; /** The page items */ protected Vector m_items = new Vector(); /** Current selected item index */ protected int m_currentIndex = -1; /** * Creates a new page for a menu. * @param title The title of the page or null. * @param titleImage The image of the page or null. */ public MenuPage(char[] title, Image titleImage) { setTitle(title); setTitleImage(titleImage); } /** * Sets the layout of the image, * any of LAYOUT_LEFT, LAYOUT_RIGHT. * @param layout Image layout. */ public void setLayout(int layout) { m_layout = layout; } /** * Returns the layout of the image, * any of LAYOUT_LEFT, LAYOUT_RIGHT. * @return Image layout. */ public int getLayout() { return m_layout; } /** * Returns the title of this page. * * @return The page title. */ public char[] getTitle() { return m_title; } /** * Sets the title of this page. * * @param title The page title. */ public void setTitle(char[] title) { m_title = title; } /** * Returns the title of this page. * * @return The page title image. */ public Image getTitleImage() { return m_titleImage; } /** * Sets the title image of this page. * * @param titleImage The page title iamge. */ public void setTitleImage(Image titleImage) { m_titleImage = titleImage; } /** * Adds an item to this page. * * @param item The item to add. */ public synchronized void addItem(PageItem item) { m_items.addElement(item); item.addedToPage(); if (m_currentIndex == -1) { m_currentIndex = 0; } } /** * Removes an item from this page. * * @param item The item to remove. */ public synchronized void removeItem(PageItem item) { m_items.removeElement(item); if (size() == 0) { m_currentIndex = -1; } } /** * Removes the item at specified index from this page. * * @param index The index of the item to remove. */ public synchronized void removeItem(int index) { m_items.removeElementAt(index); } /** * Returns number of items in this page. * * @return Number of items. */ public synchronized int size() { return m_items.size(); } /** * Returns the currently selected index in this page. In * special cases this method may return -1, for no selected * items. * * @return Selected item index. */ public synchronized int getSelectedIndex() { PageItem item = itemAt(m_currentIndex); if (item != null && !item.isEnabled()) { setSelectedIndex(m_currentIndex+1); } return m_currentIndex; } /** * Sets the currently selected index in this page. * If the index is greater than number of items in the * page, it is wrapped to the first item. If the index * is below zero, it is wrapped to the last item. * If correct index is not possible to set index * will be set to -1. This happens if there are no items, * or all items are disabled. * * @param index Index of selected item. */ public synchronized void setSelectedIndex(int index) { int size = size(); boolean dirDown = index - m_currentIndex > 0; boolean allDisabled = true; for (int i = 0; allDisabled && i < size; i++) { allDisabled = !itemAt(i).isEnabled(); } if (size == 0 || allDisabled) { index = -1; } else { boolean enabled = true; do { if (index >= size) { index = 0; } else if (index < 0) { index = size - 1; } enabled = itemAt(index).isEnabled(); if (!enabled) { if (dirDown) { index++; } else { index--; } } } while (!enabled); } m_currentIndex = index; } /** * Returns item at specified index. * * @param index The index of the idem * @return The item at specified index, or null if not found. */ public synchronized PageItem itemAt(int index) { if (index < 0 || index >= size()) { return null; } else { return (PageItem)m_items.elementAt(index); } } /** * Returns the index of specified item. It this item does * not belong to the list, -1 is returned. * * @param item The item whose index to find. * @return index of the item, or -1 if item is not part of the menu. */ public synchronized int getIndex(PageItem item) { return m_items.indexOf(item); } /** * Removes all items on this page */ public synchronized void removeAllItems() { m_items.removeAllElements(); } }