// (c) Tuomas J. Lukka package org.fenfire.view.buoy; import org.nongnu.libvob.*; import org.nongnu.libvob.buoy.*; import org.nongnu.libvob.impl.DefaultVobMatcher; import org.nongnu.alph.*; import org.fenfire.*; import org.fenfire.swamp.*; import org.fenfire.view.*; import org.fenfire.view.buoy.*; import org.fenfire.util.*; import org.fenfire.vocab.*; import java.awt.Rectangle; import java.util.Iterator; import java.util.List; /** Hang transclusion buoys. */ public class TransclusionConnector implements BuoyViewConnector { public static final String rcsid = "$Id: TransclusionConnector.java,v 1.1 2003/04/27 08:05:32 tjl Exp $"; public static boolean dbg = true; private static void pa(String s) { System.out.println("PPLinker:"+s); } private Fen fen; public NodeType2D pageImageScrollNodeType; public NodeType2D normalNodeNodeType; // Function: node -> pair(scrollblock, rect) private class SB4Node implements NodeFunction { public Object f(ConstGraph g, Object node) { Enfilade1D enf = (Enfilade1D)fen.txtfunc.f(g, node); List l = enf.getList(); if(l.size() < 1) return null; Span sp = (Span)l.get(0); if (sp instanceof PageImageSpan) { return new Pair(sp.getScrollBlock(), new Rectangle(0,0,300,300)); } else { return null; } } } NodeFunction scrollBlockForNode ; public TransclusionConnector(Fen fen) { this.fen = fen; this.scrollBlockForNode = new CachedNodeFunction(1000, fen.constgraph, new SB4Node()); } public void addBuoys(VobScene vs, int parentCs, BuoyViewMainNode mainNode, BuoyLinkListener l) { if(!(mainNode instanceof MainNode2D)) return; MainNode2D mn2d = (MainNode2D)mainNode; if(mn2d.getView() == normalNodeNodeType.getView()) { DefaultVobMatcher m = (DefaultVobMatcher)vs.matcher; // Loop over the placed nodes' keys for(Iterator i=m.getKeys(parentCs).iterator(); i.hasNext();) { Object key = i.next(); if(!(key instanceof Pair)) continue; Pair pair = (Pair)key; Object node = pair.second; Object anchor = this.scrollBlockForNode.f(fen.constgraph, node); if(dbg) pa("Transclcon:: "+key+" "+pair.second+" "+anchor); if(anchor == null) continue; int cs =m.getCS(parentCs, key); l.link(1, cs, pageImageScrollNodeType, new Pair(node, ((Pair)anchor).first), anchor); } } else if(mn2d.getView() == pageImageScrollNodeType.getView()) { pa("TransclusionConnector: Pagescroll -> outside not impl"); } else {} pa("TransclusionConnector: Unknown view2d type"); } }