1 26 27 package org.nightlabs.editor2d.viewer; 28 29 import java.awt.Point ; 30 31 import org.apache.log4j.Logger; 32 import org.eclipse.jface.action.Action; 33 import org.eclipse.jface.action.IContributionItem; 34 import org.eclipse.jface.action.Separator; 35 import org.eclipse.jface.action.ToolBarManager; 36 import org.eclipse.swt.SWT; 37 import org.eclipse.swt.events.DisposeEvent; 38 import org.eclipse.swt.events.DisposeListener; 39 import org.eclipse.swt.layout.GridData; 40 import org.eclipse.swt.layout.GridLayout; 41 import org.eclipse.swt.widgets.Composite; 42 import org.eclipse.swt.widgets.Label; 43 import org.eclipse.swt.widgets.ToolBar; 44 import org.nightlabs.base.composite.XComposite; 45 import org.nightlabs.editor2d.DrawComponent; 46 import org.nightlabs.editor2d.render.RenderModeListener; 47 import org.nightlabs.editor2d.render.RenderModeManager; 48 import org.nightlabs.editor2d.viewer.action.RenderModeContributionItem; 49 import org.nightlabs.editor2d.viewer.action.ZoomAllAction; 50 import org.nightlabs.editor2d.viewer.action.ZoomContributionItem; 51 import org.nightlabs.editor2d.viewer.action.ZoomInAction; 52 import org.nightlabs.editor2d.viewer.action.ZoomOutAction; 53 import org.nightlabs.editor2d.viewer.action.ZoomSelectionAction; 54 import org.nightlabs.editor2d.viewer.event.IMouseChangedListener; 55 import org.nightlabs.editor2d.viewer.preview.PreviewComposite; 56 import org.nightlabs.editor2d.viewer.render.RendererRegistry; 57 import org.nightlabs.editor2d.viewer.tool.ITool; 58 import org.nightlabs.editor2d.viewer.tool.IToolManager; 59 import org.nightlabs.editor2d.viewer.tool.SelectTool; 60 import org.nightlabs.editor2d.viewer.tool.ToolManager; 61 62 public abstract class AbstractViewerComposite 63 extends XComposite 64 { 65 public static final Logger LOGGER = Logger.getLogger(AbstractViewerComposite.class); 66 67 public AbstractViewerComposite(Composite parent, int style, DrawComponent dc) 68 { 69 super(parent, style); 70 this.drawComponent = dc; 71 init(); 72 createComposite(this); 73 } 74 75 public AbstractViewerComposite(Composite parent, int style, int layoutMode, DrawComponent dc) 76 { 77 super(parent, style, layoutMode); 78 this.drawComponent = dc; 79 init(); 80 createComposite(this); 81 } 82 83 public AbstractViewerComposite(Composite parent, int style, int layoutMode, 84 int layoutDataMode, DrawComponent dc) 85 { 86 super(parent, style, layoutMode, layoutDataMode); 87 this.drawComponent = dc; 88 init(); 89 createComposite(this); 90 } 91 92 protected DrawComponent drawComponent; 93 public DrawComponent getDrawComponent() { 94 return drawComponent; 95 } 96 97 protected ToolBarManager upperToolBarMan; 98 protected AbstractCanvasComposite canvasComp; 99 protected Composite sideComp; 100 protected Composite bottomComp; 101 102 protected Label mouseLabel = null; 103 protected IToolManager toolManager = null; 104 105 110 protected void init() 111 { 112 initRenderModeManager(); 113 } 114 115 protected void initRenderModeManager() 116 { 117 drawComponent.setRenderModeManager(RendererRegistry.sharedInstance().getRenderModeManager()); 118 getRenderModeManager().addRenderModeListener(renderModeListener); 119 } 120 121 protected void createComposite(Composite parent) 122 { 123 upperToolBarMan = new ToolBarManager(); 125 ToolBar upperToolBar = upperToolBarMan.createControl(parent); 126 GridData upperToolBarData = new GridData(GridData.FILL_HORIZONTAL); 127 upperToolBar.setLayoutData(upperToolBarData); 128 129 XComposite comp = new XComposite(parent, SWT.BORDER); 131 GridLayout compLayout = new GridLayout(2, false); 132 comp.setLayout(compLayout); 133 134 canvasComp = initCanvasComposite(comp); 136 GridData canvasData = new GridData(GridData.FILL_BOTH); 137 canvasComp.setLayoutData(canvasData); 138 139 sideComp = new XComposite(comp, SWT.BORDER); 141 GridData sideData = new GridData(GridData.FILL_VERTICAL); 142 sideComp.setLayoutData(sideData); 143 144 bottomComp = new XComposite(parent, SWT.BORDER); 146 GridData bottomData = new GridData(GridData.FILL_HORIZONTAL); 147 bottomComp.setLayoutData(bottomData); 148 149 initToolbars(); 150 initToolManager(); 151 152 getViewer().updateCanvas(); 153 redraw(); 154 } 155 156 protected void initToolManager() 157 { 158 toolManager = new ToolManager(getViewer()); 159 ITool selectTool = new SelectTool(); 160 toolManager.addTool(selectTool); 161 toolManager.setActiveTool(selectTool.getID()); 162 } 163 164 protected void initToolbars() 165 { 166 initUpperToolBar(upperToolBarMan); 167 initSideComposite(sideComp); 168 initBottomComposite(bottomComp); 169 } 170 171 protected void initUpperToolBar(ToolBarManager tbm) 172 { 173 Action action = new ZoomInAction(getZoomSupport()); 174 action.setEnabled(true); 175 tbm.add(action); 176 177 action = new ZoomOutAction(getZoomSupport()); 178 action.setEnabled(true); 179 tbm.add(action); 180 181 action = new ZoomAllAction(getZoomSupport()); 182 action.setEnabled(true); 183 tbm.add(action); 184 185 action = new ZoomSelectionAction(getViewer()); 186 action.setEnabled(false); 187 tbm.add(action); 188 189 tbm.add(new Separator()); 190 191 ZoomContributionItem zoomItem = new ZoomContributionItem(getZoomSupport()); 192 zoomItem.setEnabled(true); 193 tbm.add(zoomItem); 194 195 tbm.add(new Separator()); 196 197 if (getRenderModeManager().getRenderModes().size() > 1) { 198 IContributionItem item = new RenderModeContributionItem(getRenderModeManager()); 199 item.setVisible(true); 200 tbm.add(item); 201 } 202 203 209 tbm.update(true); 210 tbm.getControl().update(); 211 } 212 213 protected void initSideComposite(Composite comp) 214 { 215 } 225 226 protected void initBottomComposite(Composite comp) 227 { 228 mouseLabel = new Label(comp, SWT.NONE); 229 mouseLabel.setText("X=10000, Y=10000"); 230 getViewer().getMouseManager().addMouseChangedListener(mouseListener); 231 mouseLabel.addDisposeListener(mouseLabelDisposeListener); 232 } 233 234 protected IMouseChangedListener mouseListener = new IMouseChangedListener() 235 { 236 public void mouseChanged(Point relative, Point absolute) 237 { 238 mouseLabel.setText("X = "+absolute.x+", Y = "+absolute.y); 239 } 240 }; 241 242 protected DisposeListener mouseLabelDisposeListener = new DisposeListener() 243 { 244 public void widgetDisposed(DisposeEvent e) 245 { 246 if (e.getSource().equals(mouseLabel)) 247 getViewer().getMouseManager().removeMouseChangedListener(mouseListener); 248 } 249 }; 250 251 protected RenderModeListener renderModeListener = new RenderModeListener() 252 { 253 public void renderModeChanges(int renderMode) { 254 getViewer().updateCanvas(); 255 } 256 }; 257 258 protected IZoomSupport getZoomSupport() { 259 return canvasComp.getZoomSupport(); 260 } 261 262 protected RenderModeManager getRenderModeManager() { 263 return drawComponent.getRenderModeManager(); 264 } 265 266 public IViewer getViewer() { 267 return canvasComp; 268 } 269 270 protected abstract AbstractCanvasComposite initCanvasComposite(Composite parent); 271 } 272 | Popular Tags |