blob: 1c25f6903f5f4e459af73709df46ad41abebb889 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2012 Formal Mind GmbH and University of Dusseldorf.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Michael Jastram - initial API and implementation
******************************************************************************/
package org.eclipse.rmf.reqif10.pror.editor.agilegrid;
import java.util.HashMap;
import org.agilemore.agilegrid.AgileGrid;
import org.agilemore.agilegrid.DefaultLayoutAdvisor;
import org.agilemore.agilegrid.ICellRenderer;
import org.eclipse.rmf.reqif10.SpecHierarchy;
import org.eclipse.rmf.reqif10.Specification;
public class ProrLayoutAdvisor extends DefaultLayoutAdvisor {
private final HashMap<Integer, String> topHeaderLabel = new HashMap<Integer, String>();
private int columnCount;
private int rowCount;
private final HashMap<Integer, HashMap<Integer, Integer>> cachedCellHeights = new HashMap<Integer, HashMap<Integer, Integer>>();
public ProrLayoutAdvisor(AgileGrid agileGrid) {
super(agileGrid);
}
@Override
public String getTopHeaderLabel(int col) {
String label;
if (col == columnCount - 1) {
label = "Link";
} else {
label = topHeaderLabel.get(col);
}
return label != null ? label : ("Column " + (col + 1));
}
@Override
protected void doSetTopHeaderLabel(int col, String label) {
topHeaderLabel.put(col, label);
}
@Override
protected void doSetColumnCount(int columnCount) {
this.columnCount = columnCount;
}
@Override
public int getColumnCount() {
return columnCount;
}
@Override
protected void doSetRowCount(int rowCount) {
this.rowCount = rowCount;
}
@Override
public int getRowCount() {
return rowCount;
}
/**
* Used by some {@link ICellRenderer}s to store the cell's height. The
* method checks whether the row height has changed and notifies the
* associated {@link ProrAgileGrid}.
*/
void setCellHeight(int row, int col, int height) {
int oldRowHeight = getRowHeight(row);
HashMap<Integer, Integer> cols = cachedCellHeights.get(row);
if (cols == null) {
cols = new HashMap<Integer, Integer>();
cachedCellHeights.put(row, cols);
}
cols.put(col, height);
int newRowHeight = getRowHeight(row);
if (oldRowHeight != newRowHeight) {
super.setRowHeight(row, newRowHeight);
agileGrid.redraw();
}
}
@Override
public int getRowHeight(int row) {
ProrRow prorRow = ((ProrAgileGridContentProvider) agileGrid
.getContentProvider()).getProrRow(row);
if (prorRow != null && ! prorRow.isVisible()) return 1;
int height = 18;
if (cachedCellHeights.get(row) == null) {
return height;
}
HashMap<Integer, Integer> cols = cachedCellHeights.get(row);
if (cols == null) {
return height;
}
for (Integer h : cols.values()) {
if (h > height) {
height = h;
}
}
return height;
}
@Override
public String getLeftHeaderLabel(int row) {
StringBuffer sb = new StringBuffer();
ProrRow prorRow = ((ProrAgileGridContentProvider) agileGrid
.getContentProvider()).getProrRow(row);
if (!(prorRow instanceof ProrRow.ProrRowSpecHierarchy)) {
return "";
}
SpecHierarchy specHierarchy = ((ProrRow.ProrRowSpecHierarchy) prorRow).getSpecHierarchy();
while (specHierarchy.eContainer() instanceof SpecHierarchy) {
SpecHierarchy parent = (SpecHierarchy) specHierarchy.eContainer();
int level = parent.getChildren().indexOf(specHierarchy) + 1;
sb.insert(0, level);
sb.insert(0, ".");
specHierarchy = parent;
}
if (specHierarchy.eContainer() instanceof Specification) {
Specification parent = (Specification) specHierarchy
.eContainer();
int level = parent.getChildren().indexOf(specHierarchy) + 1;
sb.insert(0, level);
}
return sb.toString();
}
}