/* * TouchGraph LLC. Apache-Style Software License * * * Copyright (c) 2001-2002 Alexander Shapiro. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by * TouchGraph LLC (http://www.touchgraph.com/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "TouchGraph" or "TouchGraph LLC" must not be used to endorse * or promote products derived from this software without prior written * permission. For written permission, please contact * alex@touchgraph.com * * 5. Products derived from this software may not be called "TouchGraph", * nor may "TouchGraph" appear in their name, without prior written * permission of alex@touchgraph.com. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL TOUCHGRAPH OR ITS CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * */ package com.touchgraph.wikibrowser; import com.touchgraph.graphlayout.TGPanel; import java.awt.*; import java.io.*; /** WikiNode: A WikiBrowser Node. Extends node by adding data storage for URL's, hints. * Some minor modifications have been made to the paint methods, allowing node color * to show through on selection. * * @author Alexander Shapiro * @version 1.02 $Id: WikiNode.java,v 1.1.1.1 2007/01/07 07:58:19 andrew Exp $ */ public class WikiNode extends com.touchgraph.graphlayout.Node { public static Color MOUSE_OVER_HYPERLINK_COLOR = Color.cyan; String url; int hintWidth = 300; int hintHeight = 300; //A value of less then MINIMUM_HINT_HEIGHT means that the hint height //is automatically determined boolean mouseOverHyperlink; public WikiNode() { this(null,"",""); } public WikiNode(String l) { this(null,l,""); } public WikiNode(String id, String l, String u) { super(id, l); url = u; mouseOverHyperlink = false; } public void setURL(String u) { url = u; } public String getURL() { return url; } public void setMouseOverHyperlink(boolean mohl) { mouseOverHyperlink = mohl; } public boolean getMouseOverHyperlink() { return mouseOverHyperlink; } public int getWidth() { if(fontMetrics!=null && lbl!=null) { if(typ!=TYPE_ELLIPSE) return fontMetrics.stringWidth(lbl) + 8; else return fontMetrics.stringWidth(lbl) + 28; } else return 8; } public int getHeight() { if (fontMetrics!=null) return fontMetrics.getHeight()+2; else return 8; } Color myBrighter(Color c) { int r = c.getRed(); int g = c.getGreen(); int b = c.getBlue(); if(b>r+64&&b>g+64) {r+=32;g+=32;} r=Math.min(r+144, 255); g=Math.min(g+144, 255); b=Math.min(b+144, 255); return new Color(r,g,b); } public void paint(Graphics g, TGPanel tgPanel) { if (!intersects(tgPanel.getSize()) ) return; paintNodeBody(g, tgPanel); int ix = (int)drawx; int iy = (int)drawy; int h = getHeight(); int w = getWidth(); if ( visibleEdgeCount()<edgeCount() ) { int tagX = ix+(w-6)/2-2+w%2; int tagY = iy-h/2-3; String hiddenEdgeStr = String.valueOf(edgeCount()-visibleEdgeCount()); g.setColor(Color.red); g.fillRect(tagX, tagY, 3+5*hiddenEdgeStr.length(), 8); g.setColor(Color.white); g.setFont(SMALL_TAG_FONT); g.drawString(hiddenEdgeStr, tagX+2, tagY+7); } } public Color getPaintUnselectedBackColor() { if (fixed) return BACK_FIXED_COLOR; if (markedForRemoval) return backColor.darker().darker(); if (justMadeLocal) return myBrighter(backColor); return backColor; } public Color getPaintTextColor(TGPanel tgPanel) { if ( this == tgPanel.getSelect() ) { return getPaintUnselectedBackColor(); } else { return textColor; } } public Color getPaintBackColor(TGPanel tgPanel) { if (mouseOverHyperlink) return MOUSE_OVER_HYPERLINK_COLOR; if ( this == tgPanel.getSelect() ) { return BACK_SELECT_COLOR; } else { return getPaintUnselectedBackColor(); } } public Color getPaintBorderColor(TGPanel tgPanel) { if ( this == tgPanel.getSelect() ) { if (fixed) return BACK_FIXED_COLOR; if (markedForRemoval) return new Color(100,60,40); if (justMadeLocal) return new Color(255,220,200); return backColor; } else { return super.getPaintBorderColor(tgPanel); } } }