1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sw.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <cmdid.h> 32*cdf0e10cSrcweir #include <hintids.hxx> 33*cdf0e10cSrcweir #include <svl/stritem.hxx> 34*cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 35*cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp> 36*cdf0e10cSrcweir #include <com/sun/star/text/XDefaultNumberingProvider.hpp> 37*cdf0e10cSrcweir #include <com/sun/star/text/XNumberingTypeInfo.hpp> 38*cdf0e10cSrcweir #include <com/sun/star/style/NumberingType.hpp> 39*cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 40*cdf0e10cSrcweir #include <com/sun/star/sdbc/XConnection.hpp> 41*cdf0e10cSrcweir #include <com/sun/star/sdbc/XDataSource.hpp> 42*cdf0e10cSrcweir #include <com/sun/star/uri/XUriReferenceFactory.hpp> 43*cdf0e10cSrcweir #include <com/sun/star/uri/XVndSunStarScriptUrl.hpp> 44*cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 45*cdf0e10cSrcweir #include <editeng/unolingu.hxx> 46*cdf0e10cSrcweir #include <unotools/localedatawrapper.hxx> 47*cdf0e10cSrcweir #include <sfx2/dispatch.hxx> 48*cdf0e10cSrcweir #include <sfx2/objsh.hxx> 49*cdf0e10cSrcweir #include <sfx2/linkmgr.hxx> 50*cdf0e10cSrcweir #include <sfx2/app.hxx> 51*cdf0e10cSrcweir #include <basic/basmgr.hxx> 52*cdf0e10cSrcweir #include <editeng/langitem.hxx> 53*cdf0e10cSrcweir #include <svl/macitem.hxx> 54*cdf0e10cSrcweir #include <basic/sbmod.hxx> 55*cdf0e10cSrcweir #include <fmtrfmrk.hxx> 56*cdf0e10cSrcweir #include <basic/sbmeth.hxx> 57*cdf0e10cSrcweir #include <basic/sbx.hxx> 58*cdf0e10cSrcweir #include <svl/zforlist.hxx> 59*cdf0e10cSrcweir #include <svl/zformat.hxx> 60*cdf0e10cSrcweir #include <vcl/mnemonic.hxx> 61*cdf0e10cSrcweir #include <view.hxx> 62*cdf0e10cSrcweir #include <wrtsh.hxx> // Actives Fenster 63*cdf0e10cSrcweir #include <doc.hxx> // Actives Fenster 64*cdf0e10cSrcweir #include <docsh.hxx> // Actives Fenster 65*cdf0e10cSrcweir #include <swmodule.hxx> 66*cdf0e10cSrcweir #include <charatr.hxx> 67*cdf0e10cSrcweir #include <fmtinfmt.hxx> 68*cdf0e10cSrcweir #include <cellatr.hxx> 69*cdf0e10cSrcweir #include <dbmgr.hxx> 70*cdf0e10cSrcweir #include <shellres.hxx> 71*cdf0e10cSrcweir #include <fldbas.hxx> 72*cdf0e10cSrcweir #include <docufld.hxx> 73*cdf0e10cSrcweir #include <chpfld.hxx> 74*cdf0e10cSrcweir #include <ddefld.hxx> 75*cdf0e10cSrcweir #include <expfld.hxx> 76*cdf0e10cSrcweir #include <reffld.hxx> 77*cdf0e10cSrcweir #include <usrfld.hxx> 78*cdf0e10cSrcweir #include <dbfld.hxx> 79*cdf0e10cSrcweir #include <authfld.hxx> 80*cdf0e10cSrcweir #include <flddat.hxx> 81*cdf0e10cSrcweir #include <fldmgr.hxx> 82*cdf0e10cSrcweir #include <crsskip.hxx> 83*cdf0e10cSrcweir #include <flddropdown.hxx> 84*cdf0e10cSrcweir #include <fldui.hrc> 85*cdf0e10cSrcweir #include <tox.hxx> 86*cdf0e10cSrcweir 87*cdf0e10cSrcweir using rtl::OUString; 88*cdf0e10cSrcweir using namespace com::sun::star::uno; 89*cdf0e10cSrcweir using namespace com::sun::star::container; 90*cdf0e10cSrcweir using namespace com::sun::star::lang; 91*cdf0e10cSrcweir using namespace com::sun::star::beans; 92*cdf0e10cSrcweir using namespace com::sun::star::text; 93*cdf0e10cSrcweir using namespace com::sun::star::style; 94*cdf0e10cSrcweir using namespace com::sun::star::sdbc; 95*cdf0e10cSrcweir using namespace ::com::sun::star; 96*cdf0e10cSrcweir using namespace nsSwDocInfoSubType; 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir /*-------------------------------------------------------------------- 99*cdf0e10cSrcweir Beschreibung: Gruppen der Felder 100*cdf0e10cSrcweir --------------------------------------------------------------------*/ 101*cdf0e10cSrcweir enum 102*cdf0e10cSrcweir { 103*cdf0e10cSrcweir GRP_DOC_BEGIN = 0, 104*cdf0e10cSrcweir GRP_DOC_END = GRP_DOC_BEGIN + 11, 105*cdf0e10cSrcweir 106*cdf0e10cSrcweir GRP_FKT_BEGIN = GRP_DOC_END, 107*cdf0e10cSrcweir GRP_FKT_END = GRP_FKT_BEGIN + 8, 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir GRP_REF_BEGIN = GRP_FKT_END, 110*cdf0e10cSrcweir GRP_REF_END = GRP_REF_BEGIN + 2, 111*cdf0e10cSrcweir 112*cdf0e10cSrcweir GRP_REG_BEGIN = GRP_REF_END, 113*cdf0e10cSrcweir GRP_REG_END = GRP_REG_BEGIN + 1, 114*cdf0e10cSrcweir 115*cdf0e10cSrcweir GRP_DB_BEGIN = GRP_REG_END, 116*cdf0e10cSrcweir GRP_DB_END = GRP_DB_BEGIN + 5, 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir GRP_VAR_BEGIN = GRP_DB_END, 119*cdf0e10cSrcweir GRP_VAR_END = GRP_VAR_BEGIN + 9 120*cdf0e10cSrcweir }; 121*cdf0e10cSrcweir 122*cdf0e10cSrcweir enum 123*cdf0e10cSrcweir { 124*cdf0e10cSrcweir GRP_WEB_DOC_BEGIN = 0, 125*cdf0e10cSrcweir GRP_WEB_DOC_END = GRP_WEB_DOC_BEGIN + 9, 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir GRP_WEB_FKT_BEGIN = GRP_WEB_DOC_END + 2, 128*cdf0e10cSrcweir GRP_WEB_FKT_END = GRP_WEB_FKT_BEGIN + 0, // Die Gruppe ist leer! 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir GRP_WEB_REF_BEGIN = GRP_WEB_FKT_END + 6, // Die Gruppe ist leer! 131*cdf0e10cSrcweir GRP_WEB_REF_END = GRP_WEB_REF_BEGIN + 0, 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir GRP_WEB_REG_BEGIN = GRP_WEB_REF_END + 2, 134*cdf0e10cSrcweir GRP_WEB_REG_END = GRP_WEB_REG_BEGIN + 1, 135*cdf0e10cSrcweir 136*cdf0e10cSrcweir GRP_WEB_DB_BEGIN = GRP_WEB_REG_END, // Die Gruppe ist leer! 137*cdf0e10cSrcweir GRP_WEB_DB_END = GRP_WEB_DB_BEGIN + 0, 138*cdf0e10cSrcweir 139*cdf0e10cSrcweir GRP_WEB_VAR_BEGIN = GRP_WEB_DB_END + 5, 140*cdf0e10cSrcweir GRP_WEB_VAR_END = GRP_WEB_VAR_BEGIN + 1 141*cdf0e10cSrcweir }; 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir /*-------------------------------------------------------------------- 144*cdf0e10cSrcweir Beschreibung: Formate in der richtigen Reihenfolge 145*cdf0e10cSrcweir --------------------------------------------------------------------*/ 146*cdf0e10cSrcweir static const sal_uInt16 __FAR_DATA aSetFmt[] = 147*cdf0e10cSrcweir { 148*cdf0e10cSrcweir // die Reihenfolge muss zu Beginn mit den ResourceIds fuer FMT_SETVAR_??? 149*cdf0e10cSrcweir // uebereinstimmen 150*cdf0e10cSrcweir 0, 151*cdf0e10cSrcweir 0 152*cdf0e10cSrcweir }; 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir static const sal_uInt16 __FAR_DATA aGetFmt[] = 155*cdf0e10cSrcweir { 156*cdf0e10cSrcweir // die Reihenfolge muss zu Beginn mit den ResourceIds fuer FMT_GETVAR_??? 157*cdf0e10cSrcweir // uebereinstimmen 158*cdf0e10cSrcweir 0 159*cdf0e10cSrcweir }; 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir static const sal_uInt16 __FAR_DATA aUsrFmt[] = 162*cdf0e10cSrcweir { 163*cdf0e10cSrcweir // die Reihenfolge muss zu Beginn mit den ResourceIds fuer FMT_SETVAR_??? 164*cdf0e10cSrcweir // uebereinstimmen 165*cdf0e10cSrcweir 0, 166*cdf0e10cSrcweir nsSwExtendedSubType::SUB_CMD 167*cdf0e10cSrcweir }; 168*cdf0e10cSrcweir 169*cdf0e10cSrcweir static const sal_uInt16 __FAR_DATA aDBFmt[] = 170*cdf0e10cSrcweir { 171*cdf0e10cSrcweir // die Reihenfolge muss zu Beginn mit den ResourceIds fuer FMT_DBFLD_??? 172*cdf0e10cSrcweir // uebereinstimmen 173*cdf0e10cSrcweir nsSwExtendedSubType::SUB_OWN_FMT 174*cdf0e10cSrcweir }; 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir static const sal_uInt16 VF_COUNT = sizeof(aGetFmt) / sizeof(sal_uInt16); 177*cdf0e10cSrcweir static const sal_uInt16 VF_USR_COUNT = sizeof(aUsrFmt) / sizeof(sal_uInt16); 178*cdf0e10cSrcweir static const sal_uInt16 VF_DB_COUNT = sizeof(aDBFmt) / sizeof(sal_uInt16); 179*cdf0e10cSrcweir 180*cdf0e10cSrcweir /*-------------------------------------------------------------------- 181*cdf0e10cSrcweir Beschreibung: Feldtypen und Subtypes 182*cdf0e10cSrcweir --------------------------------------------------------------------*/ 183*cdf0e10cSrcweir struct SwFldPack 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir sal_uInt16 nTypeId; 186*cdf0e10cSrcweir 187*cdf0e10cSrcweir sal_uInt16 nSubTypeStart; 188*cdf0e10cSrcweir sal_uInt16 nSubTypeEnd; 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir sal_uLong nFmtBegin; 191*cdf0e10cSrcweir sal_uLong nFmtEnd; 192*cdf0e10cSrcweir }; 193*cdf0e10cSrcweir 194*cdf0e10cSrcweir /*-------------------------------------------------------------------- 195*cdf0e10cSrcweir Beschreibung: Strings und Formate 196*cdf0e10cSrcweir --------------------------------------------------------------------*/ 197*cdf0e10cSrcweir static const SwFldPack __FAR_DATA aSwFlds[] = 198*cdf0e10cSrcweir { 199*cdf0e10cSrcweir // Dokument 200*cdf0e10cSrcweir { TYP_EXTUSERFLD, FLD_EU_BEGIN, FLD_EU_END, 0, 0 }, 201*cdf0e10cSrcweir { TYP_AUTHORFLD, 0, 0, FMT_AUTHOR_BEGIN, FMT_AUTHOR_END }, 202*cdf0e10cSrcweir { TYP_DATEFLD, FLD_DATE_BEGIN, FLD_DATE_END, 0, 0 }, 203*cdf0e10cSrcweir { TYP_TIMEFLD, FLD_TIME_BEGIN, FLD_TIME_END, 0, 0 }, 204*cdf0e10cSrcweir { TYP_PAGENUMBERFLD, 0, 0, FMT_NUM_BEGIN, FMT_NUM_END-1 }, 205*cdf0e10cSrcweir { TYP_NEXTPAGEFLD, 0, 0, FMT_NUM_BEGIN, FMT_NUM_END }, 206*cdf0e10cSrcweir { TYP_PREVPAGEFLD, 0, 0, FMT_NUM_BEGIN, FMT_NUM_END }, 207*cdf0e10cSrcweir { TYP_FILENAMEFLD, 0, 0, FMT_FF_BEGIN, FMT_FF_END }, 208*cdf0e10cSrcweir { TYP_DOCSTATFLD, FLD_STAT_BEGIN, FLD_STAT_END, FMT_NUM_BEGIN, FMT_NUM_END-1 }, 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir { TYP_CHAPTERFLD, 0, 0, FMT_CHAPTER_BEGIN, FMT_CHAPTER_END }, 211*cdf0e10cSrcweir { TYP_TEMPLNAMEFLD, 0, 0, FMT_FF_BEGIN, FMT_FF_END }, 212*cdf0e10cSrcweir 213*cdf0e10cSrcweir // Funktion 214*cdf0e10cSrcweir { TYP_CONDTXTFLD, 0, 0, 0, 0 }, 215*cdf0e10cSrcweir { TYP_DROPDOWN, 0, 0, 0, 0 }, 216*cdf0e10cSrcweir { TYP_INPUTFLD, FLD_INPUT_BEGIN, FLD_INPUT_END, 0, 0 }, 217*cdf0e10cSrcweir { TYP_MACROFLD, 0, 0, 0, 0 }, 218*cdf0e10cSrcweir { TYP_JUMPEDITFLD, 0, 0, FMT_MARK_BEGIN, FMT_MARK_END }, 219*cdf0e10cSrcweir { TYP_COMBINED_CHARS, 0, 0, 0, 0 }, 220*cdf0e10cSrcweir { TYP_HIDDENTXTFLD, 0, 0, 0, 0 }, 221*cdf0e10cSrcweir { TYP_HIDDENPARAFLD, 0, 0, 0, 0 }, 222*cdf0e10cSrcweir 223*cdf0e10cSrcweir // Referenzen 224*cdf0e10cSrcweir { TYP_SETREFFLD, 0, 0, 0, 0 }, 225*cdf0e10cSrcweir { TYP_GETREFFLD, 0, 0, FMT_REF_BEGIN, FMT_REF_END }, 226*cdf0e10cSrcweir 227*cdf0e10cSrcweir // Ablage 228*cdf0e10cSrcweir { TYP_DOCINFOFLD, 0, 0, FMT_REG_BEGIN, FMT_REG_END }, 229*cdf0e10cSrcweir 230*cdf0e10cSrcweir // Datenbank 231*cdf0e10cSrcweir { TYP_DBFLD, 0, 0, FMT_DBFLD_BEGIN, FMT_DBFLD_END }, 232*cdf0e10cSrcweir { TYP_DBNEXTSETFLD, 0, 0, 0, 0 }, 233*cdf0e10cSrcweir { TYP_DBNUMSETFLD, 0, 0, 0, 0 }, 234*cdf0e10cSrcweir { TYP_DBSETNUMBERFLD, 0, 0, FMT_NUM_BEGIN, FMT_NUM_END-2 }, 235*cdf0e10cSrcweir { TYP_DBNAMEFLD, 0, 0, 0, 0 }, 236*cdf0e10cSrcweir 237*cdf0e10cSrcweir // Variablen 238*cdf0e10cSrcweir { TYP_SETFLD, 0, 0, FMT_SETVAR_BEGIN, FMT_SETVAR_END }, 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir { TYP_GETFLD, 0, 0, FMT_GETVAR_BEGIN, FMT_GETVAR_END }, 241*cdf0e10cSrcweir { TYP_DDEFLD, 0, 0, FMT_DDE_BEGIN, FMT_DDE_END }, 242*cdf0e10cSrcweir { TYP_FORMELFLD, 0, 0, FMT_GETVAR_BEGIN, FMT_GETVAR_END }, 243*cdf0e10cSrcweir { TYP_INPUTFLD, FLD_INPUT_BEGIN, FLD_INPUT_END, 0, 0 }, 244*cdf0e10cSrcweir { TYP_SEQFLD, 0, 0, FMT_NUM_BEGIN, FMT_NUM_END-2 }, 245*cdf0e10cSrcweir { TYP_SETREFPAGEFLD, FLD_PAGEREF_BEGIN, FLD_PAGEREF_END,0, 0 }, 246*cdf0e10cSrcweir { TYP_GETREFPAGEFLD, 0, 0, FMT_NUM_BEGIN, FMT_NUM_END-1 }, 247*cdf0e10cSrcweir { TYP_USERFLD, 0, 0, FMT_USERVAR_BEGIN, FMT_USERVAR_END } 248*cdf0e10cSrcweir }; 249*cdf0e10cSrcweir 250*cdf0e10cSrcweir /*-------------------------------------------------------------------- 251*cdf0e10cSrcweir Beschreibung: Zugriff auf die Shell 252*cdf0e10cSrcweir --------------------------------------------------------------------*/ 253*cdf0e10cSrcweir 254*cdf0e10cSrcweir static SwWrtShell* lcl_GetShell() 255*cdf0e10cSrcweir { 256*cdf0e10cSrcweir SwView* pView; 257*cdf0e10cSrcweir if ( 0 != (pView = ::GetActiveView()) ) 258*cdf0e10cSrcweir return pView->GetWrtShellPtr(); 259*cdf0e10cSrcweir DBG_ERROR("no current shell found!"); 260*cdf0e10cSrcweir return 0; 261*cdf0e10cSrcweir } 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir inline sal_uInt16 GetPackCount() { return sizeof(aSwFlds) / sizeof(SwFldPack); } 264*cdf0e10cSrcweir 265*cdf0e10cSrcweir /*-------------------------------------------------------------------- 266*cdf0e10cSrcweir Beschreibung: FieldManager regelt das Einfuegen und Updaten 267*cdf0e10cSrcweir von Feldern 268*cdf0e10cSrcweir --------------------------------------------------------------------*/ 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir SwFldMgr::SwFldMgr(SwWrtShell* pSh ) : 271*cdf0e10cSrcweir pModule(0), 272*cdf0e10cSrcweir pMacroItem(0), 273*cdf0e10cSrcweir pWrtShell(pSh), 274*cdf0e10cSrcweir bEvalExp(sal_True) 275*cdf0e10cSrcweir { 276*cdf0e10cSrcweir // aktuelles Feld ermitteln falls vorhanden 277*cdf0e10cSrcweir GetCurFld(); 278*cdf0e10cSrcweir } 279*cdf0e10cSrcweir 280*cdf0e10cSrcweir 281*cdf0e10cSrcweir SwFldMgr::~SwFldMgr() 282*cdf0e10cSrcweir { 283*cdf0e10cSrcweir } 284*cdf0e10cSrcweir 285*cdf0e10cSrcweir /*-------------------------------------------------------------------- 286*cdf0e10cSrcweir Beschreibung: RefMark ueber Namen organisieren 287*cdf0e10cSrcweir --------------------------------------------------------------------*/ 288*cdf0e10cSrcweir 289*cdf0e10cSrcweir sal_Bool SwFldMgr::CanInsertRefMark( const String& rStr ) 290*cdf0e10cSrcweir { 291*cdf0e10cSrcweir sal_Bool bRet = sal_False; 292*cdf0e10cSrcweir SwWrtShell *pSh = pWrtShell ? pWrtShell : lcl_GetShell(); 293*cdf0e10cSrcweir DBG_ASSERT(pSh, "no SwWrtShell found"); 294*cdf0e10cSrcweir if(pSh) 295*cdf0e10cSrcweir { 296*cdf0e10cSrcweir sal_uInt16 nCnt = pSh->GetCrsrCnt(); 297*cdf0e10cSrcweir 298*cdf0e10cSrcweir // der letzte Crsr muss keine aufgespannte Selektion 299*cdf0e10cSrcweir if( 1 < nCnt && !pSh->SwCrsrShell::HasSelection() ) 300*cdf0e10cSrcweir --nCnt; 301*cdf0e10cSrcweir 302*cdf0e10cSrcweir bRet = 2 > nCnt && 0 == pSh->GetRefMark( rStr ); 303*cdf0e10cSrcweir } 304*cdf0e10cSrcweir return bRet; 305*cdf0e10cSrcweir } 306*cdf0e10cSrcweir 307*cdf0e10cSrcweir /*-------------------------------------------------------------------- 308*cdf0e10cSrcweir Beschreibung: Zugriff ueber ResIds 309*cdf0e10cSrcweir --------------------------------------------------------------------*/ 310*cdf0e10cSrcweir 311*cdf0e10cSrcweir void SwFldMgr::RemoveFldType(sal_uInt16 nResId, const String& rName ) 312*cdf0e10cSrcweir { 313*cdf0e10cSrcweir SwWrtShell * pSh = pWrtShell ? pWrtShell : lcl_GetShell(); 314*cdf0e10cSrcweir DBG_ASSERT(pSh, "no SwWrtShell found"); 315*cdf0e10cSrcweir if( pSh ) 316*cdf0e10cSrcweir pSh->RemoveFldType(nResId, rName); 317*cdf0e10cSrcweir } 318*cdf0e10cSrcweir 319*cdf0e10cSrcweir sal_uInt16 SwFldMgr::GetFldTypeCount(sal_uInt16 nResId) const 320*cdf0e10cSrcweir { 321*cdf0e10cSrcweir SwWrtShell * pSh = pWrtShell ? pWrtShell : lcl_GetShell(); 322*cdf0e10cSrcweir DBG_ASSERT(pSh, "no SwWrtShell found"); 323*cdf0e10cSrcweir return pSh ? pSh->GetFldTypeCount(nResId) : 0; 324*cdf0e10cSrcweir } 325*cdf0e10cSrcweir 326*cdf0e10cSrcweir 327*cdf0e10cSrcweir SwFieldType* SwFldMgr::GetFldType(sal_uInt16 nResId, sal_uInt16 nId) const 328*cdf0e10cSrcweir { 329*cdf0e10cSrcweir SwWrtShell * pSh = pWrtShell ? pWrtShell : lcl_GetShell(); 330*cdf0e10cSrcweir DBG_ASSERT(pSh, "no SwWrtShell found"); 331*cdf0e10cSrcweir return pSh ? pSh->GetFldType(nId, nResId) : 0; 332*cdf0e10cSrcweir } 333*cdf0e10cSrcweir 334*cdf0e10cSrcweir 335*cdf0e10cSrcweir SwFieldType* SwFldMgr::GetFldType(sal_uInt16 nResId, const String& rName) const 336*cdf0e10cSrcweir { 337*cdf0e10cSrcweir SwWrtShell * pSh = pWrtShell ? pWrtShell : lcl_GetShell(); 338*cdf0e10cSrcweir DBG_ASSERT(pSh, "no SwWrtShell found"); 339*cdf0e10cSrcweir return pSh ? pSh->GetFldType(nResId, rName) : 0; 340*cdf0e10cSrcweir } 341*cdf0e10cSrcweir 342*cdf0e10cSrcweir 343*cdf0e10cSrcweir /*-------------------------------------------------------------------- 344*cdf0e10cSrcweir Beschreibung: Aktuelles Feld ermitteln 345*cdf0e10cSrcweir --------------------------------------------------------------------*/ 346*cdf0e10cSrcweir SwField* SwFldMgr::GetCurFld() 347*cdf0e10cSrcweir { 348*cdf0e10cSrcweir SwWrtShell *pSh = pWrtShell ? pWrtShell : ::lcl_GetShell(); 349*cdf0e10cSrcweir if ( pSh ) 350*cdf0e10cSrcweir pCurFld = pSh->GetCurFld(); 351*cdf0e10cSrcweir else 352*cdf0e10cSrcweir pCurFld = NULL; 353*cdf0e10cSrcweir 354*cdf0e10cSrcweir // Strings und Format initialisieren 355*cdf0e10cSrcweir // 356*cdf0e10cSrcweir aCurPar1.Erase(); 357*cdf0e10cSrcweir aCurPar2.Erase(); 358*cdf0e10cSrcweir sCurFrame.Erase(); 359*cdf0e10cSrcweir nCurFmt = 0; 360*cdf0e10cSrcweir 361*cdf0e10cSrcweir if(!pCurFld) 362*cdf0e10cSrcweir return 0; 363*cdf0e10cSrcweir 364*cdf0e10cSrcweir // Aktuelle Werte aufbereiten Parameter 1 und Parameter 2 365*cdf0e10cSrcweir // als auch das Format ermitteln 366*cdf0e10cSrcweir // 367*cdf0e10cSrcweir const sal_uInt16 nTypeId = pCurFld->GetTypeId(); 368*cdf0e10cSrcweir 369*cdf0e10cSrcweir nCurFmt = pCurFld->GetFormat(); 370*cdf0e10cSrcweir aCurPar1 = pCurFld->GetPar1(); 371*cdf0e10cSrcweir aCurPar2 = pCurFld->GetPar2(); 372*cdf0e10cSrcweir 373*cdf0e10cSrcweir switch( nTypeId ) 374*cdf0e10cSrcweir { 375*cdf0e10cSrcweir case TYP_PAGENUMBERFLD: 376*cdf0e10cSrcweir case TYP_NEXTPAGEFLD: 377*cdf0e10cSrcweir case TYP_PREVPAGEFLD: 378*cdf0e10cSrcweir case TYP_GETREFPAGEFLD: 379*cdf0e10cSrcweir if( nCurFmt == SVX_NUM_PAGEDESC ) 380*cdf0e10cSrcweir nCurFmt -= 2; 381*cdf0e10cSrcweir break; 382*cdf0e10cSrcweir } 383*cdf0e10cSrcweir return pCurFld; 384*cdf0e10cSrcweir } 385*cdf0e10cSrcweir 386*cdf0e10cSrcweir /*-------------------------------------------------------------------- 387*cdf0e10cSrcweir Beschreibung: Gruppen-Bereich liefern 388*cdf0e10cSrcweir --------------------------------------------------------------------*/ 389*cdf0e10cSrcweir 390*cdf0e10cSrcweir 391*cdf0e10cSrcweir const SwFldGroupRgn& SwFldMgr::GetGroupRange(sal_Bool bHtmlMode, sal_uInt16 nGrpId) const 392*cdf0e10cSrcweir { 393*cdf0e10cSrcweir static SwFldGroupRgn __READONLY_DATA aRanges[] = 394*cdf0e10cSrcweir { 395*cdf0e10cSrcweir { /* Dokument */ GRP_DOC_BEGIN, GRP_DOC_END }, 396*cdf0e10cSrcweir { /* Funktionen */ GRP_FKT_BEGIN, GRP_FKT_END }, 397*cdf0e10cSrcweir { /* Referenzen */ GRP_REF_BEGIN, GRP_REF_END }, 398*cdf0e10cSrcweir { /* Ablage */ GRP_REG_BEGIN, GRP_REG_END }, 399*cdf0e10cSrcweir { /* DB */ GRP_DB_BEGIN, GRP_DB_END }, 400*cdf0e10cSrcweir { /* User */ GRP_VAR_BEGIN, GRP_VAR_END } 401*cdf0e10cSrcweir }; 402*cdf0e10cSrcweir static SwFldGroupRgn __READONLY_DATA aWebRanges[] = 403*cdf0e10cSrcweir { 404*cdf0e10cSrcweir { /* Dokument */ GRP_WEB_DOC_BEGIN, GRP_WEB_DOC_END }, 405*cdf0e10cSrcweir { /* Funktionen */ GRP_WEB_FKT_BEGIN, GRP_WEB_FKT_END }, 406*cdf0e10cSrcweir { /* Referenzen */ GRP_WEB_REF_BEGIN, GRP_WEB_REF_END }, 407*cdf0e10cSrcweir { /* Ablage */ GRP_WEB_REG_BEGIN, GRP_WEB_REG_END }, 408*cdf0e10cSrcweir { /* DB */ GRP_WEB_DB_BEGIN, GRP_WEB_DB_END }, 409*cdf0e10cSrcweir { /* User */ GRP_WEB_VAR_BEGIN, GRP_WEB_VAR_END } 410*cdf0e10cSrcweir }; 411*cdf0e10cSrcweir 412*cdf0e10cSrcweir if (bHtmlMode) 413*cdf0e10cSrcweir return aWebRanges[(sal_uInt16)nGrpId]; 414*cdf0e10cSrcweir else 415*cdf0e10cSrcweir return aRanges[(sal_uInt16)nGrpId]; 416*cdf0e10cSrcweir } 417*cdf0e10cSrcweir 418*cdf0e10cSrcweir /*-------------------------------------------------------------------- 419*cdf0e10cSrcweir Beschreibung: GroupId bestimmen 420*cdf0e10cSrcweir --------------------------------------------------------------------*/ 421*cdf0e10cSrcweir 422*cdf0e10cSrcweir sal_uInt16 SwFldMgr::GetGroup(sal_Bool bHtmlMode, sal_uInt16 nTypeId, sal_uInt16 nSubType) const 423*cdf0e10cSrcweir { 424*cdf0e10cSrcweir if (nTypeId == TYP_SETINPFLD) 425*cdf0e10cSrcweir nTypeId = TYP_SETFLD; 426*cdf0e10cSrcweir 427*cdf0e10cSrcweir if (nTypeId == TYP_INPUTFLD && (nSubType & INP_USR)) 428*cdf0e10cSrcweir nTypeId = TYP_USERFLD; 429*cdf0e10cSrcweir 430*cdf0e10cSrcweir if (nTypeId == TYP_FIXDATEFLD) 431*cdf0e10cSrcweir nTypeId = TYP_DATEFLD; 432*cdf0e10cSrcweir 433*cdf0e10cSrcweir if (nTypeId == TYP_FIXTIMEFLD) 434*cdf0e10cSrcweir nTypeId = TYP_TIMEFLD; 435*cdf0e10cSrcweir 436*cdf0e10cSrcweir for (sal_uInt16 i = GRP_DOC; i <= GRP_VAR; i++) 437*cdf0e10cSrcweir { 438*cdf0e10cSrcweir const SwFldGroupRgn& rRange = GetGroupRange(bHtmlMode, i); 439*cdf0e10cSrcweir for (sal_uInt16 nPos = rRange.nStart; nPos < rRange.nEnd; nPos++) 440*cdf0e10cSrcweir { 441*cdf0e10cSrcweir if (aSwFlds[nPos].nTypeId == nTypeId) 442*cdf0e10cSrcweir return i; 443*cdf0e10cSrcweir } 444*cdf0e10cSrcweir } 445*cdf0e10cSrcweir return USHRT_MAX; 446*cdf0e10cSrcweir } 447*cdf0e10cSrcweir 448*cdf0e10cSrcweir /*-------------------------------------------------------------------- 449*cdf0e10cSrcweir Beschreibung: Namen zur TypeId ermitteln 450*cdf0e10cSrcweir ZUGRIFF ueber TYP_.... 451*cdf0e10cSrcweir --------------------------------------------------------------------*/ 452*cdf0e10cSrcweir 453*cdf0e10cSrcweir 454*cdf0e10cSrcweir sal_uInt16 SwFldMgr::GetTypeId(sal_uInt16 nPos) 455*cdf0e10cSrcweir { 456*cdf0e10cSrcweir ASSERT(nPos < ::GetPackCount(), "unzulaessige Pos"); 457*cdf0e10cSrcweir return aSwFlds[ nPos ].nTypeId; 458*cdf0e10cSrcweir } 459*cdf0e10cSrcweir 460*cdf0e10cSrcweir 461*cdf0e10cSrcweir const String& SwFldMgr::GetTypeStr(sal_uInt16 nPos) 462*cdf0e10cSrcweir { 463*cdf0e10cSrcweir ASSERT(nPos < ::GetPackCount(), "unzulaessige TypeId"); 464*cdf0e10cSrcweir 465*cdf0e10cSrcweir sal_uInt16 nFldWh = aSwFlds[ nPos ].nTypeId; 466*cdf0e10cSrcweir 467*cdf0e10cSrcweir // Sonderbehandlung fuer Datum/Zeit Felder (ohne var/fix) 468*cdf0e10cSrcweir if( TYP_DATEFLD == nFldWh ) 469*cdf0e10cSrcweir { 470*cdf0e10cSrcweir static String g_aDate( SW_RES( STR_DATEFLD ) ); 471*cdf0e10cSrcweir return g_aDate; 472*cdf0e10cSrcweir } 473*cdf0e10cSrcweir if( TYP_TIMEFLD == nFldWh ) 474*cdf0e10cSrcweir { 475*cdf0e10cSrcweir static String g_aTime( SW_RES( STR_TIMEFLD ) ); 476*cdf0e10cSrcweir return g_aTime; 477*cdf0e10cSrcweir } 478*cdf0e10cSrcweir 479*cdf0e10cSrcweir return SwFieldType::GetTypeStr( nFldWh ); 480*cdf0e10cSrcweir } 481*cdf0e10cSrcweir 482*cdf0e10cSrcweir /*-------------------------------------------------------------------- 483*cdf0e10cSrcweir Beschreibung: Pos in der Liste bestimmen 484*cdf0e10cSrcweir --------------------------------------------------------------------*/ 485*cdf0e10cSrcweir 486*cdf0e10cSrcweir 487*cdf0e10cSrcweir sal_uInt16 SwFldMgr::GetPos(sal_uInt16 nTypeId) 488*cdf0e10cSrcweir { 489*cdf0e10cSrcweir switch( nTypeId ) 490*cdf0e10cSrcweir { 491*cdf0e10cSrcweir case TYP_FIXDATEFLD: nTypeId = TYP_DATEFLD; break; 492*cdf0e10cSrcweir case TYP_FIXTIMEFLD: nTypeId = TYP_TIMEFLD; break; 493*cdf0e10cSrcweir case TYP_SETINPFLD: nTypeId = TYP_SETFLD; break; 494*cdf0e10cSrcweir case TYP_USRINPFLD: nTypeId = TYP_USERFLD; break; 495*cdf0e10cSrcweir } 496*cdf0e10cSrcweir 497*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < GetPackCount(); i++) 498*cdf0e10cSrcweir if(aSwFlds[i].nTypeId == nTypeId) 499*cdf0e10cSrcweir return i; 500*cdf0e10cSrcweir 501*cdf0e10cSrcweir return USHRT_MAX; 502*cdf0e10cSrcweir } 503*cdf0e10cSrcweir 504*cdf0e10cSrcweir /*-------------------------------------------------------------------- 505*cdf0e10cSrcweir Beschreibung: Subtypen eines Feldes lokalisieren 506*cdf0e10cSrcweir --------------------------------------------------------------------*/ 507*cdf0e10cSrcweir 508*cdf0e10cSrcweir sal_Bool SwFldMgr::GetSubTypes(sal_uInt16 nTypeId, SvStringsDtor& rToFill) 509*cdf0e10cSrcweir { 510*cdf0e10cSrcweir sal_Bool bRet = sal_False; 511*cdf0e10cSrcweir SwWrtShell *pSh = pWrtShell ? pWrtShell : lcl_GetShell(); 512*cdf0e10cSrcweir DBG_ASSERT(pSh, "no SwWrtShell found"); 513*cdf0e10cSrcweir if(pSh) 514*cdf0e10cSrcweir { 515*cdf0e10cSrcweir const sal_uInt16 nPos = GetPos(nTypeId); 516*cdf0e10cSrcweir 517*cdf0e10cSrcweir switch(nTypeId) 518*cdf0e10cSrcweir { 519*cdf0e10cSrcweir case TYP_SETREFFLD: 520*cdf0e10cSrcweir case TYP_GETREFFLD: 521*cdf0e10cSrcweir { 522*cdf0e10cSrcweir // Referenzen sind keine Felder 523*cdf0e10cSrcweir pSh->GetRefMarks( &rToFill ); 524*cdf0e10cSrcweir break; 525*cdf0e10cSrcweir } 526*cdf0e10cSrcweir case TYP_MACROFLD: 527*cdf0e10cSrcweir { 528*cdf0e10cSrcweir break; 529*cdf0e10cSrcweir } 530*cdf0e10cSrcweir case TYP_INPUTFLD: 531*cdf0e10cSrcweir { String* pNew = new SW_RESSTR(aSwFlds[nPos].nSubTypeStart); 532*cdf0e10cSrcweir rToFill.Insert(pNew, rToFill.Count()); 533*cdf0e10cSrcweir // Weiter bei generischen Typen 534*cdf0e10cSrcweir } 535*cdf0e10cSrcweir case TYP_DDEFLD: 536*cdf0e10cSrcweir case TYP_SEQFLD: 537*cdf0e10cSrcweir case TYP_FORMELFLD: 538*cdf0e10cSrcweir case TYP_GETFLD: 539*cdf0e10cSrcweir case TYP_SETFLD: 540*cdf0e10cSrcweir case TYP_USERFLD: 541*cdf0e10cSrcweir { 542*cdf0e10cSrcweir 543*cdf0e10cSrcweir const sal_uInt16 nCount = pSh->GetFldTypeCount(); 544*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nCount; ++i) 545*cdf0e10cSrcweir { 546*cdf0e10cSrcweir SwFieldType* pFldType = pSh->GetFldType( i ); 547*cdf0e10cSrcweir const sal_uInt16 nWhich = pFldType->Which(); 548*cdf0e10cSrcweir 549*cdf0e10cSrcweir if((nTypeId == TYP_DDEFLD && pFldType->Which() == RES_DDEFLD) || 550*cdf0e10cSrcweir 551*cdf0e10cSrcweir (nTypeId == TYP_USERFLD && nWhich == RES_USERFLD) || 552*cdf0e10cSrcweir 553*cdf0e10cSrcweir (nTypeId == TYP_GETFLD && nWhich == RES_SETEXPFLD && 554*cdf0e10cSrcweir !(((SwSetExpFieldType*)pFldType)->GetType() & nsSwGetSetExpType::GSE_SEQ)) || 555*cdf0e10cSrcweir 556*cdf0e10cSrcweir (nTypeId == TYP_SETFLD && nWhich == RES_SETEXPFLD && 557*cdf0e10cSrcweir !(((SwSetExpFieldType*)pFldType)->GetType() & nsSwGetSetExpType::GSE_SEQ)) || 558*cdf0e10cSrcweir 559*cdf0e10cSrcweir (nTypeId == TYP_SEQFLD && nWhich == RES_SETEXPFLD && 560*cdf0e10cSrcweir (((SwSetExpFieldType*)pFldType)->GetType() & nsSwGetSetExpType::GSE_SEQ)) || 561*cdf0e10cSrcweir 562*cdf0e10cSrcweir ((nTypeId == TYP_INPUTFLD || nTypeId == TYP_FORMELFLD) && 563*cdf0e10cSrcweir (nWhich == RES_USERFLD || 564*cdf0e10cSrcweir (nWhich == RES_SETEXPFLD && 565*cdf0e10cSrcweir !(((SwSetExpFieldType*)pFldType)->GetType() & nsSwGetSetExpType::GSE_SEQ))) ) ) 566*cdf0e10cSrcweir { 567*cdf0e10cSrcweir String* pNew = new String(pFldType->GetName()); 568*cdf0e10cSrcweir rToFill.Insert(pNew, rToFill.Count()); 569*cdf0e10cSrcweir } 570*cdf0e10cSrcweir } 571*cdf0e10cSrcweir break; 572*cdf0e10cSrcweir } 573*cdf0e10cSrcweir case TYP_DBNEXTSETFLD: 574*cdf0e10cSrcweir case TYP_DBNUMSETFLD: 575*cdf0e10cSrcweir case TYP_DBNAMEFLD: 576*cdf0e10cSrcweir case TYP_DBSETNUMBERFLD: 577*cdf0e10cSrcweir break; 578*cdf0e10cSrcweir 579*cdf0e10cSrcweir default: 580*cdf0e10cSrcweir { 581*cdf0e10cSrcweir // statische SubTypes 582*cdf0e10cSrcweir if(nPos != USHRT_MAX) 583*cdf0e10cSrcweir { 584*cdf0e10cSrcweir sal_uInt16 nCount; 585*cdf0e10cSrcweir if (nTypeId == TYP_DOCINFOFLD) 586*cdf0e10cSrcweir nCount = DI_SUBTYPE_END - DI_SUBTYPE_BEGIN; 587*cdf0e10cSrcweir else 588*cdf0e10cSrcweir nCount = aSwFlds[nPos].nSubTypeEnd - aSwFlds[nPos].nSubTypeStart; 589*cdf0e10cSrcweir 590*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nCount; ++i) 591*cdf0e10cSrcweir { 592*cdf0e10cSrcweir String* pNew; 593*cdf0e10cSrcweir if (nTypeId == TYP_DOCINFOFLD) 594*cdf0e10cSrcweir { 595*cdf0e10cSrcweir if ( i == DI_CUSTOM ) 596*cdf0e10cSrcweir pNew = new String( String(SW_RES( STR_CUSTOM )) ); 597*cdf0e10cSrcweir else 598*cdf0e10cSrcweir pNew = new String(*ViewShell::GetShellRes()->aDocInfoLst[i]); 599*cdf0e10cSrcweir } 600*cdf0e10cSrcweir else 601*cdf0e10cSrcweir pNew = new SW_RESSTR(aSwFlds[nPos].nSubTypeStart + i); 602*cdf0e10cSrcweir 603*cdf0e10cSrcweir rToFill.Insert(pNew, rToFill.Count()); 604*cdf0e10cSrcweir } 605*cdf0e10cSrcweir } 606*cdf0e10cSrcweir } 607*cdf0e10cSrcweir } 608*cdf0e10cSrcweir bRet = sal_True; 609*cdf0e10cSrcweir } 610*cdf0e10cSrcweir return bRet; 611*cdf0e10cSrcweir } 612*cdf0e10cSrcweir 613*cdf0e10cSrcweir /*-------------------------------------------------------------------- 614*cdf0e10cSrcweir Beschreibung: Format ermitteln 615*cdf0e10cSrcweir ZUGRIFF ueber TYP_.... 616*cdf0e10cSrcweir --------------------------------------------------------------------*/ 617*cdf0e10cSrcweir 618*cdf0e10cSrcweir 619*cdf0e10cSrcweir sal_uInt16 SwFldMgr::GetFormatCount(sal_uInt16 nTypeId, sal_Bool bIsText, sal_Bool bHtmlMode) const 620*cdf0e10cSrcweir { 621*cdf0e10cSrcweir ASSERT(nTypeId < TYP_END, "unzulaessige TypeId"); 622*cdf0e10cSrcweir 623*cdf0e10cSrcweir { 624*cdf0e10cSrcweir const sal_uInt16 nPos = GetPos(nTypeId); 625*cdf0e10cSrcweir 626*cdf0e10cSrcweir if(nPos == USHRT_MAX || (bHtmlMode && nTypeId == TYP_SETFLD)) 627*cdf0e10cSrcweir return 0; 628*cdf0e10cSrcweir 629*cdf0e10cSrcweir sal_uLong nStart = aSwFlds[nPos].nFmtBegin; 630*cdf0e10cSrcweir sal_uLong nEnd = aSwFlds[nPos].nFmtEnd; 631*cdf0e10cSrcweir 632*cdf0e10cSrcweir if (bIsText && nEnd - nStart >= 2) 633*cdf0e10cSrcweir return 2; 634*cdf0e10cSrcweir 635*cdf0e10cSrcweir if (nTypeId == TYP_FILENAMEFLD) 636*cdf0e10cSrcweir nEnd -= 2; // Kein Bereich oder Vorlage 637*cdf0e10cSrcweir 638*cdf0e10cSrcweir switch(nStart) 639*cdf0e10cSrcweir { 640*cdf0e10cSrcweir case FMT_GETVAR_BEGIN: 641*cdf0e10cSrcweir case FMT_SETVAR_BEGIN: return VF_COUNT; 642*cdf0e10cSrcweir case FMT_USERVAR_BEGIN: return VF_USR_COUNT; 643*cdf0e10cSrcweir case FMT_DBFLD_BEGIN: return VF_DB_COUNT; 644*cdf0e10cSrcweir case FMT_NUM_BEGIN: 645*cdf0e10cSrcweir { 646*cdf0e10cSrcweir sal_uInt16 nCount = (sal_uInt16)(nEnd - nStart); 647*cdf0e10cSrcweir GetNumberingInfo(); 648*cdf0e10cSrcweir if(xNumberingInfo.is()) 649*cdf0e10cSrcweir { 650*cdf0e10cSrcweir Sequence<sal_Int16> aTypes = xNumberingInfo->getSupportedNumberingTypes(); 651*cdf0e10cSrcweir const sal_Int16* pTypes = aTypes.getConstArray(); 652*cdf0e10cSrcweir for(sal_Int32 nType = 0; nType < aTypes.getLength(); nType++) 653*cdf0e10cSrcweir { 654*cdf0e10cSrcweir sal_Int16 nCurrent = pTypes[nType]; 655*cdf0e10cSrcweir //skip all values below or equal to CHARS_LOWER_LETTER_N 656*cdf0e10cSrcweir if(nCurrent > NumberingType::CHARS_LOWER_LETTER_N) 657*cdf0e10cSrcweir { 658*cdf0e10cSrcweir // #i28073# it's not necessarily a sorted sequence 659*cdf0e10cSrcweir ++nCount; 660*cdf0e10cSrcweir } 661*cdf0e10cSrcweir } 662*cdf0e10cSrcweir } 663*cdf0e10cSrcweir return nCount; 664*cdf0e10cSrcweir } 665*cdf0e10cSrcweir 666*cdf0e10cSrcweir } 667*cdf0e10cSrcweir return (sal_uInt16)(nEnd - nStart); 668*cdf0e10cSrcweir } 669*cdf0e10cSrcweir } 670*cdf0e10cSrcweir 671*cdf0e10cSrcweir /*-------------------------------------------------------------------- 672*cdf0e10cSrcweir Beschreibung: FormatString zu einem Typ ermitteln 673*cdf0e10cSrcweir --------------------------------------------------------------------*/ 674*cdf0e10cSrcweir 675*cdf0e10cSrcweir 676*cdf0e10cSrcweir String SwFldMgr::GetFormatStr(sal_uInt16 nTypeId, sal_uLong nFormatId) const 677*cdf0e10cSrcweir { 678*cdf0e10cSrcweir String aRet; 679*cdf0e10cSrcweir ASSERT(nTypeId < TYP_END, "unzulaessige TypeId"); 680*cdf0e10cSrcweir 681*cdf0e10cSrcweir const sal_uInt16 nPos = GetPos(nTypeId); 682*cdf0e10cSrcweir 683*cdf0e10cSrcweir if(nPos == USHRT_MAX) 684*cdf0e10cSrcweir return aRet; 685*cdf0e10cSrcweir 686*cdf0e10cSrcweir sal_uLong nStart; 687*cdf0e10cSrcweir 688*cdf0e10cSrcweir nStart = aSwFlds[nPos].nFmtBegin; 689*cdf0e10cSrcweir 690*cdf0e10cSrcweir if (TYP_AUTHORFLD == nTypeId|| TYP_FILENAMEFLD == nTypeId) 691*cdf0e10cSrcweir nFormatId &= ~FF_FIXED; // Fixed-Flag ausmaskieren 692*cdf0e10cSrcweir 693*cdf0e10cSrcweir if((nStart + nFormatId) < aSwFlds[nPos].nFmtEnd) 694*cdf0e10cSrcweir aRet = SW_RESSTR((sal_uInt16)(nStart + nFormatId)); 695*cdf0e10cSrcweir else if( FMT_NUM_BEGIN == nStart) 696*cdf0e10cSrcweir { 697*cdf0e10cSrcweir if(xNumberingInfo.is()) 698*cdf0e10cSrcweir { 699*cdf0e10cSrcweir Sequence<sal_Int16> aTypes = xNumberingInfo->getSupportedNumberingTypes(); 700*cdf0e10cSrcweir const sal_Int16* pTypes = aTypes.getConstArray(); 701*cdf0e10cSrcweir sal_Int32 nOffset = aSwFlds[nPos].nFmtEnd - nStart; 702*cdf0e10cSrcweir sal_Int32 nValidEntry = 0; 703*cdf0e10cSrcweir for(sal_Int32 nType = 0; nType < aTypes.getLength(); nType++) 704*cdf0e10cSrcweir { 705*cdf0e10cSrcweir sal_Int16 nCurrent = pTypes[nType]; 706*cdf0e10cSrcweir if(nCurrent > NumberingType::CHARS_LOWER_LETTER_N) 707*cdf0e10cSrcweir { 708*cdf0e10cSrcweir if(nValidEntry == ((sal_Int32)nFormatId) - nOffset) 709*cdf0e10cSrcweir { 710*cdf0e10cSrcweir aRet = xNumberingInfo->getNumberingIdentifier( pTypes[nType] ); 711*cdf0e10cSrcweir break; 712*cdf0e10cSrcweir } 713*cdf0e10cSrcweir ++nValidEntry; 714*cdf0e10cSrcweir } 715*cdf0e10cSrcweir } 716*cdf0e10cSrcweir } 717*cdf0e10cSrcweir } 718*cdf0e10cSrcweir 719*cdf0e10cSrcweir return aRet; 720*cdf0e10cSrcweir } 721*cdf0e10cSrcweir 722*cdf0e10cSrcweir /*-------------------------------------------------------------------- 723*cdf0e10cSrcweir Beschreibung: FormatId aus Pseudo-ID ermitteln 724*cdf0e10cSrcweir --------------------------------------------------------------------*/ 725*cdf0e10cSrcweir 726*cdf0e10cSrcweir sal_uInt16 SwFldMgr::GetFormatId(sal_uInt16 nTypeId, sal_uLong nFormatId) const 727*cdf0e10cSrcweir { 728*cdf0e10cSrcweir sal_uInt16 nId = (sal_uInt16)nFormatId; 729*cdf0e10cSrcweir 730*cdf0e10cSrcweir switch( nTypeId ) 731*cdf0e10cSrcweir { 732*cdf0e10cSrcweir case TYP_DOCINFOFLD: 733*cdf0e10cSrcweir switch( aSwFlds[ GetPos( nTypeId ) ].nFmtBegin + nFormatId ) 734*cdf0e10cSrcweir { 735*cdf0e10cSrcweir case FMT_REG_AUTHOR: nId = DI_SUB_AUTHOR; break; 736*cdf0e10cSrcweir case FMT_REG_TIME: nId = DI_SUB_TIME; break; 737*cdf0e10cSrcweir case FMT_REG_DATE: nId = DI_SUB_DATE; break; 738*cdf0e10cSrcweir } 739*cdf0e10cSrcweir break; 740*cdf0e10cSrcweir 741*cdf0e10cSrcweir case TYP_PAGENUMBERFLD: 742*cdf0e10cSrcweir case TYP_NEXTPAGEFLD: 743*cdf0e10cSrcweir case TYP_PREVPAGEFLD: 744*cdf0e10cSrcweir case TYP_DOCSTATFLD: 745*cdf0e10cSrcweir case TYP_DBSETNUMBERFLD: 746*cdf0e10cSrcweir case TYP_SEQFLD: 747*cdf0e10cSrcweir case TYP_GETREFPAGEFLD: 748*cdf0e10cSrcweir { 749*cdf0e10cSrcweir sal_uInt16 nPos = GetPos( nTypeId ); 750*cdf0e10cSrcweir sal_uLong nBegin = aSwFlds[ nPos ].nFmtBegin; 751*cdf0e10cSrcweir sal_uLong nEnd = aSwFlds[nPos].nFmtEnd; 752*cdf0e10cSrcweir if((nBegin + nFormatId) < nEnd) 753*cdf0e10cSrcweir { 754*cdf0e10cSrcweir switch( nBegin + nFormatId ) 755*cdf0e10cSrcweir { 756*cdf0e10cSrcweir case FMT_NUM_ABC: nId = SVX_NUM_CHARS_UPPER_LETTER; break; 757*cdf0e10cSrcweir case FMT_NUM_SABC: nId = SVX_NUM_CHARS_LOWER_LETTER; break; 758*cdf0e10cSrcweir case FMT_NUM_ROMAN: nId = SVX_NUM_ROMAN_UPPER; break; 759*cdf0e10cSrcweir case FMT_NUM_SROMAN: nId = SVX_NUM_ROMAN_LOWER; break; 760*cdf0e10cSrcweir case FMT_NUM_ARABIC: nId = SVX_NUM_ARABIC; break; 761*cdf0e10cSrcweir case FMT_NUM_PAGEDESC: nId = SVX_NUM_PAGEDESC; break; 762*cdf0e10cSrcweir case FMT_NUM_PAGESPECIAL: nId = SVX_NUM_CHAR_SPECIAL; break; 763*cdf0e10cSrcweir case FMT_NUM_ABC_N: nId = SVX_NUM_CHARS_UPPER_LETTER_N; break; 764*cdf0e10cSrcweir case FMT_NUM_SABC_N: nId = SVX_NUM_CHARS_LOWER_LETTER_N; break; 765*cdf0e10cSrcweir } 766*cdf0e10cSrcweir } 767*cdf0e10cSrcweir else if(xNumberingInfo.is()) 768*cdf0e10cSrcweir { 769*cdf0e10cSrcweir Sequence<sal_Int16> aTypes = xNumberingInfo->getSupportedNumberingTypes(); 770*cdf0e10cSrcweir const sal_Int16* pTypes = aTypes.getConstArray(); 771*cdf0e10cSrcweir sal_Int32 nOffset = nEnd - nBegin; 772*cdf0e10cSrcweir sal_Int32 nValidEntry = 0; 773*cdf0e10cSrcweir for(sal_Int32 nType = 0; nType < aTypes.getLength(); nType++) 774*cdf0e10cSrcweir { 775*cdf0e10cSrcweir sal_Int16 nCurrent = pTypes[nType]; 776*cdf0e10cSrcweir if(nCurrent > NumberingType::CHARS_LOWER_LETTER_N) 777*cdf0e10cSrcweir { 778*cdf0e10cSrcweir if(nValidEntry == ((sal_Int32)nFormatId) - nOffset) 779*cdf0e10cSrcweir { 780*cdf0e10cSrcweir nId = pTypes[nType]; 781*cdf0e10cSrcweir break; 782*cdf0e10cSrcweir } 783*cdf0e10cSrcweir ++nValidEntry; 784*cdf0e10cSrcweir } 785*cdf0e10cSrcweir } 786*cdf0e10cSrcweir } 787*cdf0e10cSrcweir } 788*cdf0e10cSrcweir break; 789*cdf0e10cSrcweir case TYP_DDEFLD: 790*cdf0e10cSrcweir switch ( aSwFlds[ GetPos( nTypeId ) ].nFmtBegin + nFormatId ) 791*cdf0e10cSrcweir { 792*cdf0e10cSrcweir case FMT_DDE_NORMAL: nId = sfx2::LINKUPDATE_ONCALL; break; 793*cdf0e10cSrcweir case FMT_DDE_HOT: nId = sfx2::LINKUPDATE_ALWAYS; break; 794*cdf0e10cSrcweir } 795*cdf0e10cSrcweir break; 796*cdf0e10cSrcweir } 797*cdf0e10cSrcweir 798*cdf0e10cSrcweir return nId; 799*cdf0e10cSrcweir 800*cdf0e10cSrcweir } 801*cdf0e10cSrcweir 802*cdf0e10cSrcweir /*-------------------------------------------------------------------- 803*cdf0e10cSrcweir Beschreibung: Traveling 804*cdf0e10cSrcweir --------------------------------------------------------------------*/ 805*cdf0e10cSrcweir 806*cdf0e10cSrcweir 807*cdf0e10cSrcweir sal_Bool SwFldMgr::GoNextPrev( sal_Bool bNext, SwFieldType* pTyp ) 808*cdf0e10cSrcweir { 809*cdf0e10cSrcweir SwWrtShell* pSh = pWrtShell ? pWrtShell : ::lcl_GetShell(); 810*cdf0e10cSrcweir if(!pSh) 811*cdf0e10cSrcweir return sal_False; 812*cdf0e10cSrcweir 813*cdf0e10cSrcweir if( !pTyp && pCurFld ) 814*cdf0e10cSrcweir { 815*cdf0e10cSrcweir const sal_uInt16 nTypeId = pCurFld->GetTypeId(); 816*cdf0e10cSrcweir if( TYP_SETINPFLD == nTypeId || TYP_USRINPFLD == nTypeId ) 817*cdf0e10cSrcweir pTyp = pSh->GetFldType( 0, RES_INPUTFLD ); 818*cdf0e10cSrcweir else 819*cdf0e10cSrcweir pTyp = pCurFld->GetTyp(); 820*cdf0e10cSrcweir } 821*cdf0e10cSrcweir 822*cdf0e10cSrcweir if (pTyp && pTyp->Which() == RES_DBFLD) 823*cdf0e10cSrcweir { 824*cdf0e10cSrcweir // Fuer Feldbefehl-bearbeiten (alle DB-Felder anspringen) 825*cdf0e10cSrcweir return pSh->MoveFldType( 0, bNext, USHRT_MAX, RES_DBFLD ); 826*cdf0e10cSrcweir } 827*cdf0e10cSrcweir 828*cdf0e10cSrcweir return pTyp && pSh ? pSh->MoveFldType( pTyp, bNext ) : sal_False; 829*cdf0e10cSrcweir } 830*cdf0e10cSrcweir 831*cdf0e10cSrcweir /*-------------------------------------------------------------------- 832*cdf0e10cSrcweir Beschreibung: Feldtypen einfuegen 833*cdf0e10cSrcweir --------------------------------------------------------------------*/ 834*cdf0e10cSrcweir 835*cdf0e10cSrcweir 836*cdf0e10cSrcweir void SwFldMgr::InsertFldType(SwFieldType& rType) 837*cdf0e10cSrcweir { 838*cdf0e10cSrcweir SwWrtShell* pSh = pWrtShell ? pWrtShell : ::lcl_GetShell(); 839*cdf0e10cSrcweir DBG_ASSERT(pSh, "no SwWrtShell found"); 840*cdf0e10cSrcweir if(pSh) 841*cdf0e10cSrcweir pSh->InsertFldType(rType); 842*cdf0e10cSrcweir } 843*cdf0e10cSrcweir 844*cdf0e10cSrcweir /*-------------------------------------------------------------------- 845*cdf0e10cSrcweir Beschreibung: Aktuelle TypeId ermitteln 846*cdf0e10cSrcweir --------------------------------------------------------------------*/ 847*cdf0e10cSrcweir 848*cdf0e10cSrcweir 849*cdf0e10cSrcweir sal_uInt16 SwFldMgr::GetCurTypeId() const 850*cdf0e10cSrcweir { 851*cdf0e10cSrcweir return pCurFld ? pCurFld->GetTypeId() : USHRT_MAX; 852*cdf0e10cSrcweir } 853*cdf0e10cSrcweir 854*cdf0e10cSrcweir /*-------------------------------------------------------------------- 855*cdf0e10cSrcweir Beschreibung: Ueber String Feld einfuegen oder Update 856*cdf0e10cSrcweir --------------------------------------------------------------------*/ 857*cdf0e10cSrcweir 858*cdf0e10cSrcweir 859*cdf0e10cSrcweir sal_Bool SwFldMgr::InsertFld( const SwInsertFld_Data& rData ) 860*cdf0e10cSrcweir { 861*cdf0e10cSrcweir SwField* pFld = 0; 862*cdf0e10cSrcweir sal_Bool bExp = sal_False; 863*cdf0e10cSrcweir sal_Bool bTbl = sal_False; 864*cdf0e10cSrcweir sal_Bool bPageVar = sal_False; 865*cdf0e10cSrcweir sal_uLong nFormatId = rData.nFormatId; 866*cdf0e10cSrcweir sal_uInt16 nSubType = rData.nSubType; 867*cdf0e10cSrcweir sal_Unicode cSeparator = rData.cSeparator; 868*cdf0e10cSrcweir SwWrtShell* pCurShell = rData.pSh; 869*cdf0e10cSrcweir if(!pCurShell) 870*cdf0e10cSrcweir pCurShell = pWrtShell ? pWrtShell : ::lcl_GetShell(); 871*cdf0e10cSrcweir DBG_ASSERT(pCurShell, "no SwWrtShell found"); 872*cdf0e10cSrcweir if(!pCurShell) 873*cdf0e10cSrcweir return sal_False; 874*cdf0e10cSrcweir 875*cdf0e10cSrcweir switch(rData.nTypeId) 876*cdf0e10cSrcweir { // ACHTUNG dieses Feld wird ueber einen gesonderten Dialog eingefuegt 877*cdf0e10cSrcweir case TYP_POSTITFLD: 878*cdf0e10cSrcweir { 879*cdf0e10cSrcweir SwPostItFieldType* pType = (SwPostItFieldType*)pCurShell->GetFldType(0, RES_POSTITFLD); 880*cdf0e10cSrcweir pFld = new SwPostItField(pType, rData.sPar1, rData.sPar2, DateTime()); 881*cdf0e10cSrcweir break; 882*cdf0e10cSrcweir } 883*cdf0e10cSrcweir case TYP_SCRIPTFLD: 884*cdf0e10cSrcweir { 885*cdf0e10cSrcweir SwScriptFieldType* pType = 886*cdf0e10cSrcweir (SwScriptFieldType*)pCurShell->GetFldType(0, RES_SCRIPTFLD); 887*cdf0e10cSrcweir pFld = new SwScriptField(pType, rData.sPar1, rData.sPar2, (sal_Bool)nFormatId); 888*cdf0e10cSrcweir break; 889*cdf0e10cSrcweir } 890*cdf0e10cSrcweir case TYP_COMBINED_CHARS: 891*cdf0e10cSrcweir { 892*cdf0e10cSrcweir SwCombinedCharFieldType* pType = (SwCombinedCharFieldType*) 893*cdf0e10cSrcweir pCurShell->GetFldType( 0, RES_COMBINED_CHARS ); 894*cdf0e10cSrcweir pFld = new SwCombinedCharField( pType, rData.sPar1 ); 895*cdf0e10cSrcweir } 896*cdf0e10cSrcweir break; 897*cdf0e10cSrcweir case TYP_AUTHORITY: 898*cdf0e10cSrcweir { 899*cdf0e10cSrcweir SwAuthorityFieldType* pType = 900*cdf0e10cSrcweir (SwAuthorityFieldType*)pCurShell->GetFldType(0, RES_AUTHORITY); 901*cdf0e10cSrcweir if(!pType) 902*cdf0e10cSrcweir { 903*cdf0e10cSrcweir pType = 904*cdf0e10cSrcweir (SwAuthorityFieldType*)pCurShell->InsertFldType( 905*cdf0e10cSrcweir SwAuthorityFieldType(pCurShell->GetDoc())); 906*cdf0e10cSrcweir } 907*cdf0e10cSrcweir pFld = new SwAuthorityField(pType, rData.sPar1); 908*cdf0e10cSrcweir } 909*cdf0e10cSrcweir break; 910*cdf0e10cSrcweir case TYP_DATEFLD: 911*cdf0e10cSrcweir case TYP_TIMEFLD: 912*cdf0e10cSrcweir { 913*cdf0e10cSrcweir sal_uInt16 nSub = static_cast< sal_uInt16 >(rData.nTypeId == TYP_DATEFLD ? DATEFLD : TIMEFLD); 914*cdf0e10cSrcweir nSub |= nSubType == DATE_VAR ? 0 : FIXEDFLD; 915*cdf0e10cSrcweir 916*cdf0e10cSrcweir SwDateTimeFieldType* pTyp = 917*cdf0e10cSrcweir (SwDateTimeFieldType*)pCurShell->GetFldType(0, RES_DATETIMEFLD); 918*cdf0e10cSrcweir pFld = new SwDateTimeField(pTyp, nSub, nFormatId); 919*cdf0e10cSrcweir pFld->SetPar2(rData.sPar2); 920*cdf0e10cSrcweir break; 921*cdf0e10cSrcweir } 922*cdf0e10cSrcweir case TYP_FILENAMEFLD: 923*cdf0e10cSrcweir { 924*cdf0e10cSrcweir SwFileNameFieldType* pTyp = 925*cdf0e10cSrcweir (SwFileNameFieldType*)pCurShell->GetFldType(0, RES_FILENAMEFLD); 926*cdf0e10cSrcweir pFld = new SwFileNameField(pTyp, nFormatId); 927*cdf0e10cSrcweir break; 928*cdf0e10cSrcweir } 929*cdf0e10cSrcweir case TYP_TEMPLNAMEFLD: 930*cdf0e10cSrcweir { 931*cdf0e10cSrcweir SwTemplNameFieldType* pTyp = 932*cdf0e10cSrcweir (SwTemplNameFieldType*)pCurShell->GetFldType(0, RES_TEMPLNAMEFLD); 933*cdf0e10cSrcweir pFld = new SwTemplNameField(pTyp, nFormatId); 934*cdf0e10cSrcweir break; 935*cdf0e10cSrcweir } 936*cdf0e10cSrcweir case TYP_CHAPTERFLD: 937*cdf0e10cSrcweir { 938*cdf0e10cSrcweir sal_uInt16 nByte = (sal_uInt16)rData.sPar2.ToInt32(); 939*cdf0e10cSrcweir SwChapterFieldType* pTyp = 940*cdf0e10cSrcweir (SwChapterFieldType*)pCurShell->GetFldType(0, RES_CHAPTERFLD); 941*cdf0e10cSrcweir pFld = new SwChapterField(pTyp, nFormatId); 942*cdf0e10cSrcweir nByte = Max(sal_uInt16(1), nByte); 943*cdf0e10cSrcweir nByte = Min(nByte, sal_uInt16(MAXLEVEL)); 944*cdf0e10cSrcweir nByte -= 1; 945*cdf0e10cSrcweir ((SwChapterField*)pFld)->SetLevel((sal_uInt8)nByte); 946*cdf0e10cSrcweir break; 947*cdf0e10cSrcweir } 948*cdf0e10cSrcweir case TYP_NEXTPAGEFLD: 949*cdf0e10cSrcweir case TYP_PREVPAGEFLD: 950*cdf0e10cSrcweir case TYP_PAGENUMBERFLD: 951*cdf0e10cSrcweir { 952*cdf0e10cSrcweir short nOff = (short)rData.sPar2.ToInt32(); 953*cdf0e10cSrcweir 954*cdf0e10cSrcweir if(rData.nTypeId == TYP_NEXTPAGEFLD) 955*cdf0e10cSrcweir { 956*cdf0e10cSrcweir if( SVX_NUM_CHAR_SPECIAL == nFormatId ) 957*cdf0e10cSrcweir nOff = 1; 958*cdf0e10cSrcweir else 959*cdf0e10cSrcweir nOff += 1; 960*cdf0e10cSrcweir nSubType = PG_NEXT; 961*cdf0e10cSrcweir } 962*cdf0e10cSrcweir else if(rData.nTypeId == TYP_PREVPAGEFLD) 963*cdf0e10cSrcweir { 964*cdf0e10cSrcweir if( SVX_NUM_CHAR_SPECIAL == nFormatId ) 965*cdf0e10cSrcweir nOff = -1; 966*cdf0e10cSrcweir else 967*cdf0e10cSrcweir nOff -= 1; 968*cdf0e10cSrcweir nSubType = PG_PREV; 969*cdf0e10cSrcweir } 970*cdf0e10cSrcweir else 971*cdf0e10cSrcweir nSubType = PG_RANDOM; 972*cdf0e10cSrcweir 973*cdf0e10cSrcweir SwPageNumberFieldType* pTyp = 974*cdf0e10cSrcweir (SwPageNumberFieldType*)pCurShell->GetFldType(0, RES_PAGENUMBERFLD); 975*cdf0e10cSrcweir pFld = new SwPageNumberField(pTyp, nSubType, nFormatId, nOff); 976*cdf0e10cSrcweir 977*cdf0e10cSrcweir if( SVX_NUM_CHAR_SPECIAL == nFormatId && 978*cdf0e10cSrcweir ( PG_PREV == nSubType || PG_NEXT == nSubType ) ) 979*cdf0e10cSrcweir ((SwPageNumberField*)pFld)->SetUserString( rData.sPar2 ); 980*cdf0e10cSrcweir break; 981*cdf0e10cSrcweir } 982*cdf0e10cSrcweir case TYP_DOCSTATFLD: 983*cdf0e10cSrcweir { SwDocStatFieldType* pTyp = 984*cdf0e10cSrcweir (SwDocStatFieldType*)pCurShell->GetFldType(0, RES_DOCSTATFLD); 985*cdf0e10cSrcweir pFld = new SwDocStatField(pTyp, nSubType, nFormatId); 986*cdf0e10cSrcweir break; 987*cdf0e10cSrcweir } 988*cdf0e10cSrcweir case TYP_AUTHORFLD: 989*cdf0e10cSrcweir { SwAuthorFieldType* pTyp = 990*cdf0e10cSrcweir (SwAuthorFieldType*)pCurShell->GetFldType(0, RES_AUTHORFLD); 991*cdf0e10cSrcweir pFld = new SwAuthorField(pTyp, nFormatId); 992*cdf0e10cSrcweir break; 993*cdf0e10cSrcweir } 994*cdf0e10cSrcweir case TYP_CONDTXTFLD: 995*cdf0e10cSrcweir case TYP_HIDDENTXTFLD: 996*cdf0e10cSrcweir { 997*cdf0e10cSrcweir SwHiddenTxtFieldType* pTyp = 998*cdf0e10cSrcweir (SwHiddenTxtFieldType*)pCurShell->GetFldType(0, RES_HIDDENTXTFLD); 999*cdf0e10cSrcweir pFld = new SwHiddenTxtField(pTyp, sal_True, rData.sPar1, rData.sPar2, sal_False, rData.nTypeId); 1000*cdf0e10cSrcweir bExp = sal_True; 1001*cdf0e10cSrcweir break; 1002*cdf0e10cSrcweir } 1003*cdf0e10cSrcweir case TYP_HIDDENPARAFLD: 1004*cdf0e10cSrcweir { 1005*cdf0e10cSrcweir SwHiddenParaFieldType* pTyp = 1006*cdf0e10cSrcweir (SwHiddenParaFieldType*)pCurShell->GetFldType(0, RES_HIDDENPARAFLD); 1007*cdf0e10cSrcweir pFld = new SwHiddenParaField(pTyp, rData.sPar1); 1008*cdf0e10cSrcweir bExp = sal_True; 1009*cdf0e10cSrcweir break; 1010*cdf0e10cSrcweir } 1011*cdf0e10cSrcweir case TYP_SETREFFLD: 1012*cdf0e10cSrcweir { 1013*cdf0e10cSrcweir if( rData.sPar1.Len() > 0 && CanInsertRefMark( rData.sPar1 ) ) 1014*cdf0e10cSrcweir { 1015*cdf0e10cSrcweir pCurShell->SetAttr( SwFmtRefMark( rData.sPar1 ) ); 1016*cdf0e10cSrcweir return sal_True; 1017*cdf0e10cSrcweir } 1018*cdf0e10cSrcweir return sal_False; 1019*cdf0e10cSrcweir } 1020*cdf0e10cSrcweir case TYP_GETREFFLD: 1021*cdf0e10cSrcweir { 1022*cdf0e10cSrcweir SwGetRefFieldType* pTyp = 1023*cdf0e10cSrcweir (SwGetRefFieldType*)pCurShell->GetFldType(0, RES_GETREFFLD); 1024*cdf0e10cSrcweir sal_uInt16 nSeqNo = (sal_uInt16)rData.sPar2.ToInt32(); 1025*cdf0e10cSrcweir pFld = new SwGetRefField(pTyp, rData.sPar1, nSubType, nSeqNo, nFormatId); 1026*cdf0e10cSrcweir bExp = sal_True; 1027*cdf0e10cSrcweir break; 1028*cdf0e10cSrcweir } 1029*cdf0e10cSrcweir case TYP_DDEFLD: 1030*cdf0e10cSrcweir { 1031*cdf0e10cSrcweir //JP 28.08.95: DDE-Topics/-Items koennen Blanks in ihren 1032*cdf0e10cSrcweir // Namen haben! Wird hier noch nicht beachtet. 1033*cdf0e10cSrcweir String sCmd( rData.sPar2 ); 1034*cdf0e10cSrcweir sal_uInt16 nTmpPos = sCmd.SearchAndReplace( ' ', sfx2::cTokenSeperator ); 1035*cdf0e10cSrcweir sCmd.SearchAndReplace( ' ', sfx2::cTokenSeperator, nTmpPos ); 1036*cdf0e10cSrcweir 1037*cdf0e10cSrcweir SwDDEFieldType aType( rData.sPar1, sCmd, (sal_uInt16) nFormatId ); 1038*cdf0e10cSrcweir SwDDEFieldType* pTyp = (SwDDEFieldType*) pCurShell->InsertFldType( aType ); 1039*cdf0e10cSrcweir pFld = new SwDDEField( pTyp ); 1040*cdf0e10cSrcweir break; 1041*cdf0e10cSrcweir } 1042*cdf0e10cSrcweir case TYP_MACROFLD: 1043*cdf0e10cSrcweir { 1044*cdf0e10cSrcweir SwMacroFieldType* pTyp = 1045*cdf0e10cSrcweir (SwMacroFieldType*)pCurShell->GetFldType(0, RES_MACROFLD); 1046*cdf0e10cSrcweir 1047*cdf0e10cSrcweir pFld = new SwMacroField(pTyp, rData.sPar1, rData.sPar2); 1048*cdf0e10cSrcweir 1049*cdf0e10cSrcweir break; 1050*cdf0e10cSrcweir } 1051*cdf0e10cSrcweir case TYP_INTERNETFLD: 1052*cdf0e10cSrcweir { 1053*cdf0e10cSrcweir SwFmtINetFmt aFmt( rData.sPar1, sCurFrame ); 1054*cdf0e10cSrcweir if( pMacroItem ) 1055*cdf0e10cSrcweir aFmt.SetMacroTbl( &pMacroItem->GetMacroTable() ); 1056*cdf0e10cSrcweir return pCurShell->InsertURL( aFmt, rData.sPar2 ); 1057*cdf0e10cSrcweir } 1058*cdf0e10cSrcweir case TYP_JUMPEDITFLD: 1059*cdf0e10cSrcweir { 1060*cdf0e10cSrcweir SwJumpEditFieldType* pTyp = 1061*cdf0e10cSrcweir (SwJumpEditFieldType*)pCurShell->GetFldType(0, RES_JUMPEDITFLD); 1062*cdf0e10cSrcweir 1063*cdf0e10cSrcweir pFld = new SwJumpEditField(pTyp, nFormatId, rData.sPar1, rData.sPar2 ); 1064*cdf0e10cSrcweir break; 1065*cdf0e10cSrcweir } 1066*cdf0e10cSrcweir case TYP_DOCINFOFLD: 1067*cdf0e10cSrcweir { 1068*cdf0e10cSrcweir SwDocInfoFieldType* pTyp = (SwDocInfoFieldType*)pCurShell->GetFldType( 1069*cdf0e10cSrcweir 0, RES_DOCINFOFLD ); 1070*cdf0e10cSrcweir pFld = new SwDocInfoField(pTyp, nSubType, rData.sPar1, nFormatId); 1071*cdf0e10cSrcweir break; 1072*cdf0e10cSrcweir } 1073*cdf0e10cSrcweir case TYP_EXTUSERFLD: 1074*cdf0e10cSrcweir { 1075*cdf0e10cSrcweir SwExtUserFieldType* pTyp = (SwExtUserFieldType*)pCurShell->GetFldType( 1076*cdf0e10cSrcweir 0, RES_EXTUSERFLD); 1077*cdf0e10cSrcweir pFld = new SwExtUserField(pTyp, nSubType, nFormatId); 1078*cdf0e10cSrcweir break; 1079*cdf0e10cSrcweir } 1080*cdf0e10cSrcweir case TYP_DBFLD: 1081*cdf0e10cSrcweir { 1082*cdf0e10cSrcweir SwDBData aDBData; 1083*cdf0e10cSrcweir String sPar1; 1084*cdf0e10cSrcweir 1085*cdf0e10cSrcweir if (rData.sPar1.Search(DB_DELIM) == STRING_NOTFOUND) 1086*cdf0e10cSrcweir { 1087*cdf0e10cSrcweir aDBData = pCurShell->GetDBData(); 1088*cdf0e10cSrcweir sPar1 = rData.sPar1; 1089*cdf0e10cSrcweir } 1090*cdf0e10cSrcweir else 1091*cdf0e10cSrcweir { 1092*cdf0e10cSrcweir aDBData.sDataSource = rData.sPar1.GetToken(0, DB_DELIM); 1093*cdf0e10cSrcweir aDBData.sCommand = rData.sPar1.GetToken(1, DB_DELIM); 1094*cdf0e10cSrcweir aDBData.nCommandType = rData.sPar1.GetToken(2, DB_DELIM).ToInt32(); 1095*cdf0e10cSrcweir sPar1 = rData.sPar1.GetToken(3, DB_DELIM); 1096*cdf0e10cSrcweir } 1097*cdf0e10cSrcweir 1098*cdf0e10cSrcweir if(aDBData.sDataSource.getLength() && pCurShell->GetDBData() != aDBData) 1099*cdf0e10cSrcweir pCurShell->ChgDBData(aDBData); 1100*cdf0e10cSrcweir 1101*cdf0e10cSrcweir SwDBFieldType* pTyp = (SwDBFieldType*)pCurShell->InsertFldType( 1102*cdf0e10cSrcweir SwDBFieldType(pCurShell->GetDoc(), sPar1, aDBData) ); 1103*cdf0e10cSrcweir pFld = new SwDBField(pTyp); 1104*cdf0e10cSrcweir pFld->SetSubType(nSubType); 1105*cdf0e10cSrcweir 1106*cdf0e10cSrcweir if( !(nSubType & nsSwExtendedSubType::SUB_OWN_FMT) ) // Datenbankformat ermitteln 1107*cdf0e10cSrcweir { 1108*cdf0e10cSrcweir Reference< XDataSource> xSource; 1109*cdf0e10cSrcweir rData.aDBDataSource >>= xSource; 1110*cdf0e10cSrcweir Reference<XConnection> xConnection; 1111*cdf0e10cSrcweir rData.aDBConnection >>= xConnection; 1112*cdf0e10cSrcweir Reference<XPropertySet> xColumn; 1113*cdf0e10cSrcweir rData.aDBColumn >>= xColumn; 1114*cdf0e10cSrcweir if(xColumn.is()) 1115*cdf0e10cSrcweir { 1116*cdf0e10cSrcweir nFormatId = pCurShell->GetNewDBMgr()->GetColumnFmt(xSource, xConnection, xColumn, 1117*cdf0e10cSrcweir pCurShell->GetNumberFormatter(), GetCurrLanguage() ); 1118*cdf0e10cSrcweir } 1119*cdf0e10cSrcweir else 1120*cdf0e10cSrcweir nFormatId = pCurShell->GetNewDBMgr()->GetColumnFmt( 1121*cdf0e10cSrcweir aDBData.sDataSource, aDBData.sCommand, sPar1, 1122*cdf0e10cSrcweir pCurShell->GetNumberFormatter(), GetCurrLanguage() ); 1123*cdf0e10cSrcweir } 1124*cdf0e10cSrcweir pFld->ChangeFormat( nFormatId ); 1125*cdf0e10cSrcweir 1126*cdf0e10cSrcweir bExp = sal_True; 1127*cdf0e10cSrcweir break; 1128*cdf0e10cSrcweir } 1129*cdf0e10cSrcweir case TYP_DBSETNUMBERFLD: 1130*cdf0e10cSrcweir case TYP_DBNUMSETFLD: 1131*cdf0e10cSrcweir case TYP_DBNEXTSETFLD: 1132*cdf0e10cSrcweir case TYP_DBNAMEFLD: 1133*cdf0e10cSrcweir { 1134*cdf0e10cSrcweir sal_uInt16 nPos, nTablePos, nCmdTypePos, nExpPos; 1135*cdf0e10cSrcweir String sPar1; 1136*cdf0e10cSrcweir SwDBData aDBData; 1137*cdf0e10cSrcweir 1138*cdf0e10cSrcweir // DBName aus rData.sPar1 extrahieren. Format: DBName.TableName.CommandType.ExpStrg 1139*cdf0e10cSrcweir if ((nTablePos = rData.sPar1.Search(DB_DELIM)) != STRING_NOTFOUND) 1140*cdf0e10cSrcweir aDBData.sDataSource = rData.sPar1.Copy(0, nTablePos++); 1141*cdf0e10cSrcweir if ((nCmdTypePos = rData.sPar1.Search(DB_DELIM, nTablePos)) != STRING_NOTFOUND) 1142*cdf0e10cSrcweir { 1143*cdf0e10cSrcweir aDBData.sCommand = rData.sPar1.Copy(nTablePos, nCmdTypePos++ - nTablePos); 1144*cdf0e10cSrcweir } 1145*cdf0e10cSrcweir if ((nExpPos = rData.sPar1.Search(DB_DELIM, nCmdTypePos)) != STRING_NOTFOUND) 1146*cdf0e10cSrcweir { 1147*cdf0e10cSrcweir aDBData.nCommandType = rData.sPar1.Copy(nCmdTypePos, nExpPos++ - nCmdTypePos).ToInt32(); 1148*cdf0e10cSrcweir } 1149*cdf0e10cSrcweir if (nExpPos != STRING_NOTFOUND) 1150*cdf0e10cSrcweir nPos = nExpPos; 1151*cdf0e10cSrcweir else if (nTablePos != STRING_NOTFOUND) 1152*cdf0e10cSrcweir nPos = nTablePos; 1153*cdf0e10cSrcweir else 1154*cdf0e10cSrcweir nPos = 0; 1155*cdf0e10cSrcweir sPar1 = rData.sPar1.Copy(nPos); 1156*cdf0e10cSrcweir 1157*cdf0e10cSrcweir if (aDBData.sDataSource.getLength() && pCurShell->GetDBData() != aDBData) 1158*cdf0e10cSrcweir pCurShell->ChgDBData(aDBData); 1159*cdf0e10cSrcweir 1160*cdf0e10cSrcweir switch(rData.nTypeId) 1161*cdf0e10cSrcweir { 1162*cdf0e10cSrcweir case TYP_DBNAMEFLD: 1163*cdf0e10cSrcweir { 1164*cdf0e10cSrcweir SwDBNameFieldType* pTyp = 1165*cdf0e10cSrcweir (SwDBNameFieldType*)pCurShell->GetFldType(0, RES_DBNAMEFLD); 1166*cdf0e10cSrcweir pFld = new SwDBNameField(pTyp, aDBData); 1167*cdf0e10cSrcweir 1168*cdf0e10cSrcweir break; 1169*cdf0e10cSrcweir } 1170*cdf0e10cSrcweir case TYP_DBNEXTSETFLD: 1171*cdf0e10cSrcweir { 1172*cdf0e10cSrcweir SwDBNextSetFieldType* pTyp = (SwDBNextSetFieldType*)pCurShell->GetFldType( 1173*cdf0e10cSrcweir 0, RES_DBNEXTSETFLD); 1174*cdf0e10cSrcweir pFld = new SwDBNextSetField(pTyp, sPar1, rData.sPar2, aDBData); 1175*cdf0e10cSrcweir bExp = sal_True; 1176*cdf0e10cSrcweir break; 1177*cdf0e10cSrcweir } 1178*cdf0e10cSrcweir case TYP_DBNUMSETFLD: 1179*cdf0e10cSrcweir { 1180*cdf0e10cSrcweir SwDBNumSetFieldType* pTyp = (SwDBNumSetFieldType*)pCurShell->GetFldType( 1181*cdf0e10cSrcweir 0, RES_DBNUMSETFLD); 1182*cdf0e10cSrcweir pFld = new SwDBNumSetField( pTyp, sPar1, rData.sPar2, aDBData); 1183*cdf0e10cSrcweir bExp = sal_True; 1184*cdf0e10cSrcweir break; 1185*cdf0e10cSrcweir } 1186*cdf0e10cSrcweir case TYP_DBSETNUMBERFLD: 1187*cdf0e10cSrcweir { 1188*cdf0e10cSrcweir SwDBSetNumberFieldType* pTyp = (SwDBSetNumberFieldType*) 1189*cdf0e10cSrcweir pCurShell->GetFldType(0, RES_DBSETNUMBERFLD); 1190*cdf0e10cSrcweir pFld = new SwDBSetNumberField( pTyp, aDBData, nFormatId); 1191*cdf0e10cSrcweir bExp = sal_True; 1192*cdf0e10cSrcweir break; 1193*cdf0e10cSrcweir } 1194*cdf0e10cSrcweir } 1195*cdf0e10cSrcweir break; 1196*cdf0e10cSrcweir } 1197*cdf0e10cSrcweir case TYP_USERFLD: 1198*cdf0e10cSrcweir { 1199*cdf0e10cSrcweir SwUserFieldType* pTyp = 1200*cdf0e10cSrcweir (SwUserFieldType*)pCurShell->GetFldType(RES_USERFLD, rData.sPar1); 1201*cdf0e10cSrcweir 1202*cdf0e10cSrcweir // nur wenn vorhanden 1203*cdf0e10cSrcweir if(!pTyp) 1204*cdf0e10cSrcweir { 1205*cdf0e10cSrcweir pTyp = (SwUserFieldType*)pCurShell->InsertFldType( 1206*cdf0e10cSrcweir SwUserFieldType(pCurShell->GetDoc(), rData.sPar1)); 1207*cdf0e10cSrcweir } 1208*cdf0e10cSrcweir if (pTyp->GetContent(nFormatId) != rData.sPar2) 1209*cdf0e10cSrcweir pTyp->SetContent(rData.sPar2, nFormatId); 1210*cdf0e10cSrcweir pFld = new SwUserField(pTyp, 0, nFormatId); 1211*cdf0e10cSrcweir if (pFld->GetSubType() != nSubType) 1212*cdf0e10cSrcweir pFld->SetSubType(nSubType); 1213*cdf0e10cSrcweir bTbl = sal_True; 1214*cdf0e10cSrcweir break; 1215*cdf0e10cSrcweir } 1216*cdf0e10cSrcweir case TYP_INPUTFLD: 1217*cdf0e10cSrcweir { 1218*cdf0e10cSrcweir if ((nSubType & 0x00ff) == INP_VAR) 1219*cdf0e10cSrcweir { 1220*cdf0e10cSrcweir SwSetExpFieldType* pTyp = (SwSetExpFieldType*) 1221*cdf0e10cSrcweir pCurShell->GetFldType(RES_SETEXPFLD, rData.sPar1); 1222*cdf0e10cSrcweir 1223*cdf0e10cSrcweir // kein Experssion Type mit dem Namen vorhanden -> anlegen 1224*cdf0e10cSrcweir if(pTyp) 1225*cdf0e10cSrcweir { 1226*cdf0e10cSrcweir SwSetExpField* pExpFld = 1227*cdf0e10cSrcweir new SwSetExpField(pTyp, aEmptyStr, nFormatId); 1228*cdf0e10cSrcweir 1229*cdf0e10cSrcweir // Typ vom SwSetExpFieldType nicht veraendern: 1230*cdf0e10cSrcweir sal_uInt16 nOldSubType = pExpFld->GetSubType(); 1231*cdf0e10cSrcweir pExpFld->SetSubType(nOldSubType | (nSubType & 0xff00)); 1232*cdf0e10cSrcweir 1233*cdf0e10cSrcweir pExpFld->SetPromptText(rData.sPar2); 1234*cdf0e10cSrcweir pExpFld->SetInputFlag(sal_True) ; 1235*cdf0e10cSrcweir bExp = sal_True; 1236*cdf0e10cSrcweir pFld = pExpFld; 1237*cdf0e10cSrcweir } 1238*cdf0e10cSrcweir else 1239*cdf0e10cSrcweir return sal_False; 1240*cdf0e10cSrcweir } 1241*cdf0e10cSrcweir else 1242*cdf0e10cSrcweir { 1243*cdf0e10cSrcweir SwInputFieldType* pTyp = 1244*cdf0e10cSrcweir (SwInputFieldType*)pCurShell->GetFldType(0, RES_INPUTFLD); 1245*cdf0e10cSrcweir 1246*cdf0e10cSrcweir SwInputField* pInpFld = 1247*cdf0e10cSrcweir new SwInputField(pTyp, rData.sPar1, rData.sPar2, nSubType|nsSwExtendedSubType::SUB_INVISIBLE, nFormatId); 1248*cdf0e10cSrcweir pFld = pInpFld; 1249*cdf0e10cSrcweir } 1250*cdf0e10cSrcweir 1251*cdf0e10cSrcweir // Dialog starten 1252*cdf0e10cSrcweir // 1253*cdf0e10cSrcweir pCurShell->StartInputFldDlg(pFld, sal_False, rData.pParent); 1254*cdf0e10cSrcweir break; 1255*cdf0e10cSrcweir } 1256*cdf0e10cSrcweir case TYP_SETFLD: 1257*cdf0e10cSrcweir { 1258*cdf0e10cSrcweir if (!rData.sPar2.Len()) // Leere Variablen sind nicht erlaubt 1259*cdf0e10cSrcweir return sal_False; 1260*cdf0e10cSrcweir 1261*cdf0e10cSrcweir SwSetExpFieldType* pTyp = (SwSetExpFieldType*)pCurShell->InsertFldType( 1262*cdf0e10cSrcweir SwSetExpFieldType(pCurShell->GetDoc(), rData.sPar1) ); 1263*cdf0e10cSrcweir 1264*cdf0e10cSrcweir SwSetExpField* pExpFld = new SwSetExpField( pTyp, rData.sPar2, nFormatId); 1265*cdf0e10cSrcweir pExpFld->SetSubType(nSubType); 1266*cdf0e10cSrcweir pExpFld->SetPar2(rData.sPar2); 1267*cdf0e10cSrcweir bExp = sal_True; 1268*cdf0e10cSrcweir pFld = pExpFld; 1269*cdf0e10cSrcweir break; 1270*cdf0e10cSrcweir } 1271*cdf0e10cSrcweir case TYP_SEQFLD: 1272*cdf0e10cSrcweir { 1273*cdf0e10cSrcweir SwSetExpFieldType* pTyp = (SwSetExpFieldType*)pCurShell->InsertFldType( 1274*cdf0e10cSrcweir SwSetExpFieldType(pCurShell->GetDoc(), rData.sPar1, nsSwGetSetExpType::GSE_SEQ)); 1275*cdf0e10cSrcweir 1276*cdf0e10cSrcweir sal_uInt8 nLevel = static_cast< sal_uInt8 >(nSubType & 0xff); 1277*cdf0e10cSrcweir 1278*cdf0e10cSrcweir pTyp->SetOutlineLvl(nLevel); 1279*cdf0e10cSrcweir if (nLevel != 0x7f && cSeparator == 0) 1280*cdf0e10cSrcweir cSeparator = '.'; 1281*cdf0e10cSrcweir 1282*cdf0e10cSrcweir pTyp->SetDelimiter(cSeparator); 1283*cdf0e10cSrcweir SwSetExpField* pExpFld = new SwSetExpField(pTyp, rData.sPar2, nFormatId); 1284*cdf0e10cSrcweir bExp = sal_True; 1285*cdf0e10cSrcweir pFld = pExpFld; 1286*cdf0e10cSrcweir nSubType = nsSwGetSetExpType::GSE_SEQ; 1287*cdf0e10cSrcweir break; 1288*cdf0e10cSrcweir } 1289*cdf0e10cSrcweir case TYP_GETFLD: 1290*cdf0e10cSrcweir { 1291*cdf0e10cSrcweir // gibt es ein entprechendes SetField 1292*cdf0e10cSrcweir SwSetExpFieldType* pSetTyp = (SwSetExpFieldType*) 1293*cdf0e10cSrcweir pCurShell->GetFldType(RES_SETEXPFLD, rData.sPar1); 1294*cdf0e10cSrcweir 1295*cdf0e10cSrcweir if(pSetTyp) 1296*cdf0e10cSrcweir { 1297*cdf0e10cSrcweir SwGetExpFieldType* pTyp = (SwGetExpFieldType*)pCurShell->GetFldType( 1298*cdf0e10cSrcweir 0, RES_GETEXPFLD); 1299*cdf0e10cSrcweir pFld = new SwGetExpField(pTyp, rData.sPar1, pSetTyp->GetType(), nFormatId); 1300*cdf0e10cSrcweir pFld->SetSubType(nSubType | pSetTyp->GetType()); 1301*cdf0e10cSrcweir bExp = sal_True; 1302*cdf0e10cSrcweir } 1303*cdf0e10cSrcweir else 1304*cdf0e10cSrcweir return sal_False; 1305*cdf0e10cSrcweir break; 1306*cdf0e10cSrcweir } 1307*cdf0e10cSrcweir case TYP_FORMELFLD: 1308*cdf0e10cSrcweir { 1309*cdf0e10cSrcweir if(pCurShell->GetFrmType(0,sal_False) & FRMTYPE_TABLE) 1310*cdf0e10cSrcweir { 1311*cdf0e10cSrcweir pCurShell->StartAllAction(); 1312*cdf0e10cSrcweir 1313*cdf0e10cSrcweir SvNumberFormatter* pFormatter = pCurShell->GetDoc()->GetNumberFormatter(); 1314*cdf0e10cSrcweir const SvNumberformat* pEntry = pFormatter->GetEntry(nFormatId); 1315*cdf0e10cSrcweir 1316*cdf0e10cSrcweir if (pEntry) 1317*cdf0e10cSrcweir { 1318*cdf0e10cSrcweir SfxStringItem aFormat(FN_NUMBER_FORMAT, pEntry->GetFormatstring()); 1319*cdf0e10cSrcweir pCurShell->GetView().GetViewFrame()->GetDispatcher()-> 1320*cdf0e10cSrcweir Execute(FN_NUMBER_FORMAT, SFX_CALLMODE_SYNCHRON, &aFormat, 0L); 1321*cdf0e10cSrcweir } 1322*cdf0e10cSrcweir 1323*cdf0e10cSrcweir SfxItemSet aBoxSet( pCurShell->GetAttrPool(), 1324*cdf0e10cSrcweir RES_BOXATR_FORMULA, RES_BOXATR_FORMULA ); 1325*cdf0e10cSrcweir 1326*cdf0e10cSrcweir String sFml( rData.sPar2 ); 1327*cdf0e10cSrcweir if( sFml.EraseLeadingChars().Len() && 1328*cdf0e10cSrcweir '=' == sFml.GetChar( 0 ) ) 1329*cdf0e10cSrcweir sFml.Erase( 0, 1 ); 1330*cdf0e10cSrcweir 1331*cdf0e10cSrcweir aBoxSet.Put( SwTblBoxFormula( sFml )); 1332*cdf0e10cSrcweir pCurShell->SetTblBoxFormulaAttrs( aBoxSet ); 1333*cdf0e10cSrcweir pCurShell->UpdateTable(); 1334*cdf0e10cSrcweir 1335*cdf0e10cSrcweir pCurShell->EndAllAction(); 1336*cdf0e10cSrcweir return sal_True; 1337*cdf0e10cSrcweir 1338*cdf0e10cSrcweir /* // In der Tabelle Tabellenformeln einfuegen 1339*cdf0e10cSrcweir SwTblFieldType* pTyp = (SwTblFieldType*)pCurShell->GetFldType( 1340*cdf0e10cSrcweir 0, RES_TABLEFLD); 1341*cdf0e10cSrcweir pFld = new SwTblField(pTyp, rData.sPar2, nsSwGetSetExpType::GSE_EXPR, nFormatId); 1342*cdf0e10cSrcweir bTbl = sal_True;*/ 1343*cdf0e10cSrcweir } 1344*cdf0e10cSrcweir else 1345*cdf0e10cSrcweir { 1346*cdf0e10cSrcweir SwGetExpFieldType* pTyp = (SwGetExpFieldType*) 1347*cdf0e10cSrcweir pCurShell->GetFldType(0, RES_GETEXPFLD); 1348*cdf0e10cSrcweir pFld = new SwGetExpField(pTyp, rData.sPar2, nsSwGetSetExpType::GSE_FORMULA, nFormatId); 1349*cdf0e10cSrcweir pFld->SetSubType(nSubType); 1350*cdf0e10cSrcweir bExp = sal_True; 1351*cdf0e10cSrcweir } 1352*cdf0e10cSrcweir break; 1353*cdf0e10cSrcweir } 1354*cdf0e10cSrcweir case TYP_SETREFPAGEFLD: 1355*cdf0e10cSrcweir pFld = new SwRefPageSetField( (SwRefPageSetFieldType*) 1356*cdf0e10cSrcweir pCurShell->GetFldType( 0, RES_REFPAGESETFLD ), 1357*cdf0e10cSrcweir (short)rData.sPar2.ToInt32(), 0 != nSubType ); 1358*cdf0e10cSrcweir bPageVar = sal_True; 1359*cdf0e10cSrcweir break; 1360*cdf0e10cSrcweir 1361*cdf0e10cSrcweir case TYP_GETREFPAGEFLD: 1362*cdf0e10cSrcweir pFld = new SwRefPageGetField( (SwRefPageGetFieldType*) 1363*cdf0e10cSrcweir pCurShell->GetFldType( 0, RES_REFPAGEGETFLD ), nFormatId ); 1364*cdf0e10cSrcweir bPageVar = sal_True; 1365*cdf0e10cSrcweir break; 1366*cdf0e10cSrcweir case TYP_DROPDOWN : 1367*cdf0e10cSrcweir { 1368*cdf0e10cSrcweir pFld = new SwDropDownField(pCurShell->GetFldType( 0, RES_DROPDOWN )); 1369*cdf0e10cSrcweir xub_StrLen nTokenCount = rData.sPar2.Len() ? rData.sPar2.GetTokenCount(DB_DELIM) : 0; 1370*cdf0e10cSrcweir Sequence<OUString> aEntries(nTokenCount); 1371*cdf0e10cSrcweir OUString* pArray = aEntries.getArray(); 1372*cdf0e10cSrcweir for(xub_StrLen nToken = 0; nToken < nTokenCount; nToken++) 1373*cdf0e10cSrcweir pArray[nToken] = rData.sPar2.GetToken(nToken, DB_DELIM); 1374*cdf0e10cSrcweir ((SwDropDownField*)pFld)->SetItems(aEntries); 1375*cdf0e10cSrcweir ((SwDropDownField*)pFld)->SetName(rData.sPar1); 1376*cdf0e10cSrcweir } 1377*cdf0e10cSrcweir break; 1378*cdf0e10cSrcweir default: 1379*cdf0e10cSrcweir { ASSERT(!this, "Falscher Feldtyp"); 1380*cdf0e10cSrcweir return sal_False; 1381*cdf0e10cSrcweir } 1382*cdf0e10cSrcweir } 1383*cdf0e10cSrcweir ASSERT(pFld, "Feld nicht vorhanden"); 1384*cdf0e10cSrcweir 1385*cdf0e10cSrcweir 1386*cdf0e10cSrcweir //the auto language flag has to be set prior to the language! 1387*cdf0e10cSrcweir pFld->SetAutomaticLanguage(rData.bIsAutomaticLanguage); 1388*cdf0e10cSrcweir sal_uInt16 nLang = GetCurrLanguage(); 1389*cdf0e10cSrcweir pFld->SetLanguage(nLang); 1390*cdf0e10cSrcweir 1391*cdf0e10cSrcweir // Einfuegen 1392*cdf0e10cSrcweir pCurShell->StartAllAction(); 1393*cdf0e10cSrcweir 1394*cdf0e10cSrcweir pCurShell->Insert(*pFld); 1395*cdf0e10cSrcweir 1396*cdf0e10cSrcweir if(bExp && bEvalExp) 1397*cdf0e10cSrcweir pCurShell->UpdateExpFlds(sal_True); 1398*cdf0e10cSrcweir 1399*cdf0e10cSrcweir if(bTbl) 1400*cdf0e10cSrcweir { 1401*cdf0e10cSrcweir pCurShell->Left(CRSR_SKIP_CHARS, sal_False, 1, sal_False ); 1402*cdf0e10cSrcweir pCurShell->UpdateFlds(*pFld); 1403*cdf0e10cSrcweir pCurShell->Right(CRSR_SKIP_CHARS, sal_False, 1, sal_False ); 1404*cdf0e10cSrcweir } 1405*cdf0e10cSrcweir else if( bPageVar ) 1406*cdf0e10cSrcweir ((SwRefPageGetFieldType*)pCurShell->GetFldType( 0, RES_REFPAGEGETFLD ))->UpdateFlds(); 1407*cdf0e10cSrcweir else if( TYP_GETREFFLD == rData.nTypeId ) 1408*cdf0e10cSrcweir pFld->GetTyp()->ModifyNotification( 0, 0 ); 1409*cdf0e10cSrcweir 1410*cdf0e10cSrcweir // temporaeres Feld loeschen 1411*cdf0e10cSrcweir delete pFld; 1412*cdf0e10cSrcweir 1413*cdf0e10cSrcweir pCurShell->EndAllAction(); 1414*cdf0e10cSrcweir return sal_True; 1415*cdf0e10cSrcweir } 1416*cdf0e10cSrcweir 1417*cdf0e10cSrcweir /*-------------------------------------------------------------------- 1418*cdf0e10cSrcweir Beschreibung: Felder Update 1419*cdf0e10cSrcweir --------------------------------------------------------------------*/ 1420*cdf0e10cSrcweir 1421*cdf0e10cSrcweir 1422*cdf0e10cSrcweir void SwFldMgr::UpdateCurFld(sal_uLong nFormat, 1423*cdf0e10cSrcweir const String& rPar1, 1424*cdf0e10cSrcweir const String& rPar2, 1425*cdf0e10cSrcweir SwField * _pTmpFld) // #111840# 1426*cdf0e10cSrcweir { 1427*cdf0e10cSrcweir // Format aendern 1428*cdf0e10cSrcweir ASSERT(pCurFld, "kein Feld an der CursorPos"); 1429*cdf0e10cSrcweir 1430*cdf0e10cSrcweir bool bDelete = false; 1431*cdf0e10cSrcweir SwField *pTmpFld; // mb: fixed memory leak 1432*cdf0e10cSrcweir if (NULL != _pTmpFld) 1433*cdf0e10cSrcweir { 1434*cdf0e10cSrcweir pTmpFld = _pTmpFld; 1435*cdf0e10cSrcweir } 1436*cdf0e10cSrcweir else 1437*cdf0e10cSrcweir { 1438*cdf0e10cSrcweir pTmpFld = pCurFld->CopyField(); 1439*cdf0e10cSrcweir bDelete = true; 1440*cdf0e10cSrcweir } 1441*cdf0e10cSrcweir 1442*cdf0e10cSrcweir SwFieldType* pType = pTmpFld->GetTyp(); 1443*cdf0e10cSrcweir const sal_uInt16 nTypeId = pTmpFld->GetTypeId(); 1444*cdf0e10cSrcweir 1445*cdf0e10cSrcweir SwWrtShell* pSh = pWrtShell ? pWrtShell : ::lcl_GetShell(); 1446*cdf0e10cSrcweir DBG_ASSERT(pSh, "no SwWrtShell found"); 1447*cdf0e10cSrcweir if(!pSh) 1448*cdf0e10cSrcweir return; 1449*cdf0e10cSrcweir pSh->StartAllAction(); 1450*cdf0e10cSrcweir 1451*cdf0e10cSrcweir sal_Bool bSetPar2 = sal_True; 1452*cdf0e10cSrcweir sal_Bool bSetPar1 = sal_True; 1453*cdf0e10cSrcweir String sPar1( rPar1 ); 1454*cdf0e10cSrcweir String sPar2( rPar2 ); 1455*cdf0e10cSrcweir 1456*cdf0e10cSrcweir // Order to Format 1457*cdf0e10cSrcweir switch( nTypeId ) 1458*cdf0e10cSrcweir { 1459*cdf0e10cSrcweir case TYP_DDEFLD: 1460*cdf0e10cSrcweir { 1461*cdf0e10cSrcweir //JP 28.08.95: DDE-Topics/-Items koennen Blanks in ihren 1462*cdf0e10cSrcweir // Namen haben! Wird hier noch nicht beachtet. 1463*cdf0e10cSrcweir sal_uInt16 nTmpPos = sPar2.SearchAndReplace( ' ', sfx2::cTokenSeperator ); 1464*cdf0e10cSrcweir sPar2.SearchAndReplace( ' ', sfx2::cTokenSeperator, nTmpPos ); 1465*cdf0e10cSrcweir break; 1466*cdf0e10cSrcweir } 1467*cdf0e10cSrcweir 1468*cdf0e10cSrcweir case TYP_CHAPTERFLD: 1469*cdf0e10cSrcweir { 1470*cdf0e10cSrcweir sal_uInt16 nByte = (sal_uInt16)rPar2.ToInt32(); 1471*cdf0e10cSrcweir nByte = Max(sal_uInt16(1), nByte); 1472*cdf0e10cSrcweir nByte = Min(nByte, sal_uInt16(MAXLEVEL)); 1473*cdf0e10cSrcweir nByte -= 1; 1474*cdf0e10cSrcweir ((SwChapterField*)pTmpFld)->SetLevel((sal_uInt8)nByte); 1475*cdf0e10cSrcweir bSetPar2 = sal_False; 1476*cdf0e10cSrcweir break; 1477*cdf0e10cSrcweir } 1478*cdf0e10cSrcweir 1479*cdf0e10cSrcweir case TYP_SCRIPTFLD: 1480*cdf0e10cSrcweir ((SwScriptField*)pTmpFld)->SetCodeURL((sal_Bool)nFormat); 1481*cdf0e10cSrcweir break; 1482*cdf0e10cSrcweir 1483*cdf0e10cSrcweir case TYP_NEXTPAGEFLD: 1484*cdf0e10cSrcweir if( SVX_NUM_CHAR_SPECIAL == nFormat ) 1485*cdf0e10cSrcweir { 1486*cdf0e10cSrcweir ((SwPageNumberField*)pCurFld)->SetUserString( sPar2 ); 1487*cdf0e10cSrcweir sPar2 = '1'; 1488*cdf0e10cSrcweir } 1489*cdf0e10cSrcweir else 1490*cdf0e10cSrcweir { 1491*cdf0e10cSrcweir if( nFormat + 2 == SVX_NUM_PAGEDESC ) 1492*cdf0e10cSrcweir nFormat = SVX_NUM_PAGEDESC; 1493*cdf0e10cSrcweir short nOff = (short)sPar2.ToInt32(); 1494*cdf0e10cSrcweir nOff += 1; 1495*cdf0e10cSrcweir sPar2 = String::CreateFromInt32(nOff); 1496*cdf0e10cSrcweir } 1497*cdf0e10cSrcweir break; 1498*cdf0e10cSrcweir 1499*cdf0e10cSrcweir case TYP_PREVPAGEFLD: 1500*cdf0e10cSrcweir if( SVX_NUM_CHAR_SPECIAL == nFormat ) 1501*cdf0e10cSrcweir { 1502*cdf0e10cSrcweir ((SwPageNumberField*)pCurFld)->SetUserString( sPar2 ); 1503*cdf0e10cSrcweir sPar2 = String::CreateFromAscii( 1504*cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM("-1")); 1505*cdf0e10cSrcweir } 1506*cdf0e10cSrcweir else 1507*cdf0e10cSrcweir { 1508*cdf0e10cSrcweir if( nFormat + 2 == SVX_NUM_PAGEDESC ) 1509*cdf0e10cSrcweir nFormat = SVX_NUM_PAGEDESC; 1510*cdf0e10cSrcweir short nOff = (short)sPar2.ToInt32(); 1511*cdf0e10cSrcweir nOff -= 1; 1512*cdf0e10cSrcweir sPar2 = String::CreateFromInt32(nOff); 1513*cdf0e10cSrcweir } 1514*cdf0e10cSrcweir break; 1515*cdf0e10cSrcweir 1516*cdf0e10cSrcweir case TYP_PAGENUMBERFLD: 1517*cdf0e10cSrcweir case TYP_GETREFPAGEFLD: 1518*cdf0e10cSrcweir if( nFormat + 2 == SVX_NUM_PAGEDESC ) 1519*cdf0e10cSrcweir nFormat = SVX_NUM_PAGEDESC; 1520*cdf0e10cSrcweir break; 1521*cdf0e10cSrcweir 1522*cdf0e10cSrcweir case TYP_GETREFFLD: 1523*cdf0e10cSrcweir { 1524*cdf0e10cSrcweir bSetPar2 = sal_False; 1525*cdf0e10cSrcweir ((SwGetRefField*)pTmpFld)->SetSubType( (sal_uInt16)rPar2.ToInt32() ); 1526*cdf0e10cSrcweir sal_uInt16 nPos = rPar2.Search( '|' ); 1527*cdf0e10cSrcweir if( STRING_NOTFOUND != nPos ) 1528*cdf0e10cSrcweir ((SwGetRefField*)pTmpFld)->SetSeqNo( (sal_uInt16)rPar2.Copy( nPos + 1 ).ToInt32()); 1529*cdf0e10cSrcweir } 1530*cdf0e10cSrcweir break; 1531*cdf0e10cSrcweir case TYP_DROPDOWN: 1532*cdf0e10cSrcweir { 1533*cdf0e10cSrcweir xub_StrLen nTokenCount = sPar2.Len() ? sPar2.GetTokenCount(DB_DELIM) : 0; 1534*cdf0e10cSrcweir Sequence<OUString> aEntries(nTokenCount); 1535*cdf0e10cSrcweir OUString* pArray = aEntries.getArray(); 1536*cdf0e10cSrcweir for(xub_StrLen nToken = 0; nToken < nTokenCount; nToken++) 1537*cdf0e10cSrcweir pArray[nToken] = sPar2.GetToken(nToken, DB_DELIM); 1538*cdf0e10cSrcweir ((SwDropDownField*)pTmpFld)->SetItems(aEntries); 1539*cdf0e10cSrcweir ((SwDropDownField*)pTmpFld)->SetName(sPar1); 1540*cdf0e10cSrcweir bSetPar1 = bSetPar2 = sal_False; 1541*cdf0e10cSrcweir } 1542*cdf0e10cSrcweir break; 1543*cdf0e10cSrcweir case TYP_AUTHORITY : 1544*cdf0e10cSrcweir { 1545*cdf0e10cSrcweir //#i99069# changes to a bibliography field should change the field type 1546*cdf0e10cSrcweir SwAuthorityField* pAuthorityField = static_cast<SwAuthorityField*>(pTmpFld); 1547*cdf0e10cSrcweir SwAuthorityFieldType* pAuthorityType = static_cast<SwAuthorityFieldType*>(pType); 1548*cdf0e10cSrcweir SwAuthEntry aTempEntry; 1549*cdf0e10cSrcweir for( sal_uInt16 i = 0; i < AUTH_FIELD_END; ++i ) 1550*cdf0e10cSrcweir aTempEntry.SetAuthorField( (ToxAuthorityField)i, 1551*cdf0e10cSrcweir rPar1.GetToken( i, TOX_STYLE_DELIMITER )); 1552*cdf0e10cSrcweir if( pAuthorityType->ChangeEntryContent( &aTempEntry ) ) 1553*cdf0e10cSrcweir { 1554*cdf0e10cSrcweir pType->UpdateFlds(); 1555*cdf0e10cSrcweir pSh->SetModified(); 1556*cdf0e10cSrcweir } 1557*cdf0e10cSrcweir 1558*cdf0e10cSrcweir if( aTempEntry.GetAuthorField( AUTH_FIELD_IDENTIFIER ) == 1559*cdf0e10cSrcweir pAuthorityField->GetFieldText( AUTH_FIELD_IDENTIFIER ) ) 1560*cdf0e10cSrcweir bSetPar1 = sal_False; //otherwise it's a new or changed entry, the field needs to be updated 1561*cdf0e10cSrcweir bSetPar2 = sal_False; 1562*cdf0e10cSrcweir } 1563*cdf0e10cSrcweir break; 1564*cdf0e10cSrcweir } 1565*cdf0e10cSrcweir 1566*cdf0e10cSrcweir // Format setzen 1567*cdf0e10cSrcweir // Format wegen NumberFormatter vor SetPar2 einstellen! 1568*cdf0e10cSrcweir pTmpFld->ChangeFormat(nFormat); 1569*cdf0e10cSrcweir 1570*cdf0e10cSrcweir if(bSetPar1) 1571*cdf0e10cSrcweir pTmpFld->SetPar1( sPar1 ); 1572*cdf0e10cSrcweir if( bSetPar2 ) 1573*cdf0e10cSrcweir pTmpFld->SetPar2( sPar2 ); 1574*cdf0e10cSrcweir 1575*cdf0e10cSrcweir // Update anschmeissen 1576*cdf0e10cSrcweir if(nTypeId == TYP_DDEFLD || 1577*cdf0e10cSrcweir nTypeId == TYP_USERFLD || 1578*cdf0e10cSrcweir nTypeId == TYP_USRINPFLD) 1579*cdf0e10cSrcweir { 1580*cdf0e10cSrcweir pType->UpdateFlds(); 1581*cdf0e10cSrcweir pSh->SetModified(); 1582*cdf0e10cSrcweir } 1583*cdf0e10cSrcweir else { 1584*cdf0e10cSrcweir // mb: #32157 1585*cdf0e10cSrcweir pSh->SwEditShell::UpdateFlds(*pTmpFld); 1586*cdf0e10cSrcweir GetCurFld(); 1587*cdf0e10cSrcweir } 1588*cdf0e10cSrcweir 1589*cdf0e10cSrcweir if (bDelete) 1590*cdf0e10cSrcweir delete pTmpFld; 1591*cdf0e10cSrcweir 1592*cdf0e10cSrcweir pSh->EndAllAction(); 1593*cdf0e10cSrcweir } 1594*cdf0e10cSrcweir 1595*cdf0e10cSrcweir /*-------------------------------------------------------------------- 1596*cdf0e10cSrcweir Beschreibung: ExpressionFields explizit evaluieren 1597*cdf0e10cSrcweir --------------------------------------------------------------------*/ 1598*cdf0e10cSrcweir void SwFldMgr::EvalExpFlds(SwWrtShell* pSh) 1599*cdf0e10cSrcweir { 1600*cdf0e10cSrcweir if (pSh == NULL) 1601*cdf0e10cSrcweir pSh = pWrtShell ? pWrtShell : ::lcl_GetShell(); 1602*cdf0e10cSrcweir 1603*cdf0e10cSrcweir if(pSh) 1604*cdf0e10cSrcweir { 1605*cdf0e10cSrcweir pSh->StartAllAction(); 1606*cdf0e10cSrcweir pSh->UpdateExpFlds(sal_True); 1607*cdf0e10cSrcweir pSh->EndAllAction(); 1608*cdf0e10cSrcweir } 1609*cdf0e10cSrcweir } 1610*cdf0e10cSrcweir sal_uInt16 SwFldMgr::GetCurrLanguage() const 1611*cdf0e10cSrcweir { 1612*cdf0e10cSrcweir SwWrtShell* pSh = pWrtShell ? pWrtShell : ::lcl_GetShell(); 1613*cdf0e10cSrcweir if( pSh ) 1614*cdf0e10cSrcweir return pSh->GetCurLang(); 1615*cdf0e10cSrcweir return SvxLocaleToLanguage( SvtSysLocale().GetLocaleData().getLocale() ); 1616*cdf0e10cSrcweir } 1617*cdf0e10cSrcweir 1618*cdf0e10cSrcweir void SwFieldType::_GetFldName() 1619*cdf0e10cSrcweir { 1620*cdf0e10cSrcweir static const sal_uInt16 coFldCnt = STR_TYPE_END - STR_TYPE_BEGIN; 1621*cdf0e10cSrcweir 1622*cdf0e10cSrcweir static sal_uInt16 __READONLY_DATA coFldNms[ coFldCnt ] = { 1623*cdf0e10cSrcweir FLD_DATE_STD, 1624*cdf0e10cSrcweir FLD_TIME_STD, 1625*cdf0e10cSrcweir STR_FILENAMEFLD, 1626*cdf0e10cSrcweir STR_DBNAMEFLD, 1627*cdf0e10cSrcweir STR_CHAPTERFLD, 1628*cdf0e10cSrcweir STR_PAGENUMBERFLD, 1629*cdf0e10cSrcweir STR_DOCSTATFLD, 1630*cdf0e10cSrcweir STR_AUTHORFLD, 1631*cdf0e10cSrcweir STR_SETFLD, 1632*cdf0e10cSrcweir STR_GETFLD, 1633*cdf0e10cSrcweir STR_FORMELFLD, 1634*cdf0e10cSrcweir STR_HIDDENTXTFLD, 1635*cdf0e10cSrcweir STR_SETREFFLD, 1636*cdf0e10cSrcweir STR_GETREFFLD, 1637*cdf0e10cSrcweir STR_DDEFLD, 1638*cdf0e10cSrcweir STR_MACROFLD, 1639*cdf0e10cSrcweir STR_INPUTFLD, 1640*cdf0e10cSrcweir STR_HIDDENPARAFLD, 1641*cdf0e10cSrcweir STR_DOCINFOFLD, 1642*cdf0e10cSrcweir STR_DBFLD, 1643*cdf0e10cSrcweir STR_USERFLD, 1644*cdf0e10cSrcweir STR_POSTITFLD, 1645*cdf0e10cSrcweir STR_TEMPLNAMEFLD, 1646*cdf0e10cSrcweir STR_SEQFLD, 1647*cdf0e10cSrcweir STR_DBNEXTSETFLD, 1648*cdf0e10cSrcweir STR_DBNUMSETFLD, 1649*cdf0e10cSrcweir STR_DBSETNUMBERFLD, 1650*cdf0e10cSrcweir STR_CONDTXTFLD, 1651*cdf0e10cSrcweir STR_NEXTPAGEFLD, 1652*cdf0e10cSrcweir STR_PREVPAGEFLD, 1653*cdf0e10cSrcweir STR_EXTUSERFLD, 1654*cdf0e10cSrcweir FLD_DATE_FIX, 1655*cdf0e10cSrcweir FLD_TIME_FIX, 1656*cdf0e10cSrcweir STR_SETINPUTFLD, 1657*cdf0e10cSrcweir STR_USRINPUTFLD, 1658*cdf0e10cSrcweir STR_SETREFPAGEFLD, 1659*cdf0e10cSrcweir STR_GETREFPAGEFLD, 1660*cdf0e10cSrcweir STR_INTERNETFLD, 1661*cdf0e10cSrcweir STR_JUMPEDITFLD, 1662*cdf0e10cSrcweir STR_SCRIPTFLD, 1663*cdf0e10cSrcweir STR_AUTHORITY, 1664*cdf0e10cSrcweir STR_COMBINED_CHARS, 1665*cdf0e10cSrcweir STR_DROPDOWN 1666*cdf0e10cSrcweir }; 1667*cdf0e10cSrcweir 1668*cdf0e10cSrcweir // Infos fuer Felder einfuegen 1669*cdf0e10cSrcweir SwFieldType::pFldNames = new SvStringsDtor( (sal_uInt8)coFldCnt, 2 ); 1670*cdf0e10cSrcweir for( sal_uInt16 nIdx = 0; nIdx < coFldCnt; ++nIdx ) 1671*cdf0e10cSrcweir { 1672*cdf0e10cSrcweir String* pTmp = new SW_RESSTR( coFldNms[ nIdx ] ); 1673*cdf0e10cSrcweir pTmp->Assign( MnemonicGenerator::EraseAllMnemonicChars( *pTmp ) ); 1674*cdf0e10cSrcweir SwFieldType::pFldNames->Insert(pTmp, nIdx ); 1675*cdf0e10cSrcweir } 1676*cdf0e10cSrcweir } 1677*cdf0e10cSrcweir 1678*cdf0e10cSrcweir /*-------------------------------------------------------------------- 1679*cdf0e10cSrcweir Beschreibung: 1680*cdf0e10cSrcweir --------------------------------------------------------------------*/ 1681*cdf0e10cSrcweir 1682*cdf0e10cSrcweir sal_Bool SwFldMgr::ChooseMacro(const String&) 1683*cdf0e10cSrcweir { 1684*cdf0e10cSrcweir sal_Bool bRet = sal_False; 1685*cdf0e10cSrcweir 1686*cdf0e10cSrcweir // choose script dialog 1687*cdf0e10cSrcweir ::rtl::OUString aScriptURL = SfxApplication::ChooseScript(); 1688*cdf0e10cSrcweir 1689*cdf0e10cSrcweir // the script selector dialog returns a valid script URL 1690*cdf0e10cSrcweir if ( aScriptURL.getLength() != 0 ) 1691*cdf0e10cSrcweir { 1692*cdf0e10cSrcweir SetMacroPath( aScriptURL ); 1693*cdf0e10cSrcweir bRet = sal_True; 1694*cdf0e10cSrcweir } 1695*cdf0e10cSrcweir 1696*cdf0e10cSrcweir return bRet; 1697*cdf0e10cSrcweir } 1698*cdf0e10cSrcweir 1699*cdf0e10cSrcweir void SwFldMgr::SetMacroPath(const String& rPath) 1700*cdf0e10cSrcweir { 1701*cdf0e10cSrcweir sMacroPath = rPath; 1702*cdf0e10cSrcweir sMacroName = rPath; 1703*cdf0e10cSrcweir 1704*cdf0e10cSrcweir // try to set sMacroName member variable by parsing the macro path 1705*cdf0e10cSrcweir // using the new URI parsing services 1706*cdf0e10cSrcweir 1707*cdf0e10cSrcweir Reference< XMultiServiceFactory > xSMgr = 1708*cdf0e10cSrcweir ::comphelper::getProcessServiceFactory(); 1709*cdf0e10cSrcweir 1710*cdf0e10cSrcweir Reference< uri::XUriReferenceFactory > 1711*cdf0e10cSrcweir xFactory( xSMgr->createInstance( 1712*cdf0e10cSrcweir ::rtl::OUString::createFromAscii( 1713*cdf0e10cSrcweir "com.sun.star.uri.UriReferenceFactory" ) ), UNO_QUERY ); 1714*cdf0e10cSrcweir 1715*cdf0e10cSrcweir if ( xFactory.is() ) 1716*cdf0e10cSrcweir { 1717*cdf0e10cSrcweir Reference< uri::XVndSunStarScriptUrl > 1718*cdf0e10cSrcweir xUrl( xFactory->parse( sMacroPath ), UNO_QUERY ); 1719*cdf0e10cSrcweir 1720*cdf0e10cSrcweir if ( xUrl.is() ) 1721*cdf0e10cSrcweir { 1722*cdf0e10cSrcweir sMacroName = xUrl->getName(); 1723*cdf0e10cSrcweir } 1724*cdf0e10cSrcweir } 1725*cdf0e10cSrcweir } 1726*cdf0e10cSrcweir 1727*cdf0e10cSrcweir /*-------------------------------------------------------------------- 1728*cdf0e10cSrcweir Beschreibung: 1729*cdf0e10cSrcweir --------------------------------------------------------------------*/ 1730*cdf0e10cSrcweir 1731*cdf0e10cSrcweir sal_uLong SwFldMgr::GetDefaultFormat(sal_uInt16 nTypeId, sal_Bool bIsText, SvNumberFormatter* pFormatter, double* pVal) 1732*cdf0e10cSrcweir { 1733*cdf0e10cSrcweir double fValue; 1734*cdf0e10cSrcweir short nDefFormat; 1735*cdf0e10cSrcweir 1736*cdf0e10cSrcweir switch (nTypeId) 1737*cdf0e10cSrcweir { 1738*cdf0e10cSrcweir case TYP_TIMEFLD: 1739*cdf0e10cSrcweir case TYP_DATEFLD: 1740*cdf0e10cSrcweir { 1741*cdf0e10cSrcweir Date aDate; 1742*cdf0e10cSrcweir Date* pNullDate = pFormatter->GetNullDate(); 1743*cdf0e10cSrcweir 1744*cdf0e10cSrcweir fValue = aDate - *pNullDate; 1745*cdf0e10cSrcweir 1746*cdf0e10cSrcweir Time aTime; 1747*cdf0e10cSrcweir 1748*cdf0e10cSrcweir sal_uLong nNumFmtTime = (sal_uLong)aTime.GetSec() + (sal_uLong)aTime.GetMin() * 60L + 1749*cdf0e10cSrcweir (sal_uLong)aTime.GetHour() * 3600L; 1750*cdf0e10cSrcweir 1751*cdf0e10cSrcweir fValue += (double)nNumFmtTime / 86400.0; 1752*cdf0e10cSrcweir 1753*cdf0e10cSrcweir nDefFormat = (nTypeId == TYP_DATEFLD) ? NUMBERFORMAT_DATE : NUMBERFORMAT_TIME; 1754*cdf0e10cSrcweir } 1755*cdf0e10cSrcweir break; 1756*cdf0e10cSrcweir 1757*cdf0e10cSrcweir default: 1758*cdf0e10cSrcweir if (bIsText) 1759*cdf0e10cSrcweir { 1760*cdf0e10cSrcweir fValue = 0.0; 1761*cdf0e10cSrcweir nDefFormat = NUMBERFORMAT_TEXT; 1762*cdf0e10cSrcweir } 1763*cdf0e10cSrcweir else 1764*cdf0e10cSrcweir { 1765*cdf0e10cSrcweir fValue = 0.0; 1766*cdf0e10cSrcweir nDefFormat = NUMBERFORMAT_ALL; 1767*cdf0e10cSrcweir } 1768*cdf0e10cSrcweir break; 1769*cdf0e10cSrcweir } 1770*cdf0e10cSrcweir 1771*cdf0e10cSrcweir if (pVal) 1772*cdf0e10cSrcweir *pVal = fValue; 1773*cdf0e10cSrcweir 1774*cdf0e10cSrcweir return pFormatter->GetStandardFormat(nDefFormat, GetCurrLanguage()); 1775*cdf0e10cSrcweir } 1776*cdf0e10cSrcweir 1777*cdf0e10cSrcweir /* -----------------------------01.03.01 16:46-------------------------------- 1778*cdf0e10cSrcweir 1779*cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 1780*cdf0e10cSrcweir Reference<XNumberingTypeInfo> SwFldMgr::GetNumberingInfo() const 1781*cdf0e10cSrcweir { 1782*cdf0e10cSrcweir if(!xNumberingInfo.is()) 1783*cdf0e10cSrcweir { 1784*cdf0e10cSrcweir Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); 1785*cdf0e10cSrcweir Reference < XInterface > xI = xMSF->createInstance( 1786*cdf0e10cSrcweir ::rtl::OUString::createFromAscii( 1787*cdf0e10cSrcweir "com.sun.star.text.DefaultNumberingProvider" )); 1788*cdf0e10cSrcweir Reference<XDefaultNumberingProvider> xDefNum(xI, UNO_QUERY); 1789*cdf0e10cSrcweir DBG_ASSERT(xDefNum.is(), "service missing: \"com.sun.star.text.DefaultNumberingProvider\""); 1790*cdf0e10cSrcweir ((SwFldMgr*)this)->xNumberingInfo = Reference<XNumberingTypeInfo>(xDefNum, UNO_QUERY); 1791*cdf0e10cSrcweir } 1792*cdf0e10cSrcweir return xNumberingInfo; 1793*cdf0e10cSrcweir } 1794