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);
}
}
}
}
}
}
}
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();
}
}
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);
// }
}
}
}
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;
}
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;
}
Aggregations