mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Tree
This commit is contained in:
+2
-1
@@ -19,6 +19,7 @@ import com.intellij.android.designer.model.RadViewComponent;
|
||||
import com.intellij.designer.componentTree.TreeEditOperation;
|
||||
import com.intellij.designer.designSurface.OperationContext;
|
||||
import com.intellij.designer.model.RadComponent;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
@@ -29,7 +30,7 @@ public class TreeDropToOperation extends TreeEditOperation {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(RadComponent insertBefore) throws Exception {
|
||||
protected void execute(@Nullable RadComponent insertBefore) throws Exception {
|
||||
AbstractEditOperation.execute(myContext, (RadViewComponent)myContainer, myComponents, (RadViewComponent)insertBefore);
|
||||
}
|
||||
}
|
||||
+5
-1
@@ -17,6 +17,7 @@ package com.intellij.android.designer.model;
|
||||
|
||||
import com.intellij.android.designer.designSurface.DropToOperation;
|
||||
import com.intellij.android.designer.designSurface.TreeDropToOperation;
|
||||
import com.intellij.designer.componentTree.TreeEditOperation;
|
||||
import com.intellij.designer.designSurface.EditOperation;
|
||||
import com.intellij.designer.designSurface.OperationContext;
|
||||
|
||||
@@ -30,7 +31,10 @@ public class RadSingleChildrenViewLayout extends RadViewLayout {
|
||||
(context.isCreate() || context.isPaste() || context.isAdd()) &&
|
||||
context.getComponents().size() == 1) {
|
||||
if (context.isTree()) {
|
||||
return new TreeDropToOperation(myContainer, context);
|
||||
if (TreeEditOperation.isTarget(myContainer, context)) {
|
||||
return new TreeDropToOperation(myContainer, context);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return new DropToOperation(myContainer, context);
|
||||
}
|
||||
|
||||
+5
-1
@@ -19,6 +19,7 @@ import com.intellij.android.designer.designSurface.TreeDropToOperation;
|
||||
import com.intellij.android.designer.designSurface.layout.AbsoluteLayoutOperation;
|
||||
import com.intellij.android.designer.designSurface.layout.ResizeOperation;
|
||||
import com.intellij.android.designer.model.RadViewLayoutWithData;
|
||||
import com.intellij.designer.componentTree.TreeEditOperation;
|
||||
import com.intellij.designer.designSurface.ComponentDecorator;
|
||||
import com.intellij.designer.designSurface.EditOperation;
|
||||
import com.intellij.designer.designSurface.OperationContext;
|
||||
@@ -47,7 +48,10 @@ public class RadAbsoluteLayout extends RadViewLayoutWithData {
|
||||
public EditOperation processChildOperation(OperationContext context) {
|
||||
if (context.isCreate() || context.isPaste() || context.isAdd() || context.isMove()) {
|
||||
if (context.isTree()) {
|
||||
return new TreeDropToOperation(myContainer, context);
|
||||
if (TreeEditOperation.isTarget(myContainer, context)) {
|
||||
return new TreeDropToOperation(myContainer, context);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return new AbsoluteLayoutOperation(myContainer, context);
|
||||
}
|
||||
|
||||
+5
-1
@@ -22,6 +22,7 @@ import com.intellij.android.designer.designSurface.layout.ResizeOperation;
|
||||
import com.intellij.android.designer.model.RadViewComponent;
|
||||
import com.intellij.android.designer.model.RadViewLayoutWithData;
|
||||
import com.intellij.designer.actions.AbstractComboBoxAction;
|
||||
import com.intellij.designer.componentTree.TreeEditOperation;
|
||||
import com.intellij.designer.designSurface.ComponentDecorator;
|
||||
import com.intellij.designer.designSurface.DesignerEditorPanel;
|
||||
import com.intellij.designer.designSurface.EditOperation;
|
||||
@@ -61,7 +62,10 @@ public class RadFrameLayout extends RadViewLayoutWithData {
|
||||
public EditOperation processChildOperation(OperationContext context) {
|
||||
if (context.isCreate() || context.isPaste() || context.isAdd() || context.isMove()) {
|
||||
if (context.isTree()) {
|
||||
return new TreeDropToOperation(myContainer, context);
|
||||
if (TreeEditOperation.isTarget(myContainer, context)) {
|
||||
return new TreeDropToOperation(myContainer, context);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return new FrameLayoutOperation(myContainer, context);
|
||||
}
|
||||
|
||||
+5
-1
@@ -20,6 +20,7 @@ import com.intellij.android.designer.designSurface.layout.*;
|
||||
import com.intellij.android.designer.model.RadViewComponent;
|
||||
import com.intellij.android.designer.model.RadViewLayoutWithData;
|
||||
import com.intellij.designer.actions.AbstractComboBoxAction;
|
||||
import com.intellij.designer.componentTree.TreeEditOperation;
|
||||
import com.intellij.designer.designSurface.*;
|
||||
import com.intellij.designer.designSurface.selection.DirectionResizePoint;
|
||||
import com.intellij.designer.designSurface.selection.ResizePoint;
|
||||
@@ -69,7 +70,10 @@ public class RadLinearLayout extends RadViewLayoutWithData implements ILayoutDec
|
||||
public EditOperation processChildOperation(OperationContext context) {
|
||||
if (context.isCreate() || context.isPaste() || context.isAdd() || context.isMove()) {
|
||||
if (context.isTree()) {
|
||||
return new TreeDropToOperation(myContainer, context);
|
||||
if (TreeEditOperation.isTarget(myContainer, context)) {
|
||||
return new TreeDropToOperation(myContainer, context);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return new LinearLayoutOperation(myContainer, context, isHorizontal());
|
||||
}
|
||||
|
||||
+5
-1
@@ -22,6 +22,7 @@ import com.intellij.android.designer.designSurface.layout.TableLayoutDecorator;
|
||||
import com.intellij.android.designer.model.RadViewComponent;
|
||||
import com.intellij.android.designer.model.RadViewLayout;
|
||||
import com.intellij.android.designer.model.RadViewLayoutWithData;
|
||||
import com.intellij.designer.componentTree.TreeEditOperation;
|
||||
import com.intellij.designer.designSurface.*;
|
||||
import com.intellij.designer.designSurface.selection.ResizeSelectionDecorator;
|
||||
import com.intellij.designer.model.RadComponent;
|
||||
@@ -54,7 +55,10 @@ public class RadTableLayout extends RadViewLayoutWithData implements ILayoutDeco
|
||||
public EditOperation processChildOperation(OperationContext context) {
|
||||
if (context.isCreate() || context.isPaste() || context.isAdd() || context.isMove()) {
|
||||
if (context.isTree()) {
|
||||
return new TreeDropToOperation(myContainer, context);
|
||||
if (TreeEditOperation.isTarget(myContainer, context)) {
|
||||
return new TreeDropToOperation(myContainer, context);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
// XXX
|
||||
}
|
||||
|
||||
+5
-2
@@ -18,6 +18,7 @@ package com.intellij.android.designer.model.viewAnimator;
|
||||
import com.intellij.android.designer.designSurface.DropToOperation;
|
||||
import com.intellij.android.designer.designSurface.TreeDropToOperation;
|
||||
import com.intellij.android.designer.model.RadViewLayout;
|
||||
import com.intellij.designer.componentTree.TreeEditOperation;
|
||||
import com.intellij.designer.designSurface.EditOperation;
|
||||
import com.intellij.designer.designSurface.OperationContext;
|
||||
|
||||
@@ -28,11 +29,13 @@ public class RadViewAnimatorLayout extends RadViewLayout {
|
||||
public EditOperation processChildOperation(OperationContext context) {
|
||||
if ((context.isCreate() || context.isPaste() || context.isAdd() || context.isMove()) && checkChildOperation(context)) {
|
||||
if (context.isTree()) {
|
||||
return new TreeDropToOperation(myContainer, context);
|
||||
if (TreeEditOperation.isTarget(myContainer, context)) {
|
||||
return new TreeDropToOperation(myContainer, context);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return new DropToOperation(myContainer, context);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
+44
-51
@@ -22,11 +22,19 @@ import com.intellij.designer.model.RadComponent;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public abstract class TreeEditOperation extends AbstractEditOperation {
|
||||
private RadComponent myTarget;
|
||||
private boolean myInsertBefore;
|
||||
|
||||
public TreeEditOperation(RadComponent container, OperationContext context) {
|
||||
super(container, context);
|
||||
}
|
||||
|
||||
public static boolean isTarget(RadComponent container, OperationContext context) {
|
||||
Point location = context.getLocation();
|
||||
RadComponent target = context.getArea().findTarget(location.x, location.y, null);
|
||||
@@ -38,25 +46,22 @@ public abstract class TreeEditOperation extends AbstractEditOperation {
|
||||
return true;
|
||||
}
|
||||
|
||||
public TreeEditOperation(RadComponent container, OperationContext context) {
|
||||
super(container, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showFeedback() {
|
||||
Point location = myContext.getLocation();
|
||||
RadComponent target = myContext.getArea().findTarget(location.x, location.y, null);
|
||||
FeedbackTreeLayer layer = myContext.getArea().getFeedbackTreeLayer();
|
||||
|
||||
if (myContainer == target) {
|
||||
layer.mark(target, FeedbackTreeLayer.INSERT_SELECTION);
|
||||
myTarget = myContext.getArea().findTarget(location.x, location.y, null);
|
||||
|
||||
if (myContainer == myTarget) {
|
||||
layer.mark(myTarget, FeedbackTreeLayer.INSERT_SELECTION);
|
||||
}
|
||||
else if (target != null && isChildren(target)) {
|
||||
layer.mark(target,
|
||||
layer.isBeforeLocation(target, location.x, location.y) ?
|
||||
FeedbackTreeLayer.INSERT_BEFORE : FeedbackTreeLayer.INSERT_AFTER);
|
||||
else if (myTarget != null && isChildren(myTarget)) {
|
||||
myInsertBefore = layer.isBeforeLocation(myTarget, location.x, location.y);
|
||||
layer.mark(myTarget, myInsertBefore ? FeedbackTreeLayer.INSERT_BEFORE : FeedbackTreeLayer.INSERT_AFTER);
|
||||
}
|
||||
else {
|
||||
myTarget = null;
|
||||
eraseFeedback();
|
||||
}
|
||||
}
|
||||
@@ -77,54 +82,42 @@ public abstract class TreeEditOperation extends AbstractEditOperation {
|
||||
|
||||
@Override
|
||||
public boolean canExecute() {
|
||||
RadComponent reference = getReference();
|
||||
if (reference == null) {
|
||||
if (myTarget == null) {
|
||||
return false;
|
||||
}
|
||||
return canExecute(myContainer == reference ? null : reference);
|
||||
}
|
||||
if (myContext.isMove() && myTarget != myContainer) {
|
||||
if (myComponents.contains(myTarget)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean canExecute(RadComponent insertBefore) {
|
||||
List<RadComponent> children = myContainer.getChildren();
|
||||
int index = children.indexOf(myTarget) + (myInsertBefore ? -1 : 1);
|
||||
if (0 <= index && index < children.size()) {
|
||||
return !myComponents.contains(children.get(index));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() throws Exception {
|
||||
RadComponent reference = getReference();
|
||||
execute(myContainer == reference ? null : reference);
|
||||
if (myTarget == myContainer) {
|
||||
execute(null);
|
||||
}
|
||||
else if (myInsertBefore) {
|
||||
execute(myTarget);
|
||||
}
|
||||
else {
|
||||
List<RadComponent> children = myContainer.getChildren();
|
||||
int index = children.indexOf(myTarget) + 1;
|
||||
if (index < children.size()) {
|
||||
execute(children.get(index));
|
||||
}
|
||||
else {
|
||||
execute(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void execute(RadComponent insertBefore) throws Exception;
|
||||
|
||||
@Nullable
|
||||
private RadComponent getReference() {
|
||||
Point location = myContext.getLocation();
|
||||
RadComponent target = myContext.getArea().findTarget(location.x, location.y, null);
|
||||
|
||||
if (myContainer == target) {
|
||||
return myContainer;
|
||||
}
|
||||
if (target != null) {
|
||||
Object[] children = myContainer.getTreeChildren();
|
||||
int index = -1;
|
||||
|
||||
for (int i = 0; i < children.length; i++) {
|
||||
if (children[i] == target) {
|
||||
index = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (index == -1) {
|
||||
return null;
|
||||
}
|
||||
if (myContext.getArea().getFeedbackTreeLayer().isBeforeLocation(target, location.x, location.y)) {
|
||||
return target;
|
||||
}
|
||||
if (index < children.length) {
|
||||
return (RadComponent)children[index];
|
||||
}
|
||||
return myContainer;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
protected abstract void execute(@Nullable RadComponent insertBefore) throws Exception;
|
||||
}
|
||||
Reference in New Issue
Block a user