From d7a17c35c443e2cb6c09eaa3cfeaf590a571faa1 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Wed, 17 Jul 2019 20:15:40 -0400 Subject: [PATCH] Version slider --- GroupEditor.java | 138 ++++++++++++++++++++++++++++++++++----------- 1 files changed, 103 insertions(+), 35 deletions(-) diff --git a/GroupEditor.java b/GroupEditor.java index 847a6e0..a08dc18 100644 --- a/GroupEditor.java +++ b/GroupEditor.java @@ -60,6 +60,12 @@ this.copy = this.group = group; //selectees = this.group.selectees; + if (copy.versions == null) + { + copy.versions = new byte[100][]; + copy.versionindex = -1; + } + if(ui) SetupUI(objEditor); } @@ -74,6 +80,12 @@ this.copy = this.group = copy; //selectees = this.group.selectees; + if (copy.versions == null) + { + copy.versions = new byte[100][]; + copy.versionindex = -1; + } + SetupMenu2(this); //objEditor); SetupUI2(objEditor); objEditor.SetupUI(true); @@ -84,6 +96,10 @@ void CloneSelection(boolean supports) { + if (Globals.REPLACEONMAKE) + Save(); + boolean keep = Globals.REPLACEONMAKE; + Globals.REPLACEONMAKE = false; // Object3D keep = GrafreeD.clipboard; //Object3D obj; for (int i=0; i<group.selection.size(); i++)// Enumeration e = group.selection.elements(); e.hasMoreElements();) @@ -94,6 +110,7 @@ makeSomething(clone, i==group.selection.size()-1); } + Globals.REPLACEONMAKE = keep; } void CloneClipboard(boolean supports) @@ -380,13 +397,14 @@ shadowYItem.addActionListener(this); shadowZItem = menu.add(new MenuItem("Shadow Blue")); shadowZItem.addActionListener(this); + attributeItem = menu.add(new MenuItem("Attribute")); + attributeItem.addActionListener(this); + if (Globals.ADVANCED) { menu.add("-"); linkerItem = menu.add(new MenuItem("Linker")); linkerItem.addActionListener(this); - attributeItem = menu.add(new MenuItem("Attribute")); - attributeItem.addActionListener(this); templateItem = menu.add(new MenuItem("Template")); templateItem.addActionListener(this); pointflowItem = menu.add(new MenuItem("Point Flow")); @@ -538,6 +556,7 @@ buildToolsMenu(menu); } + void SetupUI2(ObjEditor oe) { // June 2019 @@ -601,42 +620,55 @@ fullButton.setToolTipText("Full-screen window"); fullButton.addActionListener(this); + oe.toolbarPanel.add(screenfitButton = GetButton("icons/fit.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints); + screenfitButton.setToolTipText("Screen fit"); + screenfitButton.addActionListener(this); + oe.toolbarPanel.add(restoreCameraButton = GetButton("icons/eye.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints); restoreCameraButton.setToolTipText("Restore viewpoint"); restoreCameraButton.addActionListener(this); + copyOptionsPanel.add(saveButton = GetButton("icons/down_arrow.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints); + saveButton.setToolTipText("New version"); + saveButton.addActionListener(this); + copyOptionsPanel.add(undoButton = GetButton("icons/undo.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints); - undoButton.setToolTipText("Undo changes"); + undoButton.setToolTipText("Previous version"); undoButton.addActionListener(this); undoButton.setEnabled(false); + cGridBag updown = new cGridBag().setVertical(true); + updown.add(restoreButton = GetButton("icons/restore.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints); + restoreButton.setToolTipText("Restore current"); + restoreButton.addActionListener(this); + restoreButton.setEnabled(false); + + updown.add(replaceButton = GetButton("icons/replace.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints); + replaceButton.setToolTipText("Replace current"); + replaceButton.addActionListener(this); + replaceButton.setEnabled(false); + + copyOptionsPanel.add(updown); + copyOptionsPanel.add(redoButton = GetButton("icons/redo.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints); - redoButton.setToolTipText("Redo changes"); + redoButton.setToolTipText("Next version"); redoButton.addActionListener(this); redoButton.setEnabled(false); - copyOptionsPanel.add(saveButton = GetButton("icons/down_arrow.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints); - saveButton.setToolTipText("Save changes"); - saveButton.addActionListener(this); - - copyOptionsPanel.add(liveCB = GetToggleButton("icons/run.png", Globals.isLIVE())); //, oe.aConstraints); + oe.toolbarPanel.add(liveCB = GetToggleButton("icons/run.png", Globals.isLIVE())); //, oe.aConstraints); liveCB.setToolTipText("Enable animation"); liveCB.addItemListener(this); - copyOptionsPanel.add(oneStepButton = GetButton("icons/step.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints); + oe.toolbarPanel.add(oneStepButton = GetButton("icons/step.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints); oneStepButton.setToolTipText("Animate one step forward"); oneStepButton.addActionListener(this); - copyOptionsPanel.add(fastCB = GetToggleButton("icons/runfast.png", CameraPane.FAST)); //, constraints); + oe.toolbarPanel.add(fastCB = GetToggleButton("icons/runfast.png", CameraPane.FAST)); //, constraints); fastCB.setToolTipText("Fast mode"); fastCB.addItemListener(this); //oe.toolboxPanel.Return(); - copyOptionsPanel.add(screenfitButton = GetButton("icons/fit.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints); - screenfitButton.setToolTipText("Screen fit"); - screenfitButton.addActionListener(this); - // copyOptionsPanel.add(trackCB = GetToggleButton("icons/track.png", CameraPane.TRACK)); //, oe.aConstraints); // trackCB.setToolTipText("Enable tracking"); // trackCB.addItemListener(this); @@ -814,6 +846,9 @@ oe.treePanel.add(copyOptionsPanel); oe.treePanel.Return(); + cGridBag sliderPane = AddSlider(oe.treePanel, "Version", 0, 0, 0); + versionSlider = (cNumberSlider)sliderPane.getComponent(1); + sliderPane.preferredHeight = 1; // mainPanel.setDividerLocation(0.5); //1.0); // mainPanel.setResizeWeight(0.5); @@ -939,9 +974,9 @@ toggleSwitchCB.setToolTipText("Choose a single item"); toggleSwitchCB.addItemListener(this); - panel.add(autosaveCB = new cCheckBox("Auto-save", Globals.SAVEONMAKE)); //, constraints); - autosaveCB.setToolTipText("On structure change"); - autosaveCB.addItemListener(this); + panel.add(autokeepCB = new cCheckBox("Auto-replace", Globals.REPLACEONMAKE)); //, constraints); + autokeepCB.setToolTipText("On structure change"); + autokeepCB.addItemListener(this); panel.Return(); if (Globals.ADVANCED) @@ -970,7 +1005,7 @@ { cRadio radioButton = new cRadio(obj.name); - // Patch to avoid bug with transparency. + // June 2019. Patch to avoid bug with transparency. radioButton.hadMaterial = obj.material != null; if (!radioButton.hadMaterial) { @@ -1018,7 +1053,7 @@ cCheckBox oeilCB; cCheckBox shadowCB; - cCheckBox autosaveCB; + cCheckBox autokeepCB; cCheckBox lookAtCB; // static int COLOR = 1; @@ -1130,9 +1165,9 @@ { Globals.FREEZEONMOVE ^= true; } - else if(e.getSource() == autosaveCB) + else if(e.getSource() == autokeepCB) { - Globals.SAVEONMAKE ^= true; + Globals.REPLACEONMAKE ^= true; } else if(e.getSource() == lookAtCB) { @@ -1214,8 +1249,6 @@ } } - String string = (String) object; - System.out.println("Transfer = " + object + "; drop : " + target); // if( object instanceof java.io.File[]) // { @@ -1223,6 +1256,8 @@ // objEditor.DropFile((java.io.File[]) object, true); // return; // } + + String string = object.toString(); // File path for Mac and Windows if (string.charAt(0) == '/' || string.charAt(1) == ':') @@ -1472,8 +1507,8 @@ animationItem.addItemListener(this); animationItem.setState(Globals.ANIMATION); - menu.add(archiveItem = new CheckboxMenuItem("Archive3D...")); - archiveItem.addItemListener(this); + menu.add(archiveItem = new MenuItem("Archive3D...")); + archiveItem.addActionListener(this); menu.add("-"); parseverticesItem = menu.add(new MenuItem("Multiplicity")); @@ -1487,6 +1522,8 @@ reduce34MorphItem = menu.add(new MenuItem("Reduce Morphs (34)")); reduce34MorphItem.addActionListener(this); menu.add("-"); + menu.add(memoryItem = new MenuItem("Memory Usage")); + memoryItem.addActionListener(this); menu.add(computeAOItem = new MenuItem("Compute AO")); computeAOItem.addActionListener(this); @@ -1495,8 +1532,6 @@ mirrorItem = menu.add(new MenuItem("Mirror Poses")); mirrorItem.addActionListener(this); menu.add("-"); - menu.add(memoryItem = new MenuItem("Memory Usage")); - memoryItem.addActionListener(this); menu.add(analyzeItem = new MenuItem("Analyze")); analyzeItem.addActionListener(this); menu.add(dumpItem = new MenuItem("Print")); @@ -2219,15 +2254,31 @@ } else if (source == undoButton) { + // Go to previous version + //if (!Undo()) + //java.awt.Toolkit.getDefaultToolkit().beep(); Undo(); + } else + if (source == restoreButton) + { + // Restore current version + Restore(); + } else + if (source == replaceButton) + { + // Overwrite current version + Replace(); } else if (source == redoButton) { + // Go to next version Redo(); } else if (source == saveButton) { - Save(); + // Save a new version + if (!Save(true)) + java.awt.Toolkit.getDefaultToolkit().beep(); } else if (source == oneStepButton) { @@ -2236,17 +2287,14 @@ } else if (source == screenfitButton) { - //Reload(lastConverter, lastFilename, true); ScreenFit(); } else if (source == screenfitpointButton) { - //Reload(lastConverter, lastFilename, true); ScreenFitPoint(); } else if (source == snapobjectButton) { - //Reload(lastConverter, lastFilename, true); SnapObject(); } else // if (event.getSource() == recompileButton) @@ -3474,6 +3522,9 @@ } copy = group; + + SetUndoStates(); + //Globals.theRenderer.object = group; if(!useclient) { @@ -3502,6 +3553,8 @@ radio.layout.doClick(); ClearUnpinned(); + Grafreed.Assert(group != null); + Grafreed.Assert(group.selection != null); SetPinStates(group.selection.size() > 0); if (group.selection.size() == 1) EditSelection(false); @@ -4734,7 +4787,7 @@ void refreshContents(boolean cp) { if (objectPanel.getSelectedIndex() == objectPanel.indexOfTab("Info")) - if (!Globals.MOUSEDRAGGED) // && !Globals.TIMERRUNNING) + if (!Globals.MOUSEDRAGGED && group.selection != null) // && !Globals.TIMERRUNNING) { objEditor.ClearInfo(); // .GetMaterial()); @@ -4833,8 +4886,8 @@ if (cut) { - if (Globals.SAVEONMAKE) - Save(); +// if (Globals.SAVEONMAKE) // Moved to the clipboard, no need to save. +// Save(); //int indices[] = jList.getSelectedIndices(); //for (int i = indices.length - 1; i >= 0; i--) //jList.remove(indices[i]); @@ -4937,6 +4990,10 @@ void paste(boolean expand) { + if (Globals.REPLACEONMAKE) + Save(); + boolean keep = Globals.REPLACEONMAKE; + Globals.REPLACEONMAKE = false; // if (GrafreeD.clipboard == null) // return; boolean first = true; @@ -4996,6 +5053,7 @@ Grafreed.clipboard.get(0).parent = keepparent; } + Globals.REPLACEONMAKE = keep; ResetModel(); refreshContents(); } @@ -5131,6 +5189,10 @@ void group(Object3D csg, boolean grab) { + if (Globals.REPLACEONMAKE) + Save(); + boolean keep = Globals.REPLACEONMAKE; + Globals.REPLACEONMAKE = false; if (//false) // why?? !group.selection.isEmpty()) { @@ -5244,10 +5306,15 @@ //node.add(csg); //makeSomething(node); makeSomething(csg); + Globals.REPLACEONMAKE = keep; } void Ungroup(Object3D g) { + if (Globals.REPLACEONMAKE) + Save(); + boolean keep = Globals.REPLACEONMAKE; + Globals.REPLACEONMAKE = false; if (g instanceof HiddenObject) { HiddenObject h = (HiddenObject) g; @@ -5264,6 +5331,7 @@ objEditor.makeSomething(g.get(i), false); } } + Globals.REPLACEONMAKE = keep; } void ungroup() -- Gitblit v1.6.2