All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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