Normand Briere
2019-06-09 79d0f9a45d36656051a77a7b0837aa0318f81ee5
Undo/redo
2 files modified
135 ■■■■■ changed files
GroupEditor.java 32 ●●●● patch | view | raw | blame | history
ObjEditor.java 103 ●●●●● patch | view | raw | blame | history
GroupEditor.java
....@@ -154,6 +154,11 @@
154154 oe.menuBar.add(menu = new Menu("Edit"));
155155 //editItem = menu.add(new MenuItem("Edit"));
156156 //editItem.addActionListener(this);
157
+ undoItem = menu.add(new MenuItem("Undo"));
158
+ undoItem.addActionListener(this);
159
+ redoItem = menu.add(new MenuItem("Redo"));
160
+ redoItem.addActionListener(this);
161
+ menu.add("-");
157162 duplicateItem = menu.add(new MenuItem("Duplicate"));
158163 duplicateItem.addActionListener(this);
159164 cloneItem = menu.add(new MenuItem("Clone"));
....@@ -197,7 +202,7 @@
197202 //zBufferItem.addActionListener(this);
198203 //cameraMenu.add(normalLensItem = new MenuItem("Normal Lens"));
199204 //normalLensItem.addActionListener(this);
200
- cameraMenu.add(revertCameraItem = new MenuItem("Revert Camera"));
205
+ cameraMenu.add(revertCameraItem = new MenuItem("Restore Camera"));
201206 revertCameraItem.addActionListener(this);
202207
203208 cameraMenu.add(toggleFullScreenItem = new CheckboxMenuItem("Full Screen"));
....@@ -261,7 +266,7 @@
261266 // animationItem.addItemListener(this);
262267 // animationItem.setState(CameraPane.ANIMATION);
263268 cameraMenu.add("-");
264
- cameraMenu.add(editCameraItem = new MenuItem("Freeze Camera"));
269
+ cameraMenu.add(editCameraItem = new MenuItem("Save Camera"));
265270 editCameraItem.addActionListener(this);
266271
267272 if (Globals.ADVANCED)
....@@ -2004,6 +2009,14 @@
20042009 if (source == cutItem || source == clearButton)
20052010 {
20062011 loadClipboard(true);
2012
+ } else
2013
+ if (source == undoItem)
2014
+ {
2015
+ Undo();
2016
+ } else
2017
+ if (source == redoItem)
2018
+ {
2019
+ Redo();
20072020 } else
20082021 if (source == duplicateItem)
20092022 {
....@@ -4297,14 +4310,19 @@
42974310
42984311 objEditor.SetText(); // jan 2014
42994312
4300
- if (flashIt && !Globals.isLIVE() && tps != null && tps.length > 0 && !(((Object3D) tps[0].getLastPathComponent()) instanceof Camera))
4313
+ Object3D object = (Object3D) tps[0].getLastPathComponent();
4314
+
4315
+ if (flashIt && !Globals.isLIVE() && tps != null && tps.length > 0 && !(object instanceof Camera))
43014316 CameraPane.flash = true;
43024317
4303
- if (tps != null && tps.length > 0 && ((Object3D) tps[0].getLastPathComponent()) instanceof Camera)
4318
+ if (tps != null && tps.length > 0 && object instanceof Camera)
43044319 // a camera
43054320 {
4306
- CameraPane.camerachangeframe = 0; // don't refuse it
4307
- Globals.theRenderer.SetCamera((Camera) tps[0].getLastPathComponent());
4321
+ if (object != Globals.theRenderer.LightCamera())
4322
+ {
4323
+ CameraPane.camerachangeframe = 0; // don't refuse it
4324
+ Globals.theRenderer.SetCamera((Camera) tps[0].getLastPathComponent());
4325
+ }
43084326 // Globals.theRenderer.renderCamera = Globals.theRenderer.manipCamera;
43094327 // Globals.theRenderer.eyeCamera = Globals.theRenderer.manipCamera;
43104328 }
....@@ -5145,6 +5163,8 @@
51455163 private MenuItem lookFromItem;
51465164 private MenuItem switchItem;
51475165 private MenuItem cutItem;
5166
+ private MenuItem undoItem;
5167
+ private MenuItem redoItem;
51485168 private MenuItem duplicateItem;
51495169 private MenuItem cloneItem;
51505170 private MenuItem cloneSupportItem;
ObjEditor.java
....@@ -3207,10 +3207,112 @@
32073207 {
32083208 copy.remove(1);
32093209 }
3210
+
32103211 ResetModel();
32113212 objEditor.refreshContents();
32123213 }
32133214
3215
+ Object3D graphs[] = new Object3D[10000];
3216
+ int undoindex = 0;
3217
+
3218
+ static public Object clone(Object o)
3219
+ {
3220
+ try
3221
+ {
3222
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
3223
+ ObjectOutputStream out = new ObjectOutputStream(baos);
3224
+
3225
+ out.writeObject(o);
3226
+
3227
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
3228
+ ObjectInputStream in = new ObjectInputStream(bais);
3229
+ Object obj = in.readObject();
3230
+ in.close();
3231
+ out.close();
3232
+ return obj;
3233
+ } catch (Exception e)
3234
+ {
3235
+ System.err.println(e);
3236
+ return null;
3237
+ }
3238
+ }
3239
+
3240
+ public void Save()
3241
+ {
3242
+ if (true) return;
3243
+
3244
+ //EditorFrame.m_MainFrame.requestFocusInWindow();
3245
+ graphs[undoindex++] = (Object3D)clone(copy);
3246
+
3247
+ for (int i = undoindex; i < graphs.length; i++)
3248
+ {
3249
+ graphs[i] = null;
3250
+ }
3251
+
3252
+ // test save
3253
+ if (false)
3254
+ {
3255
+ try
3256
+ {
3257
+ FileOutputStream ostream = new FileOutputStream("save" + undoindex);
3258
+ ObjectOutputStream p = new ObjectOutputStream(ostream);
3259
+
3260
+ p.writeObject(copy);
3261
+
3262
+ p.flush();
3263
+
3264
+ ostream.close();
3265
+ } catch (Exception e)
3266
+ {
3267
+ e.printStackTrace();
3268
+ }
3269
+ }
3270
+ }
3271
+
3272
+ public void Undo()
3273
+ {
3274
+ if (undoindex == 0)
3275
+ {
3276
+ java.awt.Toolkit.getDefaultToolkit().beep();
3277
+ return;
3278
+ }
3279
+
3280
+ if (graphs[undoindex] == null)
3281
+ {
3282
+ Save();
3283
+ undoindex -= 1;
3284
+ }
3285
+
3286
+ undoindex -= 1;
3287
+
3288
+ copy = graphs[undoindex];
3289
+
3290
+ cameraView.object = copy;
3291
+ copy.Touch();
3292
+
3293
+ ResetModel();
3294
+ refreshContents();
3295
+ }
3296
+
3297
+ public void Redo()
3298
+ {
3299
+ if (graphs[undoindex + 1] == null)
3300
+ {
3301
+ java.awt.Toolkit.getDefaultToolkit().beep();
3302
+ return;
3303
+ }
3304
+
3305
+ undoindex += 1;
3306
+
3307
+ copy = graphs[undoindex];
3308
+
3309
+ cameraView.object = copy;
3310
+ copy.Touch();
3311
+
3312
+ ResetModel();
3313
+ refreshContents();
3314
+ }
3315
+
32143316 void ImportGFD()
32153317 {
32163318 FileDialog browser = new FileDialog(objEditor.frame, "Import GrafreeD", FileDialog.LOAD);
....@@ -3855,6 +3957,7 @@
38553957
38563958 void makeSomething(Object3D thing, boolean resetmodel) // deselect)
38573959 {
3960
+ Save();
38583961 //Tween.set(thing, 0).target(1).start(tweenManager);
38593962 //Tween.to(thing, 0, 0.5f).target(0).start(tweenManager);
38603963 // if (thing instanceof GenericJointDemo)