Code Search for Developers
 
 
  

AwtUtil.java from gzz at Krugle


Show AwtUtil.java syntax highlighted

/*   
AwtUtil.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.*;

/** Some general stuff
 */

public class AwtUtil {
    public static boolean dbg = false;
    static final void p(String s) { if(dbg) System.out.println(s); }
    static final void pa(String s) { System.out.println(s); }

    /** return active metrics
     *  @vc view cell 
     */
    /*
    public static AwtMetrics getActiveMetrics(ZZCell awtlocals) {
	ZZCell metr = AwtCursors.get(AwtCursors.c_metrics, awtlocals);
        if(metr==null) {
            metr = findLocals("Metrics", awtlocals, false);
            if(metr == null) 
                throw new ZZError("Awtool2: Couldn't initialize metrics!!");
            metr = metr.s("d.1");
        }

        pa("[AwtUtil]: Metrics: "+metr);
        AwtMetrics M = (AwtMetrics)readModuleZOb(metr);
        M.setCell(metr);
        return M;
    }         
    */
    /* return AwtArtefact or AwtLinkRelation, if possible.
     * 'layer' is needed, because several artefact clones
     * may shere the same text span, and we need to decide 
     * the artefact in concern!
     */
    public static Object getAwtObject(ZZScene xi, Point pt, ZZCell layer) {
	if(pt != null && xi != null) {
	    Object ob = xi.getObjectAt(pt.x, pt.y);
	    if(ob == null) return null;
	    ZZCell ac = disinterCell(ob, layer);
	    if(ac == null) return null;
	    return getAwtObject(ac);
	}
	return null;
    }

    public static Object getAwtObject(ZZCell ac) {
	Object ao = null;
	ZZCell lroot;
	if(AwtArtefact.valid(ac)) {
	    ao = new AwtArtefact(ac);
	} else
	if(AwtLinkRelation.isLinkRelation(ac)) {
	    lroot = AwtLinkRelation.getLinkRoot(ac);
	    ao = new AwtLinkRelation(lroot);
	} else
	if(AwtLayer.valid(ac))
	    ao = new AwtLayer(ac);
	pa("return awtobj: "+ao);
	return ao;
    }

    /** return artefact cell (or link relation cell), if possible 
     */
    public static ZZCell disinterCell(Object ob, ZZCell layer) {
        ZZCell c = null;
        if(ob instanceof ZZCursor) c = ((ZZCursor)ob).get(); 
        else if(ob instanceof ZZCell) c = (ZZCell)ob;
        else return null;
	// might be a nile span
        ZZCell cl = c.h(AwtDim.d_nile);
	if(!cl.equals(c)) cl=cl.s("d.1", -1);
	// now 'cl' is layer / artefact root cell ...
	// ... move to last artefact along 'd.clone'
	cl = cl.h("d.clone", 1);
	for(; cl != null; cl=cl.s("d.clone", -1)) {
	    if(cl.s(AwtDim.d_member, -1) != null && 
	       cl.s(AwtDim.d_member, -1).h(AwtDim.d_layerset).equals(layer)) 
		return cl; 
	} 
	// 'c' might be link relation, dont know yet...
	pa("disinter returns: "+c);
	return c;
    }

    /* is 'sc' 'artef's span cell
     */
    public static boolean isPartOfspan(ZZCell sc, ZZCell artef) {
	ZZCell sch = sc.h(AwtDim.d_nile);
	return sch.findCell("d.clone", 1, artef); 
    }

    /* return view cell
     */
    public static ZZCell launchView(ZZCell home, ZZCell target) {

        //ZZCell awtlocals = target;
                
        // View
        ZZCell rastname, rl, rc;

	rc = findLocals("View", home, true);
        if(rc.s("d.1") == null) {
            rl = rc.N("d.1");
            rl.connect("d.2", 1, rl);
            rl.setText("Awt"); 
            rastname = rl.N("d.1");
            rastname.setText("Awt.View2");
        } else {
            rl = rc.s("d.1");
            rastname = rl.s("d.1");
        }

        // Bindings                
        ZZCell bindhome = findLocals("Bind", home, true);
        if(bindhome.s("d.1") == null) {
            bindhome = bindhome.N("d.1", 1);
            
            AwtNile.awt_nile_actions(bindhome);
            embed_awt_actions(bindhome);
            
        } else bindhome = bindhome.s("d.1");
        
	// Bgpatterns (images)
        ZZCell imageroot = findLocals("Images", home, true);
        if(imageroot.s("d.1") == null) {
            ZZCell images = imageroot.N("d.1"); 
	    images.setText("file:///home/kimmo/awtbgimages/");
            images = images.N("d.1"); 
            //images.setText("default.gif"); images.N("d.1").setText("2");
	    //images = images.N("d.2");
            images.setText("cloud.gif"); images.N("d.1").setText("2");
	    images = images.N("d.2");
            images.setText("default2.gif"); images.N("d.1").setText("3");
	    images = images.N("d.2");
            images.setText("stone.gif"); images.N("d.1").setText("3");
	    images = images.N("d.2");
            //images.setText("moonstone.jpg"); images.N("d.1").setText("2");   
	    //images = images.N("d.2");
            images.setText("colorful1.jpg"); images.N("d.1").setText("1");   
	    images = images.N("d.2");
            //images.setText("colorful2.jpg"); images.N("d.1").setText("4");   
	    //images = images.N("d.2");
            images.setText("#DEFAULT"); images.N("d.1").setText("4");   
        }

        // View metrics
        AwtMetrics M;
        ZZCell metr = findLocals("Metrics", home, true);
        if(metr.s("d.1") == null) {
            Dimension RV = new Dimension(400, 400);
            Dimension VV = new Dimension(1000, 1000);
            ZZCell mnew, metrList;
            
            mnew = metrList = metr.N("d.1");
            
            M = new AwtMetricsNormal(mnew, RV, VV, 0.0,0.0);
            M.cellRepr();
            
            mnew = mnew.N("d.2");
            M = new AwtMetricsFC(mnew, RV, VV, 0.0, 0.0);
            M.cellRepr();
            
            mnew = mnew.N("d.2");
            M = new AwtMetricsFC2(mnew, RV, VV, 0.0, 0.0);
            M.cellRepr();
            
            // make a loop
            mnew.connect("d.2", 1, metrList);
            //AwtCursors.set(AwtCursors.c_metrics, metrList, awtlocals);                    
        } else {
	    M = (AwtMetrics)readModuleZOb(metr.s("d.1"));
	    M.setCell(metr.s("d.1"));
	}

	/*else {
            ZZCell currentMetrics =
                AwtCursors.get(AwtCursors.c_metrics, awtlocals);
            if(currentMetrics == null) {
                currentMetrics = metr.s("d.1");
                AwtCursors.set(AwtCursors.c_metrics, currentMetrics, awtlocals);
            }
            M = (AwtMetrics)readModuleZOb(currentMetrics);
            M.setCell(currentMetrics);
        }
	*/
        
        ZZCell v = ZZDefaultSpace.newToplevelView(rc.getSpace(), 
                                                  "awtool", 0, 0, M.RealView[0], M.RealView[1], 
                                                  rl, null, 
                                                  null, null,
                                                  null,
                                                  new Color(0xE5FFE5));
        
        // Then, set bindings
        ZZCell bcurs = v.getOrNewCell("d.bind", 1);
        ZZCursorReal.set(bcurs, bindhome);
        ZZCursorReal.setColor(bcurs, Color.black);

	if(target.h(AwtDim.d_artefact).equals(target)) {
	    ZZCell layer;
	    layer = home.h(AwtDim.d_artefact, 1);
	    if(home.equals(layer)) layer = home.N(AwtDim.d_artefact); 
	    AwtNile.initSpanCursors(layer);
	    // init style!
	    layer.connect(AwtDim.d_style, 1, 
			  imageroot.s("d.1", 2).h("d.2", 1).zzclone());

	    ZZCursorReal.set(v, layer);
	    
	} else {
	    ZZCursorReal.set(v, target);	    
	}
	return v;
	
    }


    /** Construct and return a ZOb of the given type.
     */
    public static ZOb newModuleZOb(String id) {
    // XXX Figure out if we can cache something.
    // XXX Should ZOb be able to reset? Easier or less easy than
    // recreate? At least ZObs should cache...
        try {
            Class z = Class.forName("org.gzigzag.module."+id);
            return (ZOb)Class.forName("org.gzigzag.module."+id).newInstance();
        } catch(Exception e) {
            ZZLogger.exc(e);
            return null;
        }
    }
    
    /** Construct a ZOb corresponding to a cell and read the params.
     * DOES NOT Go to the rootclone, takes the next cell on d.1 as the ZOb's name,
     * and takes the NEXT cell on d.1 as the head of the list from which to
     * read the structparams.
     */
    /*  Differs from readZOb by considering clones themselves as zobs and
     *  also uses 'newModuleZOb' in order to read ZOb-class.
     */
    static public ZOb readModuleZOb(ZZCell start) {
	//ZZCell c = start.h("d.clone", -1).s("d.1", 1);
        
        if(start.s("d.1") == null) start = start.h("d.clone", -1);
	ZZCell c = start.s("d.1", 1);
	if(c == null)
	    throw new ZZError("Error reading ZOb from cell "+start.getText());
	ZOb z = newModuleZOb(c.getText());
	z.readParams(c.s("d.1", 1));
	return z;
    }


    // This is really hacky part...
    static ZZCell curAct;
    static void a(String key, String act) { a(key, act, null); }
    static void a(String key, String act, ZZCell next) {
	curAct = curAct.N("d.2", 1);
	curAct.setText(key);
	ZZCell n = curAct.N("d.1", 1);
	n.setText("Awt." + act);
	if(next != null)
	    next.insert("d.3", 1, n);
    }

    static void embed_awt_actions(ZZCell start) {
        // awtool acts
        ZZCell awtActs = start.N("d.1", -1); 
        awtActs.setText("Awt core actions");

        curAct = awtActs;
        a("MouseStartDrag", "StartDrag");
        a("MouseDragged1", "Dragged");
        a("MouseReleased1", "StopDrag");
        a("Ctrl-MouseStartDrag", "StartResize");
        a("Ctrl-MouseDragged1", "Resizing");
        a("Ctrl-MouseReleased1", "StopResize");
        a("Shift-MouseStartDrag", "StartCreatingArtefact");
        a("Shift-MouseDragged1", "CreatingArtefact");
        a("Shift-MouseReleased1", "StopCreatingArtefact");
        a("Shift-MouseClicked3", "ChangeOrigo");
        a("MouseClicked3", "FocusOrigoAndSelect");
        a("Shift-MouseClicked1", "SetInput2");
        a("MouseClicked1", "SetInput1");
        a("l", "NewLink");
        a("r", "RemoveLink");
        a("Alt-R", "RemoveArtefact");
        //a("Alt-J", "JoinArtefacts");
        a("Up", "ChangeLayer + 1");
        a("Down", "ChangeLayer - 1");
        a("Shift-Up", "ChangeLayer + END");
        a("Shift-Down", "ChangeLayer - END");
        a("Alt-C", "CloneArtefact");
        a("Alt-T", "TranscludeArtefact");
        a("Alt-Enter", "LaunchView");
        a("m", "ChangeMetrics");
        a("Alt-Up", "ChangeArtefactStyle +");
        a("Alt-Down", "ChangeArtefactStyle -");
        a("g", "GridOnOff");
        a("r", "ResetOrigo");
        a("Alt-H", "MainLayer");
        a("Alt-Q", "Quit"); // saves the space
        a("Alt-N", "NileOnOff", start);

        // hack!! add 'NileOnOff' action into all Nile modes...
	AwtNile.Tokenizer tokenizer = new AwtNile.Tokenizer();
	Nile2Unit u = null;
        for(ZZCell mode=start; mode != null; mode = mode.s("d.1")) {
            curAct = mode;
	    for(ZZCell act=mode.s("d.2"); act != null; act = act.s("d.2")) {
		tokenizer.set_id(act.s("d.1").t());
		u = tokenizer.unit();
		pa("mode="+mode+" act="+act+" unit="+u);
		if(u != null) break;
	    }
	    if(u != null) {
		tokenizer.set_id("SplitNote 0 WORD");
		tokenizer.set_unit(u);
		a("Alt-S", tokenizer.id());
		tokenizer.set_id("JoinArtefacts 0 WORD");
		a("Alt-J", tokenizer.id());
	    }
            a("Alt-N", "NileOnOff", awtActs);
        }
    }


    /** find local variable
     *  @create   create new slot for variable, if it does not exist yet
     */
    public static ZZCell findLocals(String id, ZZCell c, boolean
                                     create) {
	ZZCell locals = c.getSpace().getHomeCell();
        ZZCell retloc = locals.findText(AwtDim.d_locals, 1, id);
        if(retloc == null && create) {
            retloc = locals.h(AwtDim.d_locals, 1).N(AwtDim.d_locals);
            retloc.setText(id);
        }
        return retloc;
    }

    public static void closeView(ZZCell awtlocals) {
        ZZCell rc = awtlocals.findText(AwtDim.d_locals, 1, "View");        
        rc.excise(AwtDim.d_locals);
    }

    static public void renderGrid(FlobSet into, AwtMetrics M, double x1, 
				  double y1, double x2, double y2, 
				  Color color, int density) 
        {
        double[] coord = new double[2], 
	         cstart = new double[2], cinc = new double[2],
                 d = new double[2], dh = new double[2];
        Point p1, p2;
        int i, j, a, b;
        cstart[0] = (x1 < x2) ? x1 : x2;
        cstart[1] = (y1 < y2) ? y1 : x2;
        cinc[0] = Math.abs((x2-x1) / ((double)density + 1.0));
        cinc[1] = Math.abs((y2-y1) / ((double)density + 1.0));
        d[0] = cinc[0] / 5.0;
        d[1] = cinc[1] / 5.0;
        dh[0] = d[0]/2.0;
        dh[1] = d[1]/2.0;
 
        LineDecor.Builder ldb = new LineDecor.Builder(into, color);
 
        for(a=0; a<2; a++) {
            b = (a==0) ? 1 : 0;
            coord[a] = cstart[a];
            for(i=0; i<=density+1; i++) {
                coord[b] = cstart[b]+dh[b]/2.0;
                ldb.startl((density+1)*20, 2000);
                for(j=1; j<=(density+1)*5; j++) {
                    p1 = M.mapToRealView(coord);
                    coord[b] += dh[b];
                    p2 = M.mapToRealView(coord);
                    coord[b] += dh[b];
                    ldb.l(p1.x, p1.y, p2.x, p2.y);
                }
                ldb.endl();
                coord[a] += cinc[a];
            }
        }
    }                       

}












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