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 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_svx.hxx" 26 #include <comphelper/stl_types.hxx> 27 #include <svx/svdobj.hxx> 28 #include "svx/fmtools.hxx" 29 #include "fmservs.hxx" 30 31 #ifndef _FM_FMOBJFAC_HXX 32 #include "svx/fmobjfac.hxx" 33 #endif 34 35 #ifndef _FM_FMGLOB_HXX 36 #include <svx/fmglob.hxx> 37 #endif 38 39 #ifndef _FM_FMOBJ_HXX 40 #include "fmobj.hxx" 41 #endif 42 #include "fmshimp.hxx" 43 44 #ifndef _FM_FMSHELL_HXX 45 #include <svx/fmshell.hxx> 46 #endif 47 48 #ifndef _SVX_SVXIDS_HRC 49 #include <svx/svxids.hrc> 50 #endif 51 #include "tbxform.hxx" 52 #include <tools/resid.hxx> 53 54 #ifndef _SVX_FMRESIDS_HRC 55 #include "svx/fmresids.hrc" 56 #endif 57 #include <tools/shl.hxx> 58 #include <svx/dialmgr.hxx> 59 #include "fmservs.hxx" 60 #include "tabwin.hxx" 61 #include "fmexpl.hxx" 62 #include "filtnav.hxx" 63 64 #ifndef _SVX_FMPROP_HRC 65 #include "fmprop.hrc" 66 #endif 67 #include "fmPropBrw.hxx" 68 #include "datanavi.hxx" 69 70 using namespace ::com::sun::star::uno; 71 using namespace ::com::sun::star::beans; 72 using namespace ::svxform; 73 74 static sal_Bool bInit = sal_False; 75 76 /************************************************************************* 77 |* 78 |* Ctor 79 |* 80 \************************************************************************/ 81 FmFormObjFactory::FmFormObjFactory() 82 { 83 if ( !bInit ) 84 { 85 SdrObjFactory::InsertMakeObjectHdl(LINK(this, FmFormObjFactory, MakeObject)); 86 87 ////////////////////////////////////////////////////////////////////// 88 // Konfigurations-::com::sun::star::frame::Controller und NavigationBar registrieren 89 SvxFmTbxCtlConfig::RegisterControl( SID_FM_CONFIG ); 90 SvxFmTbxCtlAbsRec::RegisterControl( SID_FM_RECORD_ABSOLUTE ); 91 SvxFmTbxCtlRecText::RegisterControl( SID_FM_RECORD_TEXT ); 92 SvxFmTbxCtlRecFromText::RegisterControl( SID_FM_RECORD_FROM_TEXT ); 93 SvxFmTbxCtlRecTotal::RegisterControl( SID_FM_RECORD_TOTAL ); 94 SvxFmTbxPrevRec::RegisterControl( SID_FM_RECORD_PREV ); 95 SvxFmTbxNextRec::RegisterControl( SID_FM_RECORD_NEXT ); 96 ControlConversionMenuController::RegisterControl(SID_FM_CHANGECONTROLTYPE); 97 98 // Registrieung von globalen fenstern 99 FmFieldWinMgr::RegisterChildWindow(); 100 FmPropBrwMgr::RegisterChildWindow(); 101 NavigatorFrameManager::RegisterChildWindow(); 102 DataNavigatorManager::RegisterChildWindow(); 103 FmFilterNavigatorWinMgr::RegisterChildWindow(); 104 105 ////////////////////////////////////////////////////////////////////// 106 // Interface fuer die Formshell registrieren 107 FmFormShell::RegisterInterface(0); 108 109 ImplSmartRegisterUnoServices(); 110 bInit = sal_True; 111 } 112 } 113 114 115 /************************************************************************* 116 |* 117 |* Dtor 118 |* 119 \************************************************************************/ 120 FmFormObjFactory::~FmFormObjFactory() 121 { 122 } 123 124 125 /************************************************************************* 126 |* 127 |* ::com::sun::star::form::Form-Objekte erzeugen 128 |* 129 \************************************************************************/ 130 namespace 131 { 132 void lcl_initProperty( FmFormObj* _pObject, const ::rtl::OUString& _rPropName, const Any& _rValue ) 133 { 134 try 135 { 136 Reference< XPropertySet > xModelSet( _pObject->GetUnoControlModel(), UNO_QUERY ); 137 if ( xModelSet.is() ) 138 xModelSet->setPropertyValue( _rPropName, _rValue ); 139 } 140 catch( const Exception& ) 141 { 142 DBG_ERROR( "lcl_initProperty: caught an exception!" ); 143 } 144 } 145 } 146 147 IMPL_LINK(FmFormObjFactory, MakeObject, SdrObjFactory*, pObjFactory) 148 { 149 if (pObjFactory->nInventor == FmFormInventor) 150 { 151 ::rtl::OUString sServiceSpecifier; 152 153 typedef ::std::vector< ::std::pair< ::rtl::OUString, Any > > PropertyValueArray; 154 PropertyValueArray aInitialProperties; 155 156 switch ( pObjFactory->nIdentifier ) 157 { 158 case OBJ_FM_EDIT: 159 sServiceSpecifier = FM_COMPONENT_EDIT; 160 break; 161 162 case OBJ_FM_BUTTON: 163 sServiceSpecifier = FM_COMPONENT_COMMANDBUTTON; 164 break; 165 166 case OBJ_FM_FIXEDTEXT: 167 sServiceSpecifier = FM_COMPONENT_FIXEDTEXT; 168 break; 169 170 case OBJ_FM_LISTBOX: 171 sServiceSpecifier = FM_COMPONENT_LISTBOX; 172 break; 173 174 case OBJ_FM_CHECKBOX: 175 sServiceSpecifier = FM_COMPONENT_CHECKBOX; 176 break; 177 178 case OBJ_FM_RADIOBUTTON: 179 sServiceSpecifier = FM_COMPONENT_RADIOBUTTON; 180 break; 181 182 case OBJ_FM_GROUPBOX: 183 sServiceSpecifier = FM_COMPONENT_GROUPBOX; 184 break; 185 186 case OBJ_FM_COMBOBOX: 187 sServiceSpecifier = FM_COMPONENT_COMBOBOX; 188 break; 189 190 case OBJ_FM_GRID: 191 sServiceSpecifier = FM_COMPONENT_GRID; 192 break; 193 194 case OBJ_FM_IMAGEBUTTON: 195 sServiceSpecifier = FM_COMPONENT_IMAGEBUTTON; 196 break; 197 198 case OBJ_FM_FILECONTROL: 199 sServiceSpecifier = FM_COMPONENT_FILECONTROL; 200 break; 201 202 case OBJ_FM_DATEFIELD: 203 sServiceSpecifier = FM_COMPONENT_DATEFIELD; 204 break; 205 206 case OBJ_FM_TIMEFIELD: 207 sServiceSpecifier = FM_COMPONENT_TIMEFIELD; 208 aInitialProperties.push_back( PropertyValueArray::value_type( FM_PROP_TIMEMAX, makeAny( (sal_Int32)( Time( 23, 59, 59, 99 ).GetTime() ) ) ) ); 209 break; 210 211 case OBJ_FM_NUMERICFIELD: 212 sServiceSpecifier = FM_COMPONENT_NUMERICFIELD; 213 break; 214 215 case OBJ_FM_CURRENCYFIELD: 216 sServiceSpecifier = FM_COMPONENT_CURRENCYFIELD; 217 break; 218 219 case OBJ_FM_PATTERNFIELD: 220 sServiceSpecifier = FM_COMPONENT_PATTERNFIELD; 221 break; 222 223 case OBJ_FM_HIDDEN: 224 sServiceSpecifier = FM_COMPONENT_HIDDEN; 225 break; 226 227 case OBJ_FM_IMAGECONTROL: 228 sServiceSpecifier = FM_COMPONENT_IMAGECONTROL; 229 break; 230 231 case OBJ_FM_FORMATTEDFIELD: 232 sServiceSpecifier = FM_COMPONENT_FORMATTEDFIELD; 233 break; 234 235 case OBJ_FM_NAVIGATIONBAR: 236 sServiceSpecifier = FM_SUN_COMPONENT_NAVIGATIONBAR; 237 break; 238 239 case OBJ_FM_SCROLLBAR: 240 sServiceSpecifier = FM_SUN_COMPONENT_SCROLLBAR; 241 aInitialProperties.push_back( PropertyValueArray::value_type( FM_PROP_BORDER, makeAny( (sal_Int16)0 ) ) ); 242 break; 243 244 case OBJ_FM_SPINBUTTON: 245 sServiceSpecifier = FM_SUN_COMPONENT_SPINBUTTON; 246 aInitialProperties.push_back( PropertyValueArray::value_type( FM_PROP_BORDER, makeAny( (sal_Int16)0 ) ) ); 247 break; 248 } 249 250 // create the actual object 251 if ( sServiceSpecifier.getLength() ) 252 pObjFactory->pNewObj = new FmFormObj( sServiceSpecifier, pObjFactory->nIdentifier ); 253 else 254 pObjFactory->pNewObj = new FmFormObj( pObjFactory->nIdentifier ); 255 256 // initialize some properties which we want to differ from the defaults 257 for ( PropertyValueArray::const_iterator aInitProp = aInitialProperties.begin(); 258 aInitProp != aInitialProperties.end(); 259 ++aInitProp 260 ) 261 { 262 lcl_initProperty( 263 static_cast< FmFormObj* >( pObjFactory->pNewObj ), 264 aInitProp->first, 265 aInitProp->second 266 ); 267 } 268 } 269 270 return 0; 271 } 272 273 274 275