📄 standarddrawingview.java
字号:
/* * @(#)StandardDrawingView.java 5.1 * */package CH.ifa.draw.standard;import java.awt.*;import java.awt.event.*;import java.util.*;import java.io.*;import CH.ifa.draw.util.*;import CH.ifa.draw.framework.*;/** * The standard implementation of DrawingView. * @see DrawingView * @see Painter * @see Tool */public class StandardDrawingView extends Panel implements DrawingView, MouseListener, MouseMotionListener, KeyListener { /** * The DrawingEditor of the view. * @see #tool * @see #setStatus */ transient private DrawingEditor fEditor; /** * The shown drawing. */ private Drawing fDrawing; /** * the accumulated damaged area */ private transient Rectangle fDamage = null; /** * The list of currently selected figures. */ transient private Vector fSelection; /** * The shown selection handles. */ transient private Vector fSelectionHandles; /** * The preferred size of the view */ private Dimension fViewSize; /** * The position of the last mouse click * inside the view. */ private Point fLastClick; /** * A vector of optional backgrounds. The vector maintains * a list a view painters that are drawn before the contents, * that is in the background. */ private Vector fBackgrounds = null; /** * A vector of optional foregrounds. The vector maintains * a list a view painters that are drawn after the contents, * that is in the foreground. */ private Vector fForegrounds = null; /** * The update strategy used to repair the view. */ private Painter fUpdateStrategy; /** * The grid used to constrain points for snap to * grid functionality. */ private PointConstrainer fConstrainer; /* * Serialization support. In JavaDraw only the Drawing is serialized. * However, for beans support StandardDrawingView supports * serialization */ private static final long serialVersionUID = -3878153366174603336L; private int drawingViewSerializedDataVersion = 1; /** * Constructs the view. */ public StandardDrawingView(DrawingEditor editor, int width, int height) { fEditor = editor; fViewSize = new Dimension(width,height); fLastClick = new Point(0, 0); fConstrainer = null; fSelection = new Vector(); setDisplayUpdate(new BufferedUpdateStrategy()); setBackground(Color.lightGray); addMouseListener(this); addMouseMotionListener(this); addKeyListener(this); } /** * Sets the view's editor. */ public void setEditor(DrawingEditor editor) { fEditor = editor; } /** * Gets the current tool. */ public Tool tool() { return fEditor.tool(); } /** * Gets the drawing. */ public Drawing drawing() { return fDrawing; } /** * Sets and installs another drawing in the view. */ public void setDrawing(Drawing d) { clearSelection(); if (fDrawing != null) fDrawing.removeDrawingChangeListener(this); fDrawing = d; if (fDrawing != null) fDrawing.addDrawingChangeListener(this); checkMinimumSize(); repaint(); } /** * Gets the editor. */ public DrawingEditor editor() { return fEditor; } /** * Adds a figure to the drawing. * @return the added figure. */ public Figure add(Figure figure) { return drawing().add(figure); } /** * Removes a figure from the drawing. * @return the removed figure */ public Figure remove(Figure figure) { return drawing().remove(figure); } /** * Adds a vector of figures to the drawing. */ public void addAll(Vector figures) { FigureEnumeration k = new FigureEnumerator(figures); while (k.hasMoreElements()) add(k.nextFigure()); } /** * Gets the minimum dimension of the drawing. */ public Dimension getMinimumSize() { return fViewSize; } /** * Gets the preferred dimension of the drawing.. */ public Dimension getPreferredSize() { return getMinimumSize(); } /** * Sets the current display update strategy. * @see UpdateStrategy */ public void setDisplayUpdate(Painter updateStrategy) { fUpdateStrategy = updateStrategy; } /** * Gets the currently selected figures. * @return a vector with the selected figures. The vector * is a copy of the current selection. */ public Vector selection() { // protect the vector with the current selection return (Vector)fSelection.clone(); } /** * Gets an enumeration over the currently selected figures. */ public FigureEnumeration selectionElements() { return new FigureEnumerator(fSelection); } /** * Gets the currently selected figures in Z order. * @see #selection * @return a vector with the selected figures. The vector * is a copy of the current selection. */ public Vector selectionZOrdered() { Vector result = new Vector(fSelection.size()); FigureEnumeration figures = drawing().figures(); while (figures.hasMoreElements()) { Figure f= figures.nextFigure(); if (fSelection.contains(f)) { result.addElement(f); } } return result; } /** * Gets the number of selected figures. */ public int selectionCount() { return fSelection.size(); } /** * Adds a figure to the current selection. */ public void addToSelection(Figure figure) { if (!fSelection.contains(figure)) { fSelection.addElement(figure); fSelectionHandles = null; figure.invalidate(); selectionChanged(); } } /** * Adds a vector of figures to the current selection. */ public void addToSelectionAll(Vector figures) { FigureEnumeration k = new FigureEnumerator(figures); while (k.hasMoreElements()) addToSelection(k.nextFigure()); } /** * Removes a figure from the selection. */ public void removeFromSelection(Figure figure) { if (fSelection.contains(figure)) { fSelection.removeElement(figure); fSelectionHandles = null; figure.invalidate(); selectionChanged(); } } /** * If a figure isn't selected it is added to the selection. * Otherwise it is removed from the selection. */ public void toggleSelection(Figure figure) { if (fSelection.contains(figure)) removeFromSelection(figure); else addToSelection(figure); selectionChanged(); } /** * Clears the current selection. */ public void clearSelection() { Figure figure; FigureEnumeration k = selectionElements(); while (k.hasMoreElements()) k.nextFigure().invalidate(); fSelection = new Vector(); fSelectionHandles = null; selectionChanged(); } /** * Gets an enumeration of the currently active handles. */ private Enumeration selectionHandles() { if (fSelectionHandles == null) { fSelectionHandles = new Vector(); FigureEnumeration k = selectionElements(); while (k.hasMoreElements()) { Figure figure = k.nextFigure(); Enumeration kk = figure.handles().elements(); while (kk.hasMoreElements()) fSelectionHandles.addElement(kk.nextElement()); } } return fSelectionHandles.elements(); } /** * Gets the current selection as a FigureSelection. A FigureSelection * can be cut, copied, pasted. */ public FigureSelection getFigureSelection() { return new FigureSelection(selectionZOrdered()); } /** * Finds a handle at the given coordinates. * @return the hit handle, null if no handle is found. */ public Handle findHandle(int x, int y) { Handle handle; Enumeration k = selectionHandles();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -