blob: 570404c04544eb0bc573062f70303cdf843a5d59 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.uiDesigner.radComponents;
import com.intellij.uiDesigner.core.GridConstraints;
import com.intellij.uiDesigner.core.GridLayoutManager;
import com.intellij.uiDesigner.designSurface.DraggedComponentList;
import com.intellij.uiDesigner.designSurface.GridInsertLocation;
import com.intellij.uiDesigner.designSurface.GridInsertMode;
import junit.framework.TestCase;
import javax.swing.*;
/**
* @author yole
*/
public class GridInsertLocationTest extends TestCase {
private RadGridLayoutManager myManager;
private RadContainer myContainer;
private RadComponent myDropComponent;
@Override
protected void setUp() throws Exception {
super.setUp();
myManager = new RadGridLayoutManager();
myContainer = new RadContainer(null, "grid");
myContainer.setLayoutManager(myManager);
myDropComponent = new RadAtomicComponent(null, JLabel.class, "2");
}
public void testInsertColumnAfter() {
assertEquals(1, myManager.getGridColumnCount(myContainer));
insertComponent(0, 0, 1, 1);
GridInsertLocation location = new GridInsertLocation(myContainer, 0, 0, GridInsertMode.ColumnAfter);
DraggedComponentList dcl = DraggedComponentList.withComponents(myDropComponent);
assertTrue(location.canDrop(dcl));
doDrop(location);
assertEquals(2, myManager.getGridColumnCount(myContainer));
}
public void testInsertRowBefore() {
setGridSize(2, 1);
insertComponent(0, 0, 1, 1);
final RadComponent c = insertComponent(1, 0, 1, 1);
GridInsertLocation location = new GridInsertLocation(myContainer, 1, 0, GridInsertMode.RowBefore);
DraggedComponentList dcl = DraggedComponentList.withComponents(myDropComponent);
assertTrue(location.canDrop(dcl));
doDrop(location);
assertEquals(2, c.getConstraints().getRow());
}
public void testInsertInMiddleOfComponentColumn() {
myContainer.setLayout(new GridLayoutManager(1, 2));
insertComponent(0, 0, 1, 2);
GridInsertLocation location = new GridInsertLocation(myContainer, 0, 0, GridInsertMode.ColumnAfter);
DraggedComponentList dcl = DraggedComponentList.withComponents(myDropComponent);
assertFalse(location.canDrop(dcl));
}
public void testInsertInMiddleOfComponentRow() {
setGridSize(2, 1);
insertComponent(0, 0, 2, 1);
GridInsertLocation location = new GridInsertLocation(myContainer, 0, 0, GridInsertMode.RowAfter);
DraggedComponentList dcl = DraggedComponentList.withComponents(myDropComponent);
assertFalse(location.canDrop(dcl));
}
public void testGrowComponent() {
myContainer.setLayout(new GridLayoutManager(2, 2));
// *|. *** .
//
// *** -> *****
insertComponent(0, 0, 1, 1);
RadComponent c = insertComponent(1, 0, 1, 2);
GridInsertLocation location = new GridInsertLocation(myContainer, 0, 0, GridInsertMode.ColumnAfter);
DraggedComponentList dcl = DraggedComponentList.withComponents(myDropComponent);
assertTrue(location.canDrop(dcl));
doDrop(location);
assertEquals(3, myManager.getGridColumnCount(myContainer));
assertEquals(3, c.getConstraints().getColSpan());
}
public void testInsertInsideBigComponent() {
setGridSize(2, 2);
insertComponent(0, 0, 1, 1);
insertComponent(1, 0, 1, 2);
setComponentDimensions(myDropComponent, 0, 0, 2, 1);
GridInsertLocation location = new GridInsertLocation(myContainer, 0, 0, GridInsertMode.ColumnAfter);
assertFalse(location.canDrop(DraggedComponentList.withComponents(myDropComponent)));
}
public void testInsertGrowMultiple() {
setGridSize(4, 4);
// * . . .
// . . . .
// . . . .
// . . . *
insertComponent(0, 0, 1, 1);
insertComponent(3, 3, 1, 1);
// * . . .
// . . . .
// * . . .
// * . . *
RadComponent c1 = createComponent(0, 0, 2, 1);
RadComponent c2 = createComponent(0, 1, 1, 1);
GridInsertLocation location = new GridInsertLocation(myContainer, 1, 0, GridInsertMode.RowAfter);
DraggedComponentList dcl = DraggedComponentList.withComponents(c1, c2);
assertTrue(location.canDrop(dcl));
location.processDrop(null, new RadComponent[] {c1, c2}, null, dcl);
assertEquals(6, myManager.getGridRowCount(myContainer));
}
public void testInsertGrowMultiple1x1() {
setGridSize(2, 2);
// * .
//
// . *
insertComponent(0, 0, 1, 1);
insertComponent(1, 1, 1, 1);
// * *
// *
// * .
RadComponent c1 = createComponent(0, 0, 2, 1);
RadComponent c2 = createComponent(0, 1, 1, 1);
GridInsertLocation location = new GridInsertLocation(myContainer, 1, 0, GridInsertMode.RowAfter);
DraggedComponentList dcl = DraggedComponentList.withComponents(c1, c2);
assertTrue(location.canDrop(dcl));
location.processDrop(null, new RadComponent[] {c1, c2}, null, dcl);
assertEquals(3, myManager.getGridRowCount(myContainer));
}
public void testInsertGrowSingle1x1() {
setGridSize(2, 2);
// * .
//
// . *
insertComponent(0, 0, 1, 1);
insertComponent(1, 1, 1, 1);
setComponentDimensions(myDropComponent, 0, 0, 2, 2);
GridInsertLocation location = new GridInsertLocation(myContainer, 1, 0, GridInsertMode.RowAfter);
DraggedComponentList dcl = DraggedComponentList.withComponents(myDropComponent);
assertTrue(location.canDrop(dcl));
doDrop(location);
assertEquals(3, myManager.getGridRowCount(myContainer));
final RadComponent addedComponent = myContainer.getComponents()[2];
assertEquals(1, addedComponent.getConstraints().getRowSpan());
assertEquals(1, addedComponent.getConstraints().getColSpan());
}
public void testInsertGrowSingle() {
setGridSize(4, 4);
// * . . .
// . . . .
// . . . .
// . . . *
insertComponent(0, 0, 1, 1);
insertComponent(3, 3, 1, 1);
setComponentDimensions(myDropComponent, 0, 0, 2, 2);
GridInsertLocation location = new GridInsertLocation(myContainer, 1, 0, GridInsertMode.RowAfter);
DraggedComponentList dcl = DraggedComponentList.withComponents(myDropComponent);
assertTrue(location.canDrop(dcl));
doDrop(location);
assertEquals(6, myManager.getGridRowCount(myContainer));
final RadComponent addedComponent = myContainer.getComponents()[2];
assertEquals(2, addedComponent.getConstraints().getRowSpan());
assertEquals(2, addedComponent.getConstraints().getColSpan());
}
public void testInsertDifferentRows() {
setGridSize(2, 1);
insertComponent(0, 0, 1, 1);
insertComponent(1, 0, 1, 1);
RadComponent c1 = createComponent(0, 0, 1, 1);
RadComponent c2 = createComponent(1, 0, 1, 1);
GridInsertLocation location = new GridInsertLocation(myContainer, 1, 0, GridInsertMode.RowAfter);
DraggedComponentList dcl = DraggedComponentList.withComponents(c1, c2);
assertTrue(location.canDrop(dcl));
location.processDrop(null, new RadComponent[] {c1, c2}, null, dcl);
assertEquals(4, myManager.getGridRowCount(myContainer));
}
private RadComponent insertComponent(int row, int column, int rowSpan, int colSpan) {
RadComponent c = createComponent(row, column, rowSpan, colSpan);
myContainer.addComponent(c);
return c;
}
private RadComponent createComponent(final int row, final int column, final int rowSpan, final int colSpan) {
final RadAtomicComponent c = new RadAtomicComponent(null, JLabel.class, "1");
setComponentDimensions(c, row, column, rowSpan, colSpan);
return c;
}
private void setGridSize(final int rowCount, final int columnCount) {
myContainer.setLayout(new GridLayoutManager(rowCount, columnCount));
}
private static void setComponentDimensions(final RadComponent c,
final int row,
final int column,
final int rowSpan,
final int colSpan) {
c.getConstraints().restore(new GridConstraints(row, column, rowSpan, colSpan, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH,
GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_GROW,
null, null, null));
}
private void doDrop(final GridInsertLocation location) {
location.processDrop(null, new RadComponent[] {myDropComponent}, null, DraggedComponentList.withComponents(myDropComponent));
}
}