1
2 package hep.wired.plot;
3
4 import java.awt.*;
5 import java.awt.datatransfer.*;
6 import java.awt.event.*;
7 import java.util.*;
8
9 import javax.swing.*;
10 import javax.swing.event.*;
11 import javax.swing.undo.*;
12
13 import org.freehep.application.Application;
14 import org.freehep.application.studio.Studio;
15 import org.freehep.application.PrintHelper;
16 import org.freehep.util.commanddispatcher.CommandProcessor;
17 import org.freehep.util.commanddispatcher.CommandState;
18 import org.freehep.util.commanddispatcher.BooleanCommandState;
19 import org.freehep.util.export.ExportDialog;
20 import org.freehep.util.export.VectorGraphicsTransferable;
21
22 import hep.wired.edit.FitToWindow;
23 import hep.wired.edit.Reset;
24 import hep.wired.interaction.DragAngledRectangleToScale;
25 import hep.wired.interaction.DragBallToRotate;
26 import hep.wired.interaction.DragRectangleToScale;
27 import hep.wired.interaction.DragToRotate;
28 import hep.wired.interaction.DragToScale;
29 import hep.wired.interaction.DragToTranslate;
30 import hep.wired.services.RecordPlot;
31 import hep.wired.util.WiredUndoManager;
32
33 /***
34 * Defines a command handler for plot commands.
35 *
36 * @author Mark Donszelmann
37 * @version $Id: WiredPlotCommandHandler.java 674 2005-03-11 04:53:14Z duns $
38 */
39 public class WiredPlotCommandHandler extends CommandProcessor
40 implements UndoableEditListener {
41
42 private RecordPlot plot;
43
44 private WiredUndoManager undoManager = new WiredUndoManager();
45
46 /***
47 * Creates a command handler attached to the plot.
48 */
49 public WiredPlotCommandHandler(RecordPlot plot) {
50 super();
51 this.plot = plot;
52 }
53
54 public void enableRedo(CommandState state) {
55 state.setEnabled(undoManager.canRedo());
56 state.setText("Redo "+undoManager.getRedoString());
57 state.setToolTipText(undoManager.getRedoPresentationName());
58 setChanged();
59 }
60
61 public void onRedo() {
62 undoManager.redo();
63 setChanged();
64 }
65
66 public void enableUndo(CommandState state) {
67 state.setEnabled(undoManager.canUndo());
68 state.setText("Undo "+undoManager.getUndoString());
69 state.setToolTipText(undoManager.getUndoPresentationName());
70 setChanged();
71 }
72
73 public void onUndo() {
74 undoManager.undo();
75 setChanged();
76 }
77
78 public void onPrintSetup() {
79 Studio studio = (Studio)Application.getApplication();
80
81 PrintHelper printHelper = new PrintHelper((Component)plot, studio);
82 printHelper.showOptionsDialog(studio);
83 }
84
85 public void enablePrint(CommandState state) {
86 state.setEnabled(plot.getRecord() != null);
87 setChanged();
88 }
89
90 public void onPrint() throws Exception {
91 Studio studio = (Studio)Application.getApplication();
92
93 PrintHelper printHelper = new PrintHelper((Component)plot, studio);
94 printHelper.print();
95 }
96
97 public void enablePrintPreview(CommandState state) {
98 state.setEnabled(plot.getRecord() != null);
99 setChanged();
100 }
101
102 public void onPrintPreview() throws Exception {
103 Studio studio = (Studio)Application.getApplication();
104
105 PrintHelper printHelper = new PrintHelper((Component)plot, studio);
106 printHelper.printPreview(studio);
107 }
108
109 public void enableCopy(CommandState state) {
110 state.setEnabled(plot.getRecord() != null);
111 setChanged();
112 }
113
114 public void onCopy() {
115 Clipboard clipBoard = Toolkit.getDefaultToolkit().getSystemClipboard();
116 VectorGraphicsTransferable transferable = new VectorGraphicsTransferable((Component)plot);
117 clipBoard.setContents(transferable, transferable);
118 }
119
120 public void undoableEditHappened(UndoableEditEvent edit) {
121 undoManager.addEdit(edit.getEdit());
122 setChanged();
123 }
124
125 public void enableDragToScale(BooleanCommandState state) {
126 state.setEnabled(plot.supports(new DragToScale()));
127 state.setSelected(plot.getInteractionHandler() instanceof DragToScale);
128 setChanged();
129 }
130
131 public void onDragToScale(boolean on) {
132 if (on) plot.setInteractionHandler(new DragToScale());
133 setChanged();
134 }
135
136
137 public void enableDragRectangleToScale(BooleanCommandState state) {
138 state.setEnabled(plot.supports(new DragRectangleToScale()));
139 state.setSelected(plot.getInteractionHandler() instanceof DragRectangleToScale);
140 setChanged();
141 }
142
143 public void onDragRectangleToScale(boolean on) {
144 if (on) plot.setInteractionHandler(new DragRectangleToScale());
145 setChanged();
146 }
147
148
149 public void enableDragAngledRectangleToScale(BooleanCommandState state) {
150 state.setEnabled(plot.supports(new DragAngledRectangleToScale()));
151 state.setSelected(plot.getInteractionHandler() instanceof DragAngledRectangleToScale);
152 setChanged();
153 }
154
155 public void onDragAngledRectangleToScale(boolean on) {
156 if (on) plot.setInteractionHandler(new DragAngledRectangleToScale());
157 setChanged();
158 }
159
160
161 public void enableDragToTranslate(BooleanCommandState state) {
162 state.setEnabled(plot.supports(new DragToTranslate()));
163 state.setSelected(plot.getInteractionHandler() instanceof DragToTranslate);
164 setChanged();
165 }
166
167 public void onDragToTranslate(boolean on) {
168 if (on) plot.setInteractionHandler(new DragToTranslate());
169 setChanged();
170 }
171
172
173 public void enableDragToRotate(BooleanCommandState state) {
174 state.setEnabled(plot.supports(new DragToRotate()));
175 state.setSelected(plot.getInteractionHandler() instanceof DragToRotate);
176 setChanged();
177 }
178
179 public void onDragToRotate(boolean on) {
180 if (on) plot.setInteractionHandler(new DragToRotate());
181 setChanged();
182 }
183
184
185 public void enableDragBallToRotate(BooleanCommandState state) {
186 state.setEnabled(plot.supports(new DragBallToRotate()));
187 state.setSelected(plot.getInteractionHandler() instanceof DragBallToRotate);
188 setChanged();
189 }
190
191 public void onDragBallToRotate(boolean on) {
192 if (on) plot.setInteractionHandler(new DragBallToRotate());
193 setChanged();
194 }
195
196
197 public void enableReset(CommandState state) {
198 state.setEnabled(plot.supports(new Reset()));
199 setChanged();
200 }
201
202 public void onReset() {
203 plot.postEdit(new Reset());
204 }
205
206
207 public void enableFitToWindow(CommandState state) {
208 state.setEnabled(plot.supports(new FitToWindow()));
209 setChanged();
210 }
211
212 public void onFitToWindow() {
213 plot.postEdit(new FitToWindow());
214 }
215
216 }