changeset 8004:15709eaf63bb

[SCENEBUILDER] Fix DTL-6860 : Copy / Paste is broken
author slions
date Tue, 09 Sep 2014 08:51:09 +0200
parents 965623d2f60c
children 41a343a71f48
files apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/CutSelectionJob.java apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/InlineDocumentJob.java apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/InlineSelectionJob.java
diffstat 3 files changed, 108 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/CutSelectionJob.java	Tue Sep 09 08:38:02 2014 +0200
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/CutSelectionJob.java	Tue Sep 09 08:51:09 2014 +0200
@@ -40,7 +40,7 @@
 /**
  *
  */
-public class CutSelectionJob extends BatchSelectionJob {
+public class CutSelectionJob extends InlineSelectionJob {
 
     private DeleteSelectionJob deleteSelectionSubJob;
 
@@ -49,13 +49,18 @@
     }
 
     @Override
+    public boolean isExecutable() {
+        return getEditorController().canPerformControlAction(ControlAction.COPY);
+    }
+
+    @Override
     protected AbstractSelectionGroup getNewSelectionGroup() {
         // Selection emptied
         return null;
     }
 
     @Override
-    protected List<Job> makeSubJobs() {
+    protected List<Job> makeAndExecuteSubJobs() {
 
         final List<Job> result = new ArrayList<>();
         if (getEditorController().canPerformControlAction(ControlAction.COPY)) {
@@ -65,6 +70,7 @@
 
             deleteSelectionSubJob = new DeleteSelectionJob(getEditorController());
             if (deleteSelectionSubJob.isExecutable()) {
+                deleteSelectionSubJob.execute(); 
                 result.add(deleteSelectionSubJob);
             }
         }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/InlineDocumentJob.java	Tue Sep 09 08:38:02 2014 +0200
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/InlineDocumentJob.java	Tue Sep 09 08:51:09 2014 +0200
@@ -56,7 +56,7 @@
     }
 
     @Override
-    public final void execute() {
+    public void execute() {
         final FXOMDocument fxomDocument
                 = getEditorController().getFxomDocument();
         fxomDocument.beginUpdate();
@@ -65,7 +65,7 @@
     }
 
     @Override
-    public final void undo() {
+    public void undo() {
         final FXOMDocument fxomDocument
                 = getEditorController().getFxomDocument();
         fxomDocument.beginUpdate();
@@ -76,7 +76,7 @@
     }
 
     @Override
-    public final void redo() {
+    public void redo() {
         final FXOMDocument fxomDocument
                 = getEditorController().getFxomDocument();
         fxomDocument.beginUpdate();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/InlineSelectionJob.java	Tue Sep 09 08:51:09 2014 +0200
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.oracle.javafx.scenebuilder.kit.editor.job;
+
+import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
+import com.oracle.javafx.scenebuilder.kit.editor.selection.AbstractSelectionGroup;
+import com.oracle.javafx.scenebuilder.kit.editor.selection.Selection;
+import java.util.List;
+
+/**
+ * This Job updates the FXOM document AND the selection at execution time.
+ *
+ * The sub jobs are created and executed just after.
+ */
+public abstract class InlineSelectionJob extends InlineDocumentJob {
+
+    private AbstractSelectionGroup oldSelectionGroup;
+    private AbstractSelectionGroup newSelectionGroup;
+
+    public InlineSelectionJob(EditorController editorController) {
+        super(editorController);
+    }
+
+    protected final AbstractSelectionGroup getOldSelectionGroup() {
+        return oldSelectionGroup;
+    }
+
+    protected abstract AbstractSelectionGroup getNewSelectionGroup();
+
+    @Override
+    public final void execute() {
+        final Selection selection = getEditorController().getSelection();
+        try {
+            selection.beginUpdate();
+            oldSelectionGroup = selection.getGroup() == null ? null
+                    : selection.getGroup().clone();
+            super.execute();
+            newSelectionGroup = getNewSelectionGroup();
+            selection.select(newSelectionGroup);
+            selection.endUpdate();
+
+        } catch (CloneNotSupportedException x) {
+            // Emergency code
+            throw new RuntimeException(x);
+        }
+    }
+
+    @Override
+    public final void undo() {
+        final Selection selection = getEditorController().getSelection();
+        selection.beginUpdate();
+        super.undo();
+        selection.select(oldSelectionGroup);
+        selection.endUpdate();
+    }
+
+    @Override
+    public final void redo() {
+        final Selection selection = getEditorController().getSelection();
+        selection.beginUpdate();
+        super.redo();
+        selection.select(newSelectionGroup);
+        selection.endUpdate();
+    }
+
+    @Override
+    protected abstract List<Job> makeAndExecuteSubJobs();
+}