visidor/src/visidor/Viewer.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sun, 24 May 2009 14:14:25 +0200
changeset 18 a99cf2e77c27
child 19 ae8603970d9a
permissions -rw-r--r--
Skeleton of viewer based on visual library
jtulach@18
     1
/*
jtulach@18
     2
 * To change this template, choose Tools | Templates
jtulach@18
     3
 * and open the template in the editor.
jtulach@18
     4
 */
jtulach@18
     5
jtulach@18
     6
package visidor;
jtulach@18
     7
jtulach@18
     8
import java.awt.Color;
jtulach@18
     9
import java.awt.Point;
jtulach@18
    10
import java.awt.Rectangle;
jtulach@18
    11
import javax.swing.JFrame;
jtulach@18
    12
import org.netbeans.api.visual.action.ActionFactory;
jtulach@18
    13
import org.netbeans.api.visual.action.MoveProvider;
jtulach@18
    14
import org.netbeans.api.visual.anchor.AnchorFactory;
jtulach@18
    15
import org.netbeans.api.visual.border.BorderFactory;
jtulach@18
    16
import org.netbeans.api.visual.widget.ConnectionWidget;
jtulach@18
    17
import org.netbeans.api.visual.widget.ImageWidget;
jtulach@18
    18
import org.netbeans.api.visual.widget.LabelWidget;
jtulach@18
    19
import org.netbeans.api.visual.widget.LayerWidget;
jtulach@18
    20
import org.netbeans.api.visual.widget.Scene;
jtulach@18
    21
import org.netbeans.api.visual.widget.Widget;
jtulach@18
    22
jtulach@18
    23
/**
jtulach@18
    24
 *
jtulach@18
    25
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jtulach@18
    26
 */
jtulach@18
    27
public class Viewer implements MoveProvider {
jtulach@18
    28
jtulach@18
    29
    /**
jtulach@18
    30
     * @param args the command line arguments
jtulach@18
    31
     */
jtulach@18
    32
    public static void main(String[] args) {
jtulach@18
    33
        Scene scene = new Scene();
jtulach@18
    34
//        Scene layerBoard = scene;
jtulach@18
    35
        final LayerWidget layerLines = new LayerWidget(scene);
jtulach@18
    36
        scene.addChild(layerLines);
jtulach@18
    37
        final LayerWidget layerBoard = new LayerWidget(scene);
jtulach@18
    38
        layerLines.addChild(layerBoard);
jtulach@18
    39
        final int WIDTH = 50;
jtulach@18
    40
        final int HEIGHT = 50;
jtulach@18
    41
//        conn.setSourceAnchor(ahoj);
jtulach@18
    42
        Widget[][] fields = new Widget[10][];
jtulach@18
    43
        for (int i = 0; i < fields.length; i++) {
jtulach@18
    44
            fields[i] = new Widget[10];
jtulach@18
    45
            for (int j = 0; j < fields[i].length; j++) {
jtulach@18
    46
                LabelWidget w = new LabelWidget(scene);
jtulach@18
    47
                w.setPreferredBounds(new Rectangle(i * WIDTH, j * HEIGHT, WIDTH, HEIGHT));
jtulach@18
    48
                layerBoard.addChild(w);
jtulach@18
    49
                fields[i][j] = w;
jtulach@18
    50
            }
jtulach@18
    51
        }
jtulach@18
    52
        for (int i = 0; i < fields.length; i++) {
jtulach@18
    53
            for (int j = 0; j < fields[i].length; j++) {
jtulach@18
    54
                if (i > 0) {
jtulach@18
    55
                    ConnectionWidget horiz = new ConnectionWidget(scene);
jtulach@18
    56
                    horiz.setSourceAnchor(AnchorFactory.createCenterAnchor(fields[i - 1][j]));
jtulach@18
    57
                    horiz.setTargetAnchor(AnchorFactory.createCenterAnchor(fields[i][j]));
jtulach@18
    58
                    scene.addChild(horiz);
jtulach@18
    59
                }
jtulach@18
    60
                if (j > 0) {
jtulach@18
    61
                    ConnectionWidget vert = new ConnectionWidget(scene);
jtulach@18
    62
                    vert.setSourceAnchor(AnchorFactory.createCenterAnchor(fields[i][j - 1]));
jtulach@18
    63
                    vert.setTargetAnchor(AnchorFactory.createCenterAnchor(fields[i][j]));
jtulach@18
    64
                    scene.addChild(vert);
jtulach@18
    65
                }
jtulach@18
    66
            }
jtulach@18
    67
        }
jtulach@18
    68
jtulach@18
    69
        ImageWidget horizontalWall = new ImageWidget(scene);
jtulach@18
    70
        horizontalWall.setPreferredBounds(new Rectangle(550, 300, 100, 10));
jtulach@18
    71
        horizontalWall.setBackground(Color.BLACK);
jtulach@18
    72
        horizontalWall.getActions().addAction(ActionFactory.createMoveAction(null, new Viewer(true)));
jtulach@18
    73
        horizontalWall.setForeground(Color.BLACK);
jtulach@18
    74
        horizontalWall.setBorder(BorderFactory.createLineBorder());
jtulach@18
    75
        layerBoard.addChild(horizontalWall);
jtulach@18
    76
jtulach@18
    77
        ImageWidget verticalWall = new ImageWidget(scene);
jtulach@18
    78
        verticalWall.setPreferredBounds(new Rectangle(600, 150, 10, 100));
jtulach@18
    79
        verticalWall.setBackground(Color.BLACK);
jtulach@18
    80
        verticalWall.getActions().addAction(ActionFactory.createMoveAction(null, new Viewer(false)));
jtulach@18
    81
        verticalWall.setBorder(BorderFactory.createLineBorder());
jtulach@18
    82
        layerBoard.addChild(verticalWall);
jtulach@18
    83
jtulach@18
    84
        JFrame f = new JFrame();
jtulach@18
    85
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jtulach@18
    86
        
jtulach@18
    87
        f.add(scene.createView());
jtulach@18
    88
        f.pack();
jtulach@18
    89
        f.setVisible(true);
jtulach@18
    90
    }
jtulach@18
    91
jtulach@18
    92
    final boolean horizontal;
jtulach@18
    93
jtulach@18
    94
    Point orig;
jtulach@18
    95
jtulach@18
    96
    private Viewer(boolean horizontal) {
jtulach@18
    97
        this.horizontal = horizontal;
jtulach@18
    98
    }
jtulach@18
    99
    public void movementStarted(Widget widget) {
jtulach@18
   100
        System.err.println("started: " + widget.getBounds());
jtulach@18
   101
    }
jtulach@18
   102
jtulach@18
   103
    public void movementFinished(Widget widget) {
jtulach@18
   104
        System.err.println("finished: " + widget.getLocation());
jtulach@18
   105
    }
jtulach@18
   106
jtulach@18
   107
    public Point getOriginalLocation(Widget widget) {
jtulach@18
   108
        orig = new Point(widget.getBounds().x, widget.getBounds().y);
jtulach@18
   109
        System.err.println("orig: " + orig);
jtulach@18
   110
        return orig;
jtulach@18
   111
    }
jtulach@18
   112
jtulach@18
   113
    public void setNewLocation(Widget widget, Point location) {
jtulach@18
   114
        widget.setPreferredBounds(new Rectangle(
jtulach@18
   115
            round(location.x, true),
jtulach@18
   116
            round(location.y, false),
jtulach@18
   117
            horizontal ? 100 : 10,
jtulach@18
   118
            horizontal ? 10 : 100)
jtulach@18
   119
        );
jtulach@18
   120
    }
jtulach@18
   121
jtulach@18
   122
    int round(int p, boolean cmpHori) {
jtulach@18
   123
//        p = horizontal ? orig.x + p: orig.y + p;
jtulach@18
   124
        int onboard = p / 50;
jtulach@18
   125
        System.err.println(cmpHori ? "hori: " + onboard : "  vert: " + onboard);
jtulach@18
   126
        if (onboard < 0) {
jtulach@18
   127
            onboard = 0;
jtulach@18
   128
        }
jtulach@18
   129
        if (onboard >= 9) {
jtulach@18
   130
            return p;
jtulach@18
   131
        }
jtulach@18
   132
        int real = 25 + onboard * 50;
jtulach@18
   133
        if (horizontal != cmpHori) {
jtulach@18
   134
            return real - 5;
jtulach@18
   135
        } else {
jtulach@18
   136
            return real;
jtulach@18
   137
        }
jtulach@18
   138
    }
jtulach@18
   139
}