/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.client.forms.components.model.grid.columns; import com.bearsoft.gui.grid.header.MultiLevelHeader; import com.eas.client.forms.components.model.ModelWidget; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import javax.swing.table.TableColumn; import jdk.nashorn.api.scripting.JSObject; /** * Model's column, bound with some additional information about how to achieve * model data. It holds a reference to corresponding view's column. It is used * when model's columns are added or removed. In such case, view's column's * model index become invalid and view columns need to be reindexed. * * @author mg */ public class ModelColumn extends TableColumn { // protected String name; protected MultiLevelHeader header; // protected boolean moveable = true; protected boolean readonly; protected boolean sortable = true; protected String field; protected String sortField; // protected JSObject eventsSource; protected JSObject onRender; protected JSObject onSelect; protected boolean readOnly; protected JSObject published; protected ModelWidget view; protected ModelWidget editor; protected boolean visible = true; // protected PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); // Temporarily stored values involved in columns show/hide process. protected int tempWidth; protected int tempMinWidth; protected int tempMaxWidth; protected boolean tempResizable = true; protected boolean tempMoveable = true; /** * Constructs model column, bounded with view's column. * * @param aName * @param aOnRender * @param aOnSelect * @param aReadOnly * @param aView * @param aEditor */ public ModelColumn(String aName, JSObject aOnRender, JSObject aOnSelect, boolean aReadOnly, ModelWidget aView, ModelWidget aEditor) { super(); name = aName; onRender = aOnRender; onSelect = aOnSelect; readOnly = aReadOnly; view = aView; super.setCellRenderer(aView); editor = aEditor; super.setCellEditor(editor); super.setWidth(50); tempWidth = super.getWidth(); tempMinWidth = super.getMinWidth(); tempMaxWidth = super.getMaxWidth(); tempResizable = super.getResizable(); tempMoveable = moveable; super.addPropertyChangeListener((PropertyChangeEvent evt) -> { changeSupport.firePropertyChange(evt.getPropertyName(), evt.getOldValue(), evt.getNewValue()); }); } @Override public void addPropertyChangeListener(PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(listener); } @Override public void removePropertyChangeListener(PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(listener); } @Override public PropertyChangeListener[] getPropertyChangeListeners() { return changeSupport.getPropertyChangeListeners(); } public ModelColumn() { this("column", null, null, false, null, null); } public String getField() { return field; } public void setField(String aValue) { if (field == null ? aValue != null : !field.equals(aValue)) { field = aValue; } } public String getSortField() { return sortField; } public void setSortField(String aValue) { if (sortField == null ? aValue != null : !sortField.equals(aValue)) { sortField = aValue; } } public ModelWidget getView() { return view; } public void setView(ModelWidget aView) { if (view != aView) { view = aView; super.setCellRenderer(aView); } } public ModelWidget getEditor() { return editor; } public void setEditor(ModelWidget aEditor) { if (editor != aEditor) { if (editor != null) { editor.setOnSelect(null); } editor = aEditor; if (editor != null) { editor.setOnSelect(onSelect); } super.setCellEditor(editor); } } public JSObject getEventsSource() { return eventsSource; } public void setEventsSource(JSObject aValue) { eventsSource = aValue; } /** * Returns script handler, used for calculate cell's data, display value and * style. * * @return */ public JSObject getOnRender() { return onRender; } public void setOnRender(JSObject aValue) { onRender = aValue; } /** * Returns script handler, used for select a value of the cell. * * @return */ public JSObject getOnSelect() { return onSelect; } public void setOnSelect(JSObject aValue) throws Exception { if (onSelect != null ? !onSelect.equals(aValue) : aValue != null) { onSelect = aValue; if (editor != null) { editor.setOnSelect(aValue); } } } public boolean isReadOnly() { return readOnly; } public void setReadOnly(boolean aValue) { readOnly = aValue; } public boolean isVisible() { return visible; } public void setVisible(boolean aValue) { if (visible != aValue) { visible = aValue; if (visible) { showColumn(); } else { hideColumn(); } } } private void hideColumn() { tempWidth = super.getWidth(); tempMinWidth = super.getMinWidth(); tempMaxWidth = super.getMaxWidth(); tempResizable = super.getResizable(); tempMoveable = moveable; setResizeable(false); setMoveable(false); setMinWidth(0); setWidth(0); setMaxWidth(0); } private void showColumn() { //int oldWidth = getWidth(); setMaxWidth(tempMaxWidth); setMinWidth(tempMinWidth); setResizeable(tempResizable); setMoveable(tempMoveable); setWidth(tempWidth); } @Override public int getWidth() { return super.getWidth(); } @Override public void setWidth(int aValue) { super.setWidth(aValue); } @Override public void setPreferredWidth(int preferredWidth) { super.setPreferredWidth(preferredWidth); } public String getTitle() { return getHeaderValue() != null && getHeaderValue() instanceof String ? (String) getHeaderValue() : null; } public void setTitle(String aTitle) { setHeaderValue(aTitle); } public boolean isMoveable() { return moveable; } public void setMoveable(boolean aValue) { if (moveable != aValue) { boolean oldValue = moveable; moveable = aValue; changeSupport.firePropertyChange("moveable", oldValue, moveable); } } public boolean isResizeable() { return super.isResizable; } public void setResizeable(boolean aValue) { if (super.getResizable() != aValue) { boolean oldValue = super.getResizable(); super.isResizable = aValue; changeSupport.firePropertyChange("resizable", oldValue, aValue); } } public boolean isReadonly() { return readonly; } public void setReadonly(boolean aValue) { if (readonly != aValue) { boolean oldValue = readonly; readonly = aValue; changeSupport.firePropertyChange("readonly", oldValue, readonly); } } public boolean isSortable() { return sortable; } public void setSortable(boolean aValue) { if (sortable != aValue) { boolean oldValue = sortable; sortable = aValue; changeSupport.firePropertyChange("sortable", oldValue, sortable); } } public String getName() { return name; } public void setName(String aValue) { name = aValue; } }