use of com.servoy.j2db.scripting.IScriptableProvider in project servoy-client by Servoy.
the class ScrollResponseHeaderContainer method getRowSelectionScript.
public String getRowSelectionScript(List<Integer> indexToUpdate) {
if (currentData == null)
return null;
if (!hasOnRender() && (bgColorScript != null || hasOddEvenSelected()) && indexToUpdate != null) {
int firstRow = table.isPageableMode() ? table.getCurrentPage() * table.getRowsPerPage() : table.getStartIndex();
int lastRow = firstRow + table.getViewSize() - 1;
int[] newSelectedIndexes = getSelectedIndexes();
AppendingStringBuffer sab = new AppendingStringBuffer();
for (int rowIdx : indexToUpdate) {
ArrayList<String> bgRuntimeColorjsArray = new ArrayList<String>();
ArrayList<String> fgRuntimeColorjsArray = new ArrayList<String>();
ArrayList<String> fstyleJsAray = new ArrayList<String>();
ArrayList<String> fweightJsAray = new ArrayList<String>();
ArrayList<String> fsizeJsAray = new ArrayList<String>();
ArrayList<String> ffamilyJsAray = new ArrayList<String>();
ArrayList<String> bstyleJsAray = new ArrayList<String>();
ArrayList<String> bwidthJsAray = new ArrayList<String>();
ArrayList<String> bcolorJsAray = new ArrayList<String>();
if (rowIdx >= firstRow && rowIdx <= lastRow) {
ListItem<IRecordInternal> selectedListItem = (ListItem<IRecordInternal>) table.get(Integer.toString(rowIdx));
if (selectedListItem != null) {
String selectedId = selectedListItem.getMarkupId();
boolean isSelected = Arrays.binarySearch(newSelectedIndexes, rowIdx) >= 0;
// IF ONLY SELCTED STYLE RULE is defined then apply runtimeComonent style properties
if (bgColorScript == null && !isSelected && (getRowOddStyle().getAttributeCount() == 0) && (getRowEvenStyle().getAttributeCount() == 0)) {
Iterable<? extends Component> it = Utils.iterate(selectedListItem.iterator());
Component cellContents;
for (Component c : it) {
if (c instanceof CellContainer) {
CellContainer cell = (CellContainer) c;
cellContents = cell.iterator().next();
} else {
cellContents = c;
}
if (cellContents instanceof IScriptableProvider) {
IScriptable scriptableComponent = ((IScriptableProvider) cellContents).getScriptObject();
if (scriptableComponent instanceof IRuntimeComponent) {
IRuntimeComponent runtimeComponent = (IRuntimeComponent) scriptableComponent;
// bgcolor
bgRuntimeColorjsArray.add(runtimeComponent.getBgcolor());
// fgcolor
fgRuntimeColorjsArray.add(runtimeComponent.getFgcolor());
// font style
String fontStyle = runtimeComponent.getFont();
StringBuilder // $NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
fstyle = new StringBuilder(""), // $NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
fweight = new StringBuilder(""), // $NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
fsize = new StringBuilder(""), // $NON-NLS-1$
ffamily = new StringBuilder("");
splitFontStyle(fontStyle, fstyle, fweight, fsize, ffamily);
fstyleJsAray.add(fstyle.toString());
fweightJsAray.add(fweight.toString());
fsizeJsAray.add(fsize.toString());
ffamilyJsAray.add(ffamily.toString());
// border style
String borderStyle = runtimeComponent.getBorder();
// $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
StringBuilder bstyle = new StringBuilder(""), bwidth = new StringBuilder(""), bcolor = new StringBuilder("");
splitBorderStyle(borderStyle, bstyle, bwidth, bcolor);
bstyleJsAray.add(bstyle.toString());
bwidthJsAray.add(bwidth.toString());
bcolorJsAray.add(bcolor.toString());
}
}
}
}
String selectedColor = null, selectedFgColor = null, selectedFont = null, selectedBorder = null;
selectedColor = getListItemBgColor(selectedListItem, isSelected, true);
if (!isListViewMode()) {
selectedFgColor = getListItemFgColor(selectedListItem, isSelected, true);
selectedFont = getListItemFont(selectedListItem, isSelected);
selectedBorder = getListItemBorder(selectedListItem, isSelected);
}
// $NON-NLS-1$
selectedColor = (selectedColor == null ? "" : selectedColor.toString());
// $NON-NLS-1$
selectedFgColor = (selectedFgColor == null) ? "" : selectedFgColor.toString();
// font styles
StringBuilder // $NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
fstyle = new StringBuilder(""), // $NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
fweight = new StringBuilder(""), // $NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
fsize = new StringBuilder(""), // $NON-NLS-1$
ffamily = new StringBuilder("");
splitFontStyle(selectedFont, fstyle, fweight, fsize, ffamily);
// border styles
// $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
StringBuilder bstyle = new StringBuilder(""), bwidth = new StringBuilder(""), bcolor = new StringBuilder("");
splitBorderStyle(selectedBorder, bstyle, bwidth, bcolor);
if (bgColorScript == null && !isSelected && (getRowOddStyle().getAttributeCount() == 0) && (getRowEvenStyle().getAttributeCount() == 0) && !isListViewMode()) {
// backgroundcolor and color are sent as final inline string
// $NON-NLS-1$
sab.append("Servoy.TableView.setRowStyle('").append(selectedId).append(// $NON-NLS-1$
"', ").append(toJsArrayString(bgRuntimeColorjsArray, "background-color:")).append(// $NON-NLS-1$
",").append(toJsArrayString(fgRuntimeColorjsArray, "color:")).append(// $NON-NLS-1$
",").append(toJsArrayString(fstyleJsAray, "")).append(// $NON-NLS-1$
", ").append(toJsArrayString(fweightJsAray, "")).append(// $NON-NLS-1$
", ").append(toJsArrayString(fsizeJsAray, "")).append(// $NON-NLS-1$
", ").append(toJsArrayString(ffamilyJsAray, "")).append(// $NON-NLS-1$
", ").append(toJsArrayString(bstyleJsAray, "")).append(// $NON-NLS-1$
", ").append(toJsArrayString(bwidthJsAray, "")).append(// $NON-NLS-1$
",").append(toJsArrayString(bcolorJsAray, "")).append(// $NON-NLS-1$
",").append(isListViewMode()).append(// $NON-NLS-1$
");\n");
} else {
// $NON-NLS-1$
sab.append("Servoy.TableView.setRowStyle('").append(selectedId).append(// $NON-NLS-1$
"', '").append(selectedColor).append(// $NON-NLS-1$
"', '").append(selectedFgColor).append(// $NON-NLS-1$
"', '").append(fstyle).append(// $NON-NLS-1$
"', '").append(fweight).append(// $NON-NLS-1$
"', '").append(fsize).append(// $NON-NLS-1$
"', '").append(ffamily).append(// $NON-NLS-1$
"', '").append(bstyle).append(// $NON-NLS-1$
"', '").append(bwidth).append(// $NON-NLS-1$
"', '").append(bcolor).append(// $NON-NLS-1$
"', ").append(isListViewMode()).append(// $NON-NLS-1$
");\n");
}
}
}
}
String rowSelectionScript = sab.toString();
if (rowSelectionScript.length() > 0)
return rowSelectionScript;
}
return null;
}
use of com.servoy.j2db.scripting.IScriptableProvider in project servoy-client by Servoy.
the class WebEventExecutor method setRightClickCmd.
@Override
public void setRightClickCmd(String id, Object[] args) {
if (id != null && useAJAX) {
if (component instanceof ILabel || component instanceof IFieldComponent || component instanceof SortableCellViewHeader) {
String sharedName = "Cmd";
if (component instanceof SortableCellViewHeader) {
sharedName = null;
}
component.add(new // $NON-NLS-1$
ServoyAjaxEventBehavior(// $NON-NLS-1$
"oncontextmenu", // $NON-NLS-1$
sharedName, // $NON-NLS-1$
true) {
@Override
protected void onEvent(AjaxRequestTarget target) {
WebEventExecutor.this.onEvent(JSEvent.EventType.rightClick, target, component, Utils.getAsInteger(RequestCycle.get().getRequest().getParameter(IEventExecutor.MODIFIERS_PARAMETER)), new // $NON-NLS-1$
Point(// $NON-NLS-1$
Utils.getAsInteger(RequestCycle.get().getRequest().getParameter("mx")), // $NON-NLS-1$
Utils.getAsInteger(RequestCycle.get().getRequest().getParameter("my"))), new Point(Utils.getAsInteger(RequestCycle.get().getRequest().getParameter("glx")), // $NON-NLS-1$
Utils.getAsInteger(RequestCycle.get().getRequest().getParameter("gly"))));
}
@Override
protected CharSequence generateCallbackScript(final CharSequence partialCall) {
return super.generateCallbackScript(// $NON-NLS-1$
partialCall + "+Servoy.Utils.getActionParams(event," + ((component instanceof SortableCellViewHeader) ? "true" : "false") + ")");
}
@Override
public boolean isEnabled(Component comp) {
if (super.isEnabled(comp)) {
if (comp instanceof IScriptableProvider && ((IScriptableProvider) comp).getScriptObject() instanceof IRuntimeComponent) {
// $NON-NLS-1$
Object oe = ((IRuntimeComponent) ((IScriptableProvider) comp).getScriptObject()).getClientProperty("ajax.enabled");
if (oe != null)
return Utils.getAsBoolean(oe);
}
return true;
}
return false;
}
// We need to return false, otherwise the context menu of the browser is displayed.
@Override
protected IAjaxCallDecorator getAjaxCallDecorator() {
return new AjaxCallDecorator() {
@Override
public CharSequence decorateScript(CharSequence script) {
// $NON-NLS-1$
return script + " return false;";
}
};
}
});
}
}
super.setRightClickCmd(id, args);
}
use of com.servoy.j2db.scripting.IScriptableProvider in project servoy-client by Servoy.
the class ScrollResponseHeaderContainer method distributeExtraSpace.
/**
* Distributes an amount of horizontal free space to some or the columns of the table.
*
* Can be called in two situations:
*
* 1. When the browser windows is resized.
*
* In this case the positive/negative extra space gets distributed to those columns that are
* anchored left + right.
*
* 2. When a column is resized
*
* In this case the positive/negative extra space gets distributed to all other columns,
* regardless of their anchoring.
*
* In both scenarios the extra space is distributed proportionally to the sizes of the
* involved columns.
*/
private void distributeExtraSpace(int delta, int totalWidthToStretch, IPersist dontTouchThis, boolean onlyAnchoredColumns) {
if (totalWidthToStretch == 0)
return;
int consumedDelta = 0;
IRuntimeComponent lastStretched = null;
for (IPersist element : elementToColumnIdentifierComponent.keySet()) {
boolean distributeToThisColumn = true;
if (dontTouchThis != null && element.equals(dontTouchThis))
distributeToThisColumn = false;
if (distributeToThisColumn && onlyAnchoredColumns) {
if (element instanceof ISupportAnchors) {
int anchors = ((ISupportAnchors) element).getAnchors();
if (((anchors & IAnchorConstants.EAST) == 0) || ((anchors & IAnchorConstants.WEST) == 0))
distributeToThisColumn = false;
} else
distributeToThisColumn = false;
}
if (distributeToThisColumn) {
Component c = elementToColumnIdentifierComponent.get(element);
if (c instanceof IScriptableProvider && ((IScriptableProvider) c).getScriptObject() instanceof IRuntimeComponent && c.isVisible()) {
IRuntimeComponent ic = (IRuntimeComponent) ((IScriptableProvider) c).getScriptObject();
int thisDelta = delta * ic.getWidth() / totalWidthToStretch;
consumedDelta += thisDelta;
int newWidth = ic.getWidth() + thisDelta;
int height = ic.getHeight();
Iterator<Component> alreadyAddedComponents = cellToElement.keySet().iterator();
if (alreadyAddedComponents.hasNext()) {
Component firstAddedComponent = alreadyAddedComponents.next();
if ((firstAddedComponent instanceof IComponent))
height = ((IComponent) firstAddedComponent).getSize().height;
}
ic.setSize(newWidth, height);
lastStretched = ic;
}
}
}
// we can have some leftover due to rounding errors, just put it into the last stretched column.
if ((delta - consumedDelta != 0) && (lastStretched != null)) {
lastStretched.setSize(lastStretched.getWidth() + delta - consumedDelta, lastStretched.getHeight());
}
updateXLocationForColumns(getOrderedHeaders());
}
use of com.servoy.j2db.scripting.IScriptableProvider in project servoy-client by Servoy.
the class ScrollResponseHeaderContainer method hasOnRender.
private boolean hasOnRender() {
if (hasOnRender == null) {
hasOnRender = new Boolean(false);
if (dataRendererOnRenderWrapper.getRenderEventExecutor().hasRenderCallback()) {
hasOnRender = new Boolean(true);
} else {
Iterator<Component> compIte = elementToColumnIdentifierComponent.values().iterator();
Component comp;
while (compIte.hasNext()) {
comp = compIte.next();
if (comp instanceof IScriptableProvider) {
IScriptable s = ((IScriptableProvider) comp).getScriptObject();
if (s instanceof ISupportOnRenderCallback && ((ISupportOnRenderCallback) s).getRenderEventExecutor().hasRenderCallback()) {
hasOnRender = new Boolean(true);
break;
}
}
}
}
}
return hasOnRender.booleanValue();
}
use of com.servoy.j2db.scripting.IScriptableProvider in project servoy-client by Servoy.
the class ScrollResponseHeaderContainer method applyStyleOnComponent.
private void applyStyleOnComponent(Component comp, Object bgColor, Object fgColor, Object compFont, Object listItemBorder) {
if (comp instanceof IScriptableProvider) {
IScriptable s = ((IScriptableProvider) comp).getScriptObject();
if (s instanceof IRuntimeComponent) {
IRuntimeComponent sbm = (IRuntimeComponent) s;
RenderableWrapper sbmRW = null;
if (s instanceof ISupportOnRenderCallback) {
IScriptRenderMethods sr = ((ISupportOnRenderCallback) s).getRenderable();
if (sr instanceof RenderableWrapper)
sbmRW = (RenderableWrapper) sr;
}
if (bgColor != null) {
if (sbmRW != null)
sbmRW.clearProperty(RenderableWrapper.PROPERTY_BGCOLOR);
String oldColor = sbm.getBgcolor();
sbm.setBgcolor(bgColor.toString());
if (sbm instanceof AbstractRuntimeBaseComponent && ((AbstractRuntimeBaseComponent) sbm).getComponent() instanceof WebDataLookupField) {
((WebDataLookupField) ((AbstractRuntimeBaseComponent) sbm).getComponent()).setListColor(PersistHelper.createColor(oldColor));
}
if (sbm.isTransparent()) {
// apply the bg color even if transparent by clearing the transparent flag in the property changes map
if (comp instanceof IProviderStylePropertyChanges && ((IProviderStylePropertyChanges) comp).getStylePropertyChanges() instanceof IStylePropertyChangesRecorder) {
((IStylePropertyChangesRecorder) (((IProviderStylePropertyChanges) comp).getStylePropertyChanges())).setTransparent(false);
}
}
} else {
if (sbmRW != null && !Utils.equalObjects(sbmRW.getOnRenderSetProperties().get(RenderableWrapper.PROPERTY_BGCOLOR), sbm.getBgcolor()))
sbmRW.clearProperty(RenderableWrapper.PROPERTY_BGCOLOR);
sbm.setBgcolor(sbm.getBgcolor());
setParentBGcolor(comp, "");
}
if (fgColor != null) {
if (sbmRW != null)
sbmRW.clearProperty(RenderableWrapper.PROPERTY_FGCOLOR);
sbm.setFgcolor(fgColor.toString());
} else {
if (sbmRW != null && !Utils.equalObjects(sbmRW.getOnRenderSetProperties().get(RenderableWrapper.PROPERTY_FGCOLOR), sbm.getFgcolor())) {
sbmRW.clearProperty(RenderableWrapper.PROPERTY_FGCOLOR);
}
sbm.setFgcolor(sbm.getFgcolor());
}
if (compFont != null) {
if (sbmRW != null && !Utils.equalObjects(sbmRW.getOnRenderSetProperties().get(RenderableWrapper.PROPERTY_FONT), sbm.getFont()))
sbmRW.clearProperty(RenderableWrapper.PROPERTY_FONT);
sbm.setFont(compFont.toString());
} else {
if (sbmRW != null)
sbmRW.clearProperty(RenderableWrapper.PROPERTY_FONT);
sbm.setFont(sbm.getFont());
}
if (listItemBorder != null) {
// TODO left / right part of this list item border should only be applied on first / last components in the row (for table view)
// like it is done in servoy.js when client side styling is used
String newBorder = listItemBorder.toString();
Border currentBorder = ComponentFactoryHelper.createBorder(sbm.getBorder());
Border marginBorder = null;
if (currentBorder instanceof EmptyBorder) {
marginBorder = currentBorder;
} else if (currentBorder instanceof CompoundBorder && ((CompoundBorder) currentBorder).getInsideBorder() instanceof EmptyBorder) {
marginBorder = ((CompoundBorder) currentBorder).getInsideBorder();
}
if (marginBorder != null) {
newBorder = ComponentFactoryHelper.createBorderString(BorderFactory.createCompoundBorder(ComponentFactoryHelper.createBorder(newBorder), marginBorder));
}
if (sbmRW != null)
sbmRW.clearProperty(RenderableWrapper.PROPERTY_BORDER);
sbm.setBorder(newBorder);
// reset size so the web size will be recalculated based on the new border
sbm.setSize(sbm.getWidth(), sbm.getHeight());
} else {
if (sbmRW != null && !Utils.equalObjects(sbmRW.getOnRenderSetProperties().get(RenderableWrapper.PROPERTY_BORDER), sbm.getBorder()))
sbmRW.clearProperty(RenderableWrapper.PROPERTY_BORDER);
sbm.setBorder(sbm.getBorder());
}
}
}
}
Aggregations