home *** CD-ROM | disk | FTP | other *** search
Wrap
package netscape.application; import java.applet.Applet; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Insets; import netscape.util.Enumeration; import netscape.util.Hashtable; import netscape.util.InconsistencyException; import netscape.util.Vector; public class FoundationApplet extends Applet implements Runnable { static Hashtable groupToApplet = new Hashtable(1); Application application; FoundationPanel panel; boolean startedRun; boolean appletStarted; private static Vector applicationStack; static void setAppletForGroup(FoundationApplet var0) { groupToApplet.put(Thread.currentThread().getThreadGroup(), var0); } static FoundationApplet applet() { ThreadGroup var0 = Thread.currentThread().getThreadGroup(); return (FoundationApplet)groupToApplet.get(var0); } public void setApplication(Application var1) { this.application = var1; } public Application application() { return this.application; } public void init() { Thread var1 = new Thread(this, "Main Application Thread"); super.init(); setAppletForGroup(this); var1.start(); synchronized(this){} try { while(!this.startedRun) { try { this.wait(); } catch (InterruptedException var5) { } } } catch (Throwable var6) { throw var6; } } public void run() { String var1 = ((Applet)this).getParameter("ApplicationClass"); if (var1 != null && !var1.equals("")) { Object var2 = this.instantiateObjectOfClass(var1); if (var2 instanceof Application) { this.application = (Application)var2; synchronized(this){} try { this.startedRun = true; this.notifyAll(); while(!this.appletStarted) { try { this.wait(); } catch (InterruptedException var5) { } } } catch (Throwable var6) { throw var6; } this.application.run(); } else { throw new InconsistencyException("ApplicationClass " + var1 + " must be a subclass of netscape.application.Application"); } } else { throw new InconsistencyException("An ApplicationClass parameter must be specified in the <applet> tag. For example:\n<applet code=\"netscape.application.FoundationApplet\" width=320 height=200>\n <param name=\"ApplicationClass\" value=\"MyApplication\">\n</applet>\n"); } } public void start() { synchronized(this){} try { ApplicationEvent var3 = new ApplicationEvent(); if (!this.appletStarted) { this.appletStarted = true; this.notifyAll(); } var3.type = -27; var3.processor = this.application; this.application.eventLoop.addEvent(var3); } catch (Throwable var5) { throw var5; } } public void stop() { ApplicationEvent var1 = new ApplicationEvent(); var1.type = -26; var1.processor = this.application; this.application.eventLoop.addEvent(var1); } public void destroy() { this.application.stopRunningForAWT(); super.destroy(); } void destroyFromIFC() { super.destroy(); } void cleanup() { Enumeration var1 = groupToApplet.keys(); removeApplication(this.application); while(var1.hasMoreElements()) { ThreadGroup var3 = (ThreadGroup)var1.nextElement(); FoundationApplet var2 = (FoundationApplet)groupToApplet.get(var3); if (var2 == this) { groupToApplet.remove(var3); break; } } this.application = null; } void setupCanvas(Application var1) { this.application = var1; int var2 = ((Component)this).size().width; int var3 = ((Component)this).size().height; this.panel = this.createPanel(); this.application.setMainRootView(this.panel.rootView()); this.panel.reshape(0, 0, var2, var3); ((Container)this).add(this.panel); } public void layout() { if (this.panel != null) { Dimension var1 = ((Component)this).size(); Insets var2 = ((Container)this).insets(); int var3 = var2.left; int var4 = var2.top; int var5 = var1.width - (var2.left + var2.right); int var6 = var1.height - (var2.top + var2.bottom); if (var5 > 0 && var6 > 0) { this.panel.reshape(var3, var4, var5, var6); } } } Object instantiateObjectOfClass(String var1) { try { Class var2 = this.classForName(var1); Object var3 = var2.newInstance(); return var3; } catch (ClassNotFoundException var5) { throw new InconsistencyException("Unable to find class \"" + var1 + "\""); } catch (InstantiationException var6) { throw new InconsistencyException("Unable to instantiate class \"" + var1 + "\" -- " + ((Throwable)var6).getMessage()); } catch (IllegalAccessException var7) { throw new InconsistencyException("Unable to instantiate class \"" + var1 + "\" -- " + ((Throwable)var7).getMessage()); } } public Class classForName(String var1) throws ClassNotFoundException { return Class.forName(var1); } public void paint(Graphics var1) { super.paint(var1); } protected FoundationPanel createPanel() { return new FoundationPanel(); } public FoundationPanel panel() { return this.panel; } static boolean isMozillaThread(Thread var0) { return true; } public Application pushIFCContext() { if (this.application == null) { return null; } else if (!isMozillaThread(Thread.currentThread())) { throw new InconsistencyException("pushIFCContext() must be called from JavaScript."); } else { if (applicationStack == null) { applicationStack = new Vector(); } applicationStack.addElement(this.application); return this.application; } } public void popIFCContext() { if (!isMozillaThread(Thread.currentThread())) { throw new InconsistencyException("popIFCContext() must be called from JavaScript."); } else if (applicationStack == null) { throw new InconsistencyException("popIFCContext() called without ever calling pushIFCContext()"); } else if (applicationStack.lastElement() != this.application) { throw new InconsistencyException("popIFCContext() attempted to pop " + applicationStack.lastElement() + " which was not itself:" + this.application); } else if (applicationStack.removeLastElement() == null) { throw new InconsistencyException("extraneous popIFCContext() called without corresponding pushIFCContext()"); } } static Application currentApplication() { return applicationStack == null ? null : (Application)applicationStack.lastElement(); } static void removeApplication(Application var0) { if (applicationStack != null) { if (var0 != null) { applicationStack.removeAll(var0); } } } }