Quelle FormDocument.java
Sprache: JAVA
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
package com.sun.star.wizards.form;
import java.util.ArrayList;
import com.sun.star.awt.Point;
import com.sun.star.awt.Size;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertySet;
import com.sun.star.container.XNameContainer;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.Exception;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.wizards.common.Helper;
import com.sun.star.wizards.common.PropertyNames;
import com.sun.star.wizards.db.CommandMetaData;
import com.sun.star.wizards.document.Control;
import com.sun.star.wizards.document.DatabaseControl;
import com.sun.star.wizards.document.FormHandler;
import com.sun.star.wizards.document.GridControl;
import com.sun.star.wizards.text.TextDocument;
import com.sun.star.wizards.text.TextStyleHandler;
import com.sun.star.wizards.text.ViewHandler;
public class FormDocument
extends TextDocument
{
protected ArrayList<ControlForm> oControlForms =
new ArrayList<ControlForm>();
protected CommandMetaData oMainFormDBMetaData;
protected CommandMetaData oSubFormDBMetaData;
protected String[][] LinkFieldNames;
private FormHandler oFormHandler;
private XPropertySet xPropPageStyle;
private static final int SOFORMGAP = 2000;
private boolean bhasSubForm;
private UIControlArranger curUIControlArranger;
private StyleApplier curStyleApplier;
private int nPageWidth;
private int nPageHeight;
private int nFormWidth;
private int nFormHeight;
private Point aMainFormPoint;
private static final String SOMAINFORM =
"MainForm" ;
private static final String SOSUBFORM =
"SubForm" ;
public FormDocument(XMultiServiceFactory xMSF)
{
super (xMSF,
new TextDocument.ModuleIdentifier(
"com.sun.star.sdb.FormDesign" ),
true )
;
try
{
oFormHandler = new FormHandler(xMSF, xTextDocument);
oFormHandler.setDrawObjectsCaptureMode(false );
TextStyleHandler oTextStyleHandler = new TextStyleHandler(xTextDocument);
new ViewHandler(xTextDocument);
oMainFormDBMetaData = new CommandMetaData(xMSF);// , CharLocale);
oSubFormDBMetaData = new CommandMetaData(xMSF);// , CharLocale);
ViewHandler oViewHandler = new ViewHandler(xTextDocument);
TextStyleHandler oTextStyleSupplier = new TextStyleHandler(xTextDocument);
Helper.setUnoPropertyValue(xTextDocument, "ApplyFormDesignMode" , Boolean .FALSE );
oViewHandler.setViewSetting("ShowTableBoundaries" , Boolean .FALSE );
oViewHandler.setViewSetting("ShowOnlineLayout" , Boolean .TRUE );
xPropPageStyle = oTextStyleSupplier.getStyleByName("PageStyles" , "Standard" );
Size aSize = oTextStyleHandler.changePageAlignment(xPropPageStyle, true );
nPageWidth = aSize.Width;
nPageHeight = aSize.Height;
}
catch (Exception e)
{
e.printStackTrace(System.err);
}
}
public void addUIFormController(UIControlArranger _curUIControlArranger)
{
this .curUIControlArranger = _curUIControlArranger;
}
public void addStyleApplier(StyleApplier _curStyleApplier)
{
this .curStyleApplier = _curStyleApplier;
}
private String getDataSourceName()
{
return this .oMainFormDBMetaData.getDataSourceName();
}
private void adjustPageStyle()
{
try
{
int nMargin;
int totfieldcount = getMainFieldCount() + getSubFieldCount();
if (totfieldcount > 30)
{
nMargin = 500;
}
else if (totfieldcount > 20)
{
nMargin = 750;
}
else
{
nMargin = 1000;
}
xPropPageStyle.setPropertyValue("RightMargin" , Integer.valueOf(nMargin));
xPropPageStyle.setPropertyValue("LeftMargin" , Integer.valueOf(nMargin));
xPropPageStyle.setPropertyValue("TopMargin" , Integer.valueOf(nMargin));
xPropPageStyle.setPropertyValue("BottomMargin" , Integer.valueOf(nMargin));
aMainFormPoint = new Point(nMargin, nMargin);
nFormWidth = (int ) (0.8 * nPageWidth) - 2 * nMargin;
nFormHeight = (int ) (0.65 * nPageHeight) - 2 * nMargin;
}
catch (Exception e)
{
e.printStackTrace(System.err);
}
}
public void initialize(boolean _baddParentForm, boolean _bShouldHaveSubForm, boolean _bModifySubForm, Short _NBorderType)
{
bhasSubForm = _bShouldHaveSubForm;
adjustPageStyle();
if (_baddParentForm)
{
if (oControlForms.isEmpty())
{
final ControlForm aMainControlForm = new ControlForm(this , SOMAINFORM, aMainFormPoint, getMainFormSize(FormWizard.AS_GRID));
oControlForms.add(aMainControlForm);
}
else
{
oFormHandler.removeControlsofForm(SOMAINFORM);
oControlForms.get(0).oFormController = null ;
}
oControlForms.get(0).initialize(curUIControlArranger.getSelectedArrangement(0), _NBorderType);
}
if (_bShouldHaveSubForm)
{
if (oControlForms.size() == 1)
{
adjustMainFormSize(_NBorderType);
final ControlForm aSubControlForm = new ControlForm(this , SOSUBFORM, getSubFormPoint(), getSubFormSize());
oControlForms.add(aSubControlForm);
/* ((ControlForm) oControlForms.get(1))*/
aSubControlForm.initialize(curUIControlArranger.getSelectedArrangement(1), _NBorderType);
}
else if (_bModifySubForm)
{
if (oControlForms.size() > 1)
{
oFormHandler.removeControlsofForm(SOSUBFORM);
oControlForms.get(1).oFormController = null ;
oControlForms.get(1).initialize(curUIControlArranger.getSelectedArrangement(1), _NBorderType);
}
}
}
else
{
ControlForm aMainForm = oControlForms.get(0);
// WRONG if (oFormHandler.hasFormByName(SOSUBFORM))
if (aMainForm.xFormContainer != null && aMainForm.xFormContainer.hasByName(SOSUBFORM))
{
oFormHandler.removeControlsofForm(SOSUBFORM);
oFormHandler.removeElement( aMainForm.xFormContainer, SOSUBFORM );
oControlForms.get(1).oFormController = null ;
oControlForms.remove(1);
adjustMainFormSize(_NBorderType);
}
}
}
private int getMainFieldCount()
{
return oMainFormDBMetaData.getFieldNames().length;
}
private int getSubFieldCount()
{
return oSubFormDBMetaData.getFieldNames().length;
}
private Size getMainFormSize(int _curArrangement)
{
int nMainFormHeight = nFormHeight;
if (bhasSubForm)
{
if (_curArrangement == FormWizard.AS_GRID)
{
nMainFormHeight = (int ) ((double ) (nFormHeight - SOFORMGAP) / 2);
}
else
{
int nTotalFieldCount = getMainFieldCount() + getSubFieldCount();
nMainFormHeight = (int ) (((double ) getMainFieldCount() / (double ) nTotalFieldCount) * ((double ) (nFormHeight - SOFORMGAP) / 2));
}
}
return new Size(nFormWidth, nMainFormHeight);
}
private Size getSubFormSize()
{
int nMainFormHeight = oControlForms.get(0).getActualFormHeight();
return new Size(nFormWidth, nFormHeight - nMainFormHeight - SOFORMGAP);
}
private Point getSubFormPoint()
{
ControlForm curMainControlForm = oControlForms.get(0);
return new Point(curMainControlForm.aStartPoint.X,
(curMainControlForm.aStartPoint.Y + curMainControlForm.getFormSize().Height + SOFORMGAP));
}
private void adjustMainFormSize(Short _NBorderType)
{
ControlForm oMainControlForm = oControlForms.get(0);
oMainControlForm.setFormSize(getMainFormSize(oMainControlForm.curArrangement));
if (oMainControlForm.curArrangement == FormWizard.AS_GRID)
{
oMainControlForm.oGridControl.setSize(oMainControlForm.getFormSize());
}
else
{
oMainControlForm.oFormController.positionControls(oMainControlForm.curArrangement,
oMainControlForm.aStartPoint,
curUIControlArranger.getAlignValue(),
_NBorderType);
}
}
private void adjustSubFormPosSize(Short _NBorderType)
{
ControlForm oMainControlForm = oControlForms.get(0);
ControlForm oSubControlForm = oControlForms.get(1);
oSubControlForm.setFormSize(new Size(nFormWidth, nFormHeight - oMainControlForm.getFormSize().Height));
if (oSubControlForm.curArrangement == FormWizard.AS_GRID)
{
Point aPoint = oSubControlForm.oGridControl.getPosition();
int idiffheight = oSubControlForm.getEntryPointY() - oMainControlForm.getActualFormHeight() - oMainControlForm.aStartPoint.Y - SOFORMGAP;
oSubControlForm.setStartPoint(new Point(aPoint.X, (aPoint.Y - idiffheight)));
oSubControlForm.oGridControl.setPosition(oSubControlForm.aStartPoint);
oSubControlForm.oGridControl.setSize(getSubFormSize());
}
else
{
// oSubControlForm.oFormController.adjustYPositions(_idiffheight);
oSubControlForm.setStartPoint(new Point(oSubControlForm.aStartPoint.X, oMainControlForm.getActualFormHeight() + oMainControlForm.aStartPoint.Y + SOFORMGAP));
oSubControlForm.oFormController.positionControls(oSubControlForm.curArrangement, oSubControlForm.aStartPoint, curUIControlArranger.getAlignValue(), _NBorderType);
}
}
private ControlForm getControlFormByName(String _sname)
{
for (int i = 0; i < oControlForms.size(); i++)
{
ControlForm curControlForm = oControlForms.get(i);
if (curControlForm.Name.equals(_sname))
{
return curControlForm;
}
}
throw new IllegalArgumentException("Searching for control " + _sname + " failed" );
}
public boolean finalizeForms(DataEntrySetter _curDataEntrySetter, FieldLinker _curFieldLinker, FormConfiguration _curFormConfiguration)
{
try
{
this .xTextDocument.lockControllers();
PropertyValue[] aFormProperties = _curDataEntrySetter.getFormProperties();
ControlForm oMasterControlForm = getControlFormByName(SOMAINFORM);
oMasterControlForm.setFormProperties(aFormProperties, oMainFormDBMetaData);
oMasterControlForm.finalizeControls();
if (oMasterControlForm.xFormContainer.hasByName(SOSUBFORM))
{
ControlForm oSubControlForm = getControlFormByName(SOSUBFORM);
oSubControlForm.setFormProperties(aFormProperties, oSubFormDBMetaData);
String sRefTableName = _curFormConfiguration.getreferencedTableName();
if (sRefTableName.equals(PropertyNames.EMPTY_STRING))
{
LinkFieldNames = _curFieldLinker.getLinkFieldNames();
}
else
{
LinkFieldNames = _curFieldLinker.getLinkFieldNames(_curFormConfiguration.getRelationController(), sRefTableName);
}
if (LinkFieldNames != null && LinkFieldNames.length > 0)
{
oSubControlForm.xPropertySet.setPropertyValue("DetailFields" , LinkFieldNames[0]);
oSubControlForm.xPropertySet.setPropertyValue("MasterFields" , LinkFieldNames[1]);
oSubControlForm.finalizeControls();
return true ;
}
return false ;
}
return true ;
}
catch (Exception e)
{
e.printStackTrace(System.err);
return false ;
}
finally
{
unlockallControllers();
}
}
public class ControlForm
{
private XNameContainer xFormContainer;
GridControl oGridControl;
private FormControlArranger oFormController;
private int curArrangement;
private FormDocument oFormDocument;
private String Name;
private Point aStartPoint;
private Size aFormSize;
private CommandMetaData oDBMetaData;
private XPropertySet xPropertySet;
public ControlForm(FormDocument _oFormDocument, String _sname, Point _astartPoint, Size _aFormSize)
{
aStartPoint = _astartPoint;
aFormSize = _aFormSize;
oFormDocument = _oFormDocument;
Name = _sname;
if (_sname.equals(SOSUBFORM))
{
ControlForm oMainControlForm = oControlForms.get(0);
xFormContainer = oFormHandler.insertFormbyName(_sname, oMainControlForm.xFormContainer);
}
else
{
xFormContainer = oFormHandler.insertFormbyName(_sname);
}
xPropertySet = UnoRuntime.queryInterface(XPropertySet.class , xFormContainer);
if (_sname.equals(SOMAINFORM))
{
oDBMetaData = oFormDocument.oMainFormDBMetaData;
}
else
{
oDBMetaData = oFormDocument.oSubFormDBMetaData;
}
}
public void initialize(int _curArrangement, Short _NBorderType)
{
boolean adaptControlStyles = false ;
xTextDocument.lockControllers();
curArrangement = _curArrangement;
if (oGridControl != null )
{
oFormHandler.xDrawPage.remove(oGridControl.getShape());
oGridControl.xComponent.dispose();
oGridControl = null ;
}
if (oFormController == null )
{
oFormController = new FormControlArranger(oFormHandler, xFormContainer, oDBMetaData, xProgressBar, aStartPoint, aFormSize);
}
else
{
if (curArrangement == FormWizard.AS_GRID)
{
oFormHandler.moveShapesToNirwana(getLabelControls());
oFormHandler.moveShapesToNirwana(getDatabaseControls());
}
}
if (curArrangement == FormWizard.AS_GRID)
{
insertGridControl(_NBorderType);
adaptControlStyles = true ;
}
else
{
adaptControlStyles = !oFormController.areControlsexisting();
oFormController.positionControls(_curArrangement, aStartPoint, curUIControlArranger.getAlignValue(), _NBorderType);
}
if (adaptControlStyles)
{
curStyleApplier.applyStyle(true );
}
if ((Name.equals(SOMAINFORM)) && (oControlForms.size() > 1))
{
ControlForm curSubControlForm = oControlForms.get(1);
if (curSubControlForm != null )
{
adjustSubFormPosSize(_NBorderType);
}
}
setFormSize(new Size(aFormSize.Width, getActualFormHeight()));
unlockallControllers();
}
public Control[] getLabelControls()
{
if (oFormController != null )
{
return oFormController.getLabelControlList();
}
else
{
return null ;
}
}
private Size getFormSize()
{
return aFormSize;
}
private void setFormSize(Size _aSize)
{
aFormSize = _aSize;
oFormController.setFormSize(aFormSize);
}
private void setStartPoint(Point _aPoint)
{
aStartPoint = _aPoint;
if (oFormController != null )
{
oFormController.setStartPoint(_aPoint);
}
}
private int getActualFormHeight()
{
if (curArrangement == FormWizard.AS_GRID)
{
return oGridControl.getSize().Height;
}
else
{
return oFormController.getFormHeight();
}
}
private int getEntryPointY()
{
if (curArrangement == FormWizard.AS_GRID)
{
return oGridControl.getPosition().Y;
}
else
{
return oFormController.getEntryPointY();
}
}
private void setFormProperties(PropertyValue[] _aPropertySetList, CommandMetaData _oDBMetaData)
{
try
{
xPropertySet.setPropertyValue("DataSourceName" , getDataSourceName());
xPropertySet.setPropertyValue(PropertyNames.COMMAND, _oDBMetaData.getCommandName());
xPropertySet.setPropertyValue(PropertyNames.COMMAND_TYPE, Integer.valueOf(_oDBMetaData.getCommandType()));
for (int i = 0; i < _aPropertySetList.length; i++)
{
xPropertySet.setPropertyValue(_aPropertySetList[i].Name, _aPropertySetList[i].Value);
}
}
catch (Exception e)
{
e.printStackTrace(System.err);
}
}
public DatabaseControl[] getDatabaseControls()
{
if (oFormController != null )
{
return oFormController.DBControlList;
}
else
{
return null ;
}
}
public GridControl getGridControl()
{
return oGridControl;
}
public int getArrangemode()
{
return curArrangement;
}
private void insertGridControl(Short _NBorderType)
{
try
{
curArrangement = FormWizard.AS_GRID;
if (Name.equals(SOMAINFORM))
{
oGridControl = new GridControl(xMSF, Name + "_Grid" , oFormHandler, xFormContainer,
oDBMetaData.getFieldColumns(), aStartPoint,
getMainFormSize(FormWizard.AS_GRID));
}
else
{
oGridControl = new GridControl(xMSF, Name + "_Grid" , oFormHandler, xFormContainer,
oDBMetaData.getFieldColumns(), aStartPoint,
getSubFormSize());
}
oGridControl.xPropertySet.setPropertyValue(PropertyNames.PROPERTY_BORDER, _NBorderType);
}
catch (Exception e)
{
e.printStackTrace(System.err);
}
}
private void finalizeControls()
{
Control[] oLabelControls = getLabelControls();
Control[] oDBControls = getDatabaseControls();
if (oLabelControls != null )
{
for (int i = 0; i < getLabelControls().length; i++)
{
if (curArrangement == FormWizard.AS_GRID)
{
if ((oLabelControls[i] != null ) && (oDBControls[i] != null ))
{
oFormHandler.removeShape(oLabelControls[i].getShape());
oFormHandler.removeShape(oDBControls[i].getShape());
}
}
else
{
oFormHandler.groupShapesTogether(xMSF, oLabelControls[i].getShape(), oDBControls[i].getShape());
}
}
}
}
}
}
Messung V0.5 C=91 H=93 G=91
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.16Bemerkung:
(vorverarbeitet)
¤
*Bot Zugriff
2026-04-04