Search in sources :

Example 6 with IProviderStylePropertyChanges

use of com.servoy.j2db.ui.IProviderStylePropertyChanges in project servoy-client by Servoy.

the class ScrollResponseHeaderContainer method checkForValueChanges.

protected void checkForValueChanges(Object cell) {
    IStylePropertyChanges spc = ((IProviderStylePropertyChanges) cell).getStylePropertyChanges();
    if (!spc.isChanged() && !spc.isValueChanged()) {
        IModel innermostModel = ((Component) cell).getInnermostModel();
        if (innermostModel instanceof RecordItemModel) {
            Object lastRenderedValue = ((RecordItemModel) innermostModel).getLastRenderedValue((Component) cell);
            Object object = ((Component) cell).getDefaultModelObject();
            if (!Utils.equalObjects(lastRenderedValue, object)) {
                spc.setValueChanged();
            }
        } else {
            spc.setChanged();
        }
    }
}
Also used : IModel(org.apache.wicket.model.IModel) IStylePropertyChanges(com.servoy.j2db.ui.IStylePropertyChanges) IProviderStylePropertyChanges(com.servoy.j2db.ui.IProviderStylePropertyChanges) IComponent(com.servoy.j2db.ui.IComponent) AbstractRuntimeBaseComponent(com.servoy.j2db.ui.scripting.AbstractRuntimeBaseComponent) BaseComponent(com.servoy.j2db.persistence.BaseComponent) GraphicalComponent(com.servoy.j2db.persistence.GraphicalComponent) IFieldComponent(com.servoy.j2db.ui.IFieldComponent) Component(org.apache.wicket.Component) IPortalComponent(com.servoy.j2db.ui.IPortalComponent) IRuntimeComponent(com.servoy.j2db.ui.runtime.IRuntimeComponent)

Example 7 with IProviderStylePropertyChanges

use of com.servoy.j2db.ui.IProviderStylePropertyChanges in project servoy-client by Servoy.

the class WebEventExecutor method generateResponse.

@SuppressWarnings("nls")
public static void generateResponse(final AjaxRequestTarget target, Page page) {
    WebClientSession webClientSession = WebClientSession.get();
    if (target != null && page instanceof MainPage && webClientSession != null && webClientSession.getWebClient() != null && webClientSession.getWebClient().getSolution() != null) {
        if (target instanceof CloseableAjaxRequestTarget && ((CloseableAjaxRequestTarget) target).isClosed()) {
            return;
        }
        // do executed the events for before generating the response.
        webClientSession.getWebClient().executeEvents();
        if (webClientSession.getWebClient() == null || webClientSession.getWebClient().getSolution() == null) {
            // how can web client be null here ?
            return;
        }
        final MainPage mainPage = ((MainPage) page);
        if (mainPage.getPageMap() instanceof ModifiedAccessStackPageMap) {
            // at every request mark the pagemap as dirty so lru eviction really works
            ((ModifiedAccessStackPageMap) mainPage.getPageMap()).flagDirty();
        }
        // If the main form is switched then do a normal redirect.
        if (mainPage.isMainFormSwitched()) {
            mainPage.versionPush();
            RequestCycle.get().setResponsePage(page);
        } else {
            page.visitChildren(WebTabPanel.class, new Component.IVisitor<WebTabPanel>() {

                public Object component(WebTabPanel component) {
                    component.initalizeFirstTab();
                    return IVisitor.CONTINUE_TRAVERSAL;
                }
            });
            mainPage.addWebAnchoringInfoIfNeeded();
            final Set<WebCellBasedView> tableViewsToRender = new HashSet<WebCellBasedView>();
            final List<String> valueChangedIds = new ArrayList<String>();
            final List<String> invalidValueIds = new ArrayList<String>();
            final Map<WebCellBasedView, List<Integer>> tableViewsWithChangedRowIds = new HashMap<WebCellBasedView, List<Integer>>();
            // first, get all invalidValue & valueChanged components
            page.visitChildren(IProviderStylePropertyChanges.class, new Component.IVisitor<Component>() {

                public Object component(Component component) {
                    if (component instanceof IDisplayData && !((IDisplayData) component).isValueValid()) {
                        invalidValueIds.add(component.getMarkupId());
                    }
                    if (((IProviderStylePropertyChanges) component).getStylePropertyChanges().isValueChanged()) {
                        if (component.getParent().isVisibleInHierarchy()) {
                            // the component will get added to the target & rendered only if it's parent is visible in hierarchy because changed flag is also set (see the visitor below)
                            // so we will only list these components if they are visible otherwise ajax timer could end up sending hundreds of id's that don't actually render every 5 seconds
                            // because the valueChanged flag is cleared only by onRender
                            valueChangedIds.add(component.getMarkupId());
                            if (component instanceof MarkupContainer) {
                                ((MarkupContainer) component).visitChildren(IDisplayData.class, new IVisitor<Component>() {

                                    public Object component(Component comp) {
                                        // labels/buttons that don't display data are not changed
                                        if (!(comp instanceof ILabel)) {
                                            valueChangedIds.add(comp.getMarkupId());
                                        }
                                        return CONTINUE_TRAVERSAL;
                                    }
                                });
                            }
                        }
                    }
                    return CONTINUE_TRAVERSAL;
                }
            });
            // add changed components to target; if a component is changed, the change check won't go deeper in hierarchy
            page.visitChildren(IProviderStylePropertyChanges.class, new Component.IVisitor<Component>() {

                public Object component(Component component) {
                    if (((IProviderStylePropertyChanges) component).getStylePropertyChanges().isChanged()) {
                        if (component.getParent().isVisibleInHierarchy()) {
                            target.addComponent(component);
                            generateDragAttach(component, target.getHeaderResponse());
                            WebForm parentForm = component.findParent(WebForm.class);
                            boolean isDesignMode = parentForm != null && parentForm.isDesignMode();
                            if (!component.isVisible() || (component instanceof WrapperContainer && !((WrapperContainer) component).getDelegate().isVisible())) {
                                ((IProviderStylePropertyChanges) component).getStylePropertyChanges().setRendered();
                                if (isDesignMode) {
                                    target.appendJavascript("Servoy.ClientDesign.hideSelected('" + component.getMarkupId() + "')");
                                }
                            } else {
                                if (isDesignMode) {
                                    target.appendJavascript("Servoy.ClientDesign.refreshSelected('" + component.getMarkupId() + "')");
                                }
                                // some components need to perform js layout tasks when their markup is replaced when using anchored layout
                                mainPage.getPageContributor().markComponentForAnchorLayoutIfNeeded(component);
                            }
                            ListItem<IRecordInternal> row = component.findParent(ListItem.class);
                            if (row != null) {
                                WebCellBasedView wcbv = row.findParent(WebCellBasedView.class);
                                if (wcbv != null) {
                                    if (tableViewsWithChangedRowIds.get(wcbv) == null) {
                                        tableViewsWithChangedRowIds.put(wcbv, new ArrayList<Integer>());
                                    }
                                    List<Integer> ids = tableViewsWithChangedRowIds.get(wcbv);
                                    int changedRowIdx = wcbv.indexOf(row);
                                    if (changedRowIdx >= 0 && !ids.contains(changedRowIdx)) {
                                        ids.add(changedRowIdx);
                                    }
                                }
                            }
                        }
                        return IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
                    } else if (component instanceof WebCellBasedView)
                        tableViewsToRender.add((WebCellBasedView) component);
                    return component.isVisible() ? IVisitor.CONTINUE_TRAVERSAL : IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
                }
            });
            page.visitChildren(IComponentToRequestAttacher.class, new Component.IVisitor<Component>() {

                public Object component(Component component) {
                    ((IComponentToRequestAttacher) component).attachComponents(target);
                    return IVisitor.CONTINUE_TRAVERSAL;
                }
            });
            final List<String> visibleEditors = new ArrayList<String>();
            page.visitChildren(WebDataHtmlArea.class, new Component.IVisitor<Component>() {

                public Object component(Component component) {
                    visibleEditors.add(((WebDataHtmlArea) component).getEditorID());
                    return IVisitor.CONTINUE_TRAVERSAL;
                }
            });
            StringBuffer argument = new StringBuffer();
            for (String id : visibleEditors) {
                argument.append("\"");
                argument.append(id);
                argument.append("\"");
                if (visibleEditors.indexOf(id) != visibleEditors.size() - 1) {
                    argument.append(",");
                }
            }
            target.prependJavascript("Servoy.HTMLEdit.removeInvalidEditors(" + argument + ");");
            String rowSelectionScript, columnResizeScript;
            for (final WebCellBasedView wcbv : tableViewsToRender) {
                if (wcbv.isScrollMode())
                    wcbv.scrollViewPort(target);
                wcbv.updateRowSelection(target);
                List<Integer> changedIds = tableViewsWithChangedRowIds.get(wcbv);
                List<Integer> selectedIndexesChanged = wcbv.getIndexToUpdate(false);
                List<Integer> mergedIds = selectedIndexesChanged != null ? selectedIndexesChanged : new ArrayList<Integer>();
                if (changedIds != null) {
                    for (Integer id : changedIds) {
                        if (!mergedIds.contains(id)) {
                            mergedIds.add(id);
                        }
                    }
                }
                rowSelectionScript = wcbv.getRowSelectionScript(mergedIds);
                wcbv.clearSelectionByCellActionFlag();
                if (rowSelectionScript != null)
                    target.appendJavascript(rowSelectionScript);
                columnResizeScript = wcbv.getColumnResizeScript();
                if (columnResizeScript != null)
                    target.appendJavascript(columnResizeScript);
            }
            // double check if the page contributor is changed, because the above IStylePropertyChanges ischanged could have altered it.
            if (mainPage.getPageContributor().getStylePropertyChanges().isChanged()) {
                target.addComponent((Component) mainPage.getPageContributor());
            }
            if (invalidValueIds.size() == 0) {
                // $NON-NLS-1$
                target.appendJavascript("setValidationFailed(null);");
            } else {
                // $NON-NLS-1$
                target.appendJavascript("setValidationFailed('" + invalidValueIds.get(0) + "');");
            }
            Component comp = mainPage.getAndResetToFocusComponent();
            if (comp != null) {
                if (comp instanceof WebDataHtmlArea) {
                    target.appendJavascript("tinyMCE.activeEditor.focus()");
                } else {
                    target.focusComponent(comp);
                }
            } else if (mainPage.getAndResetMustFocusNull()) {
                // This is needed for example when showing a non-modal dialog in IE7 (or otherwise
                // the new window would be displayed in the background).
                target.focusComponent(null);
            }
            if (valueChangedIds.size() > 0) {
                argument = new StringBuffer();
                for (String id : valueChangedIds) {
                    argument.append("\"");
                    argument.append(id);
                    argument.append("\"");
                    if (valueChangedIds.indexOf(id) != valueChangedIds.size() - 1) {
                        argument.append(",");
                    }
                }
                target.prependJavascript("storeValueAndCursorBeforeUpdate(" + argument + ");");
                target.appendJavascript("restoreValueAndCursorAfterUpdate();");
            }
            // if we have admin info, show it
            String adminInfo = mainPage.getAdminInfo();
            if (adminInfo != null) {
                adminInfo = Utils.stringReplace(adminInfo, "\r", "");
                adminInfo = Utils.stringReplace(adminInfo, "\n", "\\n");
                target.appendJavascript("alert('" + adminInfo + "');");
            }
            // If we have a status text, set it.
            String statusText = mainPage.getStatusText();
            if (statusText != null) {
                target.appendJavascript("setStatusText('" + statusText + "');");
            }
            String show = mainPage.getShowUrlScript();
            if (show != null) {
                target.appendJavascript(show);
            }
            mainPage.renderJavascriptChanges(target);
            if (((WebClientInfo) webClientSession.getClientInfo()).getProperties().isBrowserInternetExplorer() && ((WebClientInfo) webClientSession.getClientInfo()).getProperties().getBrowserVersionMajor() < 9) {
                target.appendJavascript("Servoy.Utils.checkWebFormHeights();");
            }
            try {
                if (isStyleSheetLimitForIE(page.getSession())) {
                    target.appendJavascript("testStyleSheets();");
                }
            } catch (Exception e) {
                // cannot retrieve session/clientinfo/properties?
                Debug.error(e);
                target.appendJavascript("testStyleSheets();");
            }
        }
    }
}
Also used : WebClientInfo(org.apache.wicket.protocol.http.request.WebClientInfo) HashMap(java.util.HashMap) ILabel(com.servoy.j2db.ui.ILabel) WebForm(com.servoy.j2db.server.headlessclient.WebForm) ArrayList(java.util.ArrayList) CloseableAjaxRequestTarget(com.servoy.j2db.server.headlessclient.CloseableAjaxRequestTarget) List(java.util.List) ArrayList(java.util.ArrayList) IProviderStylePropertyChanges(com.servoy.j2db.ui.IProviderStylePropertyChanges) IComponent(com.servoy.j2db.ui.IComponent) IFieldComponent(com.servoy.j2db.ui.IFieldComponent) Component(org.apache.wicket.Component) FormComponent(org.apache.wicket.markup.html.form.FormComponent) IRuntimeComponent(com.servoy.j2db.ui.runtime.IRuntimeComponent) MainPage(com.servoy.j2db.server.headlessclient.MainPage) HashSet(java.util.HashSet) MarkupContainer(org.apache.wicket.MarkupContainer) ModifiedAccessStackPageMap(com.servoy.j2db.server.headlessclient.WebClientsApplication.ModifiedAccessStackPageMap) IVisitor(org.apache.wicket.Component.IVisitor) WebClientSession(com.servoy.j2db.server.headlessclient.WebClientSession) WrapperContainer(com.servoy.j2db.server.headlessclient.WrapperContainer) IDisplayData(com.servoy.j2db.dataprocessing.IDisplayData) ListItem(org.apache.wicket.markup.html.list.ListItem)

Example 8 with IProviderStylePropertyChanges

use of com.servoy.j2db.ui.IProviderStylePropertyChanges 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());
            }
        }
    }
}
Also used : ISupportOnRenderCallback(com.servoy.j2db.ui.ISupportOnRenderCallback) IScriptable(com.servoy.j2db.scripting.IScriptable) IScriptRenderMethods(com.servoy.j2db.ui.IScriptRenderMethods) AbstractRuntimeBaseComponent(com.servoy.j2db.ui.scripting.AbstractRuntimeBaseComponent) IRuntimeComponent(com.servoy.j2db.ui.runtime.IRuntimeComponent) RenderableWrapper(com.servoy.j2db.ui.RenderableWrapper) IProviderStylePropertyChanges(com.servoy.j2db.ui.IProviderStylePropertyChanges) CompoundBorder(javax.swing.border.CompoundBorder) IScriptableProvider(com.servoy.j2db.scripting.IScriptableProvider) EmptyBorder(javax.swing.border.EmptyBorder) IStylePropertyChangesRecorder(com.servoy.j2db.ui.IStylePropertyChangesRecorder) Border(javax.swing.border.Border) CompoundBorder(javax.swing.border.CompoundBorder) TitledBorder(javax.swing.border.TitledBorder) EmptyBorder(javax.swing.border.EmptyBorder)

Example 9 with IProviderStylePropertyChanges

use of com.servoy.j2db.ui.IProviderStylePropertyChanges in project servoy-client by Servoy.

the class ScrollResponseHeaderContainer method getColumnResizeScript.

@SuppressWarnings("nls")
public String getColumnResizeScript() {
    if (resizedComponent instanceof IProviderStylePropertyChanges) {
        String tableId = getMarkupId();
        String classId = resizedComponent.getId();
        // $NON-NLS-1$
        String sWidth = (String) ((IProviderStylePropertyChanges) resizedComponent).getStylePropertyChanges().getChanges().get("width");
        if (sWidth != null) {
            resizedComponent = null;
            return new AppendingStringBuffer("Servoy.TableView.setTableColumnWidth('").append(tableId).append("', '").append(classId).append("', ").append(Integer.parseInt(sWidth.substring(0, sWidth.length() - 2))).append(")").toString();
        }
    }
    return null;
}
Also used : AppendingStringBuffer(org.apache.wicket.util.string.AppendingStringBuffer) IProviderStylePropertyChanges(com.servoy.j2db.ui.IProviderStylePropertyChanges)

Example 10 with IProviderStylePropertyChanges

use of com.servoy.j2db.ui.IProviderStylePropertyChanges in project servoy-client by Servoy.

the class WebOnRenderHelper method doRender.

/**
 * Calls onRender for the renderComponent and clears its changed flag if
 * the callback did not change any properties and the value did not change
 *
 * @param renderComponent
 * @return true if properties were changed during onRender, otherwise returns false
 */
public static boolean doRender(ISupportOnRender renderComponent) {
    if (renderComponent instanceof IProviderStylePropertyChanges) {
        IStylePropertyChanges spc = ((IProviderStylePropertyChanges) renderComponent).getStylePropertyChanges();
        Properties changesBeforeOnRender = (Properties) spc.getChanges().clone();
        renderComponent.fireOnRender(false);
        Properties changesAfterOnRender = spc.getChanges();
        if (changesBeforeOnRender.equals(changesAfterOnRender)) {
            if (!spc.isValueChanged())
                spc.setRendered();
            return false;
        }
    }
    return true;
}
Also used : IStylePropertyChanges(com.servoy.j2db.ui.IStylePropertyChanges) IProviderStylePropertyChanges(com.servoy.j2db.ui.IProviderStylePropertyChanges) Properties(java.util.Properties)

Aggregations

IProviderStylePropertyChanges (com.servoy.j2db.ui.IProviderStylePropertyChanges)11 Component (org.apache.wicket.Component)8 IRuntimeComponent (com.servoy.j2db.ui.runtime.IRuntimeComponent)7 IComponent (com.servoy.j2db.ui.IComponent)6 IFieldComponent (com.servoy.j2db.ui.IFieldComponent)5 AbstractRuntimeBaseComponent (com.servoy.j2db.ui.scripting.AbstractRuntimeBaseComponent)5 BaseComponent (com.servoy.j2db.persistence.BaseComponent)4 GraphicalComponent (com.servoy.j2db.persistence.GraphicalComponent)4 IScriptableProvider (com.servoy.j2db.scripting.IScriptableProvider)4 IPortalComponent (com.servoy.j2db.ui.IPortalComponent)4 IDisplayData (com.servoy.j2db.dataprocessing.IDisplayData)3 IPersist (com.servoy.j2db.persistence.IPersist)3 MainPage (com.servoy.j2db.server.headlessclient.MainPage)3 MarkupContainer (org.apache.wicket.MarkupContainer)3 ListItem (org.apache.wicket.markup.html.list.ListItem)3 IScriptable (com.servoy.j2db.scripting.IScriptable)2 WrapperContainer (com.servoy.j2db.server.headlessclient.WrapperContainer)2 ILabel (com.servoy.j2db.ui.ILabel)2 IStylePropertyChanges (com.servoy.j2db.ui.IStylePropertyChanges)2 ISupportOnRenderCallback (com.servoy.j2db.ui.ISupportOnRenderCallback)2