1*a1b4a26bSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*a1b4a26bSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*a1b4a26bSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*a1b4a26bSAndrew Rist  * distributed with this work for additional information
6*a1b4a26bSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*a1b4a26bSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*a1b4a26bSAndrew Rist  * "License"); you may not use this file except in compliance
9*a1b4a26bSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*a1b4a26bSAndrew Rist  *
11*a1b4a26bSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*a1b4a26bSAndrew Rist  *
13*a1b4a26bSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*a1b4a26bSAndrew Rist  * software distributed under the License is distributed on an
15*a1b4a26bSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*a1b4a26bSAndrew Rist  * KIND, either express or implied.  See the License for the
17*a1b4a26bSAndrew Rist  * specific language governing permissions and limitations
18*a1b4a26bSAndrew Rist  * under the License.
19*a1b4a26bSAndrew Rist  *
20*a1b4a26bSAndrew Rist  *************************************************************/
21*a1b4a26bSAndrew Rist 
22*a1b4a26bSAndrew Rist 
23cdf0e10cSrcweir package com.sun.star.wizards.form;
24cdf0e10cSrcweir 
25cdf0e10cSrcweir import java.util.Vector;
26cdf0e10cSrcweir 
27cdf0e10cSrcweir import com.sun.star.wizards.text.TextDocument;
28cdf0e10cSrcweir import com.sun.star.awt.Point;
29cdf0e10cSrcweir import com.sun.star.awt.Size;
30cdf0e10cSrcweir import com.sun.star.beans.PropertyValue;
31cdf0e10cSrcweir import com.sun.star.beans.XPropertySet;
32cdf0e10cSrcweir import com.sun.star.container.XNameContainer;
33cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory;
34cdf0e10cSrcweir import com.sun.star.uno.Exception;
35cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
36cdf0e10cSrcweir import com.sun.star.wizards.db.*;
37cdf0e10cSrcweir import com.sun.star.wizards.common.*;
38cdf0e10cSrcweir import com.sun.star.wizards.ui.*;
39cdf0e10cSrcweir import com.sun.star.wizards.text.TextStyleHandler;
40cdf0e10cSrcweir import com.sun.star.wizards.text.ViewHandler;
41cdf0e10cSrcweir import com.sun.star.wizards.document.Control;
42cdf0e10cSrcweir import com.sun.star.wizards.document.DatabaseControl;
43cdf0e10cSrcweir import com.sun.star.wizards.document.FormHandler;
44cdf0e10cSrcweir import com.sun.star.wizards.document.GridControl;
45cdf0e10cSrcweir 
46cdf0e10cSrcweir public class FormDocument extends TextDocument
47cdf0e10cSrcweir {
48cdf0e10cSrcweir     protected Vector oControlForms = new Vector();
49cdf0e10cSrcweir     protected CommandMetaData oMainFormDBMetaData;
50cdf0e10cSrcweir     protected CommandMetaData oSubFormDBMetaData;
51cdf0e10cSrcweir     protected String[][] LinkFieldNames;
52cdf0e10cSrcweir 
53cdf0e10cSrcweir     private FormHandler oFormHandler;
54cdf0e10cSrcweir     private ViewHandler oViewHandler;
55cdf0e10cSrcweir     private TextStyleHandler oTextStyleHandler;
56cdf0e10cSrcweir     private XPropertySet xPropPageStyle;
57cdf0e10cSrcweir     private final int SOFORMGAP = 2000;
58cdf0e10cSrcweir     private boolean bhasSubForm;
59cdf0e10cSrcweir     private UIControlArranger curUIControlArranger;
60cdf0e10cSrcweir     private StyleApplier curStyleApplier;
61cdf0e10cSrcweir     private int nPageWidth;
62cdf0e10cSrcweir     private int nPageHeight;
63cdf0e10cSrcweir     private int nFormWidth;
64cdf0e10cSrcweir     private int nFormHeight;
65cdf0e10cSrcweir     private Point aMainFormPoint;
66cdf0e10cSrcweir     private final static String SOMAINFORM = "MainForm";
67cdf0e10cSrcweir     private final static String SOSUBFORM = "SubForm";
68cdf0e10cSrcweir 
FormDocument(XMultiServiceFactory xMSF)69cdf0e10cSrcweir     public FormDocument(XMultiServiceFactory xMSF)
70cdf0e10cSrcweir     {
71cdf0e10cSrcweir         super(xMSF, new TextDocument.ModuleIdentifier("com.sun.star.sdb.FormDesign"), true);
72cdf0e10cSrcweir         try
73cdf0e10cSrcweir         {
74cdf0e10cSrcweir             oFormHandler = new FormHandler(xMSF, xTextDocument);
75cdf0e10cSrcweir             oFormHandler.setDrawObjectsCaptureMode(false);
76cdf0e10cSrcweir             oTextStyleHandler = new TextStyleHandler(xMSFDoc, xTextDocument);
77cdf0e10cSrcweir             oViewHandler = new ViewHandler(xMSFDoc, xTextDocument);
78cdf0e10cSrcweir             oMainFormDBMetaData = new CommandMetaData(xMSF);// , CharLocale);
79cdf0e10cSrcweir             oSubFormDBMetaData = new CommandMetaData(xMSF);// , CharLocale);
80cdf0e10cSrcweir             ViewHandler oViewHandler = new ViewHandler(xMSF, xTextDocument);
81cdf0e10cSrcweir             TextStyleHandler oTextStyleSupplier = new TextStyleHandler(xMSFDoc, xTextDocument);
82cdf0e10cSrcweir             Helper.setUnoPropertyValue(xTextDocument, "ApplyFormDesignMode", Boolean.FALSE);
83cdf0e10cSrcweir             oViewHandler.setViewSetting("ShowTableBoundaries", Boolean.FALSE);
84cdf0e10cSrcweir             oViewHandler.setViewSetting("ShowOnlineLayout", Boolean.TRUE);
85cdf0e10cSrcweir             xPropPageStyle = oTextStyleSupplier.getStyleByName("PageStyles", "Standard");
86cdf0e10cSrcweir             Size aSize = oTextStyleHandler.changePageAlignment(xPropPageStyle, true);
87cdf0e10cSrcweir             nPageWidth = aSize.Width;
88cdf0e10cSrcweir             nPageHeight = aSize.Height;
89cdf0e10cSrcweir         }
90cdf0e10cSrcweir         catch (Exception e)
91cdf0e10cSrcweir         {
92cdf0e10cSrcweir             e.printStackTrace(System.out);
93cdf0e10cSrcweir         }
94cdf0e10cSrcweir     }
95cdf0e10cSrcweir 
addUIFormController(UIControlArranger _curUIControlArranger)96cdf0e10cSrcweir     public void addUIFormController(UIControlArranger _curUIControlArranger)
97cdf0e10cSrcweir     {
98cdf0e10cSrcweir         this.curUIControlArranger = _curUIControlArranger;
99cdf0e10cSrcweir     }
100cdf0e10cSrcweir 
addStyleApplier(StyleApplier _curStyleApplier)101cdf0e10cSrcweir     public void addStyleApplier(StyleApplier _curStyleApplier)
102cdf0e10cSrcweir     {
103cdf0e10cSrcweir         this.curStyleApplier = _curStyleApplier;
104cdf0e10cSrcweir     }
105cdf0e10cSrcweir 
getDataSourceName()106cdf0e10cSrcweir     private String getDataSourceName()
107cdf0e10cSrcweir     {
108cdf0e10cSrcweir         return this.oMainFormDBMetaData.DataSourceName;
109cdf0e10cSrcweir     }
110cdf0e10cSrcweir 
adjustPageStyle()111cdf0e10cSrcweir     private void adjustPageStyle()
112cdf0e10cSrcweir     {
113cdf0e10cSrcweir         try
114cdf0e10cSrcweir         {
115cdf0e10cSrcweir             int nMargin;
116cdf0e10cSrcweir             int totfieldcount = getMainFieldCount() + getSubFieldCount();
117cdf0e10cSrcweir             if (totfieldcount > 30)
118cdf0e10cSrcweir             {
119cdf0e10cSrcweir                 nMargin = 500;
120cdf0e10cSrcweir             }
121cdf0e10cSrcweir             else if (totfieldcount > 20)
122cdf0e10cSrcweir             {
123cdf0e10cSrcweir                 nMargin = 750;
124cdf0e10cSrcweir             }
125cdf0e10cSrcweir             else
126cdf0e10cSrcweir             {
127cdf0e10cSrcweir                 nMargin = 1000;
128cdf0e10cSrcweir             }
129cdf0e10cSrcweir             xPropPageStyle.setPropertyValue("RightMargin", new Integer(nMargin));
130cdf0e10cSrcweir             xPropPageStyle.setPropertyValue("LeftMargin", new Integer(nMargin));
131cdf0e10cSrcweir             xPropPageStyle.setPropertyValue("TopMargin", new Integer(nMargin));
132cdf0e10cSrcweir             xPropPageStyle.setPropertyValue("BottomMargin", new Integer(nMargin));
133cdf0e10cSrcweir             aMainFormPoint = new Point(nMargin, nMargin);
134cdf0e10cSrcweir             nFormWidth = (int) (0.8 * (double) nPageWidth) - 2 * nMargin;
135cdf0e10cSrcweir             nFormHeight = (int) (0.65 * (double) nPageHeight) - 2 * nMargin;
136cdf0e10cSrcweir         }
137cdf0e10cSrcweir         catch (Exception e)
138cdf0e10cSrcweir         {
139cdf0e10cSrcweir             e.printStackTrace(System.out);
140cdf0e10cSrcweir         }
141cdf0e10cSrcweir     }
142cdf0e10cSrcweir 
initialize(boolean _baddParentForm, boolean _bShouldHaveSubForm, boolean _bModifySubForm, Short _NBorderType)143cdf0e10cSrcweir     public void initialize(boolean _baddParentForm, boolean _bShouldHaveSubForm, boolean _bModifySubForm, Short _NBorderType)
144cdf0e10cSrcweir     {
145cdf0e10cSrcweir         bhasSubForm = _bShouldHaveSubForm;
146cdf0e10cSrcweir         adjustPageStyle();
147cdf0e10cSrcweir         if (_baddParentForm)
148cdf0e10cSrcweir         {
149cdf0e10cSrcweir             if (oControlForms.size() == 0)
150cdf0e10cSrcweir             {
151cdf0e10cSrcweir                 final ControlForm aMainControlForm = new ControlForm(this, SOMAINFORM, aMainFormPoint, getMainFormSize(FormWizard.AS_GRID));
152cdf0e10cSrcweir                 oControlForms.addElement(aMainControlForm);
153cdf0e10cSrcweir             }
154cdf0e10cSrcweir             else
155cdf0e10cSrcweir             {
156cdf0e10cSrcweir                 oFormHandler.removeControlsofForm(SOMAINFORM);
157cdf0e10cSrcweir                 ((ControlForm) oControlForms.get(0)).oFormController = null;
158cdf0e10cSrcweir             }
159cdf0e10cSrcweir             ((ControlForm) oControlForms.get(0)).initialize(curUIControlArranger.getSelectedArrangement(0), _NBorderType);
160cdf0e10cSrcweir         }
161cdf0e10cSrcweir         if (_bShouldHaveSubForm)
162cdf0e10cSrcweir         {
163cdf0e10cSrcweir             if (oControlForms.size() == 1)
164cdf0e10cSrcweir             {
165cdf0e10cSrcweir                 adjustMainFormSize(_NBorderType);
166cdf0e10cSrcweir                 final ControlForm aSubControlForm = new ControlForm(this, SOSUBFORM, getSubFormPoint(), getSubFormSize());
167cdf0e10cSrcweir                 oControlForms.addElement(aSubControlForm);
168cdf0e10cSrcweir                 /* ((ControlForm) oControlForms.get(1))*/
169cdf0e10cSrcweir                 aSubControlForm.initialize(curUIControlArranger.getSelectedArrangement(1), _NBorderType);
170cdf0e10cSrcweir             }
171cdf0e10cSrcweir             else if (_bModifySubForm)
172cdf0e10cSrcweir             {
173cdf0e10cSrcweir                 if (oControlForms.size() > 1)
174cdf0e10cSrcweir                 {
175cdf0e10cSrcweir                     oFormHandler.removeControlsofForm(SOSUBFORM);
176cdf0e10cSrcweir                     ((ControlForm) oControlForms.get(1)).oFormController = null;
177cdf0e10cSrcweir                     ((ControlForm) oControlForms.get(1)).initialize(curUIControlArranger.getSelectedArrangement(1), _NBorderType);
178cdf0e10cSrcweir                 }
179cdf0e10cSrcweir             }
180cdf0e10cSrcweir         }
181cdf0e10cSrcweir         else
182cdf0e10cSrcweir         {
183cdf0e10cSrcweir             ControlForm aMainForm = (ControlForm) oControlForms.get(0);
184cdf0e10cSrcweir             // boolean bHasSubForm = aMainForm.xFormContainer.hasByName(SOSUBFORM);
185cdf0e10cSrcweir             // WRONG if (oFormHandler.hasFormByName(SOSUBFORM))
186cdf0e10cSrcweir             if (aMainForm.xFormContainer != null && aMainForm.xFormContainer.hasByName(SOSUBFORM))
187cdf0e10cSrcweir             {
188cdf0e10cSrcweir                 oFormHandler.removeControlsofForm(SOSUBFORM);
189cdf0e10cSrcweir                 oFormHandler.removeElement( aMainForm.xFormContainer, SOSUBFORM );
190cdf0e10cSrcweir                 ((ControlForm) oControlForms.get(1)).oFormController = null;
191cdf0e10cSrcweir                 // aMainForm.xFormContainer = null; // .removeFormByName(SOSUBFORM);
192cdf0e10cSrcweir                 oControlForms.remove(1);
193cdf0e10cSrcweir                 adjustMainFormSize(_NBorderType);
194cdf0e10cSrcweir             }
195cdf0e10cSrcweir         }
196cdf0e10cSrcweir     }
197cdf0e10cSrcweir 
getMainFieldCount()198cdf0e10cSrcweir     private int getMainFieldCount()
199cdf0e10cSrcweir     {
200cdf0e10cSrcweir         return oMainFormDBMetaData.getFieldNames().length;
201cdf0e10cSrcweir     }
getSubFieldCount()202cdf0e10cSrcweir     private int getSubFieldCount()
203cdf0e10cSrcweir     {
204cdf0e10cSrcweir         return oSubFormDBMetaData.getFieldNames().length;
205cdf0e10cSrcweir     }
206cdf0e10cSrcweir 
getMainFormSize(int _curArrangement)207cdf0e10cSrcweir     private Size getMainFormSize(int _curArrangement)
208cdf0e10cSrcweir     {
209cdf0e10cSrcweir         int nMainFormHeight = nFormHeight;
210cdf0e10cSrcweir         if (bhasSubForm)
211cdf0e10cSrcweir         {
212cdf0e10cSrcweir             if (_curArrangement == FormWizard.AS_GRID)
213cdf0e10cSrcweir             {
214cdf0e10cSrcweir                 nMainFormHeight = (int) ((double) (nFormHeight - SOFORMGAP) / 2);
215cdf0e10cSrcweir             }
216cdf0e10cSrcweir             else
217cdf0e10cSrcweir             {
218cdf0e10cSrcweir                 int nTotalFieldCount = getMainFieldCount() + getSubFieldCount();
219cdf0e10cSrcweir                 nMainFormHeight = (int) (((double) getMainFieldCount() / (double) nTotalFieldCount) * ((double) (nFormHeight - SOFORMGAP) / 2));
220cdf0e10cSrcweir             }
221cdf0e10cSrcweir         }
222cdf0e10cSrcweir         return new Size(nFormWidth, nMainFormHeight);
223cdf0e10cSrcweir     }
224cdf0e10cSrcweir 
getSubFormSize()225cdf0e10cSrcweir     private Size getSubFormSize()
226cdf0e10cSrcweir     {
227cdf0e10cSrcweir //      int nSubFormHeight = (int) ((double)nFormHeight/2) - SOFORMGAP;
228cdf0e10cSrcweir //      int nSubFormFieldCount = this.oSubFormDBMetaData.FieldNames.length;
229cdf0e10cSrcweir //      int totfieldcount = oMainFormDBMetaData.FieldNames.length + nSubFormFieldCount;
230cdf0e10cSrcweir         int nMainFormHeight = ((ControlForm) oControlForms.get(0)).getActualFormHeight();
231cdf0e10cSrcweir         return new Size(nFormWidth, nFormHeight - nMainFormHeight - SOFORMGAP);
232cdf0e10cSrcweir     }
233cdf0e10cSrcweir 
getSubFormPoint()234cdf0e10cSrcweir     private Point getSubFormPoint()
235cdf0e10cSrcweir     {
236cdf0e10cSrcweir         ControlForm curMainControlForm = ((ControlForm) oControlForms.get(0));
237cdf0e10cSrcweir         return new Point(curMainControlForm.aStartPoint.X,
238cdf0e10cSrcweir                 (curMainControlForm.aStartPoint.Y + curMainControlForm.getFormSize().Height + SOFORMGAP));
239cdf0e10cSrcweir     }
240cdf0e10cSrcweir 
adjustMainFormSize(Short _NBorderType)241cdf0e10cSrcweir     private void adjustMainFormSize(Short _NBorderType)
242cdf0e10cSrcweir     {
243cdf0e10cSrcweir         ControlForm oMainControlForm = (ControlForm) oControlForms.get(0);
244cdf0e10cSrcweir         oMainControlForm.setFormSize(getMainFormSize(oMainControlForm.curArrangement));
245cdf0e10cSrcweir         if (oMainControlForm.curArrangement == FormWizard.AS_GRID)
246cdf0e10cSrcweir         {
247cdf0e10cSrcweir             oMainControlForm.oGridControl.setSize(oMainControlForm.getFormSize());
248cdf0e10cSrcweir         }
249cdf0e10cSrcweir         else
250cdf0e10cSrcweir         {
251cdf0e10cSrcweir             oMainControlForm.oFormController.positionControls(oMainControlForm.curArrangement,
252cdf0e10cSrcweir                     oMainControlForm.aStartPoint,
253cdf0e10cSrcweir                     oMainControlForm.getFormSize(),
254cdf0e10cSrcweir                     curUIControlArranger.getAlignValue(), _NBorderType);
255cdf0e10cSrcweir         }
256cdf0e10cSrcweir     }
257cdf0e10cSrcweir 
adjustSubFormPosSize(Short _NBorderType)258cdf0e10cSrcweir     private void adjustSubFormPosSize(Short _NBorderType)
259cdf0e10cSrcweir     {
260cdf0e10cSrcweir         ControlForm oMainControlForm = (ControlForm) oControlForms.get(0);
261cdf0e10cSrcweir         ControlForm oSubControlForm = (ControlForm) oControlForms.get(1);
262cdf0e10cSrcweir         oSubControlForm.setFormSize(new Size(nFormWidth, nFormHeight - oMainControlForm.getFormSize().Height));
263cdf0e10cSrcweir         if (oSubControlForm.curArrangement == FormWizard.AS_GRID)
264cdf0e10cSrcweir         {
265cdf0e10cSrcweir             Point aPoint = oSubControlForm.oGridControl.getPosition();
266cdf0e10cSrcweir             int idiffheight = oSubControlForm.getEntryPointY() - oMainControlForm.getActualFormHeight() - oMainControlForm.aStartPoint.Y - SOFORMGAP;
267cdf0e10cSrcweir             oSubControlForm.setStartPoint(new Point(aPoint.X, (aPoint.Y - idiffheight)));
268cdf0e10cSrcweir             oSubControlForm.oGridControl.setPosition(oSubControlForm.aStartPoint);
269cdf0e10cSrcweir             oSubControlForm.oGridControl.setSize(getSubFormSize());
270cdf0e10cSrcweir         }
271cdf0e10cSrcweir         else
272cdf0e10cSrcweir         {
273cdf0e10cSrcweir //          oSubControlForm.oFormController.adjustYPositions(_idiffheight);
274cdf0e10cSrcweir             oSubControlForm.setStartPoint(new Point(oSubControlForm.aStartPoint.X, oMainControlForm.getActualFormHeight() + oMainControlForm.aStartPoint.Y + SOFORMGAP));
275cdf0e10cSrcweir             oSubControlForm.oFormController.positionControls(oSubControlForm.curArrangement, oSubControlForm.aStartPoint, oSubControlForm.getAvailableFormSize(), curUIControlArranger.getAlignValue(), _NBorderType);
276cdf0e10cSrcweir         }
277cdf0e10cSrcweir     }
278cdf0e10cSrcweir 
getControlFormByName(String _sname)279cdf0e10cSrcweir     public ControlForm getControlFormByName(String _sname)
280cdf0e10cSrcweir     {
281cdf0e10cSrcweir         for (int i = 0; i < oControlForms.size(); i++)
282cdf0e10cSrcweir         {
283cdf0e10cSrcweir             ControlForm curControlForm = ((ControlForm) oControlForms.get(i));
284cdf0e10cSrcweir             if (curControlForm.Name.equals(_sname))
285cdf0e10cSrcweir             {
286cdf0e10cSrcweir                 return curControlForm;
287cdf0e10cSrcweir             }
288cdf0e10cSrcweir         }
289cdf0e10cSrcweir         return null;
290cdf0e10cSrcweir     }
291cdf0e10cSrcweir 
getControlForms()292cdf0e10cSrcweir     public ControlForm[] getControlForms()
293cdf0e10cSrcweir     {
294cdf0e10cSrcweir         ControlForm[] aResult = new ControlForm[oControlForms.size()];
295cdf0e10cSrcweir         oControlForms.toArray( aResult );
296cdf0e10cSrcweir         return aResult;
297cdf0e10cSrcweir     }
298cdf0e10cSrcweir 
finalizeForms(DataEntrySetter _curDataEntrySetter, FieldLinker _curFieldLinker, FormConfiguration _curFormConfiguration)299cdf0e10cSrcweir     public boolean finalizeForms(DataEntrySetter _curDataEntrySetter, FieldLinker _curFieldLinker, FormConfiguration _curFormConfiguration)
300cdf0e10cSrcweir     {
301cdf0e10cSrcweir         try
302cdf0e10cSrcweir         {
303cdf0e10cSrcweir             this.xTextDocument.lockControllers();
304cdf0e10cSrcweir             PropertyValue[] aFormProperties = _curDataEntrySetter.getFormProperties();
305cdf0e10cSrcweir             ControlForm oMasterControlForm = getControlFormByName(SOMAINFORM);
306cdf0e10cSrcweir             oMasterControlForm.setFormProperties(aFormProperties, oMainFormDBMetaData);
307cdf0e10cSrcweir             oMasterControlForm.finalizeControls();
308cdf0e10cSrcweir             if (oMasterControlForm.xFormContainer.hasByName(SOSUBFORM))
309cdf0e10cSrcweir             {
310cdf0e10cSrcweir                 ControlForm oSubControlForm = getControlFormByName(SOSUBFORM);
311cdf0e10cSrcweir                 oSubControlForm.setFormProperties(aFormProperties, oSubFormDBMetaData);
312cdf0e10cSrcweir                 String sRefTableName = _curFormConfiguration.getreferencedTableName();
313cdf0e10cSrcweir                 if (sRefTableName.equals(PropertyNames.EMPTY_STRING))
314cdf0e10cSrcweir                 {
315cdf0e10cSrcweir                     LinkFieldNames = _curFieldLinker.getLinkFieldNames();
316cdf0e10cSrcweir                 }
317cdf0e10cSrcweir                 else
318cdf0e10cSrcweir                 {
319cdf0e10cSrcweir                     LinkFieldNames = _curFieldLinker.getLinkFieldNames(_curFormConfiguration.getRelationController(), sRefTableName);
320cdf0e10cSrcweir                 }
321cdf0e10cSrcweir                 if (LinkFieldNames != null)
322cdf0e10cSrcweir                 {
323cdf0e10cSrcweir                     if (LinkFieldNames.length > 0)
324cdf0e10cSrcweir                     {
325cdf0e10cSrcweir                         oSubControlForm.xPropertySet.setPropertyValue("DetailFields", LinkFieldNames[0]);
326cdf0e10cSrcweir                         oSubControlForm.xPropertySet.setPropertyValue("MasterFields", LinkFieldNames[1]);
327cdf0e10cSrcweir                         oSubControlForm.finalizeControls();
328cdf0e10cSrcweir                         return true;
329cdf0e10cSrcweir                     }
330cdf0e10cSrcweir                 }
331cdf0e10cSrcweir                 return false;
332cdf0e10cSrcweir             }
333cdf0e10cSrcweir             return true;
334cdf0e10cSrcweir         }
335cdf0e10cSrcweir         catch (Exception e)
336cdf0e10cSrcweir         {
337cdf0e10cSrcweir             e.printStackTrace(System.out);
338cdf0e10cSrcweir             return false;
339cdf0e10cSrcweir         }
340cdf0e10cSrcweir         finally
341cdf0e10cSrcweir         {
342cdf0e10cSrcweir             unlockallControllers();
343cdf0e10cSrcweir         }
344cdf0e10cSrcweir     }
345cdf0e10cSrcweir 
346cdf0e10cSrcweir     public class ControlForm
347cdf0e10cSrcweir     {
348cdf0e10cSrcweir 
349cdf0e10cSrcweir         XNameContainer xFormContainer;
350cdf0e10cSrcweir         GridControl oGridControl;
351cdf0e10cSrcweir         FormControlArranger oFormController;
352cdf0e10cSrcweir         int curArrangement;
353cdf0e10cSrcweir         FormDocument oFormDocument;
354cdf0e10cSrcweir         String Name;
355cdf0e10cSrcweir         Point aStartPoint;
356cdf0e10cSrcweir         private Size aFormSize;
357cdf0e10cSrcweir         CommandMetaData oDBMetaData;
358cdf0e10cSrcweir         XPropertySet xPropertySet;
359cdf0e10cSrcweir 
ControlForm(FormDocument _oFormDocument, String _sname, Point _astartPoint, Size _aFormSize)360cdf0e10cSrcweir         public ControlForm(FormDocument _oFormDocument, String _sname, Point _astartPoint, Size _aFormSize)
361cdf0e10cSrcweir         {
362cdf0e10cSrcweir             aStartPoint = _astartPoint;
363cdf0e10cSrcweir             aFormSize = _aFormSize;
364cdf0e10cSrcweir             oFormDocument = _oFormDocument;
365cdf0e10cSrcweir             Name = _sname;
366cdf0e10cSrcweir             if (_sname.equals(SOSUBFORM))
367cdf0e10cSrcweir             {
368cdf0e10cSrcweir                 ControlForm oMainControlForm = ((ControlForm) oControlForms.get(0));
369cdf0e10cSrcweir                 xFormContainer = oFormHandler.insertFormbyName(_sname, oMainControlForm.xFormContainer);
370cdf0e10cSrcweir             }
371cdf0e10cSrcweir             else
372cdf0e10cSrcweir             {
373cdf0e10cSrcweir                 xFormContainer = oFormHandler.insertFormbyName(_sname);
374cdf0e10cSrcweir             }
375cdf0e10cSrcweir             xPropertySet = UnoRuntime.queryInterface(XPropertySet.class, xFormContainer);
376cdf0e10cSrcweir             if (_sname.equals(SOMAINFORM))
377cdf0e10cSrcweir             {
378cdf0e10cSrcweir                 oDBMetaData = oFormDocument.oMainFormDBMetaData;
379cdf0e10cSrcweir             }
380cdf0e10cSrcweir             else
381cdf0e10cSrcweir             {
382cdf0e10cSrcweir                 oDBMetaData = oFormDocument.oSubFormDBMetaData;
383cdf0e10cSrcweir             }
384cdf0e10cSrcweir         }
385cdf0e10cSrcweir 
initialize(int _curArrangement, Short _NBorderType)386cdf0e10cSrcweir         public void initialize(int _curArrangement, Short _NBorderType)
387cdf0e10cSrcweir         {
388cdf0e10cSrcweir             boolean adaptControlStyles = false;
389cdf0e10cSrcweir             xTextDocument.lockControllers();
390cdf0e10cSrcweir             curArrangement = _curArrangement;
391cdf0e10cSrcweir             if (oGridControl != null)
392cdf0e10cSrcweir             {
393cdf0e10cSrcweir                 oFormHandler.xDrawPage.remove(oGridControl.xShape);
394cdf0e10cSrcweir                 oGridControl.xComponent.dispose();
395cdf0e10cSrcweir                 oGridControl = null;
396cdf0e10cSrcweir             }
397cdf0e10cSrcweir             if (oFormController == null)
398cdf0e10cSrcweir             {
399cdf0e10cSrcweir                 oFormController = new FormControlArranger(oFormHandler, xFormContainer, oDBMetaData, xProgressBar, aStartPoint, aFormSize);
400cdf0e10cSrcweir             }
401cdf0e10cSrcweir             else
402cdf0e10cSrcweir             {
403cdf0e10cSrcweir                 if (curArrangement == FormWizard.AS_GRID)
404cdf0e10cSrcweir                 {
405cdf0e10cSrcweir                     oFormHandler.moveShapesToNirwana(getLabelControls());
406cdf0e10cSrcweir                     oFormHandler.moveShapesToNirwana(getDatabaseControls());
407cdf0e10cSrcweir                 }
408cdf0e10cSrcweir             }
409cdf0e10cSrcweir             if (curArrangement == FormWizard.AS_GRID)
410cdf0e10cSrcweir             {
411cdf0e10cSrcweir                 insertGridControl(_NBorderType);
412cdf0e10cSrcweir                 adaptControlStyles = true;
413cdf0e10cSrcweir             }
414cdf0e10cSrcweir             else
415cdf0e10cSrcweir             {
416cdf0e10cSrcweir                 adaptControlStyles = !oFormController.areControlsexisting();
417cdf0e10cSrcweir                 oFormController.positionControls(_curArrangement, aStartPoint, getAvailableFormSize(), curUIControlArranger.getAlignValue(), _NBorderType);
418cdf0e10cSrcweir             }
419cdf0e10cSrcweir             if (adaptControlStyles)
420cdf0e10cSrcweir             {
421cdf0e10cSrcweir                 curStyleApplier.applyStyle(false, true);
422cdf0e10cSrcweir             }
423cdf0e10cSrcweir             if ((Name.equals(SOMAINFORM)) && (oControlForms.size() > 1))
424cdf0e10cSrcweir             {
425cdf0e10cSrcweir                 ControlForm curSubControlForm = ((ControlForm) oControlForms.get(1));
426cdf0e10cSrcweir                 if (curSubControlForm != null)
427cdf0e10cSrcweir                 {
428cdf0e10cSrcweir                     adjustSubFormPosSize(_NBorderType);
429cdf0e10cSrcweir                 }
430cdf0e10cSrcweir             }
431cdf0e10cSrcweir             setFormSize(new Size(aFormSize.Width, getActualFormHeight()));
432cdf0e10cSrcweir             unlockallControllers();
433cdf0e10cSrcweir         }
434cdf0e10cSrcweir 
getLabelControls()435cdf0e10cSrcweir         public Control[] getLabelControls()
436cdf0e10cSrcweir         {
437cdf0e10cSrcweir             if (oFormController != null)
438cdf0e10cSrcweir             {
439cdf0e10cSrcweir                 return oFormController.getLabelControlList();
440cdf0e10cSrcweir             }
441cdf0e10cSrcweir             else
442cdf0e10cSrcweir             {
443cdf0e10cSrcweir                 return null;
444cdf0e10cSrcweir             }
445cdf0e10cSrcweir         }
446cdf0e10cSrcweir 
getFormSize()447cdf0e10cSrcweir         public Size getFormSize()
448cdf0e10cSrcweir         {
449cdf0e10cSrcweir             return aFormSize;
450cdf0e10cSrcweir         }
451cdf0e10cSrcweir 
getAvailableFormSize()452cdf0e10cSrcweir         private Size getAvailableFormSize()
453cdf0e10cSrcweir         {
454cdf0e10cSrcweir             if (this.Name.equals(SOMAINFORM))
455cdf0e10cSrcweir             {
456cdf0e10cSrcweir                 setFormSize(getMainFormSize(curArrangement));
457cdf0e10cSrcweir             }
458cdf0e10cSrcweir             else
459cdf0e10cSrcweir             {
460cdf0e10cSrcweir                 setFormSize(getSubFormSize());
461cdf0e10cSrcweir             }
462cdf0e10cSrcweir             return aFormSize;
463cdf0e10cSrcweir         }
464cdf0e10cSrcweir 
setFormSize(Size _aSize)465cdf0e10cSrcweir         public void setFormSize(Size _aSize)
466cdf0e10cSrcweir         {
467cdf0e10cSrcweir             aFormSize = _aSize;
468cdf0e10cSrcweir             oFormController.setFormSize(aFormSize);
469cdf0e10cSrcweir         }
470cdf0e10cSrcweir 
setStartPoint(Point _aPoint)471cdf0e10cSrcweir         private void setStartPoint(Point _aPoint)
472cdf0e10cSrcweir         {
473cdf0e10cSrcweir             aStartPoint = _aPoint;
474cdf0e10cSrcweir             if (oFormController != null)
475cdf0e10cSrcweir             {
476cdf0e10cSrcweir                 oFormController.setStartPoint(_aPoint);
477cdf0e10cSrcweir             }
478cdf0e10cSrcweir         }
479cdf0e10cSrcweir 
getActualFormHeight()480cdf0e10cSrcweir         private int getActualFormHeight()
481cdf0e10cSrcweir         {
482cdf0e10cSrcweir             if (curArrangement == FormWizard.AS_GRID)
483cdf0e10cSrcweir             {
484cdf0e10cSrcweir                 return oGridControl.xShape.getSize().Height;
485cdf0e10cSrcweir             }
486cdf0e10cSrcweir             else
487cdf0e10cSrcweir             {
488cdf0e10cSrcweir                 return oFormController.getFormHeight();
489cdf0e10cSrcweir             }
490cdf0e10cSrcweir         }
491cdf0e10cSrcweir 
getEntryPointY()492cdf0e10cSrcweir         private int getEntryPointY()
493cdf0e10cSrcweir         {
494cdf0e10cSrcweir             if (curArrangement == FormWizard.AS_GRID)
495cdf0e10cSrcweir             {
496cdf0e10cSrcweir                 return oGridControl.xShape.getPosition().Y;
497cdf0e10cSrcweir             }
498cdf0e10cSrcweir             else
499cdf0e10cSrcweir             {
500cdf0e10cSrcweir                 return oFormController.getEntryPointY();
501cdf0e10cSrcweir             }
502cdf0e10cSrcweir         }
503cdf0e10cSrcweir 
setFormProperties(PropertyValue[] _aPropertySetList, CommandMetaData _oDBMetaData)504cdf0e10cSrcweir         private void setFormProperties(PropertyValue[] _aPropertySetList, CommandMetaData _oDBMetaData)
505cdf0e10cSrcweir         {
506cdf0e10cSrcweir             try
507cdf0e10cSrcweir             {
508cdf0e10cSrcweir                 xPropertySet.setPropertyValue("DataSourceName", getDataSourceName());
509cdf0e10cSrcweir                 xPropertySet.setPropertyValue(PropertyNames.COMMAND, _oDBMetaData.getCommandName());
510cdf0e10cSrcweir                 xPropertySet.setPropertyValue(PropertyNames.COMMAND_TYPE, new Integer(_oDBMetaData.getCommandType()));
511cdf0e10cSrcweir                 for (int i = 0; i < _aPropertySetList.length; i++)
512cdf0e10cSrcweir                 {
513cdf0e10cSrcweir                     xPropertySet.setPropertyValue(_aPropertySetList[i].Name, _aPropertySetList[i].Value);
514cdf0e10cSrcweir                 }
515cdf0e10cSrcweir             }
516cdf0e10cSrcweir             catch (Exception e)
517cdf0e10cSrcweir             {
518cdf0e10cSrcweir                 e.printStackTrace(System.out);
519cdf0e10cSrcweir             }
520cdf0e10cSrcweir         }
521cdf0e10cSrcweir 
getDatabaseControls()522cdf0e10cSrcweir         public DatabaseControl[] getDatabaseControls()
523cdf0e10cSrcweir         {
524cdf0e10cSrcweir             if (oFormController != null)
525cdf0e10cSrcweir             {
526cdf0e10cSrcweir                 return oFormController.DBControlList;
527cdf0e10cSrcweir             }
528cdf0e10cSrcweir             else
529cdf0e10cSrcweir             {
530cdf0e10cSrcweir                 return null;
531cdf0e10cSrcweir             }
532cdf0e10cSrcweir         }
533cdf0e10cSrcweir 
getGridControl()534cdf0e10cSrcweir         public GridControl getGridControl()
535cdf0e10cSrcweir         {
536cdf0e10cSrcweir             return oGridControl;
537cdf0e10cSrcweir         }
538cdf0e10cSrcweir 
getArrangemode()539cdf0e10cSrcweir         public int getArrangemode()
540cdf0e10cSrcweir         {
541cdf0e10cSrcweir             return curArrangement;
542cdf0e10cSrcweir         }
543cdf0e10cSrcweir 
insertGridControl(Short _NBorderType)544cdf0e10cSrcweir         private void insertGridControl(Short _NBorderType)
545cdf0e10cSrcweir         {
546cdf0e10cSrcweir             try
547cdf0e10cSrcweir             {
548cdf0e10cSrcweir                 curArrangement = FormWizard.AS_GRID;
549cdf0e10cSrcweir                 if (Name.equals(SOMAINFORM))
550cdf0e10cSrcweir                 {
551cdf0e10cSrcweir                     oGridControl = new GridControl(xMSF, Name + "_Grid", oFormHandler, xFormContainer, oDBMetaData.FieldColumns, aStartPoint, getMainFormSize(FormWizard.AS_GRID));
552cdf0e10cSrcweir                 }
553cdf0e10cSrcweir                 else
554cdf0e10cSrcweir                 {
555cdf0e10cSrcweir                     oGridControl = new GridControl(xMSF, Name + "_Grid", oFormHandler, xFormContainer, oDBMetaData.FieldColumns, aStartPoint, getSubFormSize());
556cdf0e10cSrcweir                 }
557cdf0e10cSrcweir                 oGridControl.xPropertySet.setPropertyValue(PropertyNames.PROPERTY_BORDER, _NBorderType);
558cdf0e10cSrcweir             }
559cdf0e10cSrcweir             catch (Exception e)
560cdf0e10cSrcweir             {
561cdf0e10cSrcweir                 e.printStackTrace(System.out);
562cdf0e10cSrcweir             }
563cdf0e10cSrcweir         }
564cdf0e10cSrcweir 
finalizeControls()565cdf0e10cSrcweir         public void finalizeControls()
566cdf0e10cSrcweir         {
567cdf0e10cSrcweir             Control[] oLabelControls = getLabelControls();
568cdf0e10cSrcweir             Control[] oDBControls = getDatabaseControls();
569cdf0e10cSrcweir             if (oLabelControls != null)
570cdf0e10cSrcweir             {
571cdf0e10cSrcweir                 for (int i = 0; i < getLabelControls().length; i++)
572cdf0e10cSrcweir                 {
573cdf0e10cSrcweir                     if (curArrangement == FormWizard.AS_GRID)
574cdf0e10cSrcweir                     {
575cdf0e10cSrcweir                         if ((oLabelControls[i] != null) && (oDBControls[i] != null))
576cdf0e10cSrcweir                         {
577cdf0e10cSrcweir                             oFormHandler.removeShape(oLabelControls[i].xShape);
578cdf0e10cSrcweir                             oFormHandler.removeShape(oDBControls[i].xShape);
579cdf0e10cSrcweir                         }
580cdf0e10cSrcweir                     }
581cdf0e10cSrcweir                     else
582cdf0e10cSrcweir                     {
583cdf0e10cSrcweir                         oFormHandler.groupShapesTogether(xMSF, oLabelControls[i].xShape, oDBControls[i].xShape);
584cdf0e10cSrcweir                     }
585cdf0e10cSrcweir 
586cdf0e10cSrcweir                 }
587cdf0e10cSrcweir             }
588cdf0e10cSrcweir         }
589cdf0e10cSrcweir     }
590cdf0e10cSrcweir }
591