use of com.servoy.j2db.ui.ISupportOnRenderCallback in project servoy-client by Servoy.
the class WebBaseLabel method fireOnRender.
public void fireOnRender(boolean force) {
if (scriptable instanceof ISupportOnRenderCallback) {
boolean isFocused = false;
IMainContainer currentContainer = ((FormManager) application.getFormManager()).getCurrentContainer();
if (currentContainer instanceof MainPage) {
isFocused = this.equals(((MainPage) currentContainer).getFocusedComponent());
}
if (force)
((ISupportOnRenderCallback) scriptable).getRenderEventExecutor().setRenderStateChanged();
((ISupportOnRenderCallback) scriptable).getRenderEventExecutor().fireOnRender(isFocused);
}
}
use of com.servoy.j2db.ui.ISupportOnRenderCallback in project servoy-client by Servoy.
the class WebCellAdapter method valueChanged.
public void valueChanged(ModificationEvent e) {
MainPage mp = view.findParent(MainPage.class);
if (mp != null)
mp.touch();
IRecord record = e.getRecord();
Iterator iterator = ((MarkupContainer) view.getTable()).iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
if (next instanceof ListItem) {
ListItem li = (ListItem) next;
Object modelObject = li.getModelObject();
if (record == null || modelObject == record) {
boolean hasOnRender = false;
Iterator iterator2 = li.iterator();
while (iterator2.hasNext()) {
ArrayList<Object> cellDisplays = new ArrayList<Object>();
Object cell = iterator2.next();
cell = CellContainer.getContentsForCell((Component) cell);
if (cell instanceof WebCellBasedViewListViewItem) {
Iterator listItemIte = ((WebCellBasedViewListViewItem) cell).iterator();
while (listItemIte.hasNext()) {
Object listItemDisplay = listItemIte.next();
if (listItemDisplay instanceof WrapperContainer) {
listItemDisplay = ((WrapperContainer) listItemDisplay).getDelegate();
}
cellDisplays.add(listItemDisplay);
}
} else {
cellDisplays.add(cell);
}
for (Object cellDisplay : cellDisplays) {
if (cellDisplay instanceof IProviderStylePropertyChanges && cellDisplay instanceof IDisplayData && ((IDisplayData) cellDisplay).getDataProviderID() == dataprovider) {
// only test if it is not already changed
view.checkForValueChanges(cellDisplay);
// do fire on render on all components for record change
if (cellDisplay instanceof ISupportOnRender && cellDisplay instanceof IScriptableProvider) {
IScriptable so = ((IScriptableProvider) cellDisplay).getScriptObject();
if (so instanceof AbstractRuntimeRendersupportComponent && ((ISupportOnRenderCallback) so).getRenderEventExecutor().hasRenderCallback()) {
String componentDataproviderID = ((AbstractRuntimeRendersupportComponent) so).getDataProviderID();
if (record != null || (e.getName() != null && e.getName().equals(componentDataproviderID))) {
((ISupportOnRender) cellDisplay).fireOnRender(true);
hasOnRender = true;
}
}
}
}
}
}
if (record != null || (!hasOnRender && !canChangeValue(e)))
break;
}
}
}
}
use of com.servoy.j2db.ui.ISupportOnRenderCallback in project servoy-client by Servoy.
the class ScrollResponseHeaderContainer method createComponents.
private void createComponents(final IApplication app, final Form form, final AbstractBase view, final IDataProviderLookup dataProviderLookup, final IScriptExecuter el, final int viewStartY, final int viewEndY, final ItemAdd output) {
List<IPersist> elements = ComponentFactory.sortElementsOnPositionAndGroup(view.getAllObjectsAsList());
int startX = 0;
for (int i = 0; i < elements.size(); i++) {
IPersist element = elements.get(i);
if (element instanceof Field || element instanceof GraphicalComponent || element instanceof Bean) {
if (!isListViewMode()) {
if (element instanceof GraphicalComponent && ((GraphicalComponent) element).getLabelFor() != null) {
if (isInView(cellview, ((GraphicalComponent) element).getLabelFor())) {
labelsFor.put(((GraphicalComponent) element).getLabelFor(), element);
}
continue;
}
}
Point l = ((IFormElement) element).getLocation();
if (l == null) {
// unknown where to add
continue;
}
if (l.y >= viewStartY && l.y < viewEndY) {
IComponent c = ComponentFactory.createComponent(app, form, element, dataProviderLookup, el, false);
if (cellview instanceof Portal && c instanceof IScriptableProvider) {
IScriptable s = ((IScriptableProvider) c).getScriptObject();
if (s instanceof ISupportOnRenderCallback && ((ISupportOnRenderCallback) s).getRenderEventExecutor() != null)
ComponentFactoryHelper.addPortalOnRenderCallback((Portal) cellview, ((ISupportOnRenderCallback) s).getRenderEventExecutor(), element, fc != null ? fc.getScriptExecuter() : null);
}
initializeComponent((Component) c, view, element);
output.add(element, (Component) c);
if (!isListViewMode()) {
// reset location.x as defined in this order, elements are ordered by location.x which is modified in drag-n-drop
Point loc = c.getLocation();
if (loc != null) {
c.setLocation(new Point(startX, loc.y));
}
Dimension csize = c.getSize();
startX += (csize != null) ? csize.width : ((IFormElement) element).getSize().width;
}
}
}
}
}
use of com.servoy.j2db.ui.ISupportOnRenderCallback in project servoy-client by Servoy.
the class WebEventExecutor method handleEvent.
/**
* @param type
* @param target
* @param comp
* @param webModifiers
* @param mouseLocation
* @param page
*/
private void handleEvent(EventType type, AjaxRequestTarget target, Component comp, int webModifiers, Point mouseLocation, Point absoluteMouseLocation, Page page) {
// process model changes from web components
WebClientSession.get().getWebClient().executeEvents();
Component renderScriptProvider = comp;
ISupplyFocusChildren<?> componentWithChildren = renderScriptProvider.findParent(ISupplyFocusChildren.class);
if (componentWithChildren != null)
renderScriptProvider = (Component) componentWithChildren;
if (renderScriptProvider instanceof WrapperContainer)
renderScriptProvider = ((WrapperContainer) renderScriptProvider).getDelegate();
RenderEventExecutor renderEventExecutor = null;
if (renderScriptProvider instanceof IScriptableProvider) {
IScriptable s = ((IScriptableProvider) renderScriptProvider).getScriptObject();
if (s instanceof ISupportOnRenderCallback) {
renderEventExecutor = ((ISupportOnRenderCallback) s).getRenderEventExecutor();
if (!renderEventExecutor.hasRenderCallback())
renderEventExecutor = null;
}
}
if (type == EventType.focusGained || type == EventType.action || type == EventType.focusLost) {
if (type == EventType.focusGained || type == EventType.action) {
((MainPage) page).setFocusedComponent(comp);
} else {
((MainPage) page).setFocusedComponent(null);
}
if (renderEventExecutor != null) {
renderEventExecutor.setRenderStateChanged();
// if component's onRender did not change any properties, don't add it to the target
if (renderScriptProvider instanceof ISupportOnRender && WebOnRenderHelper.doRender((ISupportOnRender) renderScriptProvider)) {
target.addComponent(renderScriptProvider);
}
}
}
if (type == EventType.focusLost || setSelectedIndex(comp, target, convertModifiers(webModifiers), type == EventType.focusGained || type == EventType.action)) {
if (skipFireFocusGainedCommand && type.equals(JSEvent.EventType.focusGained)) {
skipFireFocusGainedCommand = false;
} else {
switch(type) {
case action:
fireActionCommand(false, comp, convertModifiers(webModifiers), mouseLocation);
break;
case focusGained:
fireEnterCommands(false, comp, convertModifiers(webModifiers));
break;
case focusLost:
fireLeaveCommands(comp, false, convertModifiers(webModifiers));
break;
case doubleClick:
fireDoubleclickCommand(false, comp, convertModifiers(webModifiers), mouseLocation);
break;
case rightClick:
// if right click, mark the meta flag as it is on the smart client
fireRightclickCommand(false, comp, convertModifiers(webModifiers | 8), null, mouseLocation, absoluteMouseLocation);
break;
case none:
case dataChange:
case form:
case onDrag:
case onDragOver:
case onDrop:
}
}
}
}
use of com.servoy.j2db.ui.ISupportOnRenderCallback in project servoy-client by Servoy.
the class DisplaysAdapter method valueChanged.
/*
* _____________________________________________________________ JavaScriptModificationlistener
*/
public void valueChanged(ModificationEvent e) {
if (!adjusting) {
try {
adjusting = true;
Object obj = null;
boolean formVariable = false;
if (dataProviderID != null) {
if (dal.getFormScope().has(dataProviderID, dal.getFormScope())) {
formVariable = true;
obj = dal.getFormScope().get(dataProviderID);
} else if (record != null) {
obj = record.getValue(dataProviderID);
if (obj == Scriptable.NOT_FOUND) {
obj = null;
}
// have to do this because for calcs in calcs. Better was to had a check for previous value.
fireModificationEvent(obj);
}
}
// do not set value for form variable except when really changed
if (!formVariable || dataProviderID == null || dataProviderID.equals(e.getName())) {
setValueToDisplays(obj);
}
} finally {
adjusting = false;
}
}
// do fire on render on all components for record change
for (IDisplayData displayData : displays) {
if (displayData instanceof ISupportOnRender && displayData instanceof IScriptableProvider) {
IScriptable so = ((IScriptableProvider) displayData).getScriptObject();
if (so instanceof AbstractRuntimeRendersupportComponent && ((ISupportOnRenderCallback) so).getRenderEventExecutor().hasRenderCallback()) {
String componentDataproviderID = ((AbstractRuntimeRendersupportComponent) so).getDataProviderID();
if (e.getRecord() != null || (e.getName() != null && e.getName().equals(componentDataproviderID))) {
((ISupportOnRender) displayData).fireOnRender(true);
}
}
}
}
}
Aggregations