view src/share/tools/IdealGraphVisualizer/Text Editor/src/at/ssw/visualizer/texteditor/hyperlink/HyperlinkProvider.java @ 2843:6960cc79f664

IdealGraphVisualizer: Import editor component from C1XVisualizer
author Peter Hofer <peter.hofer@jku.at>
date Wed, 01 Jun 2011 15:22:40 +0200
parents
children
line wrap: on
line source

package at.ssw.visualizer.texteditor.hyperlink;

import at.ssw.visualizer.texteditor.model.Scanner;
import at.ssw.visualizer.texteditor.model.Text;
import at.ssw.visualizer.texteditor.model.TextRegion;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;
import org.netbeans.editor.TokenID;
import org.netbeans.editor.Utilities;

/**
 * 
 * @author Bernhard Stiftner
 * @author Christian Wimmer
 * @author Alexander Reder
 */
public class HyperlinkProvider implements org.netbeans.lib.editor.hyperlink.spi.HyperlinkProvider {
    
    protected Scanner scanner = null;
    
    protected TextRegion findTarget(Document doc, int offset) {
        Text text = (Text) doc.getProperty(Text.class);
        if (text == null) {
            return null;
        }
        
        scanner = text.getScanner();
        scanner.setText(doc);
        scanner.findTokenBegin(offset);
        TokenID token = scanner.nextToken();
        if (token.getNumericID() < 0) {
            return null;
        }
        
        return text.getHyperlinkTarget(scanner.getTokenString());
    }

    public boolean isHyperlinkPoint(Document doc, int offset) {
        return findTarget(doc, offset) != null;
    }

    public int[] getHyperlinkSpan(Document doc, int offset) {
        if (findTarget(doc, offset) != null) {
            return new int[]{scanner.getTokenOffset(), scanner.getTokenOffset() + scanner.getTokenLength()};
        }
        return null;
    }

    public void performClickAction(Document doc, int offset) {
        TextRegion target = findTarget(doc, offset);
        if (target != null) {
            JTextComponent editor = Utilities.getFocusedComponent();
            editor.select(target.getStart(), target.getEnd());
        }
    }

}