/* * MenuModel.java * * Created on 22 Январь 2010 г., 11:03 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package jimmui.view.menu; import jimm.Jimm; import jimmui.view.icons.Icon; import java.util.Vector; import jimm.util.JLocale; /** * * @author Vladimir Krukov */ public final class MenuModel { public static final int UNDEFINED_CODE = -10000; public static final int DELIMITER_CODE = -10001; private Vector<MenuItem> items = new Vector<MenuItem>(); private SelectListener listener; private int selectedItemIndex; /** Creates a new instance of MenuModel */ public MenuModel() { } public void setActionListener(SelectListener listener) { this.listener = listener; } public final void clean() { items.removeAllElements(); selectedItemIndex = 0; } public void addRawItem(String promt, Icon icon, int itemCode) { items.addElement(new MenuItem(promt, icon, itemCode)); } public void addEllipsisItem(String promt, int itemCode) { addRawItem(JLocale.getEllipsisString(promt), null, itemCode); } public void addItem(String promt, Icon icon, int itemCode) { addRawItem(JLocale.getString(promt), icon, itemCode); } public void addItem(String promt, int itemCode) { addRawItem(JLocale.getString(promt), null, itemCode); } public final void addSeparator() { if (0 < count()) { addRawItem(null, null, DELIMITER_CODE); } } public void setRawItem(int itemCode, String promt, Icon icon) { int i = getIndexByItemCode(itemCode); if (0 <= i) { MenuItem item = itemAt(i); item.text = promt; item.icon = icon; } } public void setItem(int itemCode, String promt, Icon icon) { setRawItem(itemCode, JLocale.getString(promt), icon); } public void exec(Select menu, int itemCode) { // #sijapp cond.if modules_DEBUGLOG is "true" # if (null == listener) { jimm.modules.DebugLog.panic("select listener is null"); Jimm.getJimm().getCL().activate(); return; } // #sijapp cond.end# try { if (DELIMITER_CODE == itemCode) { menu.restore(); return; } if (0 <= getIndexByItemCode(itemCode)) { listener.select(menu, this, itemCode); } } catch (Exception e) { // #sijapp cond.if modules_DEBUGLOG is "true" # jimm.modules.DebugLog.panic("select", e); // #sijapp cond.end # if (null != menu) { menu.back(); } else { Jimm.getJimm().getCL().activate(); } } } public final String getItemText(int itemCode) { int index = getIndexByItemCode(itemCode); return (-1 == index) ? null : itemAt(index).text; } public final void setDefaultItemCode(int itemCode) { selectedItemIndex = Math.max(0, getIndexByItemCode(itemCode)); } int getDefaultItemIndex() { return selectedItemIndex; } MenuItem itemAt(int i) { return (MenuItem)items.elementAt(i); } public int count() { return items.size(); } int getItemCodeByIndex(int index) { return ((0 <= index) && (index < count())) ? itemAt(index).code : MenuModel.UNDEFINED_CODE; } int getIndexByItemCode(int itemCode) { final int size = count(); for (int i = 0; i < size; ++i) { if (itemAt(i).code == itemCode) { return i; } } return -1; } } final class MenuItem { public String text; public Icon icon; public int code; public MenuItem(String itemText, Icon itemIcon, int itemCode) { text = itemText; icon = itemIcon; code = itemCode; } }