home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 October / PCO1097.ISO / FilesBBS / FREI / DIGSIM.EXE / DigSimFrame.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-05-21  |  14.0 KB  |  641 lines

  1. import java.awt.BorderLayout;
  2. import java.awt.Component;
  3. import java.awt.Container;
  4. import java.awt.Event;
  5. import java.awt.FileDialog;
  6. import java.awt.Frame;
  7. import java.awt.Menu;
  8. import java.awt.MenuBar;
  9. import java.awt.MenuItem;
  10. import java.awt.Window;
  11. import java.io.FileInputStream;
  12. import java.io.FileOutputStream;
  13. import java.io.InputStream;
  14. import java.net.URL;
  15. import java.util.Vector;
  16.  
  17. class DigSimFrame extends Frame {
  18.    Vector AvailableComponents;
  19.    DigSim applet;
  20.    Menu FileMenu;
  21.    Menu EditMenu;
  22.    Menu PassiveMenu;
  23.    Menu PortMenu;
  24.    Menu BiStableMenu;
  25.    Menu DisplayMenu;
  26.    Menu SpecialMenu;
  27.    Menu SimulateMenu;
  28.    Menu HelpMenu;
  29.    MenuBar MyMenuBar;
  30.    MenuItem CutMenuItem;
  31.    MenuItem CopyMenuItem;
  32.    MenuItem PasteMenuItem;
  33.    MenuItem CopyDiskMenuItem;
  34.    MenuItem PasteDiskMenuItem;
  35.    MenuItem StartMenuItem;
  36.    MenuItem StopMenuItem;
  37.    SimpleDialog ExitDialog;
  38.    SimpleDialog NewDialog;
  39.    SimpleDialog OpenDialog;
  40.    SimpleDialog OpenExampleDialog;
  41.    TextDialog MyTextDialog;
  42.    TextDialog MyTextChangeDialog;
  43.    TextDialog MyTextProbeChangeDialog;
  44.    Vector MenuItemsToDisable = new Vector();
  45.    static final int EXITDIALOG_ID = 1;
  46.    static final int NEWDIALOG_ID = 2;
  47.    static final int OPENDIALOG_ID = 3;
  48.    static final int NEWTEXTDIALOG_ID = 5;
  49.    static final int CHANGETEXTDIALOG_ID = 6;
  50.    static final int OPENEXAMPLE_ID = 7;
  51.    static final int CHANGETEXTPROBEDIALOG_ID = 8;
  52.    String SaveFileDirectory;
  53.    String SaveFileName;
  54.    String ExampleFileName;
  55.  
  56.    public DigSimFrame(DigSim var1) {
  57.       super("Digital Simulator");
  58.       this.applet = var1;
  59.       ((Container)this).setLayout(new BorderLayout());
  60.       ((Container)this).add("North", this.applet.MyControlPanel = new ControlPanel(var1));
  61.       ((Container)this).add("Center", this.applet.MySchematicPanel = new SchematicPanel(var1));
  62.       ((Container)this).add("South", this.applet.MyStatusPanel = new StatusPanel(var1));
  63.       this.RegisterComponentNames();
  64.       ((Frame)this).setMenuBar(this.DigSimMenuBar());
  65.       this.DisableAllMenus();
  66.       ((Component)this).resize(500, 400);
  67.       ((Window)this).show();
  68.       ((Component)this).resize(500, 400);
  69.    }
  70.  
  71.    public void DisableAllMenus() {
  72.       for(int var2 = 0; var2 < this.MenuItemsToDisable.size(); ++var2) {
  73.          MenuItem var1 = (MenuItem)this.MenuItemsToDisable.elementAt(var2);
  74.          var1.disable();
  75.       }
  76.  
  77.    }
  78.  
  79.    public void EnableAllMenus() {
  80.       for(int var2 = 0; var2 < this.MenuItemsToDisable.size(); ++var2) {
  81.          MenuItem var1 = (MenuItem)this.MenuItemsToDisable.elementAt(var2);
  82.          var1.enable();
  83.       }
  84.  
  85.       this.CutMenuItem.disable();
  86.       this.CopyMenuItem.disable();
  87.       this.applet.MyControlPanel.DisableButton("Cut");
  88.       this.applet.MyControlPanel.DisableButton("Copy");
  89.       if (this.applet.MySchematicPanel.CopySchematic != null && this.applet.MySchematicPanel.CopySchematic.size() > 0) {
  90.          this.PasteMenuItem.enable();
  91.          this.applet.MyControlPanel.EnableButton("Paste");
  92.       } else {
  93.          this.PasteMenuItem.disable();
  94.          this.applet.MyControlPanel.DisableButton("Paste");
  95.       }
  96.    }
  97.  
  98.    public void RegisterComponentNames() {
  99.       this.AvailableComponents = new Vector();
  100.       this.AvailableComponents.addElement("Wire");
  101.       this.AvailableComponents.addElement("Junction");
  102.       this.AvailableComponents.addElement("Vcc");
  103.       this.AvailableComponents.addElement("GND");
  104.       this.AvailableComponents.addElement("Switch");
  105.       this.AvailableComponents.addElement("Push button");
  106.       this.AvailableComponents.addElement("Buffer");
  107.       this.AvailableComponents.addElement("Inverter");
  108.       this.AvailableComponents.addElement("2-input AND port");
  109.       this.AvailableComponents.addElement("3-input AND port");
  110.       this.AvailableComponents.addElement("2-input OR port");
  111.       this.AvailableComponents.addElement("3-input OR port");
  112.       this.AvailableComponents.addElement("2-input XOR port");
  113.       this.AvailableComponents.addElement("2-input NAND port");
  114.       this.AvailableComponents.addElement("3-input NAND port");
  115.       this.AvailableComponents.addElement("2-input NOR port");
  116.       this.AvailableComponents.addElement("3-input NOR port");
  117.       this.AvailableComponents.addElement("2-input XNOR port");
  118.       this.AvailableComponents.addElement("SR-latch");
  119.       this.AvailableComponents.addElement("Gated SR-latch");
  120.       this.AvailableComponents.addElement("D-latch");
  121.       this.AvailableComponents.addElement("D-flipflop");
  122.       this.AvailableComponents.addElement("T-flipflop");
  123.       this.AvailableComponents.addElement("JK-flipflop");
  124.       this.AvailableComponents.addElement("Edge-triggered T-flipflop");
  125.       this.AvailableComponents.addElement("Octal D-flipflop");
  126.       this.AvailableComponents.addElement("Octal latch");
  127.       this.AvailableComponents.addElement("Red LED");
  128.       this.AvailableComponents.addElement("Green LED");
  129.       this.AvailableComponents.addElement("Yellow LED");
  130.       this.AvailableComponents.addElement("Bi-color LED");
  131.       this.AvailableComponents.addElement("7-segment display");
  132.       this.AvailableComponents.addElement("Oscilator");
  133.       this.AvailableComponents.addElement("Analyzer probe");
  134.       this.AvailableComponents.addElement("BCD to 7-segment decoder");
  135.       this.AvailableComponents.addElement("3- to 8-line decoder");
  136.       this.AvailableComponents.addElement("4-bit binary counter");
  137.       this.AvailableComponents.addElement("8-bit serial in shift register");
  138.       this.AvailableComponents.addElement("8-bit parallel in shift register");
  139.    }
  140.  
  141.    public MenuBar DigSimMenuBar() {
  142.       this.MyMenuBar = new MenuBar();
  143.       this.FileMenu = new Menu("File", false);
  144.       MenuItem var1;
  145.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("New"));
  146.       this.FileMenu.add(var1);
  147.       this.FileMenu.addSeparator();
  148.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Open example"));
  149.       this.FileMenu.add(var1);
  150.       if (this.applet.EnableFileOperations) {
  151.          this.MenuItemsToDisable.addElement(var1 = new MenuItem("Open file"));
  152.          this.FileMenu.add(var1);
  153.          this.MenuItemsToDisable.addElement(var1 = new MenuItem("Save"));
  154.          this.FileMenu.add(var1);
  155.          this.MenuItemsToDisable.addElement(var1 = new MenuItem("Save as"));
  156.          this.FileMenu.add(var1);
  157.       } else {
  158.          this.FileMenu.add(var1 = new MenuItem("Open"));
  159.          var1.disable();
  160.          this.FileMenu.add(var1 = new MenuItem("Save"));
  161.          var1.disable();
  162.          this.FileMenu.add(var1 = new MenuItem("Save as"));
  163.          var1.disable();
  164.       }
  165.  
  166.       this.FileMenu.addSeparator();
  167.       this.FileMenu.add(new MenuItem("Close"));
  168.       this.FileMenu.add(new MenuItem("Exit"));
  169.       this.MyMenuBar.add(this.FileMenu);
  170.       this.EditMenu = new Menu("Edit", false);
  171.       this.MenuItemsToDisable.addElement(this.CutMenuItem = new MenuItem("Cut"));
  172.       this.EditMenu.add(this.CutMenuItem);
  173.       this.MenuItemsToDisable.addElement(this.CopyMenuItem = new MenuItem("Copy"));
  174.       this.EditMenu.add(this.CopyMenuItem);
  175.       this.MenuItemsToDisable.addElement(this.PasteMenuItem = new MenuItem("Paste"));
  176.       this.EditMenu.add(this.PasteMenuItem);
  177.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Select All"));
  178.       this.EditMenu.add(var1);
  179.       this.EditMenu.addSeparator();
  180.       if (this.applet.EnableFileOperations) {
  181.          this.MenuItemsToDisable.addElement(this.CopyDiskMenuItem = new MenuItem("Copy to"));
  182.          this.EditMenu.add(this.CopyDiskMenuItem);
  183.          this.MenuItemsToDisable.addElement(this.PasteDiskMenuItem = new MenuItem("Paste from"));
  184.          this.EditMenu.add(this.PasteDiskMenuItem);
  185.       } else {
  186.          this.EditMenu.add(this.CopyDiskMenuItem = new MenuItem("Copy to"));
  187.          this.CopyDiskMenuItem.disable();
  188.          this.EditMenu.add(this.PasteDiskMenuItem = new MenuItem("Paste from"));
  189.          this.PasteDiskMenuItem.disable();
  190.       }
  191.  
  192.       this.CutMenuItem.disable();
  193.       this.CopyMenuItem.disable();
  194.       this.PasteMenuItem.disable();
  195.       this.CopyDiskMenuItem.disable();
  196.       this.MyMenuBar.add(this.EditMenu);
  197.       this.PassiveMenu = new Menu("Passive", false);
  198.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Wire"));
  199.       this.PassiveMenu.add(var1);
  200.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Junction"));
  201.       this.PassiveMenu.add(var1);
  202.       this.PassiveMenu.addSeparator();
  203.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Vcc"));
  204.       this.PassiveMenu.add(var1);
  205.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("GND"));
  206.       this.PassiveMenu.add(var1);
  207.       this.PassiveMenu.addSeparator();
  208.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Switch"));
  209.       this.PassiveMenu.add(var1);
  210.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Push button"));
  211.       this.PassiveMenu.add(var1);
  212.       this.MyMenuBar.add(this.PassiveMenu);
  213.       this.PortMenu = new Menu("Ports", false);
  214.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Buffer"));
  215.       this.PortMenu.add(var1);
  216.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Inverter"));
  217.       this.PortMenu.add(var1);
  218.       this.PortMenu.addSeparator();
  219.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("2-input AND port"));
  220.       this.PortMenu.add(var1);
  221.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("3-input AND port"));
  222.       this.PortMenu.add(var1);
  223.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("2-input OR port"));
  224.       this.PortMenu.add(var1);
  225.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("3-input OR port"));
  226.       this.PortMenu.add(var1);
  227.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("2-input XOR port"));
  228.       this.PortMenu.add(var1);
  229.       this.PortMenu.addSeparator();
  230.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("2-input NAND port"));
  231.       this.PortMenu.add(var1);
  232.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("3-input NAND port"));
  233.       this.PortMenu.add(var1);
  234.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("2-input NOR port"));
  235.       this.PortMenu.add(var1);
  236.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("3-input NOR port"));
  237.       this.PortMenu.add(var1);
  238.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("2-input XNOR port"));
  239.       this.PortMenu.add(var1);
  240.       this.MyMenuBar.add(this.PortMenu);
  241.       this.BiStableMenu = new Menu("Bi-stable", false);
  242.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("SR-latch"));
  243.       this.BiStableMenu.add(var1);
  244.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Gated SR-latch"));
  245.       this.BiStableMenu.add(var1);
  246.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("D-latch"));
  247.       this.BiStableMenu.add(var1);
  248.       this.BiStableMenu.addSeparator();
  249.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("D-flipflop"));
  250.       this.BiStableMenu.add(var1);
  251.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("T-flipflop"));
  252.       this.BiStableMenu.add(var1);
  253.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("JK-flipflop"));
  254.       this.BiStableMenu.add(var1);
  255.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Edge-triggered T-flipflop"));
  256.       this.BiStableMenu.add(var1);
  257.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Octal D-flipflop"));
  258.       this.BiStableMenu.add(var1);
  259.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Octal latch"));
  260.       this.BiStableMenu.add(var1);
  261.       this.MyMenuBar.add(this.BiStableMenu);
  262.       this.DisplayMenu = new Menu("Display", false);
  263.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Red LED"));
  264.       this.DisplayMenu.add(var1);
  265.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Green LED"));
  266.       this.DisplayMenu.add(var1);
  267.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Yellow LED"));
  268.       this.DisplayMenu.add(var1);
  269.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Bi-color LED"));
  270.       this.DisplayMenu.add(var1);
  271.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("7-segment display"));
  272.       this.DisplayMenu.add(var1);
  273.       this.MyMenuBar.add(this.DisplayMenu);
  274.       this.SpecialMenu = new Menu("Special", false);
  275.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Oscilator"));
  276.       this.SpecialMenu.add(var1);
  277.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("BCD to 7-segment decoder"));
  278.       this.SpecialMenu.add(var1);
  279.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("3- to 8-line decoder"));
  280.       this.SpecialMenu.add(var1);
  281.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("4-bit binary counter"));
  282.       this.SpecialMenu.add(var1);
  283.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("8-bit serial in shift register"));
  284.       this.SpecialMenu.add(var1);
  285.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("8-bit parallel in shift register"));
  286.       this.SpecialMenu.add(var1);
  287.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Analyzer probe"));
  288.       this.SpecialMenu.add(var1);
  289.       this.SpecialMenu.addSeparator();
  290.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Text"));
  291.       this.SpecialMenu.add(var1);
  292.       this.MyMenuBar.add(this.SpecialMenu);
  293.       this.SimulateMenu = new Menu("Simulate", false);
  294.       this.SimulateMenu.add(this.StartMenuItem = new MenuItem("Start"));
  295.       this.SimulateMenu.add(this.StopMenuItem = new MenuItem("Stop"));
  296.       this.StopMenuItem.disable();
  297.       this.SimulateMenu.addSeparator();
  298.       this.SimulateMenu.add(new MenuItem("Show analyzer"));
  299.       this.SimulateMenu.addSeparator();
  300.       this.MenuItemsToDisable.addElement(var1 = new MenuItem("Options"));
  301.       this.SimulateMenu.add(var1);
  302.       this.MyMenuBar.add(this.SimulateMenu);
  303.       this.HelpMenu = new Menu("Help", false);
  304.       this.HelpMenu.add(new MenuItem("Help"));
  305.       this.HelpMenu.add(new MenuItem("About DigSim"));
  306.       this.HelpMenu.add(new MenuItem("Frequently asked questions"));
  307.       this.MyMenuBar.add(this.HelpMenu);
  308.       this.MyMenuBar.setHelpMenu(this.HelpMenu);
  309.       return this.MyMenuBar;
  310.    }
  311.  
  312.    public boolean IsComponentName(String var1) {
  313.       for(int var2 = 0; var2 < this.AvailableComponents.size(); ++var2) {
  314.          if (this.AvailableComponents.elementAt(var2).equals(var1)) {
  315.             return true;
  316.          }
  317.       }
  318.  
  319.       return false;
  320.    }
  321.  
  322.    public boolean handleEvent(Event var1) {
  323.       if (var1.id == 201) {
  324.          this.applet.destroyFrame();
  325.          return true;
  326.       } else {
  327.          return super.handleEvent(var1);
  328.       }
  329.    }
  330.  
  331.    public boolean SimpleDialogHandler(String var1) {
  332.       String var2 = var1.substring("SIMPLEDIALOG_".length());
  333.       String var3 = var2.substring(0, var2.indexOf("_"));
  334.       int var4 = Integer.parseInt(var2.substring(var2.indexOf("_") + 1, var2.length()));
  335.       switch (var4) {
  336.          case 1:
  337.             this.ExitDialog = null;
  338.             if (var3.equals("OK")) {
  339.                if (this.applet.SimulateRunning()) {
  340.                   this.applet.SimulateStop();
  341.                }
  342.  
  343.                System.exit(1);
  344.                return true;
  345.             }
  346.  
  347.             if (var3.equals("Cancel")) {
  348.                return true;
  349.             }
  350.             break;
  351.          case 2:
  352.             this.NewDialog = null;
  353.             if (var3.equals("OK")) {
  354.                this.applet.MySchematic.DestroyComponents(this.applet.PinGrid);
  355.                ((Frame)this).setTitle("Digital Simulator [untitled]");
  356.                this.applet.MySchematic.FileName = null;
  357.                this.applet.MySchematic.Modified = false;
  358.                this.applet.MySchematicPanel.repaint();
  359.                return true;
  360.             }
  361.  
  362.             if (var3.equals("Cancel")) {
  363.                return true;
  364.             }
  365.             break;
  366.          case 3:
  367.             this.OpenDialog = null;
  368.             if (var3.equals("OK")) {
  369.                Schematic var5 = this.DoFileOpenDialog(this.applet.PinGrid, "Open schematic");
  370.                if (var5 != null) {
  371.                   this.applet.MySchematic = var5;
  372.                   ((Frame)this).setTitle("Digital Simulator [" + var5.FileName + "]");
  373.                   this.applet.MySchematicPanel.repaint();
  374.                   return true;
  375.                }
  376.             } else if (var3.equals("Cancel")) {
  377.                return true;
  378.             }
  379.             break;
  380.          case 7:
  381.             this.OpenExampleDialog = null;
  382.             if (var3.equals("OK")) {
  383.                this.LoadExample(this.ExampleFileName);
  384.                return true;
  385.             }
  386.  
  387.             if (var3.equals("Cancel")) {
  388.                return true;
  389.             }
  390.       }
  391.  
  392.       return false;
  393.    }
  394.  
  395.    public boolean TextDialogHandler(String var1) {
  396.       String var2 = var1.substring("TEXTDIALOG_".length());
  397.       String var3 = var2.substring(0, var2.indexOf("_"));
  398.       String var4 = var2.substring(var2.indexOf("_") + 1, var2.lastIndexOf("_"));
  399.       int var5 = Integer.parseInt(var2.substring(var2.lastIndexOf("_") + 1, var2.length()));
  400.       switch (var5) {
  401.          case 5:
  402.             this.MyTextDialog = null;
  403.             if (var3.equals("OK")) {
  404.                if (var4.length() > 0) {
  405.                   this.applet.MySchematic.addComponent(new Caption(this.applet.MySchematicPanel.GridXOffset + 1, this.applet.MySchematicPanel.GridYOffset, var4));
  406.                   this.applet.MySchematicPanel.repaint();
  407.                }
  408.  
  409.                return true;
  410.             }
  411.  
  412.             if (var3.equals("Cancel")) {
  413.                return true;
  414.             }
  415.             break;
  416.          case 6:
  417.             this.MyTextChangeDialog = null;
  418.             if (var3.equals("OK")) {
  419.                return true;
  420.             }
  421.  
  422.             if (var3.equals("Cancel")) {
  423.                this.applet.MySchematicPanel.repaint();
  424.                return true;
  425.             }
  426.          case 7:
  427.          default:
  428.             break;
  429.          case 8:
  430.             this.MyTextProbeChangeDialog = null;
  431.             this.applet.MySchematicPanel.repaint();
  432.             this.applet.updateAnalyzer();
  433.             return true;
  434.       }
  435.  
  436.       return false;
  437.    }
  438.  
  439.    public Schematic DoFileOpenDialog(Pin[][] var1, String var2) {
  440.       Schematic var3 = null;
  441.       FileDialog var5 = new FileDialog(this, var2, 0);
  442.       ((Window)var5).show();
  443.       String var6 = var5.getDirectory();
  444.       String var7 = var5.getFile();
  445.       if (var6 != null && var7 != null) {
  446.          if (var1 != null) {
  447.             this.applet.MySchematic.DestroyComponents(this.applet.PinGrid);
  448.          }
  449.  
  450.          FileInputStream var4;
  451.          try {
  452.             var4 = new FileInputStream(var6 + var7);
  453.             var3 = new Schematic(var1, var4);
  454.          } catch (Exception var12) {
  455.             String var9 = ((Throwable)var12).toString();
  456.             String[] var10 = new String[]{"OK"};
  457.             new SimpleDialog(this, var2, var9, var10, 1, 0, 0, 1);
  458.             this.applet.MySchematicPanel.repaint();
  459.             return null;
  460.          }
  461.  
  462.          try {
  463.             if (var4 != null) {
  464.                var4.close();
  465.             }
  466.          } catch (Exception var11) {
  467.          }
  468.  
  469.          var3.FileDir = var6;
  470.          var3.FileName = var7;
  471.          var3.Modified = false;
  472.          this.applet.updateAnalyzer();
  473.       }
  474.  
  475.       return var3;
  476.    }
  477.  
  478.    public void LoadExample(String var1) {
  479.       this.applet.MySchematic.DestroyComponents(this.applet.PinGrid);
  480.  
  481.       InputStream var2;
  482.       try {
  483.          var2 = (new URL(this.applet.getDocumentBase(), var1)).openStream();
  484.          this.applet.MySchematic = new Schematic(this.applet.PinGrid, var2);
  485.       } catch (Exception var7) {
  486.          String var4 = ((Throwable)var7).toString();
  487.          String[] var5 = new String[]{"OK"};
  488.          new SimpleDialog(this, "Open schematic", var4, var5, 1, 0, 0, 1);
  489.          this.applet.MySchematicPanel.repaint();
  490.          return;
  491.       }
  492.  
  493.       try {
  494.          if (var2 != null) {
  495.             var2.close();
  496.          }
  497.       } catch (Exception var6) {
  498.       }
  499.  
  500.       this.applet.MySchematic.FileDir = "";
  501.       this.applet.MySchematic.FileName = var1;
  502.       this.applet.MySchematic.Modified = false;
  503.       ((Frame)this).setTitle("Digital Simulator [" + var1 + "]");
  504.       this.applet.MySchematicPanel.repaint();
  505.       this.applet.updateAnalyzer();
  506.    }
  507.  
  508.    public void DoFileSaveDialog(Schematic var1, boolean var2, String var3) {
  509.       Object var4 = null;
  510.       if (var2) {
  511.          FileDialog var11 = new FileDialog(this, var3, 1);
  512.          ((Window)var11).show();
  513.          this.SaveFileDirectory = var11.getDirectory();
  514.          this.SaveFileName = var11.getFile();
  515.       } else {
  516.          this.SaveFileDirectory = var1.FileDir;
  517.          this.SaveFileName = var1.FileName;
  518.       }
  519.  
  520.       if (this.SaveFileDirectory != null && this.SaveFileName != null) {
  521.          if (this.SaveFileName.endsWith(".*.*")) {
  522.             this.SaveFileName = this.SaveFileName.substring(0, this.SaveFileName.length() - 4);
  523.          }
  524.  
  525.          var1.FileDir = this.SaveFileDirectory;
  526.          var1.FileName = this.SaveFileName;
  527.  
  528.          FileOutputStream var5;
  529.          try {
  530.             var5 = new FileOutputStream(this.SaveFileDirectory + this.SaveFileName);
  531.             var1.Save(var5);
  532.          } catch (Exception var10) {
  533.             String var7 = ((Throwable)var10).toString();
  534.             String[] var8 = new String[]{"OK"};
  535.             new SimpleDialog(this, var3, var7, var8, 1, 0, 0, 1);
  536.             return;
  537.          }
  538.  
  539.          try {
  540.             if (var5 != null) {
  541.                var5.close();
  542.             }
  543.          } catch (Exception var9) {
  544.          }
  545.  
  546.          var1.Modified = false;
  547.       }
  548.  
  549.    }
  550.  
  551.    public boolean action(Event var1, Object var2) {
  552.       String var3 = (String)var2;
  553.       if (var3.startsWith("SIMPLEDIALOG_")) {
  554.          return this.SimpleDialogHandler(var3);
  555.       } else if (var3.startsWith("TEXTDIALOG_")) {
  556.          return this.TextDialogHandler(var3);
  557.       } else if (var1.target instanceof MenuItem) {
  558.          if (var3.equals("Open file")) {
  559.             this.applet.UserWantsOpenSchematic();
  560.          } else if (var3.equals("Open example")) {
  561.             this.applet.UserWantsOpenExample();
  562.          } else if (var3.equals("Save")) {
  563.             this.applet.UserWantsSaveSchematic();
  564.          } else if (var3.equals("Save as")) {
  565.             if (this.applet.HelpWanted) {
  566.                new HelpDialog(this, "Save as");
  567.             } else {
  568.                this.DoFileSaveDialog(this.applet.MySchematic, true, "Save schematic");
  569.                ((Frame)this).setTitle("Digital Simulator [" + this.applet.MySchematic.FileName + "]");
  570.                this.applet.MySchematicPanel.repaint();
  571.             }
  572.          } else if (var3.equals("Close")) {
  573.             if (this.applet.HelpWanted) {
  574.                new HelpDialog(this, "Close");
  575.             } else {
  576.                this.applet.destroyFrame();
  577.             }
  578.          } else if (var3.equals("New")) {
  579.             this.applet.UserWantsNewSchematic();
  580.          } else if (var3.equals("Exit")) {
  581.             if (this.applet.HelpWanted) {
  582.                new HelpDialog(this, "Exit");
  583.             } else if (this.ExitDialog == null) {
  584.                String[] var4 = new String[]{"OK", "Cancel"};
  585.                this.ExitDialog = new SimpleDialog(this, "Exit DigSim", "Are you sure you want to exit?", var4, 2, 1, 1, 2);
  586.             }
  587.          } else if (var3.equals("Text")) {
  588.             this.applet.UserWantsTextDrawing();
  589.          } else if (var3.equals("About DigSim")) {
  590.             new HelpDialog(this, "About DigSim");
  591.          } else if (var3.equals("Frequently asked questions")) {
  592.             new HelpDialog(this, "FAQ");
  593.          } else if (var3.equals("Help")) {
  594.             this.applet.UserWantsHelp();
  595.          } else if (var3.equals("Cut")) {
  596.             this.applet.UserWantsCutSchematic();
  597.          } else if (var3.equals("Copy")) {
  598.             this.applet.UserWantsCopySchematic();
  599.          } else if (var3.equals("Paste")) {
  600.             this.applet.UserWantsPasteSchematic();
  601.          } else if (var3.equals("Copy to")) {
  602.             this.applet.UserWantsCopyToSchematic();
  603.          } else if (var3.equals("Paste from")) {
  604.             this.applet.UserWantsPasteFromSchematic();
  605.          } else if (var3.equals("Select All")) {
  606.             if (this.applet.HelpWanted) {
  607.                new HelpDialog(this, "Select All");
  608.             } else {
  609.                this.applet.MySchematicPanel.SelectAll();
  610.             }
  611.          } else if (this.IsComponentName(var3)) {
  612.             if (this.applet.HelpWanted) {
  613.                new HelpDialog(this, var3);
  614.             } else {
  615.                this.applet.addComponent(var3);
  616.             }
  617.          } else if ("Start".equals(var2)) {
  618.             if (this.applet.HelpWanted) {
  619.                new HelpDialog(this, "Start");
  620.             } else {
  621.                this.applet.UserWantsSimulate();
  622.             }
  623.          } else if ("Stop".equals(var2)) {
  624.             if (this.applet.HelpWanted) {
  625.                new HelpDialog(this, "Stop");
  626.             } else {
  627.                this.applet.UserWantsSimulate();
  628.             }
  629.          } else if ("Show analyzer".equals(var2)) {
  630.             this.applet.UserWantsAnalyzer();
  631.          } else if ("Options".equals(var2)) {
  632.             this.applet.UserWantsOptions();
  633.          }
  634.  
  635.          return true;
  636.       } else {
  637.          return false;
  638.       }
  639.    }
  640. }
  641.