1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 package com.sun.star.wizards.form;
24 
25 import com.sun.star.awt.ItemEvent;
26 
27 import com.sun.star.awt.Size;
28 import com.sun.star.awt.XControl;
29 import com.sun.star.awt.XItemListener;
30 import com.sun.star.awt.XRadioButton;
31 import com.sun.star.lang.EventObject;
32 import com.sun.star.wizards.common.Helper;
33 import com.sun.star.wizards.common.PropertyNames;
34 import com.sun.star.wizards.common.NoValidPathException;
35 import com.sun.star.wizards.document.Control;
36 // import com.sun.star.wizards.ui.ImageList;
37 import com.sun.star.wizards.ui.ButtonList;
38 import com.sun.star.wizards.ui.UIConsts;
39 import com.sun.star.wizards.ui.UnoDialog;
40 
41 import javax.swing.DefaultListModel;
42 import javax.swing.ListModel;
43 import javax.swing.event.ListDataEvent;
44 import javax.swing.event.ListDataListener;
45 
46 public class UIControlArranger
47 {
48 
49     private FormWizard CurUnoDialog;
50     private FormDocument curFormDocument;
51     private short curtabindex;
52     private XRadioButton optAlignLeft;
53     private XRadioButton optAlignRight;
54     private XControl flnLabelPlacement;
55     private String[] HelpTexts = new String[4];
56     // private String[] sArrangementHeader = new String[2];
57     // private ArrangeImageList[] m_aArrangeList = new ArrangeImageList[2];
58     private ArrangeButtonList[] m_aArrangeList = new ArrangeButtonList[2];
59     private Integer IControlStep;
60     private final int SOBASEIMAGEYPOSITION = 66;
61     private final int SOIMAGELISTHEIGHT = 60;
62     private final String SOALIGNMETHOD = "alignLabelControls";
63 
UIControlArranger(FormWizard _CurUnoDialog, FormDocument _curFormDocument)64     public UIControlArranger(FormWizard _CurUnoDialog, FormDocument _curFormDocument) throws NoValidPathException
65     {
66         this.CurUnoDialog = _CurUnoDialog;
67         this.curFormDocument = _curFormDocument;
68         curtabindex = (short) (FormWizard.SOCONTROL_PAGE * 100);
69         IControlStep = new Integer(FormWizard.SOCONTROL_PAGE);
70         String sLabelPlacment = CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 32);
71         String sAlignLeft = CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 33);
72         String sAlignRight = CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 34);
73 
74         // Label "Label Placement" -----------------
75         flnLabelPlacement = CurUnoDialog.insertFixedLine("lnLabelPlacement",
76                 new String[]
77                 {
78                     PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
79                 },
80                 new Object[]
81                 {
82                     UIConsts.INTEGERS[8], sLabelPlacment, 97, 25, IControlStep, new Short(curtabindex++), 207
83                 });
84         // Radio Button "Align Left"
85         optAlignLeft = CurUnoDialog.insertRadioButton("optAlignLeft", SOALIGNMETHOD, this,
86                 new String[]
87                 {
88                     PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
89                 },
90                 new Object[]
91                 {
92                     UIConsts.INTEGERS[10], "HID:WIZARDS_HID_DLGFORM_CMDALIGNLEFT", sAlignLeft, 107, 38, new Short((short) 1), IControlStep, new Short(curtabindex++), 171
93                 });
94         // Radio Button "Align Right"
95         optAlignRight = CurUnoDialog.insertRadioButton("optAlignRight", SOALIGNMETHOD, this,
96                 new String[]
97                 {
98                     PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
99                 },
100                 new Object[]
101                 {
102                     UIConsts.INTEGERS[10], "HID:WIZARDS_HID_DLGFORM_CMDALIGNRIGHT", sAlignRight, Boolean.TRUE, 107, 50, IControlStep, new Short(curtabindex++), 171
103                 });
104 
105 
106         HelpTexts[0] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 36); // "Columnar - Labels Left"
107         HelpTexts[1] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 37); // "Columnar - Labels of Top"
108         HelpTexts[2] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 40); // "As Data Sheet"
109         HelpTexts[3] = CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 39); // In Blocks - Labels Above"
110 
111 //        flnLabelPlacement = CurUnoDialog.insertFixedLine("lnArrangementHeader1",
112 //                new String[]
113 //                {
114 //                    PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
115 //                },
116 //                new Object[]
117 //                {
118 //                    UIConsts.INTEGERS[8], sArrangementHeader[0], 97, 60, IControlStep, new Short(curtabindex++), 207
119 //                });
120 //
121 //        boolean bEnabled = true;
122 //        int nBtnWidth = 16;
123 //        int nXPos = 97;
124 //        int nYPos = 70;
125 //        CurUnoDialog.insertButton("btnLayout1", "btnLayout1",
126 //                new String[]
127 //                {
128 //                    PropertyNames.PROPERTY_ENABLED,
129 //                    PropertyNames.PROPERTY_HEIGHT,
130 //                    PropertyNames.PROPERTY_HELPURL,
131 //                    PropertyNames.PROPERTY_LABEL,
132 //                    PropertyNames.PROPERTY_POSITION_X,
133 //                    PropertyNames.PROPERTY_POSITION_Y,
134 //                    PropertyNames.PROPERTY_STEP,
135 //                    PropertyNames.PROPERTY_TABINDEX,
136 //                    PropertyNames.PROPERTY_WIDTH
137 //                },
138 //                new Object[]
139 //                {
140 //                    Boolean.valueOf(bEnabled),
141 //                    14,
142 ///* TODO: WRONG!*/   "HID:WIZARDS_HID_DLGFORM_CMDALIGNRIGHT",
143 //                    "1",
144 //                    new Integer(nXPos + nBtnWidth),
145 //                    new Integer(nYPos),
146 //                    IControlStep,
147 //                    new Short(curtabindex++),
148 //                    16
149 //                });
150 
151         DefaultListModel imageModel = new DefaultListModel();
152         for (int i = 0; i < HelpTexts.length; i++)
153         {
154             imageModel.addElement(new Integer(i));
155         }
156          String sMainArrangementHeader = CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 41); // "Arrangement of the main form"
157          m_aArrangeList[0] = new ArrangeButtonList(0, imageModel, sMainArrangementHeader);
158 
159          String sSubArrangementHeader = CurUnoDialog.m_oResource.getResText(UIConsts.RID_FORM + 42); // "Arrangement of the sub form"
160          m_aArrangeList[1] = new ArrangeButtonList(1, imageModel, sSubArrangementHeader);
161         enableAlignControlGroup(false);
162     }
163 
getSelectedArrangement(int _formindex)164     public int getSelectedArrangement(int _formindex)
165     {
166         return m_aArrangeList[_formindex].m_aButtonList.getSelected() + 1;
167     }
168 
169     private class LayoutRenderer implements ButtonList.IImageRenderer
170     {
171         int Index = 1;
172 
getImageUrls(Object listitem)173         public Object[] getImageUrls(Object listitem)
174         {
175 
176             int ResId = UIConsts.RID_IMG_FORM + (2 * ((Integer) listitem).intValue());
177             Index++;
178             return new Integer[]
179                     {
180                         new Integer(ResId), new Integer(ResId + 1)
181                     };
182 //          String s = CurUnoDialog.getWizardImageUrl(ResId, ResId + 1); //((Integer)listitem).intValue(), )sBitmapPath + "/Arrange_" + (((Integer)listitem).intValue() + 1) + ".gif";
183 //          return s;
184         }
185 
render(Object listItem)186         public String render(Object listItem)
187         {
188             if (listItem == null)
189             {
190                 return PropertyNames.EMPTY_STRING;
191             }
192             return HelpTexts[((Integer) listItem).intValue()];
193 
194         }
195     }
196 
enableSubFormImageList(boolean _bdoEnable)197     public void enableSubFormImageList(boolean _bdoEnable)
198     {
199         m_aArrangeList[1].m_aButtonList.setenabled(_bdoEnable);
200         CurUnoDialog.setControlProperty("lnLabelPlacment_2", PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(_bdoEnable));
201     }
202 
getAlignValue()203     public short getAlignValue()
204     {
205         return optAlignLeft.getState() ? (short)0 : (short)2;
206     }
207 
alignLabelControls()208     public void alignLabelControls()
209     {
210         try
211         {
212             short iAlignValue = getAlignValue();
213             for (int m = 0; m < curFormDocument.oControlForms.size(); m++)
214             {
215                 FormDocument.ControlForm curControlForm = (FormDocument.ControlForm) curFormDocument.oControlForms.get(m);
216                 if (curControlForm.getArrangemode() == FormWizard.COLUMNAR_LEFT)
217                 {
218                     Control[] LabelControls = curControlForm.getLabelControls();
219                     for (int n = 0; n < LabelControls.length; n++)
220                     {
221                         LabelControls[n].xPropertySet.setPropertyValue(PropertyNames.PROPERTY_ALIGN, new Short(iAlignValue));
222                     }
223                 }
224             }
225         }
226         catch (Exception e)
227         {
228             e.printStackTrace(System.out);
229         }
230     }
231 
enableAlignControlGroup(boolean _bEnableAlignControlGroup)232     private void enableAlignControlGroup(boolean _bEnableAlignControlGroup)
233     {
234         Helper.setUnoPropertyValue(UnoDialog.getModel(flnLabelPlacement), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(_bEnableAlignControlGroup));
235         Helper.setUnoPropertyValue(UnoDialog.getModel(optAlignLeft), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(_bEnableAlignControlGroup));
236         Helper.setUnoPropertyValue(UnoDialog.getModel(optAlignRight), PropertyNames.PROPERTY_ENABLED, Boolean.valueOf(_bEnableAlignControlGroup));
237     }
238 
239 //    private class ArrangeImageList implements XItemListener
240 //    {
241 //
242 //        private int formindex;
243 //        private ImageList m_aButtonList = null; // new ImageList();
244 //
245 //        public ArrangeImageList(int _formindex, ListModel model, String _sArrangementHeader)
246 //        {
247 //            formindex = _formindex;
248 //            Integer YPos = new Integer(SOBASEIMAGEYPOSITION + _formindex * SOIMAGELISTHEIGHT);
249 //            // Label ArrangementHeader ----------------------
250 //            CurUnoDialog.insertFixedLine("lnLabelPlacment_" + (_formindex + 1),
251 //                    new String[]
252 //                    {
253 //                        PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
254 //                    },
255 //                    new Object[]
256 //                    {
257 //                        UIConsts.INTEGERS[8], _sArrangementHeader, 97, YPos, IControlStep, new Short(curtabindex++), 207
258 //                    });
259 //
260 //            int nypos = SOBASEIMAGEYPOSITION + 12 + _formindex * SOIMAGELISTHEIGHT;
261 //            m_aButtonList = new ImageList();
262 //            m_aButtonList.setPos(new Size(107, nypos));
263 //            m_aButtonList.setImageSize(new Size(26, 26));
264 //            m_aButtonList.setCols(4);
265 //            m_aButtonList.setRows(1);
266 //            m_aButtonList.m_aControlName = "ImageList_" + formindex;
267 //            m_aButtonList.setStep(new Short((short) FormWizard.SOCONTROL_PAGE));
268 //            m_aButtonList.setShowButtons(false);
269 //            m_aButtonList.setRenderer(new LayoutRenderer());
270 //            m_aButtonList.setSelectionGap(new Size(2, 2));
271 //            m_aButtonList.setGap(new Size(3, 3));
272 //            m_aButtonList.scaleImages = Boolean.FALSE;
273 //            m_aButtonList.tabIndex = (int) curtabindex++;
274 //            m_aButtonList.helpURL = 34453 + (formindex * 4);
275 //
276 //            m_aButtonList.setListModel(model);
277 //            m_aButtonList.create(CurUnoDialog);
278 //            m_aButtonList.setSelected(FormWizard.SOGRID - 1);
279 //            m_aButtonList.addItemListener(this);
280 //        }
281 //
282 //        public void setToLeftAlign()
283 //        {
284 //            Helper.setUnoPropertyValue(UnoDialog.getModel(optAlignLeft), PropertyNames.PROPERTY_STATE, new Short((short) 1));
285 //        }
286 //
287 //        /* (non-Javadoc)
288 //         * @see javax.swing.ListModel#addListDataListener(javax.swing.event.ListDataListener)
289 //         */
290 //        public void addListDataListener(ListDataListener arg0)
291 //        {
292 //            // TODO Auto-generated method stub
293 //        }
294 //
295 //        public void itemStateChanged(ItemEvent arg0)
296 //        {
297 //            try
298 //            {
299 //                if (m_aArrangeList[formindex].m_aButtonList.isenabled())
300 //                {
301 //                    boolean bEnableAlignControlGroup;
302 //                    if (curFormDocument.oControlForms.size() == 2)
303 //                    {
304 //                        final int nSelected0 = (m_aArrangeList[0].m_aButtonList.getSelected() + 1);
305 //                        final int nSelected1 = (m_aArrangeList[1].m_aButtonList.getSelected() + 1);
306 //
307 //                        bEnableAlignControlGroup = ((nSelected0 == FormWizard.SOCOLUMNARLEFT) ||
308 //                                                    (nSelected1 == FormWizard.SOCOLUMNARLEFT));
309 //                    }
310 //                    else
311 //                    {
312 //                        final int nSelected0 = (m_aArrangeList[0].m_aButtonList.getSelected() + 1);
313 //                        bEnableAlignControlGroup = (nSelected0 == FormWizard.SOCOLUMNARLEFT);
314 //                    }
315 //                    enableAlignControlGroup(bEnableAlignControlGroup);
316 //                    final Short nBorderType = CurUnoDialog.getBorderType();
317 //                    final int nSelected = m_aButtonList.getSelected() + 1;
318 //                    ((FormDocument.ControlForm) curFormDocument.oControlForms.get(formindex)).initialize(nSelected, nBorderType);
319 //                }
320 //            }
321 //            catch (RuntimeException e)
322 //            {
323 //                e.printStackTrace();
324 //            }
325 //        }
326 //
327 //        /* (non-Javadoc)
328 //         * @see javax.swing.event.ListDataListener#contentsChanged(javax.swing.event.ListDataEvent)
329 //         */
330 //        public void contentsChanged(ListDataEvent arg0)
331 //        {
332 //            // TODO Auto-generated method stub
333 //        }
334 //
335 //        /* (non-Javadoc)
336 //         * @see javax.swing.event.ListDataListener#intervalAdded(javax.swing.event.ListDataEvent)
337 //         */
338 //        public void intervalAdded(ListDataEvent arg0)
339 //        {
340 //            // TODO Auto-generated method stub
341 //        }
342 //
343 //        /* (non-Javadoc)
344 //         * @see javax.swing.event.ListDataListener#intervalRemoved(javax.swing.event.ListDataEvent)
345 //         */
346 //        public void intervalRemoved(ListDataEvent arg0)
347 //        {
348 //            // TODO Auto-generated method stub
349 //        }
350 //
351 //        /* (non-Javadoc)
352 //         * @see com.sun.star.lang.XEventListener#disposing(com.sun.star.lang.EventObject)
353 //         */
354 //        public void disposing(EventObject arg0)
355 //        {
356 //            // TODO Auto-generated method stub
357 //        }
358 //    }
359 
360     private class ArrangeButtonList implements XItemListener
361     {
362 
363         private int formindex;
364         private ButtonList m_aButtonList = null; // new ImageList();
365 
ArrangeButtonList(int _formindex, ListModel model, String _sArrangementHeader)366         public ArrangeButtonList(int _formindex, ListModel model, String _sArrangementHeader)
367         {
368             formindex = _formindex;
369             Integer YPos = new Integer(SOBASEIMAGEYPOSITION + _formindex * SOIMAGELISTHEIGHT);
370             // Label ArrangementHeader ----------------------
371             CurUnoDialog.insertFixedLine("lnLabelPlacment_" + (_formindex + 1),
372                     new String[]
373                     {
374                         PropertyNames.PROPERTY_HEIGHT,
375                         PropertyNames.PROPERTY_LABEL,
376                         PropertyNames.PROPERTY_POSITION_X,
377                         PropertyNames.PROPERTY_POSITION_Y,
378                         PropertyNames.PROPERTY_STEP,
379                         PropertyNames.PROPERTY_TABINDEX,
380                         PropertyNames.PROPERTY_WIDTH
381                     },
382                     new Object[]
383                     {
384                         UIConsts.INTEGERS[8],
385                         _sArrangementHeader,
386                         97,
387                         YPos,
388                         IControlStep,
389                         new Short(curtabindex++),
390                         207
391                     });
392 
393             int nypos = SOBASEIMAGEYPOSITION + 12 - 5 + _formindex * SOIMAGELISTHEIGHT;
394             m_aButtonList = new ButtonList();
395             m_aButtonList.setPos(new Size(107, nypos));
396             m_aButtonList.setButtonSize(new Size(26 + 6, 26 + 5));
397             m_aButtonList.setCols(4);
398             m_aButtonList.setRows(1);
399             m_aButtonList.setName( "ButtonList_" + formindex );
400             m_aButtonList.setStep(Short.valueOf((short) FormWizard.SOCONTROL_PAGE));
401             m_aButtonList.setShowButtons(false);      // shows a button line at ''wrong'' position like |<| 1..4/4 |>|
402             m_aButtonList.setRenderer(new LayoutRenderer());
403             m_aButtonList.setSelectionGap(new Size(2, 2));
404             m_aButtonList.setGap(new Size(3, 3));
405 //            m_aButtonList.scaleImages = Boolean.FALSE;
406             m_aButtonList.tabIndex = (int) curtabindex++;
407             m_aButtonList.helpURL = 34453 + (formindex * 4);
408 
409             m_aButtonList.setListModel(model);
410             m_aButtonList.create(CurUnoDialog);
411             m_aButtonList.setSelected(FormWizard.AS_GRID - 1);
412             m_aButtonList.addItemListener(this);
413         }
414 
setToLeftAlign()415         public void setToLeftAlign()
416         {
417             Helper.setUnoPropertyValue(UnoDialog.getModel(optAlignLeft), PropertyNames.PROPERTY_STATE, new Short((short) 1));
418         }
419 
420         /* (non-Javadoc)
421          * @see javax.swing.ListModel#addListDataListener(javax.swing.event.ListDataListener)
422          */
addListDataListener(ListDataListener arg0)423         public void addListDataListener(ListDataListener arg0)
424         {
425             // TODO Auto-generated method stub
426         }
427 
itemStateChanged(ItemEvent arg0)428         public void itemStateChanged(ItemEvent arg0)
429         {
430             try
431             {
432                 if (m_aArrangeList[formindex].m_aButtonList.isenabled())
433                 {
434                     boolean bEnableAlignControlGroup;
435                     if (curFormDocument.oControlForms.size() == 2)
436                     {
437                         final int nSelected0 = (m_aArrangeList[0].m_aButtonList.getSelected() + 1);
438                         final int nSelected1 = (m_aArrangeList[1].m_aButtonList.getSelected() + 1);
439 
440                         bEnableAlignControlGroup = ((nSelected0 == FormWizard.COLUMNAR_LEFT) ||
441                                                     (nSelected1 == FormWizard.COLUMNAR_LEFT));
442                     }
443                     else
444                     {
445                         final int nSelected0 = (m_aArrangeList[0].m_aButtonList.getSelected() + 1);
446                         bEnableAlignControlGroup = (nSelected0 == FormWizard.COLUMNAR_LEFT);
447                     }
448                     enableAlignControlGroup(bEnableAlignControlGroup);
449                     final Short nBorderType = CurUnoDialog.getBorderType();
450                     final int nSelected = m_aButtonList.getSelected() + 1;
451                     ((FormDocument.ControlForm) curFormDocument.oControlForms.get(formindex)).initialize(nSelected, nBorderType);
452                 }
453             }
454             catch (RuntimeException e)
455             {
456                 e.printStackTrace();
457             }
458         }
459 
460         /* (non-Javadoc)
461          * @see javax.swing.event.ListDataListener#contentsChanged(javax.swing.event.ListDataEvent)
462          */
contentsChanged(ListDataEvent arg0)463         public void contentsChanged(ListDataEvent arg0)
464         {
465             // TODO Auto-generated method stub
466         }
467 
468         /* (non-Javadoc)
469          * @see javax.swing.event.ListDataListener#intervalAdded(javax.swing.event.ListDataEvent)
470          */
intervalAdded(ListDataEvent arg0)471         public void intervalAdded(ListDataEvent arg0)
472         {
473             // TODO Auto-generated method stub
474         }
475 
476         /* (non-Javadoc)
477          * @see javax.swing.event.ListDataListener#intervalRemoved(javax.swing.event.ListDataEvent)
478          */
intervalRemoved(ListDataEvent arg0)479         public void intervalRemoved(ListDataEvent arg0)
480         {
481             // TODO Auto-generated method stub
482         }
483 
484         /* (non-Javadoc)
485          * @see com.sun.star.lang.XEventListener#disposing(com.sun.star.lang.EventObject)
486          */
disposing(EventObject arg0)487         public void disposing(EventObject arg0)
488         {
489             // TODO Auto-generated method stub
490         }
491     }
492 }
493