home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 May / PCO_5_97.ISO / FilesBBS / OS2 / CSIME.ARJ / CSIME.ZIP / csime / MapCanvas.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-02-09  |  7.0 KB  |  345 lines

  1. import java.awt.Canvas;
  2. import java.awt.Component;
  3. import java.awt.Dimension;
  4. import java.awt.Event;
  5. import java.awt.Graphics;
  6. import java.awt.Image;
  7. import java.awt.MediaTracker;
  8. import java.awt.image.FilteredImageSource;
  9. import java.io.File;
  10. import java.net.MalformedURLException;
  11. import java.net.URL;
  12. import java.util.Enumeration;
  13.  
  14. public class MapCanvas extends Canvas {
  15.    private static final int NONE = 0;
  16.    private static final int RESIZE = 1;
  17.    private static final int MOVE = 2;
  18.    private static final int MINDRAGDIST = 4;
  19.    private MainShell _app;
  20.    private ImageMap _imageMap = new ImageMap();
  21.    private Image _image;
  22.    private int _state;
  23.    private int _shape;
  24.    private boolean _checkDrag;
  25.    private int _lastx;
  26.    private int _lasty;
  27.  
  28.    public MapCanvas(MainShell var1) {
  29.       this._app = var1;
  30.    }
  31.  
  32.    public Dimension preferredSize() {
  33.       return new Dimension(500, 300);
  34.    }
  35.  
  36.    public Dimension minimumSize() {
  37.       return this.preferredSize();
  38.    }
  39.  
  40.    public void paint(Graphics var1) {
  41.       var1.clearRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
  42.       if (this._image != null) {
  43.          var1.drawImage(this._image, 0, 0, this);
  44.       }
  45.  
  46.       var1.setColor(((Component)this).getForeground());
  47.       var1.setXORMode(((Component)this).getBackground());
  48.       Enumeration var2 = this._imageMap.elements();
  49.  
  50.       while(var2.hasMoreElements()) {
  51.          Area var3 = (Area)var2.nextElement();
  52.          var3.draw(var1);
  53.       }
  54.  
  55.    }
  56.  
  57.    public boolean mouseDown(Event var1, int var2, int var3) {
  58.       Graphics var4 = ((Component)this).getGraphics();
  59.       var4.setColor(((Component)this).getForeground());
  60.       var4.setXORMode(((Component)this).getBackground());
  61.       Object var5 = null;
  62.       switch (this._state) {
  63.          case 0:
  64.             Area var7;
  65.             if ((var7 = this._imageMap.getSelected()) != null) {
  66.                var7.draw(var4);
  67.                var7.setSelected(false);
  68.                var7.draw(var4);
  69.                this.updateDeselect(var7);
  70.             }
  71.  
  72.             if ((var7 = this._imageMap.grabOne(var2, var3)) != null) {
  73.                var7.draw(var4);
  74.                var7.setSelected(true);
  75.                var7.draw(var4);
  76.                this._state = 1;
  77.                this.updateSelect(var7);
  78.             } else if ((var7 = this._imageMap.selectOne(var2, var3)) != null) {
  79.                var7.draw(var4);
  80.                var7.setSelected(true);
  81.                var7.draw(var4);
  82.                this._state = 2;
  83.                this.updateSelect(var7);
  84.             } else {
  85.                var7 = AreaBuilder.build(this._shape, var2, var3);
  86.                var7.setSelected(true);
  87.                var7.draw(var4);
  88.                this._imageMap.addElement(var7);
  89.                this._state = 1;
  90.                this.updateSelect(var7);
  91.                this.updateDrag(var7);
  92.             }
  93.             break;
  94.          case 1:
  95.             Area var6;
  96.             if ((var6 = this._imageMap.getSelected()) != null) {
  97.                var6.draw(var4);
  98.                var6.resize(var2, var3);
  99.                var6.draw(var4);
  100.                this.updateDrag(var6);
  101.             } else {
  102.                this._state = 0;
  103.             }
  104.       }
  105.  
  106.       this._checkDrag = true;
  107.       this._lastx = var2;
  108.       this._lasty = var3;
  109.       return true;
  110.    }
  111.  
  112.    public boolean mouseDrag(Event var1, int var2, int var3) {
  113.       if (this._checkDrag && Math.abs(var2 - this._lastx) < 4 && Math.abs(var3 - this._lasty) < 4) {
  114.          return true;
  115.       } else {
  116.          this._checkDrag = false;
  117.          Graphics var4 = ((Component)this).getGraphics();
  118.          var4.setColor(((Component)this).getForeground());
  119.          var4.setXORMode(((Component)this).getBackground());
  120.          Area var5 = this._imageMap.getSelected();
  121.          if (var5 != null) {
  122.             switch (this._state) {
  123.                case 1:
  124.                   var5.draw(var4);
  125.                   var5.resize(var2, var3);
  126.                   var5.draw(var4);
  127.                   this.updateDrag(var5);
  128.                   break;
  129.                case 2:
  130.                   var5.draw(var4);
  131.                   var5.translate(var2 - this._lastx, var3 - this._lasty);
  132.                   var5.draw(var4);
  133.                   this.updateDrag(var5);
  134.             }
  135.          } else {
  136.             this._state = 0;
  137.          }
  138.  
  139.          this._lastx = var2;
  140.          this._lasty = var3;
  141.          return true;
  142.       }
  143.    }
  144.  
  145.    public boolean mouseUp(Event var1, int var2, int var3) {
  146.       Area var4 = this._imageMap.getSelected();
  147.       if (var4 != null) {
  148.          switch (this._state) {
  149.             case 1:
  150.                if (var4.isValid()) {
  151.                   if (var4.isComplete()) {
  152.                      this._state = 0;
  153.                   } else {
  154.                      var4.advance();
  155.                   }
  156.                } else {
  157.                   this._imageMap.removeElement(var4);
  158.                   this._state = 0;
  159.                }
  160.                break;
  161.             case 2:
  162.                this._state = 0;
  163.          }
  164.       } else {
  165.          this._state = 0;
  166.       }
  167.  
  168.       return true;
  169.    }
  170.  
  171.    private void updateDeselect(Area var1) {
  172.       if (var1.getLink() == null || !var1.getLink().equals(this._app.getLink())) {
  173.          var1.setLink(this._app.getLink());
  174.          this._imageMap.setModified(true);
  175.       }
  176.  
  177.    }
  178.  
  179.    private void updateSelect(Area var1) {
  180.       this._app.setLink(var1.getLink());
  181.    }
  182.  
  183.    private void updateDrag(Area var1) {
  184.       this._app.setStatus(var1.getShape() + " (" + var1.getCoords() + ")");
  185.       this._imageMap.setModified(true);
  186.    }
  187.  
  188.    public ImageMap getImageMap() {
  189.       return this._imageMap;
  190.    }
  191.  
  192.    public void setImageMap(ImageMap var1) {
  193.       this._imageMap = var1;
  194.       this._image = this.doLoadImage(this._imageMap.getBaseUrl(), this._imageMap.getBaseFile(), this._imageMap.getImgSrc());
  195.       ((Component)this).repaint();
  196.    }
  197.  
  198.    public void setShape(int var1) {
  199.       this._shape = var1;
  200.    }
  201.  
  202.    public void close() {
  203.       Area var1 = this._imageMap.getSelected();
  204.       if (var1 != null && var1 instanceof Poly && !var1.isComplete()) {
  205.          Graphics var2 = ((Component)this).getGraphics();
  206.          var2.setColor(((Component)this).getForeground());
  207.          var2.setXORMode(((Component)this).getBackground());
  208.          var1.draw(var2);
  209.          ((Poly)var1).close();
  210.          if (var1.isValid()) {
  211.             var1.draw(var2);
  212.          } else {
  213.             this._imageMap.removeElement(var1);
  214.          }
  215.  
  216.          this._state = 0;
  217.       }
  218.  
  219.    }
  220.  
  221.    public void deleteSelected() {
  222.       Area var1 = this._imageMap.getSelected();
  223.       if (var1 != null) {
  224.          Graphics var2 = ((Component)this).getGraphics();
  225.          var2.setColor(((Component)this).getForeground());
  226.          var2.setXORMode(((Component)this).getBackground());
  227.          var1.draw(var2);
  228.          this._imageMap.removeElement(var1);
  229.       }
  230.  
  231.    }
  232.  
  233.    public void duplicateSelected() {
  234.       Area var1 = this._imageMap.getSelected();
  235.       if (var1 != null && var1.isComplete()) {
  236.          Graphics var2 = ((Component)this).getGraphics();
  237.          var2.setColor(((Component)this).getForeground());
  238.          var2.setXORMode(((Component)this).getBackground());
  239.          var1.draw(var2);
  240.          var1.setSelected(false);
  241.          var1.draw(var2);
  242.          Area var3 = (Area)var1.clone();
  243.          var3.translate(5, 5);
  244.          var3.setSelected(true);
  245.          var3.draw(var2);
  246.          this._imageMap.addElement(var3);
  247.          this.updateSelect(var1);
  248.       }
  249.  
  250.    }
  251.  
  252.    public void setSelectedLink(String var1) {
  253.       Area var2 = this._imageMap.getSelected();
  254.       if (var2 != null) {
  255.          var2.setLink(var1);
  256.          this._imageMap.setModified(true);
  257.       }
  258.  
  259.    }
  260.  
  261.    public void loadImage(URL var1, File var2, String var3) {
  262.       this._image = this.doLoadImage(var1, var2, var3);
  263.       this._imageMap.setImgSrc(var3);
  264.       ((Component)this).repaint();
  265.    }
  266.  
  267.    private Image doLoadImage(URL var1, File var2, String var3) {
  268.       if (var3 == null) {
  269.          return null;
  270.       } else {
  271.          Object var4 = null;
  272.  
  273.          try {
  274.             URL var9 = new URL(var3);
  275.             Image var5 = ((Component)this).getToolkit().getImage(var9);
  276.             if (this.trackImage(var5)) {
  277.                return var5;
  278.             }
  279.          } catch (MalformedURLException var8) {
  280.          }
  281.  
  282.          try {
  283.             if (var1 != null) {
  284.                URL var10 = new URL(var1, var3);
  285.                Image var11 = ((Component)this).getToolkit().getImage(var10);
  286.                if (this.trackImage(var11)) {
  287.                   return var11;
  288.                }
  289.             }
  290.          } catch (MalformedURLException var7) {
  291.          }
  292.  
  293.          Object var12 = null;
  294.          File var13 = new File(var3);
  295.          if (var13.isFile() && var13.canRead()) {
  296.             Image var6 = ((Component)this).getToolkit().getImage(var13.getPath());
  297.             if (this.trackImage(var6)) {
  298.                return var6;
  299.             }
  300.          }
  301.  
  302.          if (var2 != null) {
  303.             var13 = new File(var2, var3);
  304.             if (var13.isFile() && var13.canRead()) {
  305.                Image var15 = ((Component)this).getToolkit().getImage(var13.getPath());
  306.                if (this.trackImage(var15)) {
  307.                   return var15;
  308.                }
  309.             }
  310.          }
  311.  
  312.          return null;
  313.       }
  314.    }
  315.  
  316.    public void transparentImage(int var1) {
  317.       if (this._image != null) {
  318.          Image var2 = ((Component)this).createImage(new FilteredImageSource(this._image.getSource(), new TransFilter(var1)));
  319.          if (this.trackImage(var2)) {
  320.             this._image = var2;
  321.             ((Component)this).repaint();
  322.          }
  323.  
  324.       }
  325.    }
  326.  
  327.    private boolean trackImage(Image var1) {
  328.       MediaTracker var2 = new MediaTracker(this);
  329.       var2.addImage(var1, 0);
  330.  
  331.       try {
  332.          var2.waitForID(0);
  333.          return true;
  334.       } catch (InterruptedException var4) {
  335.          this.log(var4);
  336.          return false;
  337.       }
  338.    }
  339.  
  340.    private void log(Exception var1) {
  341.       System.out.println("Caught an exception: " + ((Throwable)var1).getMessage());
  342.       ((Throwable)var1).printStackTrace();
  343.    }
  344. }
  345.