NullDrawingView.java
/*
* @(#)NullDrawingView.java
*
* Project: JHotdraw - a GUI framework for technical drawings
* http://www.jhotdraw.org
* http://jhotdraw.sourceforge.net
* Copyright: © by the original author(s) and all contributors
* License: Lesser GNU Public License (LGPL)
* http://www.opensource.org/licenses/lgpl-license.html
*/
package CH.ifa.draw.standard;
import CH.ifa.draw.framework.*;
import java.awt.*;
import java.util.*;
import javax.swing.JPanel;
/**
* This DrawingView provides a very basic implementation. It does not perform any
* functionality apart from keeping track of its state represented by some important
* fields. It is a Null-value object and is used instead of a null reference to
* avoid null pointer exception. This concept is known as the Null-value object
* bug pattern.
*
* @author Wolfram Kaiser
* @version <$CURRENT_VERSION$>
*/
public class NullDrawingView extends JPanel implements DrawingView {
private DrawingEditor myDrawingEditor;
private Drawing myDrawing;
private Painter myUpdateStrategy;
private Tool myTool;
private Color myBackgroundColor;
private static Hashtable drawingViewManager = new Hashtable();
public NullDrawingView(DrawingEditor editor) {
setEditor(editor);
myTool = new SelectionTool(editor());
setDrawing(new StandardDrawing());
}
/**
* Sets the view's editor.
*/
public void setEditor(DrawingEditor editor) {
myDrawingEditor = editor;
}
/**
* Gets the current tool.
*/
public Tool tool() {
return myTool;
}
/**
* Gets the drawing.
*/
public Drawing drawing() {
return myDrawing;
}
/**
* Sets and installs another drawing in the view.
*/
public void setDrawing(Drawing d) {
myDrawing = d;
}
/**
* Gets the editor.
*/
public DrawingEditor editor() {
return myDrawingEditor;
}
/**
* Adds a figure to the drawing.
* @return the added figure.
*/
public Figure add(Figure figure) {
return figure;
}
/**
* Removes a figure from the drawing.
* @return the removed figure
*/
public Figure remove(Figure figure) {
return figure;
}
/**
* Adds a vector of figures to the drawing.
*/
public void addAll(Vector figures) {
// ignore: do nothing
}
/**
* Gets the size of the drawing.
*/
public Dimension getSize() {
return new Dimension();
}
/**
* Gets the minimum dimension of the drawing.
*/
public Dimension getMinimumSize() {
return new Dimension();
}
/**
* Gets the preferred dimension of the drawing..
*/
public Dimension getPreferredSize() {
return new Dimension();
}
/**
* Sets the current display update strategy.
* @see Painter
*/
public void setDisplayUpdate(Painter newUpdateStrategy) {
myUpdateStrategy = newUpdateStrategy;
}
/**
* Gets the current display update strategy.
* @see Painter
*/
public Painter getDisplayUpdate() {
return myUpdateStrategy;
}
/**
* Gets the currently selected figures.
* @return a vector with the selected figures. The vector
* is a copy of the current selection.
*/
public Vector selection() {
return new Vector(0);
}
/**
* Gets an enumeration over the currently selected figures.
*/
public FigureEnumeration selectionElements() {
return FigureEnumerator.getEmptyEnumeration();
}
/**
* Gets the currently seleced 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() {
return new Vector(0);
}
/**
* Gets the number of selected figures.
*/
public int selectionCount() {
return 0;
}
/**
* Test whether a given figure is selected.
*/
public boolean isFigureSelected(Figure checkFigure) {
return false;
}
/**
* Adds a figure to the current selection.
*/
public void addToSelection(Figure figure) {
// ignore: do nothing
}
/**
* Adds a vector of figures to the current selection.
*/
public void addToSelectionAll(Vector figures) {
// ignore: do nothing
}
/**
* Adds a FigureEnumeration to the current selection.
*/
public void addToSelectionAll(FigureEnumeration fe) {
// ignore: do nothing
}
/**
* Removes a figure from the selection.
*/
public void removeFromSelection(Figure figure) {
// ignore: do nothing
}
/**
* If a figure isn't selected it is added to the selection.
* Otherwise it is removed from the selection.
*/
public void toggleSelection(Figure figure) {
// ignore: do nothing
}
/**
* Clears the current selection.
*/
public void clearSelection() {
// ignore: do nothing
}
/**
* Gets the current selection as a FigureSelection. A FigureSelection
* can be cut, copied, pasted.
*/
public FigureSelection getFigureSelection() {
return new StandardFigureSelection(selectionElements(), 0);
}
/**
* Finds a handle at the given coordinates.
* @return the hit handle, null if no handle is found.
*/
public Handle findHandle(int x, int y) {
return null;
}
/**
* Gets the position of the last click inside the view.
*/
public Point lastClick() {
return new Point();
}
/**
* Sets the current point constrainer.
*/
public void setConstrainer(PointConstrainer p) {
// ignore: do nothing
}
/**
* Gets the current grid setting.
*/
public PointConstrainer getConstrainer() {
return null;
}
/**
* Checks whether the drawing has some accumulated damage
*/
public void checkDamage() {
// ignore: do nothing
}
/**
* Repair the damaged area
*/
public void repairDamage() {
// ignore: do nothing
}
/**
* Paints the drawing view. The actual drawing is delegated to
* the current update strategy.
* @see Painter
*/
public void paint(Graphics g) {
// ignore: do nothing
}
/**
* Creates an image with the given dimensions
*/
public Image createImage(int width, int height) {
return null;
}
/**
* Gets a graphic to draw into
*/
public Graphics getGraphics() {
return null;
}
/**
* Gets the background color of the DrawingView
*/
public Color getBackground() {
return myBackgroundColor;
}
/**
* Sets the background color of the DrawingView
*/
public void setBackground(Color c) {
myBackgroundColor = c;
}
/**
* Draws the contents of the drawing view.
* The view has three layers: background, drawing, handles.
* The layers are drawn in back to front order.
*/
public void drawAll(Graphics g) {
// ignore: do nothing
}
/**
* Draws the given figures.
* The view has three layers: background, drawing, handles.
* The layers are drawn in back to front order.
*/
public void draw(Graphics g, FigureEnumeration fe) {
// ignore: do nothing
}
/**
* Draws the currently active handles.
*/
public void drawHandles(Graphics g) {
// ignore: do nothing
}
/**
* Draws the drawing.
*/
public void drawDrawing(Graphics g) {
// ignore: do nothing
}
/**
* Draws the background. If a background pattern is set it
* is used to fill the background. Otherwise the background
* is filled in the background color.
*/
public void drawBackground(Graphics g) {
// ignore: do nothing
}
/**
* Sets the cursor of the DrawingView
*/
public void setCursor(Cursor c) {
// ignore: do nothing
}
/**
* Freezes the view by acquiring the drawing lock.
* @see Drawing#lock
*/
public void freezeView() {
// ignore: do nothing
}
/**
* Unfreezes the view by releasing the drawing lock.
* @see Drawing#unlock
*/
public void unfreezeView() {
// ignore: do nothing
}
/**
* Add a listener for selection changes in this DrawingView.
* @param fsl jhotdraw.framework.FigureSelectionListener
*/
public void addFigureSelectionListener(FigureSelectionListener fsl) {
// ignore: do nothing
}
/**
* Remove a listener for selection changes in this DrawingView.
* @param fsl jhotdraw.framework.FigureSelectionListener
*/
public void removeFigureSelectionListener(FigureSelectionListener fsl) {
// ignore: do nothing
}
/**
* Returns the vector of connection figures
*/
public Vector getConnectionFigures(Figure inFigure) {
return new Vector(0);
}
/**
* Inserts figures in a drawing at given offset. Optional check for connection figures
*
* @return enumeration which has been added to the drawing. The figures in the enumeration
* can have changed during adding them (e.g. they could have been decorated).
*/
public FigureEnumeration insertFigures(FigureEnumeration inFigures, int dx, int dy, boolean bCheck) {
return FigureEnumerator.getEmptyEnumeration();
}
public void drawingInvalidated(DrawingChangeEvent e) {
// ignore: do nothing
}
public void drawingRequestUpdate(DrawingChangeEvent e) {
// ignore: do nothing
}
public boolean isInteractive() {
return false;
}
public synchronized static DrawingView getManagedDrawingView(DrawingEditor editor) {
if (drawingViewManager.containsKey(editor)) {
return (DrawingView)drawingViewManager.get(editor);
}
else {
DrawingView newDrawingView = new NullDrawingView(editor);
drawingViewManager.put(editor, newDrawingView);
return newDrawingView;
}
}
}