IDEA-19061 Integrate the Rearranger-plugin into core-IDEA

Implementing 'remove last row condition'
This commit is contained in:
Denis.Zhdanov
2012-08-16 18:26:44 +04:00
parent 342297743c
commit 9b5747445f
2 changed files with 67 additions and 5 deletions
@@ -116,6 +116,44 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule
@Test
public void removeLastRowCondition() {
// TODO den implement
configure(and(atom(FIELD), atom(PUBLIC)));
ArrangementRuleEditingModel model = myRowMappings.get(2);
assertNotNull(model);
assertEquals(1, myRowMappings.size());
model.removeAndCondition(atom(PUBLIC));
assertEquals(1, myRowMappings.size());
assertSame(model, myRowMappings.get(1));
assertEquals(atom(FIELD), model.getSettingsNode());
DefaultMutableTreeNode fieldNode = (DefaultMutableTreeNode)myRoot.getFirstChild();
assertNotNull(fieldNode);
assertEquals(atom(FIELD), fieldNode.getUserObject());
assertEquals(0, fieldNode.getChildCount());
}
@Test
public void removeLastRowConditionFromMultiChildrenParent() {
// TODO den uncomment
//configure(and(atom(FIELD), atom(PUBLIC)));
//configure(and(atom(FIELD), atom(STATIC)));
//
//ArrangementRuleEditingModel modelToChange = myRowMappings.get(2);
//assertNotNull(modelToChange);
//
//ArrangementRuleEditingModel siblingModel = myRowMappings.get(3);
//assertNotNull(siblingModel);
//assertEquals(2, myRowMappings.size());
//
//modelToChange.removeAndCondition(atom(PUBLIC));
//
//assertEquals(2, myRowMappings.size());
//assertSame(modelToChange, myRowMappings.get(1));
//assertEquals(atom(FIELD), modelToChange.getSettingsNode());
//
//assertSame(siblingModel, myRowMappings.get(3));
//assertEquals(and(atom(FIELD), atom(STATIC)), siblingModel);
}
}
@@ -110,13 +110,12 @@ public class ArrangementRuleEditingModelImpl implements ArrangementRuleEditingMo
HierarchicalArrangementSettingsNode grouped = myGrouper.group(newNode);
int newDepth = ArrangementConfigUtil.getDepth(grouped);
int oldDepth = ArrangementConfigUtil.distance(myTopMost, myBottomMost);
mySettingsNode = newNode;
if (newDepth == oldDepth) {
mySettingsNode = newNode;
myBottomMost.setUserObject(ArrangementConfigUtil.getLast(grouped).getCurrent());
return;
}
mySettingsNode = newNode;
DefaultMutableTreeNode parent = (DefaultMutableTreeNode)myTopMost.getParent();
parent.remove(myTopMost);
Pair<DefaultMutableTreeNode,Integer> pair = ArrangementConfigUtil.map(parent, grouped);
@@ -157,16 +156,36 @@ public class ArrangementRuleEditingModelImpl implements ArrangementRuleEditingMo
newNode = composite.getOperands().iterator().next();
}
mySettingsNode = newNode;
HierarchicalArrangementSettingsNode grouped = myGrouper.group(newNode);
int newDepth = ArrangementConfigUtil.getDepth(grouped);
int oldDepth = ArrangementConfigUtil.distance(myTopMost, myBottomMost);
if (oldDepth == newDepth) {
mySettingsNode = newNode;
myBottomMost.setUserObject(ArrangementConfigUtil.getLast(grouped).getCurrent());
return;
}
DefaultMutableTreeNode parent = (DefaultMutableTreeNode)myTopMost.getParent();
parent.remove(myTopMost);
Pair<DefaultMutableTreeNode,Integer> pair = ArrangementConfigUtil.map(parent, grouped);
myTopMost = (DefaultMutableTreeNode)ArrangementConfigUtil.getLastBefore(pair.first, parent);
myBottomMost = pair.first;
// TODO den implement
int[] rows = myRowMappings.keys();
Arrays.sort(rows);
int depthShift = oldDepth - newDepth;
for (int row : rows) {
if (row >= myRow) {
myRowMappings.put(row - depthShift, myRowMappings.get(row));
myRowMappings.remove(row);
}
else {
break;
}
}
myRow -= depthShift;
}
@Override
@@ -180,6 +199,11 @@ public class ArrangementRuleEditingModelImpl implements ArrangementRuleEditingMo
}
}
@Override
public String toString() {
return "model for " + mySettingsNode;
}
private static class MyConditionsBuilder implements ArrangementSettingsNodeVisitor {
@NotNull Set<Object> conditions;