home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 January / PCO0198.ISO / browser / net_linx / java40.jar / netscape / application / FoundationApplet.class (.txt) < prev   
Encoding:
Java Class File  |  1997-11-03  |  6.0 KB  |  239 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.             break;
  135.          }
  136.       }
  137.  
  138.       this.application = null;
  139.    }
  140.  
  141.    void setupCanvas(Application var1) {
  142.       this.application = var1;
  143.       int var2 = ((Component)this).size().width;
  144.       int var3 = ((Component)this).size().height;
  145.       this.panel = this.createPanel();
  146.       this.application.setMainRootView(this.panel.rootView());
  147.       this.panel.reshape(0, 0, var2, var3);
  148.       ((Container)this).add(this.panel);
  149.    }
  150.  
  151.    public void layout() {
  152.       if (this.panel != null) {
  153.          Dimension var1 = ((Component)this).size();
  154.          Insets var2 = ((Container)this).insets();
  155.          int var3 = var2.left;
  156.          int var4 = var2.top;
  157.          int var5 = var1.width - (var2.left + var2.right);
  158.          int var6 = var1.height - (var2.top + var2.bottom);
  159.          if (var5 > 0 && var6 > 0) {
  160.             this.panel.reshape(var3, var4, var5, var6);
  161.          }
  162.       }
  163.  
  164.    }
  165.  
  166.    Object instantiateObjectOfClass(String var1) {
  167.       try {
  168.          Class var2 = this.classForName(var1);
  169.          Object var3 = var2.newInstance();
  170.          return var3;
  171.       } catch (ClassNotFoundException var5) {
  172.          throw new InconsistencyException("Unable to find class \"" + var1 + "\"");
  173.       } catch (InstantiationException var6) {
  174.          throw new InconsistencyException("Unable to instantiate class \"" + var1 + "\" -- " + ((Throwable)var6).getMessage());
  175.       } catch (IllegalAccessException var7) {
  176.          throw new InconsistencyException("Unable to instantiate class \"" + var1 + "\" -- " + ((Throwable)var7).getMessage());
  177.       }
  178.    }
  179.  
  180.    public Class classForName(String var1) throws ClassNotFoundException {
  181.       return Class.forName(var1);
  182.    }
  183.  
  184.    public void paint(Graphics var1) {
  185.       super.paint(var1);
  186.    }
  187.  
  188.    protected FoundationPanel createPanel() {
  189.       return new FoundationPanel();
  190.    }
  191.  
  192.    public FoundationPanel panel() {
  193.       return this.panel;
  194.    }
  195.  
  196.    static boolean isMozillaThread(Thread var0) {
  197.       return true;
  198.    }
  199.  
  200.    public Application pushIFCContext() {
  201.       if (this.application == null) {
  202.          return null;
  203.       } else if (!isMozillaThread(Thread.currentThread())) {
  204.          throw new InconsistencyException("pushIFCContext() must be called from JavaScript.");
  205.       } else {
  206.          if (applicationStack == null) {
  207.             applicationStack = new Vector();
  208.          }
  209.  
  210.          applicationStack.addElement(this.application);
  211.          return this.application;
  212.       }
  213.    }
  214.  
  215.    public void popIFCContext() {
  216.       if (!isMozillaThread(Thread.currentThread())) {
  217.          throw new InconsistencyException("popIFCContext() must be called from JavaScript.");
  218.       } else if (applicationStack == null) {
  219.          throw new InconsistencyException("popIFCContext() called without ever calling pushIFCContext()");
  220.       } else if (applicationStack.lastElement() != this.application) {
  221.          throw new InconsistencyException("popIFCContext() attempted to pop " + applicationStack.lastElement() + " which was not itself:" + this.application);
  222.       } else if (applicationStack.removeLastElement() == null) {
  223.          throw new InconsistencyException("extraneous popIFCContext() called without corresponding pushIFCContext()");
  224.       }
  225.    }
  226.  
  227.    static Application currentApplication() {
  228.       return applicationStack == null ? null : (Application)applicationStack.lastElement();
  229.    }
  230.  
  231.    static void removeApplication(Application var0) {
  232.       if (applicationStack != null) {
  233.          if (var0 != null) {
  234.             applicationStack.removeAll(var0);
  235.          }
  236.       }
  237.    }
  238. }
  239.