blob: c39c7c5e138efe86c9f8efdfc25812700414a01f [file] [log] [blame]
/*
* Copyright 2000-2012 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.android.designer.model.grid;
import com.intellij.designer.model.RadComponent;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.awt.*;
/**
* @author Alexander Lobas
*/
public class GridInfo {
public int width; // in model pixels
public int height; // in model pixels
public GridInfo(@NotNull RadComponent grid) {
this.grid = grid;
}
// horizontal lines: defines y positions of rows
public int[] hLines = ArrayUtil.EMPTY_INT_ARRAY; // in model pixels
// vertical lines: defines x positions of columns
public int[] vLines = ArrayUtil.EMPTY_INT_ARRAY; // in model pixels
public boolean[] emptyColumns = ArrayUtil.EMPTY_BOOLEAN_ARRAY;
public boolean[] emptyRows = ArrayUtil.EMPTY_BOOLEAN_ARRAY;
public RadComponent grid;
public RadComponent[][] components;
public int rowCount;
public int columnCount;
public int lastInsertRow = -1;
public int lastInsertColumn = -1;
private static final int NEW_CELL_SIZE = 32;
@NotNull
public Dimension getSize(@NotNull Component target) {
return grid.fromModel(target, new Dimension(width, height));
}
@NotNull
public Point getCellPosition(@NotNull Component target, int row, int column) {
//return grid.fromModel(target, new Point(vLines[column], hLines[row]));
// The positions are relative to the beginning of the grid, so do dimension
// match rather than point math
Dimension size = grid.fromModel(target, new Dimension(vLines[column], hLines[row]));
return new Point(size.width, size.height);
}
public static int[] addLineInfo(int[] oldLines, int delta) {
if (delta > 0) {
int newLength = oldLines.length + delta / NEW_CELL_SIZE;
if (newLength > oldLines.length) {
int[] newLines = new int[newLength];
int startIndex = oldLines.length;
if (oldLines.length > 0) {
System.arraycopy(oldLines, 0, newLines, 0, oldLines.length);
}
else {
startIndex = 1;
}
for (int i = startIndex; i < newLength; i++) {
newLines[i] = newLines[i - 1] + NEW_CELL_SIZE;
}
return newLines;
}
return oldLines;
}
return oldLines;
}
public static void setNull(RadComponent[][] components1,
@Nullable RadComponent[][] components2,
int startRow,
int endRow,
int startColumn,
int endColumn) {
endRow = Math.min(endRow, components1.length);
endColumn = Math.min(endColumn, components1[0].length);
for (int i = startRow; i < endRow; i++) {
for (int j = startColumn; j < endColumn; j++) {
components1[i][j] = null;
if (components2 != null) {
components2[i][j] = null;
}
}
}
}
}