package jimm.cl; import jimmui.view.UIBuilder; import jimmui.view.form.Menu; import jimmui.view.icons.Icon; import jimm.Jimm; import jimm.Options; import jimm.OptionsForm; import jimm.forms.*; import jimm.modules.*; import jimmui.view.menu.MenuModel; import jimmui.view.menu.Select; import jimmui.view.menu.SelectListener; import protocol.Protocol; import protocol.ui.StatusInfo; import protocol.icq.*; import protocol.xmpp.*; import protocol.mrim.*; import protocol.ui.InfoFactory; /** * Created with IntelliJ IDEA. * <p/> * Date: 30.03.13 15:21 * * @author vladimir */ public class ProtocolMenu implements SelectListener { /* Static constants for menu actios */ private static final int MENU_DISCONNECT = 2; private static final int MENU_DISCO = 3; private static final int MENU_OPTIONS = 4; private static final int MENU_KEYLOCK = 5; private static final int MENU_GLOBAL_STATUS = 6; private static final int MENU_ACCOUNTS = 7; public static final int MENU_STATUS = 8; private static final int MENU_XSTATUS = 9; private static final int MENU_PRIVATE_STATUS = 10; private static final int MENU_GROUPS = 11; private static final int MENU_SEND_SMS = 12; private static final int MENU_ABOUT = 13; private static final int MENU_SOUND = 14; private static final int MENU_MYSELF = 15; private static final int MENU_MICROBLOG = 19; private static final int MENU_NON = 20; private static final int MENU_EXIT = 21; private static final int MENU_FIRST_ACCOUNT = 100; private Protocol activeProtocol; private boolean isMain; private final MenuModel menu = new MenuModel(); private final Menu menuView; public ProtocolMenu(Protocol p, boolean main) { activeProtocol = p; menuView = (Select) UIBuilder.createMenu(menu); this.isMain = main; } public void updateMenu() { int currentCommand = menuView.getSelectedItemCode(); if (isMain) { updateMainMenu(); } else { menu.clean(); protocolMenu(); } menu.setDefaultItemCode(currentCommand); menuView.update(); } private MenuModel updateMainMenu() { Protocol p = activeProtocol; menu.clean(); // #sijapp cond.if modules_ANDROID isnot "true" # menu.addItem("keylock_enable", MENU_KEYLOCK); // #sijapp cond.end # if (null == p) { menu.addItem("set_status", GlobalStatusForm.getGlobalStatusIcon(), MENU_GLOBAL_STATUS); menu.addItem("accounts", null, MENU_ACCOUNTS); } else if (0 < Jimm.getJimm().getCL().getManager().getModel().getProtocolCount()) { protocolMenu(); } if (isSmsSupported()) { menu.addItem("send_sms", MENU_SEND_SMS); } menu.addItem("options_lng", MENU_OPTIONS); // #sijapp cond.if modules_SOUND is "true" # boolean isSilent = Options.getBoolean(Options.OPTION_SILENT_MODE); menu.addItem(isSilent ? "#sound_on" : "#sound_off", MENU_SOUND); // #sijapp cond.end# menu.addItem("about", MENU_ABOUT); menu.addItem("exit", MENU_EXIT); return menu; } private void showAccounts() { MenuModel m = new MenuModel(); m.setActionListener(this); int count = Jimm.getJimm().getCL().getManager().getModel().getProtocolCount(); for (int i = 0; i < count; ++i) { Protocol p = Jimm.getJimm().getCL().getManager().getModel().getProtocol(i); m.addRawItem(p.getUserId(), InfoFactory.factory.getStatusInfo(p).getIcon(p.getProfile().statusIndex), MENU_FIRST_ACCOUNT + i); } Jimm.getJimm().getCL().getManager().showMenu(m); } private void protocolMenu() { Protocol protocol = activeProtocol; int id = protocol.isConnected() && protocol.hasVCardEditor() ? MENU_MYSELF : MENU_NON; menu.addRawItem(protocol.getUserId(), null, id); if (protocol.isConnecting()) { menu.addItem("disconnect", MENU_DISCONNECT); return; } /* if (protocol.isConnected()) { menu.addItem("disconnect", MENU_DISCONNECT); } else { menu.addItem("connect", MENU_CONNECT); } */ menu.addItem("set_status", InfoFactory.factory.getStatusInfo(protocol).getIcon(protocol.getProfile().statusIndex), MENU_STATUS); // #sijapp cond.if modules_XSTATUSES is "true" # if (hasXStatus(protocol)) { Icon icon = InfoFactory.factory.getXStatusInfo(protocol).getIcon(protocol.getProfile().xstatusIndex); menu.addItem("set_xstatus", icon, MENU_XSTATUS); } // #sijapp cond.end # // #sijapp cond.if protocols_ICQ is "true" # if (protocol instanceof Icq) { // #sijapp cond.if modules_SERVERLISTS is "true" # menu.addItem("private_status", PrivateStatusForm.getIcon(protocol), MENU_PRIVATE_STATUS); // #sijapp cond.end # } // #sijapp cond.end # if (protocol.isConnected()) { // #sijapp cond.if protocols_JABBER is "true" # if (protocol instanceof Xmpp) { if (((Xmpp)protocol).hasS2S()) { menu.addItem("service_discovery", MENU_DISCO); } } // #sijapp cond.end # menu.addItem("manage_contact_list", MENU_GROUPS); if (protocol.hasVCardEditor()) { menu.addItem("myself", MENU_MYSELF); } // #sijapp cond.if protocols_MRIM is "true" # // #sijapp cond.if modules_MAGIC_EYE is "true" # if (protocol instanceof Mrim) { menu.addItem("microblog", ((Mrim) protocol).getMicroBlog().getIcon(), MENU_MICROBLOG); } // #sijapp cond.end # // #sijapp cond.end # } } // #sijapp cond.if modules_XSTATUSES is "true" # private boolean hasXStatus(Protocol protocol) { return null != InfoFactory.factory.getXStatusInfo(protocol) && 0 < InfoFactory.factory.getXStatusInfo(protocol).getXStatusCount(); } // #sijapp cond.end # private boolean isSmsSupported() { // #sijapp cond.if protocols_MRIM is "true" # int count = Jimm.getJimm().getCL().getManager().getModel().getProtocolCount(); for (int i = 0; i < count; ++i) { Protocol p = Jimm.getJimm().getCL().getManager().getModel().getProtocol(i); if ((p instanceof Mrim) && p.isConnected()) { return true; } } // #sijapp cond.end # // #sijapp cond.if target is "MIDP2" # // #sijapp cond.if modules_FILES="true"# if (!Jimm.getJimm().phone.isCollapsible()) { return true; } // #sijapp cond.end # // #sijapp cond.end # return false; } private void execCommand(int cmd) { if (MENU_FIRST_ACCOUNT <= cmd) { Protocol p = Jimm.getJimm().getCL().getManager().getModel().getProtocol(cmd - MENU_FIRST_ACCOUNT); MenuModel model = Jimm.getJimm().getCL().getContextMenu(p, null); Jimm.getJimm().getCL().getManager().showMenu(model); return; } final Protocol proto = activeProtocol; switch (cmd) { case MENU_DISCONNECT: proto.setStatus(StatusInfo.STATUS_OFFLINE, ""); Thread.yield(); Jimm.getJimm().getCL().activate(); break; case MENU_KEYLOCK: Jimm.getJimm().lockJimm(); break; case MENU_GLOBAL_STATUS: new GlobalStatusForm().show(); break; case MENU_ACCOUNTS: showAccounts(); break; case MENU_STATUS: new SomeStatusForm(proto).show(); break; // #sijapp cond.if modules_XSTATUSES is "true" # case MENU_XSTATUS: new SomeXStatusForm(proto).show(); break; // #sijapp cond.end # // #sijapp cond.if protocols_ICQ is "true" # // #sijapp cond.if modules_SERVERLISTS is "true" # case MENU_PRIVATE_STATUS: new PrivateStatusForm(proto).show(); break; // #sijapp cond.end # // #sijapp cond.end # // #sijapp cond.if protocols_JABBER is "true" # case MENU_DISCO: ((Xmpp)proto).getServiceDiscovery().showIt(); break; // #sijapp cond.end # // #sijapp cond.if protocols_MRIM is "true" # // #sijapp cond.if modules_MAGIC_EYE is "true" # case MENU_MICROBLOG: ((Mrim)proto).getMicroBlog().activate(); updateMenu(); menuView.update(); break; // #sijapp cond.end # // #sijapp cond.end # case MENU_OPTIONS: new OptionsForm().show(); break; case MENU_ABOUT: new SysTextList().makeAbout().show(); break; case MENU_GROUPS: new ManageContactListForm(proto).show(); break; // #sijapp cond.if modules_SOUND is "true" # case MENU_SOUND: Notify.getSound().changeSoundMode(false); updateMenu(); menuView.update(); break; // #sijapp cond.end# case MENU_MYSELF: proto.showUserInfo(proto.createTempContact(proto.getUserId(), proto.getNick())); break; case MENU_SEND_SMS: new SmsForm(null, null).show(); break; case MENU_EXIT: Jimm.getJimm().quit(); break; } } public void select(Select select, MenuModel model, int cmd) { execCommand(cmd); } public void setDefaultItemCode(int item) { menu.setDefaultItemCode(item); } public Menu getView() { menu.setActionListener(this); return menuView; } public MenuModel getModel() { menu.setActionListener(this); return menu; } public void setProtocol(Protocol p) { activeProtocol = p; } }