package org.ovirt.engine.ui.userportal.client.components;
import java.util.ArrayList;
import java.util.HashMap;
import com.smartgwt.client.data.RecordList;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.viewer.DetailViewer;
import com.smartgwt.client.widgets.viewer.DetailViewerField;
public class SubTabDetailViewer extends HLayout {
private final static int maxRows = 5;
private ArrayList<DetailViewer> viewers;
private HashMap<String,DetailViewerField> viewerFields = new HashMap<String,DetailViewerField>();
public SubTabDetailViewer(DetailViewerField[] fields, Integer[] numOfRowsInColumn) {
setWidth100();
setHeight100();
setOverflow(Overflow.AUTO);
setMembersMargin(30);
setPadding(5);
// If no column-sizes were specified, regressing to regular mode (based on maxRows)
if (numOfRowsInColumn.length == 0)
{
int columns = (fields.length / maxRows) + 1;
numOfRowsInColumn = new Integer[columns];
for (int i = 0; i < columns; i++)
numOfRowsInColumn[i] = maxRows;
}
viewers = new ArrayList<DetailViewer>(numOfRowsInColumn.length);
int fieldCounter = 0;
for (int i=0; i<numOfRowsInColumn.length; i++) {
DetailViewerField[] currFields = new DetailViewerField[numOfRowsInColumn[i]];
for (int j=0; j<numOfRowsInColumn[i]; j++) {
if (fieldCounter == fields.length)
break;
viewerFields.put(fields[fieldCounter].getName(),fields[fieldCounter]);
currFields[j] = fields[fieldCounter++];
}
DetailViewer viewer = new DetailViewer();
viewer.setShowEmptyMessage(false);
viewer.setWrapValues(false);
viewer.setFields(currFields);
viewers.add(viewer);
addMember(viewer);
}
}
public void setData(RecordList data) {
for (String fieldName : viewerFields.keySet())
{
boolean isFieldHidden = data.get(0).getAttributeAsBoolean(fieldName + "_hidden");
viewerFields.get(fieldName).setAttribute("hidden", isFieldHidden);
}
for (DetailViewer viewer : viewers) {
viewer.setData(data);
}
}
}