home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / CFJava.cab / CFJavaRuntime.cab / netscape / application / FoundationApplet.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-10-01  |  6.8 KB  |  238 lines

  1. package netscape.application;
  2.  
  3. import java.applet.Applet;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Graphics;
  8. import java.awt.Insets;
  9. import netscape.util.Enumeration;
  10. import netscape.util.Hashtable;
  11. import netscape.util.InconsistencyException;
  12. import netscape.util.Vector;
  13.  
  14. public class FoundationApplet extends Applet implements Runnable {
  15.    static Hashtable groupToApplet = new Hashtable(1);
  16.    Application application;
  17.    FoundationPanel panel;
  18.    boolean startedRun;
  19.    boolean appletStarted;
  20.    private static Vector applicationStack;
  21.  
  22.    static void setAppletForGroup(FoundationApplet var0) {
  23.       groupToApplet.put(Thread.currentThread().getThreadGroup(), var0);
  24.    }
  25.  
  26.    static FoundationApplet applet() {
  27.       ThreadGroup var0 = Thread.currentThread().getThreadGroup();
  28.       return (FoundationApplet)groupToApplet.get(var0);
  29.    }
  30.  
  31.    public void setApplication(Application var1) {
  32.       this.application = var1;
  33.    }
  34.  
  35.    public Application application() {
  36.       return this.application;
  37.    }
  38.  
  39.    public void init() {
  40.       Thread var1 = new Thread(this, "Main Application Thread");
  41.       super.init();
  42.       setAppletForGroup(this);
  43.       var1.start();
  44.       synchronized(this){}
  45.  
  46.       try {
  47.          while(!this.startedRun) {
  48.             try {
  49.                this.wait();
  50.             } catch (InterruptedException var5) {
  51.             }
  52.          }
  53.       } catch (Throwable var6) {
  54.          throw var6;
  55.       }
  56.  
  57.    }
  58.  
  59.    public void run() {
  60.       String var1 = ((Applet)this).getParameter("ApplicationClass");
  61.       if (var1 != null && !var1.equals("")) {
  62.          Object var2 = this.instantiateObjectOfClass(var1);
  63.          if (var2 instanceof Application) {
  64.             this.application = (Application)var2;
  65.             synchronized(this){}
  66.  
  67.             try {
  68.                this.startedRun = true;
  69.                this.notifyAll();
  70.  
  71.                while(!this.appletStarted) {
  72.                   try {
  73.                      this.wait();
  74.                   } catch (InterruptedException var5) {
  75.                   }
  76.                }
  77.             } catch (Throwable var6) {
  78.                throw var6;
  79.             }
  80.  
  81.             this.application.run();
  82.          } else {
  83.             throw new InconsistencyException("ApplicationClass " + var1 + " must be a subclass of netscape.application.Application");
  84.          }
  85.       } else {
  86.          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");
  87.       }
  88.    }
  89.  
  90.    public void start() {
  91.       synchronized(this){}
  92.  
  93.       try {
  94.          ApplicationEvent var3 = new ApplicationEvent();
  95.          if (!this.appletStarted) {
  96.             this.appletStarted = true;
  97.             this.notifyAll();
  98.          }
  99.  
  100.          var3.type = -27;
  101.          var3.processor = this.application;
  102.          this.application.eventLoop.addEvent(var3);
  103.       } catch (Throwable var5) {
  104.          throw var5;
  105.       }
  106.  
  107.    }
  108.  
  109.    public void stop() {
  110.       ApplicationEvent var1 = new ApplicationEvent();
  111.       var1.type = -26;
  112.       var1.processor = this.application;
  113.       this.application.eventLoop.addEvent(var1);
  114.    }
  115.  
  116.    public void destroy() {
  117.       this.application.stopRunningForAWT();
  118.       super.destroy();
  119.    }
  120.  
  121.    void destroyFromIFC() {
  122.       super.destroy();
  123.    }
  124.  
  125.    void cleanup() {
  126.       Enumeration var1 = groupToApplet.keys();
  127.       removeApplication(this.application);
  128.  
  129.       while(var1.hasMoreElements()) {
  130.          ThreadGroup var3 = (ThreadGroup)var1.nextElement();
  131.          FoundationApplet var2 = (FoundationApplet)groupToApplet.get(var3);
  132.          if (var2 == this) {
  133.             groupToApplet.remove(var3);
  134.             return;
  135.          }
  136.       }
  137.  
  138.    }
  139.  
  140.    void setupCanvas(Application var1) {
  141.       this.application = var1;
  142.       int var2 = ((Component)this).size().width;
  143.       int var3 = ((Component)this).size().height;
  144.       this.panel = this.createPanel();
  145.       this.application.setMainRootView(this.panel.rootView());
  146.       this.panel.reshape(0, 0, var2, var3);
  147.       ((Container)this).add(this.panel);
  148.    }
  149.  
  150.    public void layout() {
  151.       if (this.panel != null) {
  152.          Dimension var1 = ((Component)this).size();
  153.          Insets var2 = ((Container)this).insets();
  154.          int var3 = var2.left;
  155.          int var4 = var2.top;
  156.          int var5 = var1.width - (var2.left + var2.right);
  157.          int var6 = var1.height - (var2.top + var2.bottom);
  158.          if (var5 > 0 && var6 > 0) {
  159.             this.panel.reshape(var3, var4, var5, var6);
  160.          }
  161.       }
  162.  
  163.    }
  164.  
  165.    Object instantiateObjectOfClass(String var1) {
  166.       try {
  167.          Class var2 = this.classForName(var1);
  168.          Object var3 = var2.newInstance();
  169.          return var3;
  170.       } catch (ClassNotFoundException var5) {
  171.          throw new InconsistencyException("Unable to find class \"" + var1 + "\"");
  172.       } catch (InstantiationException var6) {
  173.          throw new InconsistencyException("Unable to instantiate class \"" + var1 + "\" -- " + ((Throwable)var6).getMessage());
  174.       } catch (IllegalAccessException var7) {
  175.          throw new InconsistencyException("Unable to instantiate class \"" + var1 + "\" -- " + ((Throwable)var7).getMessage());
  176.       }
  177.    }
  178.  
  179.    public Class classForName(String var1) throws ClassNotFoundException {
  180.       return Class.forName(var1);
  181.    }
  182.  
  183.    public void paint(Graphics var1) {
  184.       super.paint(var1);
  185.    }
  186.  
  187.    protected FoundationPanel createPanel() {
  188.       return new FoundationPanel();
  189.    }
  190.  
  191.    public FoundationPanel panel() {
  192.       return this.panel;
  193.    }
  194.  
  195.    static boolean isMozillaThread(Thread var0) {
  196.       return true;
  197.    }
  198.  
  199.    public Application pushIFCContext() {
  200.       if (this.application == null) {
  201.          return null;
  202.       } else if (!isMozillaThread(Thread.currentThread())) {
  203.          throw new InconsistencyException("pushIFCContext() must be called from JavaScript.");
  204.       } else {
  205.          if (applicationStack == null) {
  206.             applicationStack = new Vector();
  207.          }
  208.  
  209.          applicationStack.addElement(this.application);
  210.          return this.application;
  211.       }
  212.    }
  213.  
  214.    public void popIFCContext() {
  215.       if (!isMozillaThread(Thread.currentThread())) {
  216.          throw new InconsistencyException("popIFCContext() must be called from JavaScript.");
  217.       } else if (applicationStack == null) {
  218.          throw new InconsistencyException("popIFCContext() called without ever calling pushIFCContext()");
  219.       } else if (applicationStack.lastElement() != this.application) {
  220.          throw new InconsistencyException("popIFCContext() attempted to pop " + applicationStack.lastElement() + " which was not itself:" + this.application);
  221.       } else if (applicationStack.removeLastElement() == null) {
  222.          throw new InconsistencyException("extraneous popIFCContext() called without corresponding pushIFCContext()");
  223.       }
  224.    }
  225.  
  226.    static Application currentApplication() {
  227.       return applicationStack == null ? null : (Application)applicationStack.lastElement();
  228.    }
  229.  
  230.    static void removeApplication(Application var0) {
  231.       if (applicationStack != null) {
  232.          if (var0 != null) {
  233.             applicationStack.removeAll(var0);
  234.          }
  235.       }
  236.    }
  237. }
  238.