xref: /trunk/main/svx/source/form/fmobjfac.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_svx.hxx"
30 #include <comphelper/stl_types.hxx>
31 #include <svx/svdobj.hxx>
32 #include "svx/fmtools.hxx"
33 #include "fmservs.hxx"
34 
35 #ifndef _FM_FMOBJFAC_HXX
36 #include "svx/fmobjfac.hxx"
37 #endif
38 
39 #ifndef _FM_FMGLOB_HXX
40 #include <svx/fmglob.hxx>
41 #endif
42 
43 #ifndef _FM_FMOBJ_HXX
44 #include "fmobj.hxx"
45 #endif
46 #include "fmshimp.hxx"
47 
48 #ifndef _FM_FMSHELL_HXX
49 #include <svx/fmshell.hxx>
50 #endif
51 
52 #ifndef _SVX_SVXIDS_HRC
53 #include <svx/svxids.hrc>
54 #endif
55 #include "tbxform.hxx"
56 #include <tools/resid.hxx>
57 
58 #ifndef _SVX_FMRESIDS_HRC
59 #include "svx/fmresids.hrc"
60 #endif
61 #include <tools/shl.hxx>
62 #include <svx/dialmgr.hxx>
63 #include "fmservs.hxx"
64 #include "tabwin.hxx"
65 #include "fmexpl.hxx"
66 #include "filtnav.hxx"
67 
68 #ifndef _SVX_FMPROP_HRC
69 #include "fmprop.hrc"
70 #endif
71 #include "fmPropBrw.hxx"
72 #include "datanavi.hxx"
73 
74 using namespace ::com::sun::star::uno;
75 using namespace ::com::sun::star::beans;
76 using namespace ::svxform;
77 
78 static sal_Bool bInit = sal_False;
79 
80 /*************************************************************************
81 |*
82 |* Ctor
83 |*
84 \************************************************************************/
85 FmFormObjFactory::FmFormObjFactory()
86 {
87     if ( !bInit )
88     {
89         SdrObjFactory::InsertMakeObjectHdl(LINK(this, FmFormObjFactory, MakeObject));
90 
91         //////////////////////////////////////////////////////////////////////
92         // Konfigurations-::com::sun::star::frame::Controller und NavigationBar registrieren
93         SvxFmTbxCtlConfig::RegisterControl( SID_FM_CONFIG );
94         SvxFmTbxCtlAbsRec::RegisterControl( SID_FM_RECORD_ABSOLUTE );
95         SvxFmTbxCtlRecText::RegisterControl( SID_FM_RECORD_TEXT );
96         SvxFmTbxCtlRecFromText::RegisterControl( SID_FM_RECORD_FROM_TEXT );
97         SvxFmTbxCtlRecTotal::RegisterControl( SID_FM_RECORD_TOTAL );
98         SvxFmTbxPrevRec::RegisterControl( SID_FM_RECORD_PREV );
99         SvxFmTbxNextRec::RegisterControl( SID_FM_RECORD_NEXT );
100         ControlConversionMenuController::RegisterControl(SID_FM_CHANGECONTROLTYPE);
101 
102         // Registrieung von globalen fenstern
103         FmFieldWinMgr::RegisterChildWindow();
104         FmPropBrwMgr::RegisterChildWindow();
105         NavigatorFrameManager::RegisterChildWindow();
106         DataNavigatorManager::RegisterChildWindow();
107         FmFilterNavigatorWinMgr::RegisterChildWindow();
108 
109         //////////////////////////////////////////////////////////////////////
110         // Interface fuer die Formshell registrieren
111         FmFormShell::RegisterInterface(0);
112 
113         ImplSmartRegisterUnoServices();
114         bInit = sal_True;
115     }
116 }
117 
118 
119 /*************************************************************************
120 |*
121 |* Dtor
122 |*
123 \************************************************************************/
124 FmFormObjFactory::~FmFormObjFactory()
125 {
126 }
127 
128 
129 /*************************************************************************
130 |*
131 |* ::com::sun::star::form::Form-Objekte erzeugen
132 |*
133 \************************************************************************/
134 namespace
135 {
136     void    lcl_initProperty( FmFormObj* _pObject, const ::rtl::OUString& _rPropName, const Any& _rValue )
137     {
138         try
139         {
140             Reference< XPropertySet >  xModelSet( _pObject->GetUnoControlModel(), UNO_QUERY );
141             if ( xModelSet.is() )
142                 xModelSet->setPropertyValue( _rPropName, _rValue );
143         }
144         catch( const Exception& )
145         {
146             DBG_ERROR( "lcl_initProperty: caught an exception!" );
147         }
148     }
149 }
150 
151 IMPL_LINK(FmFormObjFactory, MakeObject, SdrObjFactory*, pObjFactory)
152 {
153     if (pObjFactory->nInventor == FmFormInventor)
154     {
155         ::rtl::OUString sServiceSpecifier;
156 
157         typedef ::std::vector< ::std::pair< ::rtl::OUString, Any > > PropertyValueArray;
158         PropertyValueArray aInitialProperties;
159 
160         switch ( pObjFactory->nIdentifier )
161         {
162             case OBJ_FM_EDIT:
163                 sServiceSpecifier = FM_COMPONENT_EDIT;
164                 break;
165 
166             case OBJ_FM_BUTTON:
167                 sServiceSpecifier = FM_COMPONENT_COMMANDBUTTON;
168                 break;
169 
170             case OBJ_FM_FIXEDTEXT:
171                 sServiceSpecifier = FM_COMPONENT_FIXEDTEXT;
172                 break;
173 
174             case OBJ_FM_LISTBOX:
175                 sServiceSpecifier = FM_COMPONENT_LISTBOX;
176                 break;
177 
178             case OBJ_FM_CHECKBOX:
179                 sServiceSpecifier = FM_COMPONENT_CHECKBOX;
180                 break;
181 
182             case OBJ_FM_RADIOBUTTON:
183                 sServiceSpecifier = FM_COMPONENT_RADIOBUTTON;
184                 break;
185 
186             case OBJ_FM_GROUPBOX:
187                 sServiceSpecifier = FM_COMPONENT_GROUPBOX;
188                 break;
189 
190             case OBJ_FM_COMBOBOX:
191                 sServiceSpecifier = FM_COMPONENT_COMBOBOX;
192                 break;
193 
194             case OBJ_FM_GRID:
195                 sServiceSpecifier = FM_COMPONENT_GRID;
196                 break;
197 
198             case OBJ_FM_IMAGEBUTTON:
199                 sServiceSpecifier = FM_COMPONENT_IMAGEBUTTON;
200                 break;
201 
202             case OBJ_FM_FILECONTROL:
203                 sServiceSpecifier = FM_COMPONENT_FILECONTROL;
204                 break;
205 
206             case OBJ_FM_DATEFIELD:
207                 sServiceSpecifier = FM_COMPONENT_DATEFIELD;
208                 break;
209 
210             case OBJ_FM_TIMEFIELD:
211                 sServiceSpecifier = FM_COMPONENT_TIMEFIELD;
212                 aInitialProperties.push_back( PropertyValueArray::value_type( FM_PROP_TIMEMAX, makeAny( (sal_Int32)( Time( 23, 59, 59, 99 ).GetTime() ) ) ) );
213                 break;
214 
215             case OBJ_FM_NUMERICFIELD:
216                 sServiceSpecifier = FM_COMPONENT_NUMERICFIELD;
217                 break;
218 
219             case OBJ_FM_CURRENCYFIELD:
220                 sServiceSpecifier = FM_COMPONENT_CURRENCYFIELD;
221                 break;
222 
223             case OBJ_FM_PATTERNFIELD:
224                 sServiceSpecifier = FM_COMPONENT_PATTERNFIELD;
225                 break;
226 
227             case OBJ_FM_HIDDEN:
228                 sServiceSpecifier = FM_COMPONENT_HIDDEN;
229                 break;
230 
231             case OBJ_FM_IMAGECONTROL:
232                 sServiceSpecifier = FM_COMPONENT_IMAGECONTROL;
233                 break;
234 
235             case OBJ_FM_FORMATTEDFIELD:
236                 sServiceSpecifier = FM_COMPONENT_FORMATTEDFIELD;
237                 break;
238 
239             case OBJ_FM_NAVIGATIONBAR:
240                 sServiceSpecifier = FM_SUN_COMPONENT_NAVIGATIONBAR;
241                 break;
242 
243             case OBJ_FM_SCROLLBAR:
244                 sServiceSpecifier = FM_SUN_COMPONENT_SCROLLBAR;
245                 aInitialProperties.push_back( PropertyValueArray::value_type( FM_PROP_BORDER, makeAny( (sal_Int16)0 ) ) );
246                 break;
247 
248             case OBJ_FM_SPINBUTTON:
249                 sServiceSpecifier = FM_SUN_COMPONENT_SPINBUTTON;
250                 aInitialProperties.push_back( PropertyValueArray::value_type( FM_PROP_BORDER, makeAny( (sal_Int16)0 ) ) );
251                 break;
252         }
253 
254         // create the actual object
255         if ( sServiceSpecifier.getLength() )
256             pObjFactory->pNewObj = new FmFormObj( sServiceSpecifier, pObjFactory->nIdentifier );
257         else
258             pObjFactory->pNewObj = new FmFormObj( pObjFactory->nIdentifier );
259 
260         // initialize some properties which we want to differ from the defaults
261         for (   PropertyValueArray::const_iterator aInitProp = aInitialProperties.begin();
262                 aInitProp != aInitialProperties.end();
263                 ++aInitProp
264             )
265         {
266             lcl_initProperty(
267                 static_cast< FmFormObj* >( pObjFactory->pNewObj ),
268                 aInitProp->first,
269                 aInitProp->second
270             );
271         }
272     }
273 
274     return 0;
275 }
276 
277 
278 
279