KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nightlabs > editor2d > viewer > AbstractViewerComposite


1 /* *****************************************************************************
2  * NightLabs Editor2D - Graphical editor framework *
3  * Copyright (C) 2004-2005 NightLabs - http://NightLabs.org *
4  * *
5  * This library is free software; you can redistribute it and/or *
6  * modify it under the terms of the GNU Lesser General Public *
7  * License as published by the Free Software Foundation; either *
8  * version 2.1 of the License, or (at your option) any later version. *
9  * *
10  * This library is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
13  * Lesser General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU Lesser General Public *
16  * License along with this library; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 51 Franklin St, Fifth Floor, *
19  * Boston, MA 02110-1301 USA *
20  * *
21  * Or get it online : *
22  * http://www.gnu.org/copyleft/lesser.html *
23  * *
24  * *
25  ******************************************************************************/

26
27 package org.nightlabs.editor2d.viewer;
28
29 import java.awt.Point JavaDoc;
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 // protected boolean showUpperToolBar = true;
106
// protected boolean showTools = true;
107
// protected boolean showBottom = true;
108
// protected boolean showSide = true;
109

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         // UpperToolBar
124
upperToolBarMan = new ToolBarManager();
125         ToolBar upperToolBar = upperToolBarMan.createControl(parent);
126         GridData upperToolBarData = new GridData(GridData.FILL_HORIZONTAL);
127         upperToolBar.setLayoutData(upperToolBarData);
128         
129         // Middle Wrapper Composite (Canvas + SideToolBar)
130
XComposite comp = new XComposite(parent, SWT.BORDER);
131         GridLayout compLayout = new GridLayout(2, false);
132         comp.setLayout(compLayout);
133         
134         // Canvas
135
canvasComp = initCanvasComposite(comp);
136         GridData canvasData = new GridData(GridData.FILL_BOTH);
137         canvasComp.setLayoutData(canvasData);
138                 
139         // SideToolBar
140
sideComp = new XComposite(comp, SWT.BORDER);
141         GridData sideData = new GridData(GridData.FILL_VERTICAL);
142         sideComp.setLayoutData(sideData);
143         
144         // BottomToolBar
145
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 // tbm.add(new Separator());
204
//
205
// item = new BackgroundContributionItem(getViewer());
206
// item.setVisible(true);
207
// tbm.add(item);
208

209         tbm.update(true);
210         tbm.getControl().update();
211     }
212     
213     protected void initSideComposite(Composite comp)
214     {
215 /// begin comment by marco (=> cairo not existent)
216
// PreviewComposite previewComp = new PreviewComposite(comp, SWT.NONE);
217
// GridData previewData = new GridData(GridData.FILL_BOTH);
218
// previewComp.setLayoutData(previewData);
219
//
220
// previewComp.setDrawComponent(getDrawComponent());
221
// previewComp.setViewport(getViewer().getViewport());
222
/// end
223
// previewComp.setSize(300, 300);
224
}
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 JavaDoc relative, Point JavaDoc 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