package com.eas.client.forms.components.model.grid.header;
import com.bearsoft.gui.grid.header.GridColumnsNode;
import com.eas.client.forms.components.model.ModelWidget;
import com.eas.client.forms.components.model.grid.columns.ModelColumn;
import com.eas.design.Designable;
import com.eas.design.Undesignable;
import com.eas.script.AlreadyPublishedException;
import com.eas.script.HasPublished;
import com.eas.script.NoPublisherException;
import com.eas.script.ScriptFunction;
import com.eas.script.Scripts;
import java.awt.Color;
import java.awt.Font;
import jdk.nashorn.api.scripting.JSObject;
/**
*
* @author Марат
*/
public class ModelGridColumn extends GridColumnsNode implements HasPublished {
protected JSObject published;
protected String field;
protected String sortField;
@ScriptFunction
public ModelGridColumn() {
super();
setTableColumn(new ModelColumn());
}
@Override
public GridColumnsNode lightCopy() {
GridColumnsNode copied = new ModelGridColumn();
copied.lightAssign(this);
return copied;
}
@Override
public GridColumnsNode copy() throws Exception {
GridColumnsNode copied = new ModelGridColumn();
copied.assign(this);
return copied;
}
@ScriptFunction(jsDoc = ""
+ "/**\n"
+ " * Returns script handler, used for calculate cell's data, display value and style attributes.\n"
+ " */")
public JSObject getOnRender() {
return ((ModelColumn) getTableColumn()).getOnRender();
}
@ScriptFunction
public void setOnRender(JSObject aValue) {
((ModelColumn) getTableColumn()).setOnRender(aValue);
}
@ScriptFunction(jsDoc = ""
+ "/**\n"
+ " * Returns script handler, used for select a value of the cell.\n"
+ " */")
public JSObject getOnSelect() {
return ((ModelColumn) getTableColumn()).getOnSelect();
}
@ScriptFunction
public void setOnSelect(JSObject aValue) throws Exception {
((ModelColumn) getTableColumn()).setOnSelect(aValue);
}
@Undesignable
@ScriptFunction
public ModelWidget getEditor() {
return ((ModelColumn) getTableColumn()).getEditor();
}
@ScriptFunction
public void setEditor(ModelWidget aEditor) {
((ModelColumn) getTableColumn()).setEditor(aEditor);
}
@Undesignable
@ScriptFunction
public ModelWidget getView() {
return ((ModelColumn) getTableColumn()).getView();
}
@ScriptFunction
public void setView(ModelWidget aEditor) {
((ModelColumn) getTableColumn()).setView(aEditor);
}
@ScriptFunction(params = {"node"})
@Override
public void removeColumnNode(GridColumnsNode aNode) {
super.removeColumnNode(aNode);
}
@ScriptFunction(params = {"node"})
@Override
public void addColumnNode(GridColumnsNode aNode) {
super.addColumnNode(aNode);
}
@ScriptFunction(params = {"position", "node"})
@Override
public void insertColumnNode(int atIndex, GridColumnsNode aNode) {
super.insertColumnNode(atIndex, aNode);
}
@ScriptFunction
public GridColumnsNode[] columnNodes() {
return children.toArray(new GridColumnsNode[]{});
}
@ScriptFunction
@Designable(category = "model")
public String getField() {
return field;
}
@ScriptFunction
public void setField(String aValue) {
if (field == null ? aValue != null : !field.equals(aValue)) {
field = aValue;
((ModelColumn) tableColumn).setField(field);
}
}
@ScriptFunction
@Designable(category = "model")
public String getSortField() {
return sortField;
}
@ScriptFunction
public void setSortField(String aValue) {
if (sortField == null ? aValue != null : !sortField.equals(aValue)) {
sortField = aValue;
((ModelColumn) tableColumn).setSortField(sortField);
}
}
@ScriptFunction
@Override
public int getWidth() {
return super.getWidth();
}
@Override
public void setWidth(int aValue) {
super.setWidth(aValue);
}
@ScriptFunction
@Override
public int getPreferredWidth() {
return super.getPreferredWidth();
}
@ScriptFunction
@Override
public void setPreferredWidth(int aValue) {
super.setPreferredWidth(aValue);
}
@ScriptFunction
@Override
public int getMinWidth() {
return super.getMinWidth();
}
@ScriptFunction
@Override
public void setMinWidth(int aValue) {
super.setMinWidth(aValue);
}
@ScriptFunction
@Override
public int getMaxWidth() {
return super.getMaxWidth();
}
@ScriptFunction
@Override
public void setMaxWidth(int aValue) {
super.setMaxWidth(aValue);
}
@ScriptFunction
@Override
public boolean isReadonly() {
return super.isReadonly();
}
@ScriptFunction
@Override
public void setReadonly(boolean aValue) {
super.setReadonly(aValue);
}
@ScriptFunction
@Override
public boolean isVisible() {
return super.isVisible();
}
@ScriptFunction
@Override
public void setVisible(boolean aValue) {
super.setVisible(aValue);
}
@ScriptFunction
@Override
public boolean isMovable() {
return super.isMovable();
}
@ScriptFunction
@Override
public void setMovable(boolean aValue) {
super.setMovable(aValue);
}
@ScriptFunction
@Override
public boolean isResizable() {
return super.isResizable();
}
@ScriptFunction
@Override
public void setResizable(boolean aValue) {
super.setResizable(aValue);
}
@ScriptFunction
@Override
public boolean isSortable() {
return super.isSortable();
}
@ScriptFunction
@Override
public void setSortable(boolean aValue) {
super.setSortable(aValue);
}
@ScriptFunction
@Override
public String getTitle() {
return super.getTitle();
}
@ScriptFunction
@Override
public void setTitle(String aTitle) {
super.setTitle(aTitle);
}
@ScriptFunction
@Override
public Color getBackground() {
return super.getBackground();
}
@ScriptFunction
@Override
public void setBackground(Color aValue) {
super.setBackground(aValue);
}
@ScriptFunction
@Override
public Color getForeground() {
return super.getForeground();
}
@ScriptFunction
@Override
public void setForeground(Color aValue) {
super.setForeground(aValue);
}
@ScriptFunction
@Override
public Font getFont() {
return super.getFont();
}
@ScriptFunction
@Override
public void setFont(Font aValue) {
super.setFont(aValue);
}
@Override
public JSObject getPublished() {
if (published == null) {
JSObject publisher = Scripts.getSpace().getPublisher(this.getClass().getName());
if (publisher == null || !publisher.isFunction()) {
throw new NoPublisherException();
}
published = (JSObject) publisher.call(null, new Object[]{this});
}
return published;
}
@Override
public void setPublished(JSObject jsColumn) {
if (published != null) {
throw new AlreadyPublishedException();
}
published = jsColumn;
((ModelColumn) getTableColumn()).setEventsSource(jsColumn);
/*
if(view != null)
view.injectPublished(published);
if(editor != null)
editor.injectPublished(published);
*/
}
private static final String SORT = ""
+ "/**\n"
+ " * Column sort, works only in HTML5\n"
+ " */";
@ScriptFunction(jsDoc = SORT)
public void sort() {
}
private static final String SORT_DESC = ""
+ "/**\n"
+ " * Descending column sort, works only in HTML5\n"
+ " */";
@ScriptFunction(jsDoc = SORT_DESC)
public void sortDesc() {
}
private static final String UNSORT = ""
+ "/**\n"
+ " * Clears sort column, works only in HTML5\n"
+ " */";
@ScriptFunction(jsDoc = UNSORT)
public void unsort() {
}
}