eu.future.earth.gwt.client.ui.panels.LabelFieldPanel Maven / Gradle / Ivy
The newest version!
package eu.future.earth.gwt.client.ui.panels;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import com.google.gwt.dom.client.Style.FontWeight;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.InlineLabel;
import com.google.gwt.user.client.ui.RichTextArea;
import com.google.gwt.user.client.ui.Widget;
import eu.future.earth.gwt.client.logic.UUID;
import eu.future.earth.gwt.client.ui.ImageResources;
import eu.future.earth.gwt.client.ui.general.EeGwtFrameworkCss;
import eu.future.earth.gwt.client.ui.general.UiUtil;
public class LabelFieldPanel extends AbstractLabelFieldPanel {
private FlexTable holderGrid = null;
private com.google.gwt.user.client.Element footer = null;
private final HashMap> idToRows = new HashMap>();
private final HashMap idToColMap = new HashMap();
private int cols = 1;
private int row = 0;
private final static int COL_COUNT = 5;
private enum Cols {
ICON_COLUMN, LABEL_COLUMN, REQUIRED_COLUMN, FIELD_COLUMN, EXTRA_COLUMN
}
private static int getTableColumn(Cols col, int curr) {
int base = COL_COUNT * curr;
switch (col) {
case ICON_COLUMN:
return base - 5;
case LABEL_COLUMN:
return base - 4;
case REQUIRED_COLUMN:
return base - 3;
case FIELD_COLUMN:
return base - 2;
case EXTRA_COLUMN:
return base - 1;
}
return base;
}
private int currentCol = 1;
public int getCols() {
return cols;
}
public void setCols(int newCols) {
this.cols = newCols;
}
@Override
public String getLabel(String name) {
Widget to = labels.get(name);
return UiUtil.getTextOnWidget(to);
}
@Override
public void setLabel(String name, String newText) {
Widget to = labels.get(name);
if (to instanceof HasText) {
HasText re = (HasText) to;
re.setText(newText);
}
}
private final InlineLabel requiredLabel = new InlineLabel(ImageResources.STATIC_TEXT.requiredFields());
@Override
public void showRequired(boolean hasRequired) {
requiredLabel.setVisible(hasRequired);
}
public LabelFieldPanel() {
this(1);
}
public LabelFieldPanel(int cols) {
super();
setCols(cols);
holderGrid = new FlexTable();
holderGrid.addStyleName("label-field-grid-panel");
initWidget(holderGrid);
holderGrid.setCellPadding(1);
footer = DOM.createTFoot();
DOM.insertChild(holderGrid.getElement(), footer, 0);
Element footTr = DOM.createTR();
footer.appendChild(footTr);
Element footTd = DOM.createTD();
footTr.appendChild(footTd);
footTd.setAttribute("colspan", String.valueOf(COL_COUNT * cols));
footTd.appendChild(requiredLabel.getElement());
requiredLabel.setVisible(false);
}
public void clearButtons() {
row = 0;
currentCol = 1;
holderGrid.clear();
idToRows.clear();
}
public void setBorderSpacing(int va) {
holderGrid.setCellSpacing(va);
}
private final static int PADDING_LEFT = 4;
@Override
public Field addTwoRows(Field result) {
if (result.getId() == null) {
result.setId(UUID.uuid());
}
List rows = new ArrayList();
InlineLabel label = null;
if (result.getLabel() != null) {
label = new InlineLabel(result.getLabel());
label.getElement().getStyle().setFontWeight(FontWeight.BOLD);
holderGrid.setWidget(row, 0, label);
holderGrid.getFlexCellFormatter().setColSpan(row, 0, COL_COUNT * cols);
if (result.isIdent()) {
holderGrid.getFlexCellFormatter().getElement(row, 0).getStyle().setPaddingLeft(PADDING_LEFT, Unit.PX);
}
rows.add(row);
row++;
}
if (result.getManager() != null) {
holderGrid.setWidget(row, 0, result.getManager());
if (result.isIdent()) {
holderGrid.getFlexCellFormatter().getElement(row, 0).getStyle().setPaddingLeft(PADDING_LEFT, Unit.PX);
}
if (result.getManager() instanceof RichTextArea) {
result.getManager().getElement().getStyle().setWidth(100, Unit.PCT);
}
holderGrid.getFlexCellFormatter().setColSpan(row, 0, COL_COUNT * cols);
rows.add(row);
row++;
}
if (result.getExtraWidget() != null) {
holderGrid.setWidget(row, 0, result.getExtraWidget());
holderGrid.getFlexCellFormatter().setColSpan(row, 0, COL_COUNT * cols);
rows.add(row);
row++;
}
setElements(result.getId(), label, result.getManager(), result.getExtraWidget());
idToRows.put(result.getId(), rows);
idToColMap.put(result.getId(), 1);
return result;
}
@Override
protected void addFieldInternal(Field real) {
int iconCol = getTableColumn(Cols.ICON_COLUMN, currentCol);
int labelCol = getTableColumn(Cols.LABEL_COLUMN, currentCol);
int reqCol = getTableColumn(Cols.REQUIRED_COLUMN, currentCol);
int fieldCol = getTableColumn(Cols.FIELD_COLUMN, currentCol);
if (real.getImage() != null) {
holderGrid.setWidget(row, iconCol, real.getImage());
}
InlineLabel labelWidget = null;
if (real.getLabel() != null) {
labelWidget = new InlineLabel(real.getLabel());
holderGrid.setWidget(row, labelCol, labelWidget);
labelWidget.getElement().getStyle().setFontWeight(FontWeight.BOLD);
}
super.setElements(real.getId(), labelWidget, real.getManager(), real.getExtraWidget());
if (real.isAlignTop()) {
holderGrid.getCellFormatter().setVerticalAlignment(row, labelCol, HasVerticalAlignment.ALIGN_TOP);
holderGrid.getCellFormatter().setVerticalAlignment(row, reqCol, HasVerticalAlignment.ALIGN_TOP);
holderGrid.getCellFormatter().getElement(row, labelCol).getStyle().setPaddingTop(paddingTop, Unit.PX);
}
holderGrid.getCellFormatter().setWidth(row, reqCol, "10px");
holderGrid.getCellFormatter().setStyleName(row, labelCol, "lbl-col");
if (labelWitdh > -1) {
holderGrid.getCellFormatter().setWidth(row, labelCol, labelWitdh + "px");
} else {
holderGrid.getCellFormatter().setWordWrap(row, labelCol, false);
}
holderGrid.setWidget(row, fieldCol, real.getManager());
holderGrid.getCellFormatter().setHorizontalAlignment(row, fieldCol, HasHorizontalAlignment.ALIGN_LEFT);
if (real.isAlignTop()) {
holderGrid.getCellFormatter().setVerticalAlignment(row, fieldCol, HasVerticalAlignment.ALIGN_TOP);
}
if (real.getExtraWidget() != null) {
holderGrid.setWidget(row, getTableColumn(Cols.EXTRA_COLUMN, currentCol), real.getExtraWidget());
holderGrid.getCellFormatter().setHorizontalAlignment(row, getTableColumn(Cols.EXTRA_COLUMN, currentCol), HasHorizontalAlignment.ALIGN_LEFT);
if (real.isAlignTop()) {
holderGrid.getCellFormatter().setVerticalAlignment(row, getTableColumn(Cols.EXTRA_COLUMN, currentCol), HasVerticalAlignment.ALIGN_TOP);
}
} else {
holderGrid.getFlexCellFormatter().setColSpan(row, fieldCol, 2);
}
List rows = new ArrayList();
rows.add(row);
idToColMap.put(real.getId(), currentCol);
idToRows.put(real.getId(), rows);
if (cols > 1) {
currentCol++;
if (currentCol > cols) {
currentCol = 1;
row++;
}
} else {
row++;
}
}
@Override
public void showFilled() {
Iterator labelsName = labels.keySet().iterator();
while (labelsName.hasNext()) {
String labelName = labelsName.next();
Widget item = edits.get(labelName);
if (item instanceof HasText) {
HasText real = (HasText) item;
if (real.getText() != null && real.getText().length() > 0) {
setVisible(labelName, true);
} else {
setVisible(labelName, false);
}
}
}
}
@Override
public void setVisible(String name, boolean newState) {
if (name != null && idToRows.containsKey(name)) {
List rows = idToRows.get(name);
for (Integer currentRow : rows) {
if (currentRow != null && currentRow > -1) {
holderGrid.getRowFormatter().setVisible(currentRow, newState);
}
}
}
if (name != null) {
setVisibleElements(name, newState);
}
}
public void setVisible(Field currentField, boolean newState) {
if (currentField != null) {
currentField.setVisible(newState);
}
}
private int labelWitdh = -1;
public void setLabelWidth(int newLabelWitdh) {
labelWitdh = newLabelWitdh;
}
private int paddingTop = 2;
public void setPaddingTop(int paddingTip) {
this.paddingTop = paddingTip;
}
public void setRequiredAndVisible(String name, boolean newState) {
setRequired(name, newState);
setVisible(name, newState);
}
public void setRequiredAndVisible(Field name, boolean newState) {
name.changeRequired(newState);
name.setVisible(newState);
}
public int getColumn(String id) {
Integer val = idToColMap.get(id);
if (val == null) {
return 1;
}
return val;
}
public void setExtra(String name, Widget newState) {
if (name != null && idToRows.containsKey(name)) {
List rows = idToRows.get(name);
for (Integer currentRow : rows) {
if (holderGrid.isCellPresent(currentRow, getTableColumn(Cols.EXTRA_COLUMN, getColumn(name)))) {
holderGrid.clearCell(currentRow, getTableColumn(Cols.EXTRA_COLUMN, getColumn(name)));
}
if (newState != null) {
holderGrid.setWidget(currentRow, getTableColumn(Cols.EXTRA_COLUMN, getColumn(name)), newState);
}
}
}
}
@Override
public void setRequired(String name, boolean newState) {
super.setRequiredForLabel(name, newState);
if (name != null && idToRows.containsKey(name)) {
List rows = idToRows.get(name);
for (Integer currentRow : rows) {
if (holderGrid.isCellPresent(currentRow, getTableColumn(Cols.REQUIRED_COLUMN, getColumn(name)))) {
holderGrid.clearCell(currentRow, getTableColumn(Cols.REQUIRED_COLUMN, getColumn(name)));
if (newState) {
final InlineLabel labelWidget = new InlineLabel("*");
labelWidget.addStyleName(EeGwtFrameworkCss.REQUIRED_INDICATOR);
holderGrid.setWidget(currentRow, getTableColumn(Cols.REQUIRED_COLUMN, getColumn(name)), labelWidget);
}
}
}
}
checkRequiredLegendas();
}
@Override
public void setWordWrapForLabel(String name, boolean newState) {
if (name != null && idToRows.containsKey(name)) {
List rows = idToRows.get(name);
for (Integer currentRow : rows) {
if (holderGrid.isCellPresent(currentRow, getTableColumn(Cols.LABEL_COLUMN, getColumn(name)))) {
holderGrid.getCellFormatter().setWordWrap(currentRow, getTableColumn(Cols.LABEL_COLUMN, getColumn(name)), newState);
}
}
}
}
@Override
public void setError(String name, boolean newState) {
super.setErrorForLabel(name, newState);
if (name != null && idToRows.containsKey(name)) {
List rows = idToRows.get(name);
for (Integer currentRow : rows) {
if (holderGrid.isCellPresent(currentRow, getTableColumn(Cols.REQUIRED_COLUMN, getColumn(name)))) {
holderGrid.clearCell(currentRow, getTableColumn(Cols.REQUIRED_COLUMN, getColumn(name)));
if (newState) {
final InlineLabel labelWidget = new InlineLabel("*");
labelWidget.addStyleName(EeGwtFrameworkCss.REQUIRED_INDICATOR);
holderGrid.setWidget(currentRow, getTableColumn(Cols.REQUIRED_COLUMN, getColumn(name)), labelWidget);
}
}
}
}
}
@Override
public void clear() {
holderGrid.clear();
}
@Override
public Iterator iterator() {
return holderGrid.iterator();
}
@Override
public boolean remove(Widget w) {
return holderGrid.remove(w);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy