/* * cognet chat app * * Copyright 2003, Brian Swetland * See LICENSE for redistribution terms * */ package org.twodot.cognet; import danger.app.Application; import danger.app.Timer; import danger.ui.Menu; import danger.ui.MenuItem; import danger.ui.Bitmap; import danger.app.Event; import danger.app.EventType; import danger.app.SettingsDB; import danger.ui.NotificationManager; import danger.util.DEBUG; public class Cognet extends Application implements Resources { public Cognet() { timer = new Timer(300*1000); // 5 minutes; bm_plain = getBitmap(kBlank); bm_mail = getBitmap(kMarker); bm_tag = getBitmap(kTag); bm_notify = getBitmap(kPending); try { NotificationManager.registerPendingIcon("cognet", getBitmap(kPending), getBitmap(kPending)); } catch (Throwable t){ System.out.println(t.getMessage()); } cogSettings = new SettingsDB("prefs"); DEBUG.p("cognet: setReceiveConnectivityEvents(true"); setReceiveConnectivityEvents(true); } void Notify() { synchronized (this) { //System.err.println("cognet: notify"); if(!fgapp&&doActivity) NotificationManager.setPendingIconVisible("cognet", true); } } public void resume() { timer.stop(); if(engine == null) { engine = new Engine(this); } synchronized (this) { fgapp = true; System.err.println("cognet: no notify"); NotificationManager.setPendingIconVisible("cognet", false); engine.sendResume(); } } public void quit() { try { synchronized (this) { fgapp = true; System.err.println("cognet: no notify"); NotificationManager.setPendingIconVisible("cognet", false); } engine.logout(); } catch (Throwable t){ } unload(); } public void suspend() { synchronized (this) { fgapp = false; timer.start(); } } public void MakeMenu(Menu a, ChatWindow w) { MenuItem mi; a.removeAllItems(); engine.AddWindows(a); a.addDivider(); if( w != null ) { Menu links; links = w.links.makeLinkMenu(kURL); if( links != null ) { mi = a.addItem("Links"); mi.addSubMenu(links); } menuWindow = w; } Menu options = new Menu("Options"); mi = options.addItem("Icons and Smileys",kSmileys); mi.setChecked(doSmileys); mi = options.addItem("Activity Indicator",kActivity); mi.setChecked(doActivity); mi = options.addItem("Marquee", kMarquee); mi.setChecked(doMarquee); mi = options.addItem("Auto-Reconnect",kAutoConnect); mi.setChecked(doAutoConnect); mi = a.addItem("Options"); mi.addSubMenu(options); if(w != null){ mi = a.addItem("Close Tab",kCloseWindow,0,w.key,this); mi.setShortcut('.'); } if(engine.state == Engine.ONLINE){ a.addItem("Disconnect",kDisconnect); } else { a.addItem("Connect",kConnect); } } public boolean receiveEvent(Event e) { if( (e.type >= kURL) && (e.type <= kURLend) ) { menuWindow.links.dispatchLink(e.type,kURL); return true; } switch(e.type){ case EventType.EVENT_ENTERING_KEY_GUARD: timer.start(); return true; case EventType.EVENT_TIMER: engine.sendSuspend(); timer.stop(); return true; case kGotoLogin: engine.login.show(); return true; case kGotoWindow: engine.Select((String)e.argument,false); return true; case kCloseWindow: engine.Close((String)e.argument); return true; case Event.EVENT_CONNECTION_UP: engine.login.SendEvent(5040); return true; case kConnect: engine.login(); return true; case kDisconnect: engine.logout(); return true; case kSmileys: doSmileys = !doSmileys; savePrefs(); return true; case kActivity: doActivity = !doActivity; savePrefs(); return true; case kMarquee: doMarquee = !doMarquee; savePrefs(); return true; case kAutoConnect: doAutoConnect = !doAutoConnect; savePrefs(); return true; default: return super.receiveEvent(e); } } public void savePrefs() { cogSettings.setIntValue("doSmileys",doSmileys ? 1 : 0); cogSettings.setIntValue("doActivity",doActivity ? 1 : 0); cogSettings.setIntValue("doMarquee",doMarquee ? 1 : 0); cogSettings.setIntValue("doAutoConnect",doAutoConnect ? 1 : 0); } static final int kGotoLogin = 1; static final int kGotoWindow = 2; static final int kCloseWindow = 3; static final int kDisconnect = 4; static final int kConnect = 5; static final int kPrefs = 6; static final int kLinks = 7; static final int kSmileys = 8; static final int kActivity = 9; static final int kMarquee = 10; static final int kAutoConnect = 11; static final int kURL = 100; static final int kURLend = kURL + LinkMenu.maxLinkTargets; ChatWindow menuWindow; Engine engine; Timer timer; Bitmap bm_plain; Bitmap bm_mail; Bitmap bm_tag; Bitmap bm_notify; SettingsDB cogSettings; boolean fgapp; boolean doActivity; boolean doMarquee; boolean doSmileys; boolean doAutoConnect; }