Search in sources :

Example 6 with IDataRenderer

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

the class FormController method createDataRenderers.

private void createDataRenderers(int viewType) throws Exception {
    int v = viewType;
    if (getDataSource() == null) {
        // form not based on any datasource
        v = LOCKED_RECORD_VIEW;
    }
    application.getDataRenderFactory().prepareRenderers(application, form);
    Part bodyPart = null;
    Map<Part, IDataRenderer> part_panels = new LinkedHashMap<Part, IDataRenderer>();
    Iterator<Part> e2 = form.getParts();
    while (e2.hasNext()) {
        Part part = e2.next();
        Color partColor = ComponentFactory.getPartBackground(application, part, form);
        // extract the body (bgcolor)
        if (part.getPartType() == Part.BODY) {
            bodyPart = part;
            bgColor = partColor;
            Pair<IStyleSheet, IStyleRule> partStyle = ComponentFactory.getStyleForBasicComponent(application, part, form);
            bodyRule = partStyle != null ? partStyle.getRight() : null;
        }
        if (part.getPartType() == Part.BODY && v == FormController.LOCKED_TABLE_VIEW) {
            // don't create part, view == part
            continue;
        }
        IDataRenderer dr = application.getDataRenderFactory().getEmptyDataRenderer(ComponentFactory.getWebID(form, part), part.toString(), application, (part.getPartType() == Part.BODY));
        dr.initDragNDrop(this, form.getPartStartYPos(part.getID()));
        dataRenderers[part.getPartType()] = dr;
        dr.setName(part.toString());
        part_panels.put(part, dr);
        if (part.getPartType() == Part.BODY) {
            int onRenderMethodID = form.getOnRenderMethodID();
            if (onRenderMethodID > 0) {
                dr.getOnRenderComponent().getRenderEventExecutor().setRenderCallback(Integer.toString(onRenderMethodID), Utils.parseJSExpressions(form.getFlattenedMethodArguments("onRenderMethodID")));
                dr.getOnRenderComponent().getRenderEventExecutor().setRenderScriptExecuter(getScriptExecuter());
            }
        }
        dr.setBackground(partColor);
    }
    tabSequence.clear();
    application.getDataRenderFactory().completeRenderers(application, form, scriptExecuter, part_panels, form.getSize().width, false, containerImpl.getUndoManager(), tabSequence);
    if (bodyPart != null && (v == FormController.LOCKED_LIST_VIEW || v == IForm.LIST_VIEW)) {
        IDataRenderer dr = application.getDataRenderFactory().getEmptyDataRenderer(ComponentFactory.getWebID(form, bodyPart), bodyPart.toString(), application, true);
        int onRenderMethodID = form.getOnRenderMethodID();
        if (onRenderMethodID > 0) {
            dr.getOnRenderComponent().getRenderEventExecutor().setRenderCallback(Integer.toString(onRenderMethodID), Utils.parseJSExpressions(form.getFlattenedMethodArguments("onRenderMethodID")));
            dr.getOnRenderComponent().getRenderEventExecutor().setRenderScriptExecuter(getScriptExecuter());
        }
        // apply bgcolor to renderer
        if (bgColor != null) {
            dr.setBackground(bgColor);
        }
        dataRenderers[FORM_RENDERER] = dr;
        dr.setName(bodyPart.toString());
        part_panels = new LinkedHashMap<Part, IDataRenderer>();
        part_panels.put(bodyPart, dr);
        application.getDataRenderFactory().completeRenderers(application, form, scriptExecuter, part_panels, form.getSize().width, false, containerImpl.getUndoManager(), null);
    }
    // apply security
    int access = application.getFlattenedSolution().getSecurityAccess(form.getUUID(), form.getImplicitSecurityNoRights() ? IRepository.IMPLICIT_FORM_NO_ACCESS : IRepository.IMPLICIT_FORM_ACCESS);
    if (access != -1) {
        boolean b_accessible = ((access & IRepository.ACCESSIBLE) != 0);
        if (!b_accessible) {
            for (IDataRenderer dataRenderer : dataRenderers) {
                if (dataRenderer != null) {
                    Iterator<? extends IComponent> componentIterator = dataRenderer.getComponentIterator();
                    while (componentIterator.hasNext()) {
                        IComponent c = componentIterator.next();
                        if (c instanceof ISupportSecuritySettings) {
                            if (!b_accessible)
                                ((ISupportSecuritySettings) c).setAccessible(b_accessible);
                        }
                    }
                }
            }
        }
    }
}
Also used : IStyleSheet(com.servoy.j2db.util.IStyleSheet) IComponent(com.servoy.j2db.ui.IComponent) Color(java.awt.Color) LinkedHashMap(java.util.LinkedHashMap) IDataRenderer(com.servoy.j2db.ui.IDataRenderer) Part(com.servoy.j2db.persistence.Part) IStyleRule(com.servoy.j2db.util.IStyleRule) ISupportSecuritySettings(com.servoy.j2db.ui.ISupportSecuritySettings)

Example 7 with IDataRenderer

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

the class FormController method refreshAllPartRenderers.

@Override
protected void refreshAllPartRenderers(IRecordInternal[] records) {
    if (!isFormVisible || application.isShutDown())
        return;
    // don't do anything yet when there are records but the selection is invalid
    if (formModel.getSize() > 0 && (formModel.getSelectedIndex() < 0 || formModel.getSelectedIndex() >= formModel.getSize()))
        return;
    // let the ui know that it will be touched, so that locks can be taken if needed.
    getFormUI().touch();
    boolean executeOnRecordSelect = false;
    IRecordInternal[] state = records;
    if (state == null) {
        if (formModel != null) {
            state = new IRecordInternal[] { formModel.getPrototypeState() };
        } else {
            state = new IRecordInternal[] { new PrototypeState(null) };
        }
    }
    if (dataRenderers[FORM_EDITOR] != null && !(records == null && formModel != null && formModel.getRawSize() > 0) && isStateChanged(state)) {
        lastState = state;
        executeOnRecordSelect = true;
    }
    for (int i = FORM_RENDERER + 1; i < dataRenderers.length; i++) {
        IDataRenderer dataRenderer = dataRenderers[i];
        if (dataRenderer != null) {
            for (IRecordInternal r : state) dataRenderer.refreshRecord(r);
        }
    }
    if (executeOnRecordSelect) {
        // do this at the end because dataRenderer.refreshRecord(state) will update selection
        // for related tabs - and we should execute js code after they have been updated
        executeOnRecordSelect();
    }
}
Also used : IDataRenderer(com.servoy.j2db.ui.IDataRenderer) IRecordInternal(com.servoy.j2db.dataprocessing.IRecordInternal) PrototypeState(com.servoy.j2db.dataprocessing.PrototypeState)

Example 8 with IDataRenderer

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

the class FormController method propagateFindMode.

/*
	 * _____________________________________________________________ The methods below belong to this class
	 */
@Override
public void propagateFindMode(boolean findMode) {
    if (!findMode) {
        application.getFoundSetManager().getEditRecordList().prepareForSave(true);
    }
    if (isReadOnly()) {
        if (view != null) {
            view.setEditable(findMode);
        }
    }
    for (IDataRenderer dataRenderer : dataRenderers) {
        if (dataRenderer != null) {
            // see web cell based view that is used as a tableview and portal.
            if (dataRenderer instanceof IDisplay) {
                ((IDisplay) dataRenderer).setValidationEnabled(!findMode);
            } else {
                DataAdapterList dal = dataRenderer.getDataAdapterList();
                // disables related data en does getText instead if getValue on fields
                dal.setFindMode(findMode);
                dataRenderer.setAllNonFieldsEnabled(!findMode);
            }
        // }
        // else
        // {
        // //dataRenderers[i].setUIEnabled(!findMode);
        // }
        }
    }
}
Also used : IDataRenderer(com.servoy.j2db.ui.IDataRenderer) DataAdapterList(com.servoy.j2db.dataprocessing.DataAdapterList) IDisplay(com.servoy.j2db.dataprocessing.IDisplay)

Example 9 with IDataRenderer

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

the class FormDataTransferHandler method createScriptEvent.

@Override
protected JSDNDEvent createScriptEvent(EventType type, ICompositeDragNDrop ddComponent, Object event) {
    JSDNDEvent jsEvent = super.createScriptEvent(type, ddComponent, event);
    if (ddComponent instanceof IFormDataDragNDrop) {
        IFormDataDragNDrop formDataDDComponent = (IFormDataDragNDrop) ddComponent;
        jsEvent.setFormName(formDataDDComponent.getDragFormName());
        Point location = getEventXY(event);
        if (location != null) {
            Object dragSource = ddComponent.getDragSource(location);
            if (dragSource instanceof IDataRenderer) {
                IDataRenderer dr = (IDataRenderer) dragSource;
                FormController fc = dr.getDataAdapterList().getFormController();
                jsEvent.setSource(fc.getFormScope());
            } else if (dragSource instanceof IComponent) {
                jsEvent.setSource(dragSource);
                if (dragSource != null) {
                    String name = ((IComponent) dragSource).getName();
                    if (name != null && name.startsWith(ComponentFactory.WEB_ID_PREFIX)) {
                        name = null;
                    }
                    jsEvent.setElementName(name);
                }
            }
            IRecordInternal dragRecord = formDataDDComponent.getDragRecord(location);
            if (dragRecord instanceof Record)
                jsEvent.setRecord((Record) dragRecord);
        }
    }
    return jsEvent;
}
Also used : FormController(com.servoy.j2db.FormController) IDataRenderer(com.servoy.j2db.ui.IDataRenderer) IRecordInternal(com.servoy.j2db.dataprocessing.IRecordInternal) IComponent(com.servoy.j2db.ui.IComponent) Record(com.servoy.j2db.dataprocessing.Record) Point(java.awt.Point)

Example 10 with IDataRenderer

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

the class SwingForm method initView.

public IView initView(IApplication application, FormController fp, int viewType) {
    view = null;
    IDataRenderer[] dataRenderers = fp.getDataRenderers();
    setTitleHeader((JComponent) dataRenderers[Part.TITLE_HEADER]);
    setHeader((JComponent) dataRenderers[Part.HEADER]);
    setLeadingGrandSummary((JComponent) dataRenderers[Part.LEADING_GRAND_SUMMARY]);
    setTrailingGrandSummary((JComponent) dataRenderers[Part.TRAILING_GRAND_SUMMARY]);
    setFooter((JComponent) dataRenderers[Part.FOOTER]);
    // remove any left slider
    setWest(null);
    switch(viewType) {
        case FormController.LOCKED_LIST_VIEW:
        case IForm.LIST_VIEW:
            view = new ListView();
            PrototypeState proto = null;
            if (fp.getFoundSet() != null) {
                proto = fp.getFoundSet().getPrototypeState();
            } else {
                proto = new PrototypeState(null);
            }
            // this call is extreemly inportant, it prevent all rows retrieval
            ((ListView) view).setPrototypeCellValue(proto);
            FormBodyEditor editor = null;
            if (dataRenderers[FormController.FORM_RENDERER] != null) {
                Component[] rendererComponents = ((Container) dataRenderers[FormController.FORM_RENDERER]).getComponents();
                for (Component rendererComponent : rendererComponents) {
                    if (rendererComponent instanceof ISupportAsyncLoading) {
                        // in listview it is impossible to get lazy loaded images displaying correctly, due to needed repaintfire, which we cannot initiate
                        ((ISupportAsyncLoading) rendererComponent).setAsyncLoadingEnabled(false);
                    }
                    rendererComponent.setFocusable(false);
                }
                ((Component) dataRenderers[FormController.FORM_RENDERER]).setFocusable(false);
            }
            editor = new FormBodyEditor((DataRenderer) dataRenderers[FormController.FORM_EDITOR]);
            if (dataRenderers[FormController.FORM_RENDERER] != null) {
                DataRenderer dr = (DataRenderer) dataRenderers[FormController.FORM_RENDERER];
                dr.setRenderer(true);
                String bgcolorCalc = fp.getForm().getRowBGColorCalculation();
                if (bgcolorCalc != null) {
                    // dr.setRowBGColorProvider(bgcolorCalc);
                    dr.setShowSelection(false);
                    // $NON-NLS-1$
                    ((ListView) view).setRowBGColorScript(bgcolorCalc, fp.getForm().getFlattenedMethodArguments("rowBGColorCalculation"));
                    ((DataRenderer) dataRenderers[FormController.FORM_EDITOR]).setShowSelection(false);
                }
                ((ListView) view).setCellRenderer(dr);
            } else {
                // form with no body part - used only for printing probably
                ((ListView) view).setCellRenderer(new ListCellRenderer() {

                    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                        // $NON-NLS-1$
                        return new JLabel("");
                    }
                });
            }
            ((ListView) view).setCellEditor(editor);
            ((ListView) view).setRendererSameAsEditor(false);
            ((ListView) view).setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            break;
        case FormController.LOCKED_TABLE_VIEW:
        case FormController.TABLE_VIEW:
            view = new TableView(application, fp, fp.getForm(), fp.getForm(), fp.getScriptExecuter(), dataRenderers[Part.HEADER], dataRenderers[Part.LEADING_GRAND_SUMMARY], false);
            if (dataRenderers[FormController.FORM_EDITOR] != null)
                dataRenderers[FormController.FORM_EDITOR].destroy();
            dataRenderers[FormController.FORM_EDITOR] = (IDataRenderer) view;
            if (formController.getBodyStyle() != null) {
                Pair<IStyleSheet, IStyleRule> pairStyle = ComponentFactory.getCSSPairStyleForForm(application, fp.getForm());
                if (pairStyle != null && pairStyle.getLeft() != null) {
                    Border border = pairStyle.getLeft().getBorder(formController.getBodyStyle());
                    if (border != null) {
                        innerPanel.setBorder(border);
                    }
                }
            }
            break;
        case IForm.LOCKED_RECORD_VIEW:
        case IForm.RECORD_VIEW:
        default:
            view = new RecordView(formController);
            if (dataRenderers[FormController.FORM_EDITOR] != null) {
                ((DataRenderer) dataRenderers[FormController.FORM_EDITOR]).setShowSelection(false);
                ((RecordView) view).setCellRenderer((DataRenderer) dataRenderers[FormController.FORM_EDITOR]);
            }
            int form_id = fp.getForm().getNavigatorID();
            if (form_id == 0) {
                StyledEnablePanel slider = ((RecordView) view).getSliderComponent();
                if (bgColor != null)
                    slider.setBackground(bgColor);
                setWest(slider);
            }
    }
    getVerticalScrollBar().setValue(1);
    getVerticalScrollBar().setValue(0);
    setViewportView((JComponent) view);
    if (view instanceof TableView) {
        // the table view needs it's orientation set correctly
        OrientationApplier.setOrientationToAWTComponent(this, application.getLocale(), application.getSolution().getTextOrientation());
    }
    if (view instanceof ListView) {
        view.requestFocus();
    }
    OrientationApplier.setOrientationToAWTComponent(this, application.getLocale(), application.getSolution().getTextOrientation());
    if ((bgColor != null) && (view instanceof ListView))
        ((ListView) view).setBackground(bgColor);
    // except if it's a table view, that is always transparent
    if (!(view instanceof TableView)) {
        setOpaque(isOpaque());
    } else {
        for (int i = FormController.FORM_RENDERER + 1; i < dataRenderers.length; i++) {
            if (dataRenderers[i] != null && !(dataRenderers[i] instanceof TableView)) {
                dataRenderers[i].setOpaque(isOpaque());
            }
        }
    }
    return view;
}
Also used : IStyleSheet(com.servoy.j2db.util.IStyleSheet) DataRenderer(com.servoy.j2db.smart.dataui.DataRenderer) IDataRenderer(com.servoy.j2db.ui.IDataRenderer) StyledEnablePanel(com.servoy.j2db.smart.dataui.StyledEnablePanel) JLabel(javax.swing.JLabel) ISupportAsyncLoading(com.servoy.j2db.component.ISupportAsyncLoading) Point(java.awt.Point) Container(java.awt.Container) WebMarkupContainer(org.apache.wicket.markup.html.WebMarkupContainer) IDataRenderer(com.servoy.j2db.ui.IDataRenderer) FormBodyEditor(com.servoy.j2db.smart.dataui.FormBodyEditor) ListCellRenderer(javax.swing.ListCellRenderer) IStyleRule(com.servoy.j2db.util.IStyleRule) TwoNativeJavaObject(com.servoy.j2db.smart.scripting.TwoNativeJavaObject) NativeJavaObject(org.mozilla.javascript.NativeJavaObject) ScriptableObject(org.mozilla.javascript.ScriptableObject) PrototypeState(com.servoy.j2db.dataprocessing.PrototypeState) IComponent(com.servoy.j2db.ui.IComponent) Component(java.awt.Component) PortalComponent(com.servoy.j2db.smart.dataui.PortalComponent) JComponent(javax.swing.JComponent) IRuntimeComponent(com.servoy.j2db.ui.runtime.IRuntimeComponent) Border(javax.swing.border.Border) JList(javax.swing.JList)

Aggregations

IDataRenderer (com.servoy.j2db.ui.IDataRenderer)19 Point (java.awt.Point)10 IComponent (com.servoy.j2db.ui.IComponent)8 IRuntimeComponent (com.servoy.j2db.ui.runtime.IRuntimeComponent)6 FormController (com.servoy.j2db.FormController)5 Part (com.servoy.j2db.persistence.Part)5 IRecordInternal (com.servoy.j2db.dataprocessing.IRecordInternal)4 IFieldComponent (com.servoy.j2db.ui.IFieldComponent)4 Component (java.awt.Component)4 JComponent (javax.swing.JComponent)4 NativeJavaObject (org.mozilla.javascript.NativeJavaObject)4 ScriptableObject (org.mozilla.javascript.ScriptableObject)4 Record (com.servoy.j2db.dataprocessing.Record)3 BaseComponent (com.servoy.j2db.persistence.BaseComponent)3 Form (com.servoy.j2db.persistence.Form)3 WebCellBasedView (com.servoy.j2db.server.headlessclient.dataui.WebCellBasedView)3 PortalComponent (com.servoy.j2db.smart.dataui.PortalComponent)3 IStyleRule (com.servoy.j2db.util.IStyleRule)3 IStyleSheet (com.servoy.j2db.util.IStyleSheet)3 ArrayList (java.util.ArrayList)3