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