1 26 27 package org.nightlabs.editor2d.viewer; 28 29 import org.apache.log4j.Logger; 30 import org.eclipse.swt.graphics.Color; 31 import org.eclipse.swt.layout.GridLayout; 32 import org.eclipse.swt.widgets.Composite; 33 import org.nightlabs.editor2d.DrawComponent; 34 import org.nightlabs.editor2d.render.RenderModeManager; 35 36 public abstract class AbstractCanvasComposite 37 extends Composite 38 implements IViewer 39 { 40 public static final Logger LOGGER = Logger.getLogger(AbstractCanvasComposite.class.getName()); 41 42 public AbstractCanvasComposite(Composite parent, int style, DrawComponent dc) { 43 this(parent, style, dc, true); 44 } 45 46 public AbstractCanvasComposite(Composite parent, int style, DrawComponent dc, 47 boolean autoScroll) 48 { 49 super(parent, style); 50 this.autoScroll = autoScroll; 51 this.drawComponent = dc; 52 GridLayout layout = new GridLayout(1, true); 53 setLayout(layout); 54 init(this); 55 } 56 57 protected boolean autoScroll = true; 58 protected IAutoScrollSupport autoScrollSupport = null; 59 60 protected void init(Composite parent) 61 { 62 66 getHitTestManager(); 67 canvas = createCanvas(this); 68 mouseManager = initMouseManager(this); 69 getZoomSupport().addZoomListener(zoomListener); 70 updateCanvas(); 71 72 if (autoScroll) { 73 autoScrollSupport = initAutoScrollSupport(); 74 } 75 } 76 77 protected DrawComponent drawComponent; 78 79 83 public DrawComponent getDrawComponent() { 84 return drawComponent; 85 } 86 87 91 public void setDrawComponent(DrawComponent drawComponent) { 92 this.drawComponent = drawComponent; 93 hitTestManager = new HitTestManager(drawComponent); 94 } 95 96 100 public void updateCanvas() 101 { 102 if (canvas != null) 103 canvas.repaint(); 104 } 105 106 110 public void setZoom(double zoomFactor) { 111 setZoom(zoomFactor, false); 112 } 113 114 protected ICanvas canvas; 115 public ICanvas getCanvas() { 116 return canvas; 117 } 118 119 protected void setZoom(double zoomFactor, boolean internal) 120 { 121 if (internal) { 122 getZoomSupport().setZoom(zoomFactor); 123 } 124 double zoom = getZoom(); 125 if (canvas != null) { 126 canvas.setScale(zoom); 127 canvas.repaint(); 128 } 129 } 130 131 135 public double getZoom() { 136 return getZoomSupport().getZoom(); 137 } 138 139 public static Color defaultBgColor = new Color(null, 255, 255, 255); 140 protected Color bgColor = defaultBgColor; 141 142 146 public Color getBgColor() { 147 return bgColor; 148 } 149 150 154 public void setBgColor(Color bgColor) { 155 this.bgColor = bgColor; 156 canvas.setBackground(bgColor.getRed(), bgColor.getGreen(), bgColor.getBlue()); 157 } 158 159 protected SelectionManager selectionManager = new SelectionManager(this); 161 162 166 public SelectionManager getSelectionManager() { 167 return selectionManager; 168 } 169 170 protected IZoomSupport zoomSupport = null; 171 public IZoomSupport getZoomSupport() 172 { 173 if (zoomSupport == null) 174 zoomSupport = new ZoomSupport(getViewport()); 175 176 return zoomSupport; 177 } 178 179 183 public RenderModeManager getRenderModeManager() { 184 return getDrawComponent().getRenderModeManager(); 185 } 186 187 protected IZoomListener zoomListener = new IZoomListener() 188 { 189 public void zoomChanged(double zoom) { 190 setZoom(zoom, false); 191 } 192 }; 193 194 protected IMouseManager mouseManager = null; 195 public IMouseManager getMouseManager() { 196 return mouseManager; 197 } 198 199 214 protected HitTestManager hitTestManager = null; 215 public HitTestManager getHitTestManager() 216 { 217 if (hitTestManager == null) 218 hitTestManager = new HitTestManager(getDrawComponent()); 219 220 return hitTestManager; 221 } 222 223 protected abstract IMouseManager initMouseManager(IViewer viewer); 224 protected abstract ICanvas createCanvas(Composite parent); 225 protected abstract IAutoScrollSupport initAutoScrollSupport(); 226 227 } 228 | Popular Tags |