/* * StatusView.java * * Created on 12 Август 2010 г., 21:26 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package protocol.ui; import jimm.cl.SysTextList; import jimm.comm.StringUtils; import jimmui.view.text.TextListModel; import jimmui.view.icons.Icon; import jimmui.view.text.Parser; import jimm.Jimm; import jimm.comm.Util; import jimmui.view.base.CanvasEx; import jimmui.view.menu.*; import jimmui.view.text.TextList; import jimmui.view.text.TextListController; import protocol.Contact; import protocol.Protocol; import protocol.icq.*; import protocol.xmpp.*; /** * * @author Vladimir Kryukov */ public final class StatusView extends TextListController { public static final int INFO_MENU_COPY = 1; public static final int INFO_MENU_COPY_ALL = 2; public static final int INFO_MENU_GOTO_URL = 4; public static final int INFO_MENU_GET_X = 5; private Protocol protocol; private Contact contact; // #sijapp cond.if modules_CLIENTS is "true" # private String clientVersion; // #sijapp cond.end # private TextListModel model = new TextListModel(); /** Creates a new instance of StatusView */ public StatusView() { list = new TextList(null); list.setModel(model); setDefaultCode(INFO_MENU_COPY); } protected void doJimmAction(int action) { doJimmBaseAction(action); switch (action) { case INFO_MENU_COPY: case INFO_MENU_COPY_ALL: list.getTextContent().getController().copy(INFO_MENU_COPY_ALL == action); list.restore(); break; case INFO_MENU_GOTO_URL: SysTextList.gotoURL(model.getParText(list.getTextContent().getCurrItem())); break; // #sijapp cond.if protocols_ICQ is "true" # // #sijapp cond.if modules_XSTATUSES is "true" # case INFO_MENU_GET_X: ((Icq)protocol).requestXStatusMessage(contact); list.restore(); break; // #sijapp cond.end # // #sijapp cond.end # } } // #sijapp cond.if modules_CLIENTS is "true" # public void addClient() { addBr(); ClientInfo info = InfoFactory.factory.getClientInfo(protocol); if ((ClientInfo.CLI_NONE != contact.clientIndex) && (null != info)) { addPlain(info.getIcon(contact.clientIndex), (info.getName(contact.clientIndex) + " " + contact.version).trim()); } addPlain(null, clientVersion); } public void setClientVersion(String version) { clientVersion = version; } // #sijapp cond.end # public void addTime() { if (!contact.isSingleUserContact()) { return; } // #sijapp cond.if protocols_JABBER is "true" # if (contact instanceof XmppServiceContact) { return; } // #sijapp cond.end # long signonTime = contact.chaingingStatusTime; if (0 < signonTime) { long now = Jimm.getCurrentGmtTime(); boolean today = (now - 24 * 60 * 60) < signonTime; if (contact.isOnline()) { addInfo("li_signon_time", Util.getLocalDateString(signonTime, today)); addInfo("li_online_time", Util.longitudeToString(now - signonTime)); } else { addInfo("li_signoff_time", Util.getLocalDateString(signonTime, today)); } } } ///////////////////// public void addBr() { Parser line = model.createNewParser(false); line.addText(" \n", CanvasEx.THEME_TEXT, CanvasEx.FONT_STYLE_PLAIN); model.addPar(line); } public void addPlain(Icon img, String str) { if (!StringUtils.isEmpty(str)) { Parser line = model.createNewParser(true); if (null != img) { line.addImage(img); } line.addText(str, CanvasEx.THEME_TEXT, CanvasEx.FONT_STYLE_PLAIN); model.addPar(line); } } public void addStatusText(String text) { if (!StringUtils.isEmpty(text)) { Parser line = model.createNewParser(true); line.addText(text, CanvasEx.THEME_PARAM_VALUE, CanvasEx.FONT_STYLE_PLAIN); model.addPar(line); } } public void addInfo(String key, String value) { model.addParam(key, value); } ///////////////////// public void addContactStatus() { byte status = contact.getStatusIndex(); StatusInfo info = InfoFactory.factory.getStatusInfo(protocol); addStatus(info.getIcon(status), info.getName(status)); } // #sijapp cond.if modules_XSTATUSES is "true" # public void addXStatus() { XStatusInfo info = InfoFactory.factory.getXStatusInfo(protocol); int x = contact.getXStatusIndex(); addStatus(info.getIcon(x), info.getName(x)); } // #sijapp cond.end # public void addStatus(Icon icon, String name) { addPlain(icon, name); } protected MenuModel getMenu() { MenuModel menu = new MenuModel(); menu.addItem("copy_text", INFO_MENU_COPY); menu.addItem("copy_all_text", INFO_MENU_COPY_ALL); if ((1 < list.getTextContent().getCurrItem()) && Util.hasURL(model.getParText(list.getTextContent().getCurrItem()))) { menu.addItem("goto_url", INFO_MENU_GOTO_URL); } // #sijapp cond.if protocols_ICQ is "true" # // #sijapp cond.if modules_XSTATUSES is "true" # if ((XStatusInfo.XSTATUS_NONE != contact.getXStatusIndex()) && (protocol instanceof Icq)) { menu.addItem("reqxstatmsg", INFO_MENU_GET_X); } // #sijapp cond.end # // #sijapp cond.end # menu.setActionListener(this); return menu; } public void init(Protocol p, Contact c) { contact = c; protocol = p; // #sijapp cond.if modules_CLIENTS is "true" # clientVersion = null; // #sijapp cond.end # list.getTextContent().setAllToTop(); } public void initUI() { list.lock(); model.clear(); model.updateFontSet(); list.setCaption(contact.getName()); addInfo(protocol.getUserIdName(), contact.getUserId()); } public Contact getContact() { return contact; } public void update() { list.updateModel(); } public void showIt() { list.setController(this); list.getTextContent().setAllToTop(); list.unlock(); list.show(); } }