Code Search for Developers
 
 
  

AwtLinkFlobFactory.java from gzz at Krugle


Show AwtLinkFlobFactory.java syntax highlighted

/*   
AwtArtefactFlobFactory.java
 *    
 *    Copyright (c) 2000, Ted Nelson and Tuomas Lukka
 *
 *    This file is part of Gzz.
 *    
 *    Gzz is free software; you can redistribute it and/or modify it under
 *    the terms of the GNU Lesser General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *    
 *    Gzz is distributed in the hope that it will be useful, but WITHOUT
 *    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 *    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
 *    Public License for more details.
 *    
 *    You should have received a copy of the GNU Lesser General
 *    Public License along with Gzz; if not, write to the Free
 *    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *    MA  02111-1307  USA
 *    
 *
 */
/*
 * Written by Kimmo Wideroos
 */

package org.gzigzag.module;
import org.gzigzag.*;
import java.util.*;
import java.awt.*;

/** 
 */
 
class AwtLinkFlobFactory extends CellFlobFactory1 {
public static final String rcsid = "";
    public static boolean dbg = false;
    static void p(String s) { if(dbg) System.out.println(s); }
    static void pa(String s) { System.out.println(s); }

    class AwtLinkFlob extends CellBgFlob {
	
	Point from, to;
	int[] pts = null;
	int R = 3;
	
	public AwtLinkFlob(Point from, Point to, int d, ZZCell c) {
	    super(from.x, from.y, d, to.x-from.x, to.y-from.y, c);
	}
	
	public AwtLinkFlob(int[] p, int d, ZZCell c) {
	    super(p[0], p[1], d, p[p.length-2]-p[0], p[p.length-1]-p[1], c);
	    this.pts = p;
	}
	
	public void render(Graphics g, int mx, int my, int md,
		       int mw, int mh) {
	    int midx, midy;
	    Color oldfg = g.getColor();
	    
	    g.setColor(Color.black);
	    //if(pts == null) {
	    g.drawLine(mx, my, mx+mw, my+mh);
	    int[][] a = arrowhead(mw, mh);
	    if(AwtLinkRelation.linkType(c, AwtLinkRelation.LINK_TO)) {
		g.drawLine(mx+mw, my+mh, mx+mw+a[0][0], my+mh+a[0][1]);
		g.drawLine(mx+mw, my+mh, mx+mw+a[1][0], my+mh+a[1][1]);
	    }
	    //}
	    /*
	      else {
	      for(int i = 0; i<pts.length-4; i=i+2)
	      g.drawLine(pts[i], pts[i+1], pts[i+2], pts[i+3]);
	      }
	    */ 
	    
	    Color[] solids = getSolidColors();
	    
	    if(solids!=null) {
		g.setColor(solids[0]);
		midx = mx+(mw>>1);
		midy = my+(mh>>1);
		g.fillOval(midx-R, midy-R, 2*R, 2*R);
	    }
	    
	    g.setColor(oldfg);
	}

	private int[][] arrowhead(int w, int h) {
	    if(w==0 && h==0) 
		return new int[][] {{0, 0}, {0,0}};
	    double lng = Math.sqrt(w*w+h*h);
	    double i1, i2, j1, j2;
	    i1 = 3*R*w / lng; i2 = 3*R*h / lng;
	    j1 = -i2; j2 = i1;
	    return new int[][] {{(int)(-i1+j1), (int)(-i2+j2)},
				{(int)(-i1-j1), (int)(-i2-j2)}};
	}

	public Object hit(int x, int y) {
	    
	    /*
	      int midx, midy;
	      
	      midx = this.x+(w>>1);
	      midy = this.y+(h>>1);
	      
	      if(x-midx > R) return null;
	      if(x-midx < -R) return null;
	      if(y-midy > R) return null;
	      if(y-midy < -R) return null;
	      
	      return new ZZCursorVirtual(super.c);
	    */
	    
	    double dy, dx, wwhh, k, dpow2;
	    dy = y-this.y;
	    dx = x-this.x;
	    wwhh = w*w+h*h;
	    
	    if(dy*dy+dx*dx>(wwhh+9*R*R)) return null; 
	    if(wwhh<9*R*R) {
		// near point!
		return new ZZCursorVirtual(super.c);
	    }
	    k = (double)(w*dy - h*dx);
	    dpow2 = k*k / wwhh;
	    if(dpow2<225.0) {
		// near enough the line
		return new ZZCursorVirtual(super.c);
	    }
	    return null;
	    
	}
    }
    
    protected AwtMetrics metrics;

    public AwtLinkFlobFactory(AwtMetrics awtm) { this.metrics = awtm; }
    public AwtLinkFlobFactory() { this.metrics = null; }

    public void setMetrics(AwtMetrics awtm) { this.metrics = awtm; }

    public Flob makeFlob(FlobSet into, ZZCell c, ZZCell handleCell,
                         float fract, int x, int y, int d, int w, int h) {

	Flob lf;
	Point p1 = new Point(x, y);
	Point p2 = new Point(w, h);
	Point p = new Point();
	lf = new AwtLinkFlob(p1, p2, d, c);
	CellFlobFactory2.addSolidColors(into, (CellBgFlob)lf);
        into.add(lf);
        
        // draw text, if there is ...
	/* 
        if(!c.t().equals("")) {
            super.centerFlob(into, c, c, 1, p, 0, 0, d);
        } 
	*/
        // if link is operation and has some result artefacts, draw link
        // between link content and result artefacts

	/*
        ZZCell r = AwtLinkRelation.result(c);

        while(r!=null) {
            src = AwtLinkRelation.source(r); trg = AwtLinkRelation.target(r);
            p1 = metrics.mapToRealView(AwtArtefact.getCoord(src));
            p2 = metrics.mapToRealView(AwtArtefact.getCoord(trg));
            into.add(new AwtLinkFlob(p1, p2, d, r));
            r = AwtLinkRelation.next(r);
        }
	*/

        return lf;
    }

    public Flob makeFlob(FlobSet into, ZZCell c, ZZCell handleCell,
                         float fract, double x1, double y1, int d, 
			 double x2, double y2) {
	Point p1 = metrics.mapToRealView(x1, y1);
	Point p2 = metrics.mapToRealView(x2, y2);
	return makeFlob(into, c, handleCell, fract, p1.x, p1.y, d, p2.x, p2.y);
    }

    public Flob placeFlob(FlobSet f, 
			  ZZCell c, ZZCell handleCell,
			  float fract, 
			  int x, int y, int depth,
			  float xfract, float yfract)
	throws UnsupportedOperationException { 
	throw new UnsupportedOperationException();
    }
                        

    // should call centerFlob(..., null)
    public Flob centerFlob(FlobSet f,
			   ZZCell c, ZZCell handleCell,
			   float fract, Point p, int xalign, int yalign,
			   int depth) 
	throws UnsupportedOperationException { 
	throw new UnsupportedOperationException();
    }

    // if d==null, use what getSize would return
    public Flob centerFlob(FlobSet f,
			   ZZCell c, ZZCell handleCell,
			   float fract, Point p, int xalign, int yalign,
			   int depth, Dimension d) 
	throws UnsupportedOperationException { 
	throw new UnsupportedOperationException();
    }

}








See more files for this project here

gzz

An implementation of Ted Nelson's ZZstructure. ZZstructure is a new type of programming platform for structured data.

Project homepage: http://savannah.nongnu.org/projects/gzz
Programming language(s): C++,Java,Python
License: lgpl21

  Awt.zob
  AwtArtefact.java
  AwtArtefactFlobFactory.java
  AwtCursorIdentifier.java
  AwtCursors.java
  AwtDim.java
  AwtLayer.java
  AwtLinkCache.java
  AwtLinkFlobFactory.java
  AwtLinkRelation.java
  AwtMetrics.zob
  AwtMetricsFC.java
  AwtMetricsFC2.java
  AwtMetricsNormal.java
  AwtNile.java
  AwtNileView.java
  AwtNoteFlobFactory.java
  AwtOp.java
  AwtOpAND.java
  AwtOpOR.java
  AwtOperators.java
  AwtRelation.java
  AwtSetRelation.java
  AwtUtil.java
  AwtView2.java
  RelClang.java
  ZObCellRepr.java