LCOV - code coverage report
Current view: top level - sw/source/core/unocore - unofield.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 806 1444 55.8 %
Date: 2012-08-25 Functions: 79 108 73.1 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 918 2745 33.4 %

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*************************************************************************
       3                 :            :  *
       4                 :            :  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       5                 :            :  *
       6                 :            :  * Copyright 2000, 2010 Oracle and/or its affiliates.
       7                 :            :  *
       8                 :            :  * OpenOffice.org - a multi-platform office productivity suite
       9                 :            :  *
      10                 :            :  * This file is part of OpenOffice.org.
      11                 :            :  *
      12                 :            :  * OpenOffice.org is free software: you can redistribute it and/or modify
      13                 :            :  * it under the terms of the GNU Lesser General Public License version 3
      14                 :            :  * only, as published by the Free Software Foundation.
      15                 :            :  *
      16                 :            :  * OpenOffice.org is distributed in the hope that it will be useful,
      17                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      18                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19                 :            :  * GNU Lesser General Public License version 3 for more details
      20                 :            :  * (a copy is included in the LICENSE file that accompanied this code).
      21                 :            :  *
      22                 :            :  * You should have received a copy of the GNU Lesser General Public License
      23                 :            :  * version 3 along with OpenOffice.org.  If not, see
      24                 :            :  * <http://www.openoffice.org/license.html>
      25                 :            :  * for a copy of the LGPLv3 License.
      26                 :            :  *
      27                 :            :  ************************************************************************/
      28                 :            : 
      29                 :            : #include <swtypes.hxx>
      30                 :            : #include <cmdid.h>
      31                 :            : #include <doc.hxx>
      32                 :            : #include <hints.hxx>
      33                 :            : #include <fmtfld.hxx>
      34                 :            : #include <txtfld.hxx>
      35                 :            : #include <ndtxt.hxx>
      36                 :            : #include <unomap.hxx>
      37                 :            : #include <unoprnms.hxx>
      38                 :            : #include <unotextrange.hxx>
      39                 :            : #include <unotextcursor.hxx>
      40                 :            : #include <unocoll.hxx>
      41                 :            : #include <sfx2/linkmgr.hxx>
      42                 :            : #include <docstat.hxx>
      43                 :            : #include <editsh.hxx>
      44                 :            : #include <viewsh.hxx>
      45                 :            : #include <comphelper/processfactory.hxx>
      46                 :            : #include <comphelper/servicehelper.hxx>
      47                 :            : #include <comphelper/string.hxx>
      48                 :            : #include <comphelper/types.hxx>
      49                 :            : #include <com/sun/star/util/Time.hpp>
      50                 :            : #include <com/sun/star/util/DateTimeRange.hpp>
      51                 :            : #include <com/sun/star/util/DateTime.hpp>
      52                 :            : #include <com/sun/star/util/Date.hpp>
      53                 :            : #include <com/sun/star/beans/XFastPropertySet.hpp>
      54                 :            : #include <com/sun/star/beans/XPropertyStateChangeListener.hpp>
      55                 :            : #include <com/sun/star/beans/PropertyAttribute.hpp>
      56                 :            : #include <com/sun/star/beans/XPropertyContainer.hpp>
      57                 :            : 
      58                 :            : //undef to prevent error (from sfx2/docfile.cxx)
      59                 :            : #undef SEQUENCE
      60                 :            : #include <com/sun/star/text/SetVariableType.hpp>
      61                 :            : #include <com/sun/star/text/WrapTextMode.hpp>
      62                 :            : #include <com/sun/star/text/TextContentAnchorType.hpp>
      63                 :            : #include <com/sun/star/text/PageNumberType.hpp>
      64                 :            : #include <unofield.hxx>
      65                 :            : #include <unocrsr.hxx>
      66                 :            : #include <authfld.hxx>
      67                 :            : #include <flddat.hxx>
      68                 :            : #include <dbfld.hxx>
      69                 :            : #include <usrfld.hxx>
      70                 :            : #include <docufld.hxx>
      71                 :            : #include <expfld.hxx>
      72                 :            : #include <chpfld.hxx>
      73                 :            : #include <flddropdown.hxx>
      74                 :            : #include <poolfmt.hxx>
      75                 :            : #include <poolfmt.hrc>
      76                 :            : #include <pagedesc.hxx>
      77                 :            : #include <docary.hxx>
      78                 :            : #include <reffld.hxx>
      79                 :            : #include <ddefld.hxx>
      80                 :            : #include <SwStyleNameMapper.hxx>
      81                 :            : #include <swunohelper.hxx>
      82                 :            : #include <unofldmid.h>
      83                 :            : #include <scriptinfo.hxx>
      84                 :            : #include <tools/datetime.hxx>
      85                 :            : #include <tools/urlobj.hxx>
      86                 :            : #include <svx/dataaccessdescriptor.hxx>
      87                 :            : #include <osl/mutex.hxx>
      88                 :            : #include <vcl/svapp.hxx>
      89                 :            : #include <textapi.hxx>
      90                 :            : #include <editeng/outliner.hxx>
      91                 :            : #include <docsh.hxx>
      92                 :            : #include <fmtmeta.hxx> // MetaFieldManager
      93                 :            : #include <switerator.hxx>
      94                 :            : #include <bookmrk.hxx>
      95                 :            : #include <rtl/strbuf.hxx>
      96                 :            : #include <vector>
      97                 :            : #include <xmloff/odffields.hxx>
      98                 :            : 
      99                 :            : using ::rtl::OUString;
     100                 :            : using namespace ::com::sun::star;
     101                 :            : using namespace nsSwDocInfoSubType;
     102                 :            : 
     103                 :            : #define COM_TEXT_FLDMASTER      "com.sun.star.text.FieldMaster."
     104                 :            : 
     105                 :            : // case-corrected version of the first part for the service names (see #i67811)
     106                 :            : #define COM_TEXT_FLDMASTER_CC   "com.sun.star.text.fieldmaster."
     107                 :            : 
     108                 :            : // note: this thing is indexed as an array, so do not insert/remove entries!
     109                 :            : static const sal_uInt16 aDocInfoSubTypeFromService[] =
     110                 :            : {
     111                 :            :     DI_CHANGE | DI_SUB_AUTHOR,  //PROPERTY_MAP_FLDTYP_DOCINFO_CHANGE_AUTHOR
     112                 :            :     DI_CHANGE | DI_SUB_DATE,    //PROPERTY_MAP_FLDTYP_DOCINFO_CHANGE_DATE_TIME
     113                 :            :     DI_EDIT | DI_SUB_TIME,      //PROPERTY_MAP_FLDTYP_DOCINFO_EDIT_TIME
     114                 :            :     DI_COMMENT,                 //PROPERTY_MAP_FLDTYP_DOCINFO_DESCRIPTION
     115                 :            :     DI_CREATE | DI_SUB_AUTHOR,  //PROPERTY_MAP_FLDTYP_DOCINFO_CREATE_AUTHOR
     116                 :            :     DI_CREATE | DI_SUB_DATE,    //PROPERTY_MAP_FLDTYP_DOCINFO_CREATE_DATE_TIME
     117                 :            :     0,                          //DUMMY
     118                 :            :     0,                          //DUMMY
     119                 :            :     0,                          //DUMMY
     120                 :            :     0,                          //DUMMY
     121                 :            :     DI_CUSTOM,                  //PROPERTY_MAP_FLDTYP_DOCINFO_CUSTOM
     122                 :            :     DI_PRINT | DI_SUB_AUTHOR,   //PROPERTY_MAP_FLDTYP_DOCINFO_PRINT_AUTHOR
     123                 :            :     DI_PRINT | DI_SUB_DATE,     //PROPERTY_MAP_FLDTYP_DOCINFO_PRINT_DATE_TIME
     124                 :            :     DI_KEYS,                    //PROPERTY_MAP_FLDTYP_DOCINFO_KEY_WORDS
     125                 :            :     DI_THEMA,                   //PROPERTY_MAP_FLDTYP_DOCINFO_SUBJECT
     126                 :            :     DI_TITEL,                   //PROPERTY_MAP_FLDTYP_DOCINFO_TITLE
     127                 :            :     DI_DOCNO                    //PROPERTY_MAP_FLDTYP_DOCINFO_REVISION
     128                 :            : };
     129                 :            : 
     130                 :            : struct ServiceIdResId
     131                 :            : {
     132                 :            :     sal_uInt16 nResId;
     133                 :            :     sal_uInt16 nServiceId;
     134                 :            : };
     135                 :            : 
     136                 :            : static const ServiceIdResId aServiceToRes[] =
     137                 :            : {
     138                 :            :     {RES_DATETIMEFLD,   SW_SERVICE_FIELDTYPE_DATETIME               },
     139                 :            :     {RES_USERFLD,       SW_SERVICE_FIELDTYPE_USER                   },
     140                 :            :     {RES_SETEXPFLD,         SW_SERVICE_FIELDTYPE_SET_EXP            }    ,
     141                 :            :     {RES_GETEXPFLD,         SW_SERVICE_FIELDTYPE_GET_EXP            }    ,
     142                 :            :     {RES_FILENAMEFLD,   SW_SERVICE_FIELDTYPE_FILE_NAME              },
     143                 :            :     {RES_PAGENUMBERFLD,     SW_SERVICE_FIELDTYPE_PAGE_NUM           }    ,
     144                 :            :     {RES_AUTHORFLD,         SW_SERVICE_FIELDTYPE_AUTHOR             }    ,
     145                 :            :     {RES_CHAPTERFLD,    SW_SERVICE_FIELDTYPE_CHAPTER                },
     146                 :            :     {RES_GETREFFLD,         SW_SERVICE_FIELDTYPE_GET_REFERENCE      }    ,
     147                 :            :     {RES_HIDDENTXTFLD,  SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT       },
     148                 :            :     {RES_POSTITFLD,         SW_SERVICE_FIELDTYPE_ANNOTATION         }    ,
     149                 :            :     {RES_INPUTFLD,      SW_SERVICE_FIELDTYPE_INPUT                  },
     150                 :            :     {RES_MACROFLD,      SW_SERVICE_FIELDTYPE_MACRO                  },
     151                 :            :     {RES_DDEFLD,        SW_SERVICE_FIELDTYPE_DDE                    },
     152                 :            :     {RES_HIDDENPARAFLD,     SW_SERVICE_FIELDTYPE_HIDDEN_PARA        }    ,
     153                 :            :     {RES_DOCINFOFLD,    SW_SERVICE_FIELDTYPE_DOC_INFO               },
     154                 :            :     {RES_TEMPLNAMEFLD,  SW_SERVICE_FIELDTYPE_TEMPLATE_NAME          },
     155                 :            :     {RES_EXTUSERFLD,    SW_SERVICE_FIELDTYPE_USER_EXT               },
     156                 :            :     {RES_REFPAGESETFLD,     SW_SERVICE_FIELDTYPE_REF_PAGE_SET       }    ,
     157                 :            :     {RES_REFPAGEGETFLD,     SW_SERVICE_FIELDTYPE_REF_PAGE_GET       }    ,
     158                 :            :     {RES_JUMPEDITFLD,   SW_SERVICE_FIELDTYPE_JUMP_EDIT              },
     159                 :            :     {RES_SCRIPTFLD,         SW_SERVICE_FIELDTYPE_SCRIPT             }    ,
     160                 :            :     {RES_DBNEXTSETFLD,  SW_SERVICE_FIELDTYPE_DATABASE_NEXT_SET      },
     161                 :            :     {RES_DBNUMSETFLD,   SW_SERVICE_FIELDTYPE_DATABASE_NUM_SET       },
     162                 :            :     {RES_DBSETNUMBERFLD, SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM      } ,
     163                 :            :     {RES_DBFLD,             SW_SERVICE_FIELDTYPE_DATABASE           }    ,
     164                 :            :     {RES_DBNAMEFLD,     SW_SERVICE_FIELDTYPE_DATABASE_NAME          },
     165                 :            :     {RES_DOCSTATFLD,    SW_SERVICE_FIELDTYPE_PAGE_COUNT             },
     166                 :            :     {RES_DOCSTATFLD,    SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT        },
     167                 :            :     {RES_DOCSTATFLD,    SW_SERVICE_FIELDTYPE_WORD_COUNT             },
     168                 :            :     {RES_DOCSTATFLD,    SW_SERVICE_FIELDTYPE_CHARACTER_COUNT        },
     169                 :            :     {RES_DOCSTATFLD,    SW_SERVICE_FIELDTYPE_TABLE_COUNT            },
     170                 :            :     {RES_DOCSTATFLD,    SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT   },
     171                 :            :     {RES_DOCSTATFLD,    SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT  },
     172                 :            :     {RES_DOCINFOFLD,    SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR  },
     173                 :            :     {RES_DOCINFOFLD,        SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME},
     174                 :            :     {RES_DOCINFOFLD,        SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME       },
     175                 :            :     {RES_DOCINFOFLD,        SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION     },
     176                 :            :     {RES_DOCINFOFLD,        SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR   },
     177                 :            :     {RES_DOCINFOFLD,        SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME},
     178                 :            :     {RES_DOCINFOFLD,        SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM          },
     179                 :            :     {RES_DOCINFOFLD,        SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR    },
     180                 :            :     {RES_DOCINFOFLD,        SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME },
     181                 :            :     {RES_DOCINFOFLD,        SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS       },
     182                 :            :     {RES_DOCINFOFLD,        SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT         },
     183                 :            :     {RES_DOCINFOFLD,        SW_SERVICE_FIELDTYPE_DOCINFO_TITLE           },
     184                 :            :     {RES_INPUTFLD,      SW_SERVICE_FIELDTYPE_INPUT_USER                  },
     185                 :            :     {RES_HIDDENTXTFLD,  SW_SERVICE_FIELDTYPE_HIDDEN_TEXT                 },
     186                 :            :     {RES_AUTHORITY,     SW_SERVICE_FIELDTYPE_BIBLIOGRAPHY                },
     187                 :            :     {RES_COMBINED_CHARS,    SW_SERVICE_FIELDTYPE_COMBINED_CHARACTERS     },
     188                 :            :     {RES_DROPDOWN,  SW_SERVICE_FIELDTYPE_DROPDOWN                        },
     189                 :            :     {RES_TABLEFLD,      SW_SERVICE_FIELDTYPE_TABLE_FORMULA              },
     190                 :            :     {USHRT_MAX,         USHRT_MAX                                        }
     191                 :            : };
     192                 :            : 
     193                 :          9 : sal_uInt16 lcl_ServiceIdToResId(sal_uInt16 nServiceId)
     194                 :            : {
     195                 :          9 :     const ServiceIdResId* pMap = aServiceToRes;
     196 [ +  - ][ +  + ]:        165 :     while( USHRT_MAX != pMap->nServiceId && nServiceId != pMap->nServiceId )
                 [ +  + ]
     197                 :        156 :             ++pMap;
     198                 :            : #if OSL_DEBUG_LEVEL > 0
     199                 :            :     if( USHRT_MAX == pMap->nServiceId )
     200                 :            :         OSL_FAIL("service id not found");
     201                 :            : #endif
     202                 :          9 :     return pMap->nResId;
     203                 :            : }
     204                 :            : 
     205                 :        203 : sal_uInt16 lcl_GetServiceForField( const SwField& rFld )
     206                 :            : {
     207                 :        203 :     sal_uInt16 nWhich = rFld.Which(), nSrvId = USHRT_MAX;
     208                 :            :     //special handling for some fields
     209   [ -  -  -  -  :        203 :     switch( nWhich )
                      + ]
     210                 :            :     {
     211                 :            :     case RES_INPUTFLD:
     212         [ #  # ]:          0 :         if( INP_USR == (rFld.GetSubType() & 0x00ff) )
     213                 :          0 :             nSrvId = SW_SERVICE_FIELDTYPE_INPUT_USER;
     214                 :          0 :         break;
     215                 :            : 
     216                 :            :     case RES_DOCINFOFLD:
     217                 :            :         {
     218                 :          0 :             sal_uInt16 nSubType = rFld.GetSubType();
     219   [ #  #  #  #  :          0 :             switch( (nSubType & 0xff))
          #  #  #  #  #  
                   #  # ]
     220                 :            :             {
     221                 :            :             case DI_CHANGE:
     222                 :            :                 nSrvId = ((nSubType&0x300) == DI_SUB_AUTHOR)
     223                 :            :                         ? SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR
     224         [ #  # ]:          0 :                         : SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME;
     225                 :          0 :                 break;
     226                 :            :             case DI_CREATE:
     227                 :            :                 nSrvId = ((nSubType&0x300) == DI_SUB_AUTHOR)
     228                 :            :                         ? SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR
     229         [ #  # ]:          0 :                         : SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME;
     230                 :          0 :                 break;
     231                 :            :             case DI_PRINT:
     232                 :            :                 nSrvId = ((nSubType&0x300) == DI_SUB_AUTHOR)
     233                 :            :                         ? SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR
     234         [ #  # ]:          0 :                         : SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME;
     235                 :          0 :                 break;
     236                 :          0 :             case DI_EDIT:   nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME;break;
     237                 :          0 :             case DI_COMMENT:nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION;break;
     238                 :          0 :             case DI_KEYS:   nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS;break;
     239                 :          0 :             case DI_THEMA:  nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT;  break;
     240                 :          0 :             case DI_TITEL:  nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_TITLE;    break;
     241                 :          0 :             case DI_DOCNO:  nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_REVISION; break;
     242                 :          0 :             case DI_CUSTOM: nSrvId = SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM;   break;
     243                 :            :             }
     244                 :            :         }
     245                 :          0 :         break;
     246                 :            : 
     247                 :            :     case RES_HIDDENTXTFLD:
     248                 :          0 :         nSrvId = TYP_CONDTXTFLD == rFld.GetSubType()
     249                 :            :                         ? SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT
     250         [ #  # ]:          0 :                         : SW_SERVICE_FIELDTYPE_HIDDEN_TEXT;
     251                 :          0 :         break;
     252                 :            : 
     253                 :            :     case RES_DOCSTATFLD:
     254                 :            :         {
     255   [ #  #  #  #  :          0 :             switch( rFld.GetSubType() )
             #  #  #  # ]
     256                 :            :             {
     257                 :          0 :             case DS_PAGE: nSrvId = SW_SERVICE_FIELDTYPE_PAGE_COUNT; break;
     258                 :          0 :             case DS_PARA: nSrvId = SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT; break;
     259                 :          0 :             case DS_WORD: nSrvId = SW_SERVICE_FIELDTYPE_WORD_COUNT     ; break;
     260                 :          0 :             case DS_CHAR: nSrvId = SW_SERVICE_FIELDTYPE_CHARACTER_COUNT; break;
     261                 :          0 :             case DS_TBL:  nSrvId = SW_SERVICE_FIELDTYPE_TABLE_COUNT    ; break;
     262                 :          0 :             case DS_GRF:  nSrvId = SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT; break;
     263                 :          0 :             case DS_OLE:  nSrvId = SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT; break;
     264                 :            :             }
     265                 :            :         }
     266                 :          0 :         break;
     267                 :            :     }
     268         [ +  - ]:        203 :     if( USHRT_MAX == nSrvId )
     269                 :            :     {
     270         [ +  - ]:       1969 :         for( const ServiceIdResId* pMap = aServiceToRes;
     271                 :            :                 USHRT_MAX != pMap->nResId; ++pMap )
     272         [ +  + ]:       1766 :             if( nWhich == pMap->nResId )
     273                 :            :             {
     274                 :        203 :                 nSrvId = pMap->nServiceId;
     275                 :        203 :                 break;
     276                 :            :             }
     277                 :            :     }
     278                 :            : #if OSL_DEBUG_LEVEL > 0
     279                 :            :     if( USHRT_MAX == nSrvId )
     280                 :            :         OSL_FAIL("resid not found");
     281                 :            : #endif
     282                 :        203 :     return nSrvId;
     283                 :            : }
     284                 :            : 
     285                 :        864 : sal_uInt16 lcl_GetPropMapIdForFieldType( sal_uInt16 nWhich )
     286                 :            : {
     287                 :            :     sal_uInt16 nId;
     288   [ +  +  +  -  :        864 :     switch( nWhich )
                   +  - ]
     289                 :            :     {
     290                 :        111 :     case RES_USERFLD:   nId = PROPERTY_MAP_FLDMSTR_USER;            break;
     291                 :         36 :     case RES_DBFLD:     nId = PROPERTY_MAP_FLDMSTR_DATABASE;        break;
     292                 :        675 :     case RES_SETEXPFLD: nId = PROPERTY_MAP_FLDMSTR_SET_EXP;         break;
     293                 :          0 :     case RES_DDEFLD:    nId = PROPERTY_MAP_FLDMSTR_DDE;             break;
     294                 :         42 :     case RES_AUTHORITY: nId = PROPERTY_MAP_FLDMSTR_BIBLIOGRAPHY;    break;
     295                 :          0 :     default:            nId = PROPERTY_MAP_FLDMSTR_DUMMY0;
     296                 :            :     }
     297                 :        864 :     return nId;
     298                 :            : }
     299                 :            : 
     300                 :        862 : sal_uInt16 GetFieldTypeMId( const OUString& rProperty, const SwFieldType& rTyp )
     301                 :            : {
     302                 :        862 :     sal_uInt16 nId = lcl_GetPropMapIdForFieldType( rTyp.Which() );
     303                 :        862 :     const SfxItemPropertySet* pSet = aSwMapProvider.GetPropertySet( nId );
     304         [ -  + ]:        862 :     if( !pSet )
     305                 :          0 :         nId = USHRT_MAX;
     306                 :            :     else
     307                 :            :     {
     308                 :        862 :         const SfxItemPropertySimpleEntry* pEntry = pSet->getPropertyMap().getByName(rProperty);
     309         [ +  - ]:        862 :         nId = pEntry ? pEntry->nWID : USHRT_MAX;
     310                 :            :     }
     311                 :        862 :     return nId;
     312                 :            : }
     313                 :            : 
     314                 :        769 : sal_uInt16 lcl_GetPropertyMapOfService( sal_uInt16 nServiceId )
     315                 :            : {
     316                 :            :     sal_uInt16 nRet;
     317   [ +  -  +  +  :        769 :     switch ( nServiceId)
          -  +  +  -  +  
          -  +  +  -  -  
          -  -  -  -  -  
          -  +  -  -  -  
          -  +  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
                -  -  - ]
     318                 :            :     {
     319                 :         45 :     case SW_SERVICE_FIELDTYPE_DATETIME: nRet = PROPERTY_MAP_FLDTYP_DATETIME; break;
     320                 :          0 :     case SW_SERVICE_FIELDTYPE_USER: nRet = PROPERTY_MAP_FLDTYP_USER; break;
     321                 :         24 :     case SW_SERVICE_FIELDTYPE_SET_EXP: nRet = PROPERTY_MAP_FLDTYP_SET_EXP; break;
     322                 :         21 :     case SW_SERVICE_FIELDTYPE_GET_EXP: nRet = PROPERTY_MAP_FLDTYP_GET_EXP; break;
     323                 :          0 :     case SW_SERVICE_FIELDTYPE_FILE_NAME: nRet = PROPERTY_MAP_FLDTYP_FILE_NAME; break;
     324                 :         39 :     case SW_SERVICE_FIELDTYPE_PAGE_NUM: nRet = PROPERTY_MAP_FLDTYP_PAGE_NUM; break;
     325                 :        194 :     case SW_SERVICE_FIELDTYPE_AUTHOR: nRet = PROPERTY_MAP_FLDTYP_AUTHOR; break;
     326                 :          0 :     case SW_SERVICE_FIELDTYPE_CHAPTER: nRet = PROPERTY_MAP_FLDTYP_CHAPTER; break;
     327                 :         90 :     case SW_SERVICE_FIELDTYPE_GET_REFERENCE: nRet = PROPERTY_MAP_FLDTYP_GET_REFERENCE; break;
     328                 :          0 :     case SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT: nRet = PROPERTY_MAP_FLDTYP_CONDITIONED_TEXT; break;
     329                 :        192 :     case SW_SERVICE_FIELDTYPE_ANNOTATION: nRet = PROPERTY_MAP_FLDTYP_ANNOTATION; break;
     330                 :            :     case SW_SERVICE_FIELDTYPE_INPUT_USER:
     331                 :          6 :     case SW_SERVICE_FIELDTYPE_INPUT: nRet = PROPERTY_MAP_FLDTYP_INPUT; break;
     332                 :          0 :     case SW_SERVICE_FIELDTYPE_MACRO: nRet = PROPERTY_MAP_FLDTYP_MACRO; break;
     333                 :          0 :     case SW_SERVICE_FIELDTYPE_DDE: nRet = PROPERTY_MAP_FLDTYP_DDE; break;
     334                 :          0 :     case SW_SERVICE_FIELDTYPE_HIDDEN_PARA: nRet = PROPERTY_MAP_FLDTYP_HIDDEN_PARA; break;
     335                 :          0 :     case SW_SERVICE_FIELDTYPE_DOC_INFO: nRet = PROPERTY_MAP_FLDTYP_DOC_INFO; break;
     336                 :          0 :     case SW_SERVICE_FIELDTYPE_TEMPLATE_NAME: nRet = PROPERTY_MAP_FLDTYP_TEMPLATE_NAME; break;
     337                 :          0 :     case SW_SERVICE_FIELDTYPE_USER_EXT: nRet = PROPERTY_MAP_FLDTYP_USER_EXT; break;
     338                 :          0 :     case SW_SERVICE_FIELDTYPE_REF_PAGE_SET: nRet = PROPERTY_MAP_FLDTYP_REF_PAGE_SET; break;
     339                 :          0 :     case SW_SERVICE_FIELDTYPE_REF_PAGE_GET: nRet = PROPERTY_MAP_FLDTYP_REF_PAGE_GET; break;
     340                 :         42 :     case SW_SERVICE_FIELDTYPE_JUMP_EDIT: nRet = PROPERTY_MAP_FLDTYP_JUMP_EDIT; break;
     341                 :          0 :     case SW_SERVICE_FIELDTYPE_SCRIPT: nRet = PROPERTY_MAP_FLDTYP_SCRIPT; break;
     342                 :          0 :     case SW_SERVICE_FIELDTYPE_DATABASE_NEXT_SET: nRet = PROPERTY_MAP_FLDTYP_DATABASE_NEXT_SET; break;
     343                 :          0 :     case SW_SERVICE_FIELDTYPE_DATABASE_NUM_SET: nRet = PROPERTY_MAP_FLDTYP_DATABASE_NUM_SET; break;
     344                 :          0 :     case SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM: nRet = PROPERTY_MAP_FLDTYP_DATABASE_SET_NUM; break;
     345                 :        116 :     case SW_SERVICE_FIELDTYPE_DATABASE: nRet = PROPERTY_MAP_FLDTYP_DATABASE; break;
     346                 :          0 :     case SW_SERVICE_FIELDTYPE_DATABASE_NAME: nRet = PROPERTY_MAP_FLDTYP_DATABASE_NAME; break;
     347                 :          0 :     case SW_SERVICE_FIELDTYPE_TABLE_FORMULA: nRet = PROPERTY_MAP_FLDTYP_TABLE_FORMULA; break;
     348                 :            :     case SW_SERVICE_FIELDTYPE_PAGE_COUNT:
     349                 :            :     case SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT:
     350                 :            :     case SW_SERVICE_FIELDTYPE_WORD_COUNT:
     351                 :            :     case SW_SERVICE_FIELDTYPE_CHARACTER_COUNT:
     352                 :            :     case SW_SERVICE_FIELDTYPE_TABLE_COUNT:
     353                 :            :     case SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT:
     354                 :          0 :     case SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT: nRet = PROPERTY_MAP_FLDTYP_DOCSTAT; break;
     355                 :            :     case SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR:
     356                 :            :     case SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR:
     357                 :          0 :     case SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR: nRet = PROPERTY_MAP_FLDTYP_DOCINFO_AUTHOR; break;
     358                 :            :     case SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME:
     359                 :            :     case SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME:
     360                 :          0 :     case SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME: nRet = PROPERTY_MAP_FLDTYP_DOCINFO_DATE_TIME; break;
     361                 :          0 :     case SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME: nRet = PROPERTY_MAP_FLDTYP_DOCINFO_EDIT_TIME; break;
     362                 :          0 :     case SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM: nRet = PROPERTY_MAP_FLDTYP_DOCINFO_CUSTOM; break;
     363                 :            :     case SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION:
     364                 :            :     case SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS:
     365                 :            :     case SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT:
     366                 :          0 :     case SW_SERVICE_FIELDTYPE_DOCINFO_TITLE: nRet = PROPERTY_MAP_FLDTYP_DOCINFO_MISC; break;
     367                 :          0 :     case SW_SERVICE_FIELDTYPE_DOCINFO_REVISION: nRet = PROPERTY_MAP_FLDTYP_DOCINFO_REVISION; break;
     368                 :          0 :     case SW_SERVICE_FIELDTYPE_BIBLIOGRAPHY: nRet = PROPERTY_MAP_FLDTYP_BIBLIOGRAPHY; break;
     369                 :            :     case SW_SERVICE_FIELDTYPE_DUMMY_0:
     370                 :          0 :     case SW_SERVICE_FIELDTYPE_COMBINED_CHARACTERS: nRet = PROPERTY_MAP_FLDTYP_COMBINED_CHARACTERS; break;
     371                 :          0 :     case SW_SERVICE_FIELDTYPE_DROPDOWN: nRet = PROPERTY_MAP_FLDTYP_DROPDOWN; break;
     372                 :            :     case SW_SERVICE_FIELDTYPE_DUMMY_4:
     373                 :            :     case SW_SERVICE_FIELDTYPE_DUMMY_5:
     374                 :            :     case SW_SERVICE_FIELDTYPE_DUMMY_6:
     375                 :            :     case SW_SERVICE_FIELDTYPE_DUMMY_7:
     376                 :          0 :                 nRet = PROPERTY_MAP_FLDTYP_DUMMY_0; break;
     377                 :          0 :     case SW_SERVICE_FIELDMASTER_USER: nRet = PROPERTY_MAP_FLDMSTR_USER; break;
     378                 :          0 :     case SW_SERVICE_FIELDMASTER_DDE: nRet = PROPERTY_MAP_FLDMSTR_DDE; break;
     379                 :          0 :     case SW_SERVICE_FIELDMASTER_SET_EXP: nRet = PROPERTY_MAP_FLDMSTR_SET_EXP; break;
     380                 :          0 :     case SW_SERVICE_FIELDMASTER_DATABASE: nRet = PROPERTY_MAP_FLDMSTR_DATABASE; break;
     381                 :          0 :     case SW_SERVICE_FIELDMASTER_BIBLIOGRAPHY: nRet = PROPERTY_MAP_FLDMSTR_BIBLIOGRAPHY; break;
     382                 :            :     case SW_SERVICE_FIELDMASTER_DUMMY2:
     383                 :            :     case SW_SERVICE_FIELDMASTER_DUMMY3:
     384                 :            :     case SW_SERVICE_FIELDMASTER_DUMMY4:
     385                 :          0 :     case SW_SERVICE_FIELDMASTER_DUMMY5: nRet = PROPERTY_MAP_FLDMSTR_DUMMY0; break;
     386                 :          0 :     case SW_SERVICE_FIELDTYPE_HIDDEN_TEXT: nRet = PROPERTY_MAP_FLDTYP_HIDDEN_TEXT; break;
     387                 :            :     default:
     388                 :            :         OSL_FAIL( "wrong service id" );
     389                 :          0 :         nRet = USHRT_MAX;
     390                 :            :     }
     391                 :        769 :     return nRet;
     392                 :            : }
     393                 :            : 
     394                 :            : /******************************************************************
     395                 :            :  * SwXFieldMaster
     396                 :            :  ******************************************************************/
     397 [ -  + ][ +  + ]:        495 : TYPEINIT1(SwXFieldMaster, SwClient);
     398                 :            : 
     399                 :            : namespace
     400                 :            : {
     401                 :            :     class theSwXFieldMasterUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theSwXFieldMasterUnoTunnelId > {};
     402                 :            : }
     403                 :            : 
     404                 :         18 : const uno::Sequence< sal_Int8 > & SwXFieldMaster::getUnoTunnelId()
     405                 :            : {
     406                 :         18 :     return theSwXFieldMasterUnoTunnelId::get().getSeq();
     407                 :            : }
     408                 :            : 
     409                 :          9 : sal_Int64 SAL_CALL SwXFieldMaster::getSomething( const uno::Sequence< sal_Int8 >& rId )
     410                 :            :     throw(uno::RuntimeException)
     411                 :            : {
     412   [ +  -  +  - ]:         18 :     if( rId.getLength() == 16
                 [ +  - ]
     413                 :          9 :         && 0 == memcmp( getUnoTunnelId().getConstArray(),
     414                 :          9 :                                         rId.getConstArray(), 16 ) )
     415                 :            :     {
     416                 :          9 :         return sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >(this) );
     417                 :            :     }
     418                 :          9 :     return 0;
     419                 :            : }
     420                 :            : 
     421                 :          0 : OUString SwXFieldMaster::getImplementationName(void) throw( uno::RuntimeException )
     422                 :            : {
     423                 :          0 :     return C2U("SwXFieldMaster");
     424                 :            : }
     425                 :            : 
     426                 :          0 : sal_Bool SwXFieldMaster::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
     427                 :            : {
     428                 :          0 :     sal_Bool bRet = sal_False;
     429         [ #  # ]:          0 :     if(rServiceName.equalsAsciiL(
     430                 :          0 :             RTL_CONSTASCII_STRINGPARAM("com.sun.star.text.TextFieldMaster")))
     431                 :          0 :         bRet = sal_True;
     432                 :            :     else
     433                 :            :     {
     434                 :            :         const sal_Char* pEntry;
     435   [ #  #  #  #  :          0 :         switch( nResTypeId )
                   #  # ]
     436                 :            :         {
     437                 :          0 :         case RES_USERFLD:   pEntry = "User";            break;
     438                 :          0 :         case RES_DBFLD:     pEntry = "Database";        break;
     439                 :          0 :         case RES_SETEXPFLD: pEntry = "SetExpression";   break;
     440                 :          0 :         case RES_DDEFLD:    pEntry = "DDE";             break;
     441                 :          0 :         case RES_AUTHORITY: pEntry = "Bibliography";    break;
     442                 :          0 :         default: pEntry = 0;
     443                 :            :         }
     444         [ #  # ]:          0 :         if( pEntry )
     445                 :            :         {
     446                 :            :             rtl::OString aTmp = rtl::OStringBuffer(RTL_CONSTASCII_STRINGPARAM(
     447 [ #  # ][ #  # ]:          0 :                 "com.sun.star.text.fieldmaster.")).append(pEntry).
     448                 :          0 :                 makeStringAndClear();
     449                 :          0 :             bRet = rServiceName.equalsAsciiL(aTmp.getStr(), aTmp.getLength());
     450                 :            :         }
     451                 :            :     }
     452                 :          0 :     return bRet;
     453                 :            : }
     454                 :            : 
     455                 :          0 : uno::Sequence< OUString > SwXFieldMaster::getSupportedServiceNames(void) throw( uno::RuntimeException )
     456                 :            : {
     457                 :          0 :     uno::Sequence< OUString > aRet(2);
     458         [ #  # ]:          0 :     OUString* pArray = aRet.getArray();
     459         [ #  # ]:          0 :     pArray[0] = C2U("com.sun.star.text.TextFieldMaster");
     460                 :            : 
     461                 :            :     const sal_Char* pEntry1;
     462   [ #  #  #  #  :          0 :     switch( nResTypeId )
                   #  # ]
     463                 :            :     {
     464                 :          0 :     case RES_USERFLD:   pEntry1 = "User";           break;
     465                 :          0 :     case RES_DBFLD:     pEntry1 = "Database";       break;
     466                 :          0 :     case RES_SETEXPFLD: pEntry1 = "SetExpression";  break;
     467                 :          0 :     case RES_DDEFLD:    pEntry1 = "DDE";            break;
     468                 :          0 :     case RES_AUTHORITY: pEntry1 = "Bibliography";   break;
     469                 :          0 :     default: pEntry1 = 0;
     470                 :            :     }
     471         [ #  # ]:          0 :     if( pEntry1 )
     472                 :            :     {
     473         [ #  # ]:          0 :         String s;
     474 [ #  # ][ #  # ]:          0 :         s.AppendAscii( "com.sun.star.text.fieldmaster." ).AppendAscii( pEntry1 );
     475 [ #  # ][ #  # ]:          0 :         pArray[1] = s;
     476                 :            :     }
     477                 :          0 :     return aRet;
     478                 :            : }
     479                 :            : 
     480                 :         65 : SwXFieldMaster::SwXFieldMaster(SwDoc* pDoc, sal_uInt16 nResId) :
     481                 :            :     aLstnrCntnr( (XPropertySet*)this),
     482                 :            :     nResTypeId(nResId),
     483                 :            :     m_pDoc(pDoc),
     484                 :            :     m_bIsDescriptor(sal_True),
     485                 :            :     fParam1(0.),
     486                 :            :     nParam1(-1),
     487                 :            :     bParam1(sal_False),
     488 [ +  - ][ +  - ]:         65 :     nParam2(0)
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     489                 :            : {
     490 [ +  - ][ +  - ]:         65 :     pDoc->GetPageDescFromPool(RES_POOLPAGE_STANDARD)->Add(this);
     491                 :         65 : }
     492                 :            : 
     493                 :        436 : SwXFieldMaster::SwXFieldMaster(SwFieldType& rType, SwDoc* pDoc) :
     494                 :            :     SwClient(&rType),
     495                 :            :     aLstnrCntnr( (XPropertySet*)this),
     496                 :        436 :     nResTypeId(rType.Which()),
     497                 :            :     m_pDoc(pDoc),
     498                 :            :     m_bIsDescriptor(sal_False),
     499                 :            :     fParam1(0.),
     500                 :            :     nParam1(-1),
     501         [ +  - ]:        872 :     bParam1(sal_False)
           [ +  -  +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     502                 :            : {
     503                 :            : 
     504                 :        436 : }
     505                 :            : 
     506 [ +  - ][ +  - ]:        501 : SwXFieldMaster::~SwXFieldMaster()
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     507                 :            : {
     508                 :            : 
     509         [ -  + ]:       1002 : }
     510                 :            : 
     511                 :          2 : uno::Reference< beans::XPropertySetInfo >  SwXFieldMaster::getPropertySetInfo(void)
     512                 :            :                                             throw( uno::RuntimeException )
     513                 :            : {
     514         [ +  - ]:          2 :     SolarMutexGuard aGuard;
     515                 :            :     uno::Reference< beans::XPropertySetInfo >  aRef =
     516                 :            :                         aSwMapProvider.GetPropertySet(
     517 [ +  - ][ +  - ]:          2 :                                 lcl_GetPropMapIdForFieldType( nResTypeId ) )->getPropertySetInfo();
     518         [ +  - ]:          2 :     return aRef;
     519                 :            : }
     520                 :            : 
     521                 :        485 : void SwXFieldMaster::setPropertyValue( const OUString& rPropertyName,
     522                 :            :                                     const uno::Any& rValue)
     523                 :            :     throw( beans::UnknownPropertyException, beans::PropertyVetoException,
     524                 :            :             lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
     525                 :            : {
     526         [ +  - ]:        485 :     SolarMutexGuard aGuard;
     527         [ +  - ]:        485 :     SwFieldType* pType = GetFldType(sal_True);
     528         [ +  + ]:        485 :     if(pType)
     529                 :            :     {
     530                 :        402 :         sal_Bool bSetValue = sal_True;
     531 [ +  - ][ +  - ]:        402 :         if( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_SUB_TYPE)))
                 [ +  + ]
     532                 :            :         {
     533         [ +  - ]:          3 :             const boost::ptr_vector<String>& rExtraArr(SwStyleNameMapper::GetExtraUINameArray());
     534 [ +  - ][ +  - ]:          3 :             String sTypeName = pType->GetName();
     535                 :            :             static sal_uInt16 nIds[] =
     536                 :            :             {
     537                 :            :                 RES_POOLCOLL_LABEL_DRAWING - RES_POOLCOLL_EXTRA_BEGIN,
     538                 :            :                 RES_POOLCOLL_LABEL_ABB - RES_POOLCOLL_EXTRA_BEGIN,
     539                 :            :                 RES_POOLCOLL_LABEL_TABLE - RES_POOLCOLL_EXTRA_BEGIN,
     540                 :            :                 RES_POOLCOLL_LABEL_FRAME- RES_POOLCOLL_EXTRA_BEGIN,
     541                 :            :                 0
     542                 :            :             };
     543         [ +  + ]:         15 :             for(const sal_uInt16 * pIds = nIds; *pIds; ++pIds)
     544                 :            :             {
     545 [ +  - ][ +  - ]:         12 :                 if(sTypeName == rExtraArr[ *pIds ] )
                 [ -  + ]
     546                 :            :                 {
     547                 :          0 :                     bSetValue = sal_False;
     548                 :          0 :                     break;
     549                 :            :                 }
     550         [ +  - ]:          3 :             }
     551                 :            :         }
     552         [ +  - ]:        402 :         if( bSetValue )
     553                 :            :         {
     554                 :            :             // nothing special to be done here for the properties
     555                 :            :             // UNO_NAME_DATA_BASE_NAME and UNO_NAME_DATA_BASE_URL.
     556                 :            :             // We just call PutValue (empty string is allowed).
     557                 :            :             // Thus the last property set will be used as Data Source.
     558                 :            : 
     559         [ +  - ]:        402 :             sal_uInt16 nMId = GetFieldTypeMId( rPropertyName, *pType  );
     560         [ +  - ]:        402 :             if( USHRT_MAX != nMId )
     561         [ +  - ]:        402 :                 pType->PutValue( rValue, nMId );
     562                 :            :             else
     563 [ #  # ][ #  # ]:          0 :                 throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
                 [ #  # ]
     564                 :            :         }
     565                 :            :     }
     566         [ +  - ]:        166 :     else if(!pType && m_pDoc &&
           [ +  -  +  + ]
                 [ +  + ]
     567 [ +  - ][ +  - ]:         83 :         ( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_NAME))) )
     568                 :            :     {
     569                 :         57 :         OUString uTmp;
     570                 :         57 :         rValue >>= uTmp;
     571         [ +  - ]:         57 :         String sTypeName(uTmp);
     572         [ +  - ]:         57 :         SwFieldType* pType2 = m_pDoc->GetFldType(nResTypeId, sTypeName, sal_False);
     573                 :            : 
     574         [ +  - ]:         57 :         String sTable(SW_RES(STR_POOLCOLL_LABEL_TABLE));
     575         [ +  - ]:         57 :         String sDrawing(SW_RES(STR_POOLCOLL_LABEL_DRAWING));
     576         [ +  - ]:         57 :         String sFrame(SW_RES(STR_POOLCOLL_LABEL_FRAME));
     577         [ +  - ]:         57 :         String sIllustration(SW_RES(STR_POOLCOLL_LABEL_ABB));
     578                 :            : 
     579 [ +  - ][ +  + ]:         69 :         if(pType2 ||
         [ +  - ][ +  - ]
         [ +  - ][ -  + ]
                 [ -  + ]
     580                 :            :             (RES_SETEXPFLD == nResTypeId &&
     581 [ +  - ][ +  - ]:          6 :             ( sTypeName == sTable || sTypeName == sDrawing ||
     582 [ +  - ][ +  - ]:          6 :               sTypeName == sFrame || sTypeName == sIllustration )))
     583                 :            :         {
     584         [ #  # ]:          0 :             throw lang::IllegalArgumentException();
     585                 :            :         }
     586                 :            :         else
     587                 :            :         {
     588   [ +  -  +  -  :         57 :             switch(nResTypeId)
                      - ]
     589                 :            :             {
     590                 :            :                 case RES_USERFLD :
     591                 :            :                 {
     592         [ +  - ]:         54 :                     SwUserFieldType aType(m_pDoc, sTypeName);
     593         [ +  - ]:         54 :                     pType2 = m_pDoc->InsertFldType(aType);
     594         [ +  - ]:         54 :                     ((SwUserFieldType*)pType2)->SetContent(sParam1);
     595                 :         54 :                     ((SwUserFieldType*)pType2)->SetValue(fParam1);
     596 [ +  - ][ -  + ]:         54 :                     ((SwUserFieldType*)pType2)->SetType(bParam1 ? nsSwGetSetExpType::GSE_EXPR : nsSwGetSetExpType::GSE_STRING);
     597                 :            :                 }
     598                 :         54 :                 break;
     599                 :            :                 case RES_DDEFLD :
     600                 :            :                 {
     601                 :            :                     SwDDEFieldType aType(sTypeName, sParam1,
     602 [ #  # ][ #  # ]:          0 :                         sal::static_int_cast< sal_uInt16 >(bParam1 ? sfx2::LINKUPDATE_ALWAYS : sfx2::LINKUPDATE_ONCALL));
     603 [ #  # ][ #  # ]:          0 :                     pType2 = m_pDoc->InsertFldType(aType);
     604                 :            :                 }
     605                 :          0 :                 break;
     606                 :            :                 case RES_SETEXPFLD :
     607                 :            :                 {
     608         [ +  - ]:          3 :                     SwSetExpFieldType aType(m_pDoc, sTypeName);
     609         [ -  + ]:          3 :                     if(sParam1.Len())
     610 [ #  # ][ #  # ]:          0 :                         aType.SetDelimiter(rtl::OUString(sParam1.GetChar(0)));
                 [ #  # ]
     611 [ -  + ][ #  # ]:          3 :                     if(nParam1 > -1 && nParam1 < MAXLEVEL)
     612                 :          0 :                         aType.SetOutlineLvl(nParam1);
     613 [ +  - ][ +  - ]:          3 :                     pType2 = m_pDoc->InsertFldType(aType);
     614                 :            :                 }
     615                 :          3 :                 break;
     616                 :            :                 case RES_DBFLD :
     617                 :            :                 {
     618         [ #  # ]:          0 :                     ::GetString( rValue, sParam3 );
     619         [ #  # ]:          0 :                     pType = GetFldType();
     620                 :            :                 }
     621                 :          0 :                 break;
     622                 :            :             }
     623         [ +  - ]:         57 :             if(pType2)
     624                 :            :             {
     625         [ +  - ]:         57 :                 pType2->Add(this);
     626                 :         57 :                 m_bIsDescriptor = sal_False;
     627                 :            :             }
     628                 :            :             else
     629         [ #  # ]:          0 :                 throw uno::RuntimeException();
     630                 :            :         }
     631                 :            : 
     632 [ +  - ][ +  - ]:         57 :         OSL_ENSURE(pType2, "kein FieldType gefunden!" );
         [ +  - ][ +  - ]
                 [ +  - ]
     633                 :            :     }
     634                 :            :     else
     635                 :            :     {
     636   [ -  +  -  -  :         26 :         switch( nResTypeId )
                      - ]
     637                 :            :         {
     638                 :            :         case RES_USERFLD:
     639 [ #  # ][ #  # ]:          0 :             if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_CONTENT)))
                 [ #  # ]
     640         [ #  # ]:          0 :                 ::GetString( rValue, sParam1 );
     641 [ #  # ][ #  # ]:          0 :             else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_VALUE )))
                 [ #  # ]
     642                 :            :             {
     643 [ #  # ][ #  # ]:          0 :                 if(rValue.getValueType() != ::getCppuType(static_cast<const double*>(0)))
     644         [ #  # ]:          0 :                     throw lang::IllegalArgumentException();
     645                 :          0 :                 fParam1 = *(double*)rValue.getValue();
     646                 :            :             }
     647 [ #  # ][ #  # ]:          0 :             else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_IS_EXPRESSION )))
                 [ #  # ]
     648                 :            :             {
     649 [ #  # ][ #  # ]:          0 :                 if(rValue.getValueType() != ::getBooleanCppuType())
     650         [ #  # ]:          0 :                     throw lang::IllegalArgumentException();
     651                 :          0 :                 bParam1 = *(sal_Bool*)rValue.getValue();
     652                 :            :             }
     653                 :            : 
     654                 :          0 :             break;
     655                 :            :         case RES_DBFLD:
     656 [ +  - ][ +  - ]:         26 :             if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_NAME)))
                 [ +  + ]
     657         [ +  - ]:          8 :                 ::GetString( rValue, sParam1 );
     658 [ +  - ][ +  - ]:         18 :             else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_TABLE_NAME)))
                 [ +  + ]
     659         [ +  - ]:          8 :                 ::GetString( rValue, sParam2 );
     660 [ +  - ][ +  - ]:         10 :             else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_COLUMN_NAME)))
                 [ +  + ]
     661         [ +  - ]:          8 :                 ::GetString( rValue, sParam3 );
     662 [ +  - ][ +  - ]:          2 :             else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_COMMAND_TYPE)))
                 [ +  - ]
     663                 :          2 :                 rValue >>= nParam2;
     664 [ +  - ][ +  - ]:         26 :             if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_URL)))
                 [ -  + ]
     665         [ #  # ]:          0 :                 ::GetString( rValue, sParam5 );
     666                 :            : 
     667 [ +  + ][ -  +  :         64 :             if((sParam1.Len() || sParam5.Len())
             +  +  +  + ]
                 [ +  + ]
     668                 :         38 :                     && sParam2.Len() && sParam3.Len())
     669         [ +  - ]:          8 :                 GetFldType();
     670                 :         26 :             break;
     671                 :            :         case  RES_SETEXPFLD:
     672 [ #  # ][ #  # ]:          0 :             if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_NUMBERING_SEPARATOR)))
                 [ #  # ]
     673         [ #  # ]:          0 :                 ::GetString( rValue, sParam1 );
     674 [ #  # ][ #  # ]:          0 :             else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_CHAPTER_NUMBERING_LEVEL)))
                 [ #  # ]
     675                 :          0 :                 rValue >>= nParam1;
     676                 :          0 :             break;
     677                 :            :         case RES_DDEFLD:
     678                 :            :             {
     679 [ #  # ][ #  # ]:          0 :                 sal_uInt16 nPart = rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DDE_COMMAND_TYPE))  ? 0 :
     680 [ #  # ][ #  # ]:          0 :                         rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DDE_COMMAND_FILE))  ? 1 :
     681 [ #  # ][ #  # ]:          0 :                         rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DDE_COMMAND_ELEMENT))  ? 2 :
     682 [ #  # ][ #  # ]:          0 :                         rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_IS_AUTOMATIC_UPDATE)) ? 3 : USHRT_MAX;
         [ #  # ][ #  #  
             #  #  #  # ]
     683         [ #  # ]:          0 :                 if(nPart  < 3 )
     684                 :            :                 {
     685         [ #  # ]:          0 :                     String sTmp;
     686         [ #  # ]:          0 :                     if(!sParam1.Len())
     687         [ #  # ]:          0 :                         (sParam1 = sfx2::cTokenSeperator)
     688         [ #  # ]:          0 :                                 += sfx2::cTokenSeperator;
     689                 :            : 
     690                 :            :                     sParam1.SetToken( nPart, sfx2::cTokenSeperator,
     691 [ #  # ][ #  # ]:          0 :                                 ::GetString( rValue, sTmp ));
                 [ #  # ]
     692                 :            :                 }
     693         [ #  # ]:          0 :                 else if(3 == nPart)
     694                 :          0 :                     bParam1 = *(sal_Bool*)rValue.getValue();
     695                 :            :             }
     696                 :          0 :             break;
     697                 :            :         default:
     698 [ #  # ][ #  # ]:          0 :             throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
                 [ #  # ]
     699                 :            :         }
     700         [ +  - ]:        485 :     }
     701                 :        485 : }
     702                 :            : 
     703                 :        979 : SwFieldType* SwXFieldMaster::GetFldType(sal_Bool bDontCreate) const
     704                 :            : {
     705 [ +  + ][ +  + ]:        979 :     if(!bDontCreate && RES_DBFLD == nResTypeId && m_bIsDescriptor && m_pDoc)
         [ +  + ][ +  - ]
     706                 :            :     {
     707                 :          8 :         SwDBData aData;
     708                 :            : 
     709                 :            :         // set DataSource
     710         [ +  - ]:          8 :         svx::ODataAccessDescriptor aAcc;
     711         [ +  - ]:          8 :         if( sParam1.Len() > 0 )
     712 [ +  - ][ +  - ]:          8 :             aAcc[ svx::daDataSource ]       <<= OUString(sParam1); // DataBaseName
                 [ +  - ]
     713         [ #  # ]:          0 :         else if( sParam5.Len() > 0 )
     714 [ #  # ][ #  # ]:          0 :             aAcc[ svx::daDatabaseLocation]  <<= OUString(sParam5); // DataBaseURL
                 [ #  # ]
     715         [ +  - ]:          8 :         aData.sDataSource = aAcc.getDataSource();
     716                 :            : 
     717         [ +  - ]:          8 :         aData.sCommand = sParam2;
     718                 :          8 :         aData.nCommandType = nParam2;
     719         [ +  - ]:          8 :         SwDBFieldType aType(m_pDoc, sParam3,  aData);
     720         [ +  - ]:          8 :         SwFieldType* pType = m_pDoc->InsertFldType(aType);
     721                 :          8 :         SwXFieldMaster* pThis = ((SwXFieldMaster*)this);
     722 [ +  - ][ +  - ]:          8 :         pType->Add(pThis);
     723 [ +  - ][ +  - ]:          8 :         pThis->m_bIsDescriptor = sal_False;
     724                 :            :     }
     725         [ +  + ]:        979 :     if(m_bIsDescriptor)
     726                 :         97 :         return 0;
     727                 :            :     else
     728                 :        979 :         return (SwFieldType*)GetRegisteredIn();
     729                 :            : }
     730                 :            : 
     731                 :            : typedef std::vector<SwFmtFld*> SwDependentFields;
     732                 :            : 
     733                 :        477 : uno::Any SwXFieldMaster::getPropertyValue(const OUString& rPropertyName)
     734                 :            :         throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
     735                 :            : {
     736         [ +  - ]:        477 :     SolarMutexGuard aGuard;
     737                 :        477 :     uno::Any aRet;
     738         [ +  - ]:        477 :     SwFieldType* pType = GetFldType(sal_True);
     739 [ +  - ][ +  - ]:        477 :     if( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_INSTANCE_NAME)) )
                 [ -  + ]
     740                 :            :     {
     741         [ #  # ]:          0 :         String sName;
     742         [ #  # ]:          0 :         if(pType)
     743         [ #  # ]:          0 :             SwXTextFieldMasters::getInstanceName(*pType, sName);
     744 [ #  # ][ #  # ]:          0 :         aRet <<= OUString(sName);
                 [ #  # ]
     745                 :            :     }
     746         [ +  + ]:        477 :     else if(pType)
     747                 :            :     {
     748 [ +  - ][ +  - ]:        463 :         if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_NAME) ))
                 [ +  + ]
     749                 :            :         {
     750 [ +  - ][ +  - ]:          3 :             aRet <<= SwXFieldMaster::GetProgrammaticName(*pType, *GetDoc());
     751                 :            :         }
     752 [ +  - ][ +  - ]:        460 :         else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DEPENDENT_TEXT_FIELDS)) )
                 [ -  + ]
     753                 :            :         {
     754                 :            :             //fill all text fields into a sequence
     755         [ #  # ]:          0 :             SwDependentFields aFldArr;
     756         [ #  # ]:          0 :             SwIterator<SwFmtFld,SwFieldType> aIter( *pType );
     757         [ #  # ]:          0 :             SwFmtFld* pFld = aIter.First();
     758         [ #  # ]:          0 :             while(pFld)
     759                 :            :             {
     760 [ #  # ][ #  # ]:          0 :                 if(pFld->IsFldInDoc())
     761         [ #  # ]:          0 :                     aFldArr.push_back(pFld);
     762         [ #  # ]:          0 :                 pFld = aIter.Next();
     763                 :            :             }
     764                 :            : 
     765         [ #  # ]:          0 :             uno::Sequence<uno::Reference <text::XDependentTextField> > aRetSeq(aFldArr.size());
     766         [ #  # ]:          0 :             uno::Reference<text::XDependentTextField>* pRetSeq = aRetSeq.getArray();
     767         [ #  # ]:          0 :             for(sal_uInt16 i = 0; i < aFldArr.size(); i++)
     768                 :            :             {
     769         [ #  # ]:          0 :                 pFld = aFldArr[i];
     770         [ #  # ]:          0 :                 SwXTextField * pInsert = SwXTextField::CreateSwXTextField(*GetDoc(), *pFld);
     771                 :            : 
     772 [ #  # ][ #  # ]:          0 :                 pRetSeq[i] = uno::Reference<text::XDependentTextField>(pInsert);
                 [ #  # ]
     773                 :            :             }
     774 [ #  # ][ #  # ]:          0 :             aRet <<= aRetSeq;
                 [ #  # ]
     775                 :            :         }
     776         [ +  - ]:        460 :         else if(pType)
     777                 :            :         {
     778                 :            :             //TODO: Properties fuer die uebrigen Feldtypen einbauen
     779         [ +  - ]:        460 :             sal_uInt16 nMId = GetFieldTypeMId( rPropertyName, *pType );
     780         [ +  - ]:        460 :             if( USHRT_MAX != nMId )
     781                 :            :             {
     782         [ +  - ]:        460 :                 pType->QueryValue( aRet, nMId );
     783                 :            : 
     784 [ +  - ][ +  - ]:        914 :                 if( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_NAME)) ||
           [ +  +  -  + ]
                 [ +  + ]
     785 [ +  - ][ +  - ]:        454 :                     rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_URL)))
     786                 :            :                 {
     787                 :          6 :                     OUString aDataSource;
     788                 :          6 :                     aRet >>= aDataSource;
     789         [ +  - ]:          6 :                     aRet <<= OUString();
     790                 :            : 
     791                 :          6 :                     OUString *pStr = 0;     // only one of this properties will return
     792                 :            :                                             // a non-empty string.
     793         [ +  - ]:          6 :                     INetURLObject aObj;
     794         [ +  - ]:          6 :                     aObj.SetURL( aDataSource );
     795                 :          6 :                     sal_Bool bIsURL = aObj.GetProtocol() != INET_PROT_NOT_VALID;
     796 [ #  # ][ #  # ]:          6 :                     if (bIsURL && rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_URL)))
         [ #  # ][ -  + ]
                 [ -  + ]
     797                 :          0 :                         pStr = &aDataSource;        // DataBaseURL
     798 [ +  - ][ +  - ]:          6 :                     else if (!bIsURL && rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_NAME)))
         [ +  - ][ +  - ]
                 [ +  - ]
     799                 :          6 :                         pStr = &aDataSource;        // DataBaseName
     800                 :            : 
     801         [ +  - ]:          6 :                     if (pStr)
     802 [ +  - ][ +  - ]:          6 :                         aRet <<= *pStr;
     803                 :            :                 }
     804                 :            :             }
     805                 :            :             else
     806 [ #  # ][ #  # ]:          0 :                 throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
                 [ #  # ]
     807                 :            :         }
     808                 :            :         else
     809                 :            :         {
     810 [ #  # ][ #  # ]:          0 :             if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_COMMAND_TYPE)) )
                 [ #  # ]
     811         [ #  # ]:          0 :                 aRet <<= nParam2;
     812                 :            :         }
     813                 :            :     }
     814                 :            :     else
     815                 :            :     {
     816 [ +  - ][ +  - ]:         14 :         if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_COMMAND_TYPE)) )
                 [ +  + ]
     817         [ +  - ]:          4 :             aRet <<= nParam2;
     818 [ +  - ][ +  - ]:         10 :         else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DEPENDENT_TEXT_FIELDS)) )
                 [ -  + ]
     819                 :            :         {
     820         [ #  # ]:          0 :             uno::Sequence<uno::Reference <text::XDependentTextField> > aRetSeq(0);
     821 [ #  # ][ #  # ]:          0 :             aRet <<= aRetSeq;
     822                 :            :         }
     823                 :            :         else
     824                 :            :         {
     825                 :         10 :             const String* pStr = 0;
     826         [ +  - ]:         10 :             String sStr;
     827   [ -  +  -  -  :         10 :             switch ( nResTypeId )
                      - ]
     828                 :            :             {
     829                 :            :             case RES_USERFLD:
     830 [ #  # ][ #  # ]:          0 :                 if( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_CONTENT)) )
                 [ #  # ]
     831                 :          0 :                     pStr = &sParam1;
     832 [ #  # ][ #  # ]:          0 :                 else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_VALUE )))
                 [ #  # ]
     833         [ #  # ]:          0 :                     aRet <<= fParam1;
     834 [ #  # ][ #  # ]:          0 :                 else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_IS_EXPRESSION )))
                 [ #  # ]
     835         [ #  # ]:          0 :                     aRet.setValue(&bParam1, ::getBooleanCppuType());
     836                 :          0 :                 break;
     837                 :            :             case RES_DBFLD:
     838 [ +  - ][ +  - ]:         16 :                 if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_NAME)) ||
           [ +  +  -  + ]
                 [ +  + ]
     839 [ +  - ][ +  - ]:          6 :                    rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_URL)))
     840                 :            :                 {
     841                 :          4 :                     pStr = 0;   // only one of this properties will return
     842                 :            :                                 // a non-empty string.
     843         [ +  - ]:          4 :                     INetURLObject aObj;
     844 [ +  - ][ +  - ]:          4 :                     aObj.SetURL( sParam5 );  // SetSmartURL
     845                 :          4 :                     sal_Bool bIsURL = aObj.GetProtocol() != INET_PROT_NOT_VALID;
     846 [ #  # ][ #  # ]:          4 :                     if (bIsURL && rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_URL)))
         [ #  # ][ -  + ]
                 [ -  + ]
     847                 :          0 :                         pStr = &sParam5;        // DataBaseURL
     848 [ +  - ][ +  - ]:          4 :                     else if ( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_NAME)))
                 [ +  - ]
     849         [ +  - ]:          4 :                         pStr = &sParam1;            // DataBaseName
     850                 :            :                 }
     851 [ +  - ][ +  - ]:          6 :                 else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_TABLE_NAME)))
                 [ +  + ]
     852                 :          4 :                     pStr = &sParam2;
     853 [ +  - ][ +  - ]:          2 :                 else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_COLUMN_NAME)))
                 [ +  - ]
     854                 :          2 :                     pStr = &sParam3;
     855                 :         10 :                 break;
     856                 :            :             case RES_SETEXPFLD:
     857 [ #  # ][ #  # ]:          0 :                 if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_NUMBERING_SEPARATOR)))
                 [ #  # ]
     858                 :          0 :                     pStr = &sParam1;
     859 [ #  # ][ #  # ]:          0 :                 else if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_CHAPTER_NUMBERING_LEVEL)))
                 [ #  # ]
     860         [ #  # ]:          0 :                     aRet <<= nParam1;
     861                 :          0 :                 break;
     862                 :            :             case RES_DDEFLD:
     863                 :            :                 {
     864 [ #  # ][ #  # ]:          0 :                     sal_uInt16 nPart = rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DDE_COMMAND_TYPE))  ? 0 :
     865 [ #  # ][ #  # ]:          0 :                         rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DDE_COMMAND_FILE)) ? 1 :
     866 [ #  # ][ #  # ]:          0 :                             rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DDE_COMMAND_ELEMENT))  ? 2 :
     867 [ #  # ][ #  # ]:          0 :                             rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_IS_AUTOMATIC_UPDATE)) ? 3 : USHRT_MAX;
         [ #  # ][ #  #  
             #  #  #  # ]
     868         [ #  # ]:          0 :                     if(nPart  < 3 )
     869 [ #  # ][ #  # ]:          0 :                         pStr = &(sStr = sParam1.GetToken(nPart, sfx2::cTokenSeperator));
                 [ #  # ]
     870         [ #  # ]:          0 :                     else if(3 == nPart)
     871         [ #  # ]:          0 :                         aRet.setValue(&bParam1, ::getBooleanCppuType());
     872                 :            :                 }
     873                 :          0 :                 break;
     874                 :            :             default:
     875 [ #  # ][ #  # ]:          0 :                 throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
                 [ #  # ]
     876                 :            :             }
     877                 :            : 
     878         [ +  - ]:         10 :             if( pStr )
     879 [ +  - ][ +  - ]:         10 :                 aRet <<= OUString( *pStr );
                 [ +  - ]
     880                 :            :         }
     881                 :            :     }
     882         [ +  - ]:        477 :     return aRet;
     883                 :            : }
     884                 :            : 
     885                 :          0 : void SwXFieldMaster::addPropertyChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
     886                 :            : {
     887                 :            :     OSL_FAIL("not implemented");
     888                 :          0 : }
     889                 :            : 
     890                 :          0 : void SwXFieldMaster::removePropertyChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
     891                 :            : {
     892                 :            :     OSL_FAIL("not implemented");
     893                 :          0 : }
     894                 :            : 
     895                 :          0 : void SwXFieldMaster::addVetoableChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
     896                 :            : {
     897                 :            :     OSL_FAIL("not implemented");
     898                 :          0 : }
     899                 :            : 
     900                 :          0 : void SwXFieldMaster::removeVetoableChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
     901                 :            : {
     902                 :            :     OSL_FAIL("not implemented");
     903                 :          0 : }
     904                 :            : 
     905                 :          0 : void SwXFieldMaster::dispose(void)          throw( uno::RuntimeException )
     906                 :            : {
     907         [ #  # ]:          0 :     SolarMutexGuard aGuard;
     908         [ #  # ]:          0 :     SwFieldType* pFldType = GetFldType(sal_True);
     909         [ #  # ]:          0 :     if(pFldType)
     910                 :            :     {
     911                 :          0 :         sal_uInt16 nTypeIdx = USHRT_MAX;
     912         [ #  # ]:          0 :         const SwFldTypes* pTypes = GetDoc()->GetFldTypes();
     913         [ #  # ]:          0 :         for( sal_uInt16 i = 0; i < pTypes->size(); i++ )
     914                 :            :         {
     915 [ #  # ][ #  # ]:          0 :             if((*pTypes)[i] == pFldType)
     916                 :          0 :                 nTypeIdx = i;
     917                 :            :         }
     918                 :            : 
     919                 :            :         // zuerst alle Felder loeschen
     920         [ #  # ]:          0 :         SwIterator<SwFmtFld,SwFieldType> aIter( *pFldType );
     921         [ #  # ]:          0 :         SwFmtFld* pFld = aIter.First();
     922         [ #  # ]:          0 :         while(pFld)
     923                 :            :         {
     924                 :            :             // Feld im Undo?
     925                 :          0 :             SwTxtFld *pTxtFld = pFld->GetTxtFld();
     926 [ #  # ][ #  # ]:          0 :             if(pTxtFld && pTxtFld->GetTxtNode().GetNodes().IsDocNodes() )
         [ #  # ][ #  # ]
     927                 :            :             {
     928                 :          0 :                 SwTxtNode& rTxtNode = (SwTxtNode&)*pTxtFld->GetpTxtNode();
     929         [ #  # ]:          0 :                 SwPaM aPam(rTxtNode, *pTxtFld->GetStart());
     930         [ #  # ]:          0 :                 aPam.SetMark();
     931         [ #  # ]:          0 :                 aPam.Move();
     932 [ #  # ][ #  # ]:          0 :                 GetDoc()->DeleteAndJoin(aPam);
     933                 :            :             }
     934         [ #  # ]:          0 :             pFld = aIter.Next();
     935                 :            :         }
     936                 :            :         // dann den FieldType loeschen
     937 [ #  # ][ #  # ]:          0 :         GetDoc()->RemoveFldType(nTypeIdx);
     938                 :            :     }
     939                 :            :     else
     940 [ #  # ][ #  # ]:          0 :         throw uno::RuntimeException();
     941                 :          0 : }
     942                 :            : 
     943                 :          0 : void SwXFieldMaster::addEventListener(const uno::Reference< lang::XEventListener > & aListener)
     944                 :            :                                             throw( uno::RuntimeException )
     945                 :            : {
     946         [ #  # ]:          0 :     if(!GetRegisteredIn())
     947         [ #  # ]:          0 :         throw uno::RuntimeException();
     948                 :          0 :     aLstnrCntnr.AddListener(aListener);
     949                 :          0 : }
     950                 :            : 
     951                 :          0 : void SwXFieldMaster::removeEventListener(const uno::Reference< lang::XEventListener > & aListener)
     952                 :            :                                                     throw( uno::RuntimeException )
     953                 :            : {
     954 [ #  # ][ #  # ]:          0 :     if(!GetRegisteredIn() || !aLstnrCntnr.RemoveListener(aListener))
                 [ #  # ]
     955         [ #  # ]:          0 :         throw uno::RuntimeException();
     956                 :          0 : }
     957                 :            : 
     958                 :         13 : void SwXFieldMaster::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew)
     959                 :            : {
     960                 :         13 :     ClientModify(this, pOld, pNew);
     961         [ +  + ]:         13 :     if(!GetRegisteredIn())
     962                 :            :     {
     963                 :         10 :         aLstnrCntnr.Disposing();
     964                 :         10 :         m_pDoc = 0;
     965                 :            :     }
     966                 :         13 : }
     967                 :          3 : OUString SwXFieldMaster::GetProgrammaticName(const SwFieldType& rType, SwDoc& rDoc)
     968                 :            : {
     969                 :          3 :     OUString sRet(rType.GetName());
     970         [ +  - ]:          3 :     if(RES_SETEXPFLD == rType.Which())
     971                 :            :     {
     972         [ +  - ]:          3 :         const SwFldTypes* pTypes = rDoc.GetFldTypes();
     973         [ +  - ]:        102 :         for( sal_uInt16 i = 0; i <= INIT_FLDTYPES; i++ )
     974                 :            :         {
     975 [ +  - ][ +  + ]:         99 :             if((*pTypes)[i] == &rType)
     976                 :            :             {
     977 [ +  - ][ +  - ]:          3 :                 sRet = SwStyleNameMapper::GetProgName ( sRet, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
         [ +  - ][ +  - ]
     978                 :          3 :                 break;
     979                 :            :             }
     980                 :            :         }
     981                 :            :     }
     982                 :          3 :     return sRet;
     983                 :            : }
     984                 :            : 
     985                 :          3 : OUString SwXFieldMaster::LocalizeFormula(
     986                 :            :     const SwSetExpField& rFld,
     987                 :            :     const OUString& rFormula,
     988                 :            :     sal_Bool bQuery)
     989                 :            : {
     990         [ +  - ]:          3 :     const OUString sTypeName(rFld.GetTyp()->GetName());
     991 [ +  - ][ +  - ]:          3 :     OUString sProgName = SwStyleNameMapper::GetProgName(sTypeName, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
         [ +  - ][ +  - ]
     992         [ -  + ]:          3 :     if(sProgName != sTypeName)
     993                 :            :     {
     994         [ #  # ]:          0 :         OUString sSource = bQuery ? sTypeName : sProgName;
     995         [ #  # ]:          0 :         OUString sDest = bQuery ? sProgName : sTypeName;
     996         [ #  # ]:          0 :         if(!rFormula.compareTo(sSource, sSource.getLength()))
     997                 :            :         {
     998                 :          0 :             OUString sTmpFormula = sDest;
     999                 :          0 :             sTmpFormula += rFormula.copy(sSource.getLength());
    1000                 :          0 :             return sTmpFormula;
    1001 [ #  # ][ #  # ]:          0 :         }
    1002                 :            :     }
    1003                 :          3 :     return rFormula;
    1004                 :            : }
    1005                 :            : 
    1006                 :         87 : SwXTextField* SwXTextField::CreateSwXTextField(SwDoc & rDoc, SwFmtFld const& rFmt)
    1007                 :            : {
    1008         [ +  - ]:         87 :     SwIterator<SwXTextField,SwFieldType> aIter(*rFmt.GetFld()->GetTyp());
    1009                 :         87 :     SwXTextField * pField = 0;
    1010         [ +  - ]:         87 :     SwXTextField * pTemp = aIter.First();
    1011         [ -  + ]:         87 :     while (pTemp)
    1012                 :            :     {
    1013 [ #  # ][ #  # ]:          0 :         if (pTemp->GetFldFmt() == &rFmt)
    1014                 :            :         {
    1015                 :          0 :             pField = pTemp;
    1016                 :          0 :             break;
    1017                 :            :         }
    1018         [ #  # ]:          0 :         pTemp = aIter.Next();
    1019                 :            :     }
    1020 [ +  - ][ +  - ]:         87 :     return pField ? pField : new SwXTextField( rFmt, &rDoc );
                 [ +  - ]
    1021                 :            : }
    1022                 :            : 
    1023                 :        109 : sal_uInt16 SwXTextField::GetServiceId()
    1024                 :            : {
    1025                 :        109 :     return m_nServiceId;
    1026                 :            : }
    1027                 :            : 
    1028                 :            : struct SwFieldProperties_Impl
    1029                 :            : {
    1030                 :            :     String      sPar1;
    1031                 :            :     String      sPar2;
    1032                 :            :     String      sPar3;
    1033                 :            :     String      sPar4;
    1034                 :            :     String      sPar5;
    1035                 :            :     String      sPar6;
    1036                 :            :     Date            aDate;
    1037                 :            :     double          fDouble;
    1038                 :            :     uno::Sequence<beans::PropertyValue> aPropSeq;
    1039                 :            :     uno::Sequence<OUString> aStrings;
    1040                 :            :     util::DateTime* pDateTime;
    1041                 :            : 
    1042                 :            :     sal_Int32       nSubType;
    1043                 :            :     sal_Int32       nFormat;
    1044                 :            :     sal_uInt16      nUSHORT1;
    1045                 :            :     sal_uInt16      nUSHORT2;
    1046                 :            :     sal_Int16       nSHORT1;
    1047                 :            :     sal_Int8        nByte1;
    1048                 :            :     sal_Bool        bFormatIsDefault;
    1049                 :            :     sal_Bool        bBool1;
    1050                 :            :     sal_Bool        bBool2;
    1051                 :            :     sal_Bool        bBool3;
    1052                 :            :     sal_Bool        bBool4;
    1053                 :            : 
    1054                 :        134 :     SwFieldProperties_Impl():
    1055                 :            :         aDate( Date::EMPTY ),
    1056                 :            :         fDouble(0.),
    1057                 :            :         pDateTime(0),
    1058                 :            :         nSubType(0),
    1059                 :            :         nFormat(0),
    1060                 :            :         nUSHORT1(0),
    1061                 :            :         nUSHORT2(0),
    1062                 :            :         nSHORT1(0),
    1063                 :            :         nByte1(0),
    1064                 :            :         bFormatIsDefault(sal_True),
    1065                 :            :         bBool1(sal_False),
    1066                 :            :         bBool2(sal_False),
    1067                 :            :         bBool3(sal_False),
    1068 [ +  - ][ +  - ]:        134 :         bBool4(sal_True) //Automatic language
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
    1069                 :        134 :         {}
    1070                 :        134 :     ~SwFieldProperties_Impl()
    1071 [ +  - ][ +  - ]:        134 :         {delete pDateTime;}
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
    1072                 :            : 
    1073                 :            : };
    1074                 :            : 
    1075 [ -  + ][ +  - ]:        603 : TYPEINIT1(SwXTextField, SwClient);
    1076                 :            : 
    1077                 :            : namespace
    1078                 :            : {
    1079                 :            :     class theSwXTextFieldUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theSwXTextFieldUnoTunnelId > {};
    1080                 :            : }
    1081                 :            : 
    1082                 :       5672 : const uno::Sequence< sal_Int8 > & SwXTextField::getUnoTunnelId()
    1083                 :            : {
    1084                 :       5672 :     return theSwXTextFieldUnoTunnelId::get().getSeq();
    1085                 :            : }
    1086                 :            : 
    1087                 :        654 : sal_Int64 SAL_CALL SwXTextField::getSomething( const uno::Sequence< sal_Int8 >& rId )
    1088                 :            :     throw(uno::RuntimeException)
    1089                 :            : {
    1090   [ +  -  +  + ]:       1308 :     if( rId.getLength() == 16
                 [ +  + ]
    1091                 :        654 :         && 0 == memcmp( getUnoTunnelId().getConstArray(),
    1092                 :        654 :                                         rId.getConstArray(), 16 ) )
    1093                 :            :     {
    1094                 :        109 :         return sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >(this) );
    1095                 :            :     }
    1096                 :        654 :     return 0;
    1097                 :            : }
    1098                 :            : 
    1099                 :        134 : SwXTextField::SwXTextField(sal_uInt16 nServiceId, SwDoc* pDoc) :
    1100                 :            :     aLstnrCntnr( (XTextContent*)this),
    1101                 :            :     pFmtFld(0),
    1102                 :            :     m_pDoc(pDoc),
    1103                 :            :     m_pTextObject(0),
    1104                 :            :     m_bIsDescriptor(nServiceId != USHRT_MAX),
    1105                 :            :     m_bCallUpdate(sal_False),
    1106                 :            :     m_nServiceId(nServiceId),
    1107 [ +  - ][ +  - ]:        134 :     m_pProps(new SwFieldProperties_Impl)
         [ +  - ][ +  - ]
    1108                 :            : {
    1109                 :            :     //Set visible as default!
    1110 [ +  + ][ +  - ]:        134 :     if(SW_SERVICE_FIELDTYPE_SET_EXP == nServiceId ||
         [ +  + ][ -  + ]
    1111                 :            :             SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM == nServiceId ||
    1112                 :            :             SW_SERVICE_FIELDTYPE_DATABASE == nServiceId ||
    1113                 :            :             SW_SERVICE_FIELDTYPE_DATABASE_NAME == nServiceId  )
    1114                 :          9 :         m_pProps->bBool2 = sal_True;
    1115         [ -  + ]:        125 :     else if(SW_SERVICE_FIELDTYPE_TABLE_FORMULA == nServiceId)
    1116                 :          0 :         m_pProps->bBool1 = sal_True;
    1117         [ +  + ]:        134 :     if(SW_SERVICE_FIELDTYPE_SET_EXP == nServiceId)
    1118                 :          3 :         m_pProps->nUSHORT2 = USHRT_MAX;
    1119                 :            : 
    1120                 :        134 : }
    1121                 :            : 
    1122                 :        203 : SwXTextField::SwXTextField(const SwFmtFld& rFmt, SwDoc* pDc) :
    1123                 :            :     aLstnrCntnr( (XTextContent*)this),
    1124                 :            :     pFmtFld(&rFmt),
    1125                 :            :     m_pDoc(pDc),
    1126                 :            :     m_pTextObject(0),
    1127                 :            :     m_bIsDescriptor(sal_False),
    1128                 :            :     m_bCallUpdate(sal_False),
    1129         [ +  - ]:        203 :     m_nServiceId( lcl_GetServiceForField( *pFmtFld->GetFld() ) ),
    1130 [ +  - ][ +  - ]:        406 :     m_pProps(0)
    1131                 :            : {
    1132 [ +  - ][ +  - ]:        203 :     pDc->GetUnoCallBack()->Add(this);
    1133                 :        203 : }
    1134                 :            : 
    1135 [ +  - ][ +  - ]:        337 : SwXTextField::~SwXTextField()
         [ +  - ][ +  - ]
    1136                 :            : {
    1137         [ +  + ]:        337 :     if ( m_pTextObject )
    1138                 :            :     {
    1139         [ +  - ]:         18 :         m_pTextObject->DisposeEditSource();
    1140                 :         18 :         m_pTextObject->release();
    1141                 :            :     }
    1142                 :            : 
    1143 [ +  + ][ +  - ]:        337 :     delete m_pProps;
    1144         [ -  + ]:        674 : }
    1145                 :            : 
    1146                 :          9 : void SwXTextField::attachTextFieldMaster(const uno::Reference< beans::XPropertySet > & xFieldMaster)
    1147                 :            :                     throw( lang::IllegalArgumentException, uno::RuntimeException )
    1148                 :            : {
    1149         [ +  - ]:          9 :     SolarMutexGuard aGuard;
    1150         [ -  + ]:          9 :     if(!m_bIsDescriptor)
    1151         [ #  # ]:          0 :         throw uno::RuntimeException();
    1152         [ +  - ]:          9 :     uno::Reference< lang::XUnoTunnel > xMasterTunnel(xFieldMaster, uno::UNO_QUERY);
    1153         [ -  + ]:          9 :     if (!xMasterTunnel.is())
    1154         [ #  # ]:          0 :         throw lang::IllegalArgumentException();
    1155                 :            :     SwXFieldMaster* pMaster = reinterpret_cast< SwXFieldMaster * >(
    1156 [ +  - ][ +  - ]:          9 :             sal::static_int_cast< sal_IntPtr >( xMasterTunnel->getSomething( SwXFieldMaster::getUnoTunnelId()) ));
                 [ +  - ]
    1157                 :            : 
    1158 [ +  - ][ +  - ]:          9 :     SwFieldType* pFieldType = pMaster ? pMaster->GetFldType() : 0;
    1159 [ +  - ][ +  - ]:          9 :     if(pFieldType && pFieldType->Which() == lcl_ServiceIdToResId(m_nServiceId))
                 [ +  - ]
    1160                 :            :     {
    1161 [ +  - ][ +  - ]:          9 :         m_sTypeName = pFieldType->GetName();
    1162         [ +  - ]:          9 :         pFieldType->Add( &m_aFieldTypeClient );
    1163                 :            :     }
    1164                 :            :     else
    1165 [ #  # ][ +  - ]:          9 :         throw lang::IllegalArgumentException();
    1166                 :            : 
    1167                 :          9 : }
    1168                 :            : 
    1169                 :          3 : uno::Reference< beans::XPropertySet >  SwXTextField::getTextFieldMaster(void) throw( uno::RuntimeException )
    1170                 :            : {
    1171         [ +  - ]:          3 :     SolarMutexGuard aGuard;
    1172                 :          3 :     SwFieldType* pType = 0;
    1173 [ -  + ][ #  # ]:          3 :     if( m_bIsDescriptor && m_aFieldTypeClient.GetRegisteredIn() )
                 [ -  + ]
    1174                 :            :     {
    1175                 :          0 :         pType = (SwFieldType*)m_aFieldTypeClient.GetRegisteredIn();
    1176                 :            :     }
    1177                 :            :     else
    1178                 :            :     {
    1179         [ -  + ]:          3 :         if(!GetRegisteredIn())
    1180         [ #  # ]:          0 :             throw uno::RuntimeException();
    1181                 :          3 :         pType = pFmtFld->GetFld()->GetTyp();
    1182                 :            :     }
    1183                 :            : 
    1184         [ +  - ]:          3 :     SwXFieldMaster* pMaster = SwIterator<SwXFieldMaster,SwFieldType>::FirstElement( *pType );
    1185         [ +  - ]:          3 :     if(!pMaster)
    1186         [ +  - ]:          3 :         pMaster = new SwXFieldMaster(*pType, GetDoc());
    1187                 :            : 
    1188 [ +  - ][ +  - ]:          3 :     return pMaster;
                 [ +  - ]
    1189                 :            : }
    1190                 :            : 
    1191                 :         49 : OUString SwXTextField::getPresentation(sal_Bool bShowCommand) throw( uno::RuntimeException )
    1192                 :            : {
    1193         [ +  - ]:         49 :     SolarMutexGuard aGuard;
    1194                 :            : 
    1195                 :         49 :     SwField const*const pField = GetField();
    1196         [ -  + ]:         49 :     if (!pField)
    1197                 :            :     {
    1198         [ #  # ]:          0 :         throw uno::RuntimeException();
    1199                 :            :     }
    1200                 :            :     ::rtl::OUString const ret( (bShowCommand)
    1201                 :          2 :             ? pField->GetFieldName()
    1202 [ +  + ][ +  - ]:         49 :             : pField->ExpandField(true) );
         [ +  - ][ +  - ]
                 [ +  - ]
    1203         [ +  - ]:         49 :     return ret;
    1204                 :            : }
    1205                 :            : 
    1206                 :        127 : void SwXTextField::attachToRange(
    1207                 :            :         const uno::Reference< text::XTextRange > & xTextRange)
    1208                 :            :     throw( lang::IllegalArgumentException, uno::RuntimeException )
    1209                 :            : {
    1210         [ +  - ]:        127 :     SolarMutexGuard aGuard;
    1211         [ -  + ]:        127 :     if(!m_bIsDescriptor)
    1212         [ #  # ]:          0 :         throw uno::RuntimeException();
    1213         [ +  - ]:        127 :     uno::Reference<lang::XUnoTunnel> xRangeTunnel( xTextRange, uno::UNO_QUERY);
    1214                 :        127 :     SwXTextRange* pRange = 0;
    1215                 :        127 :     OTextCursorHelper* pCursor = 0;
    1216         [ +  - ]:        127 :     if(xRangeTunnel.is())
    1217                 :            :     {
    1218                 :            :         pRange  = reinterpret_cast< SwXTextRange * >(
    1219 [ +  - ][ +  - ]:        127 :                 sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( SwXTextRange::getUnoTunnelId()) ));
                 [ +  - ]
    1220                 :            :         pCursor = reinterpret_cast< OTextCursorHelper * >(
    1221 [ +  - ][ +  - ]:        127 :                 sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( OTextCursorHelper::getUnoTunnelId()) ));
                 [ +  - ]
    1222                 :            :     }
    1223                 :            : 
    1224 [ +  + ][ +  - ]:        127 :     SwDoc* pDoc = pRange ? (SwDoc*)pRange->GetDoc() : pCursor ? (SwDoc*)pCursor->GetDoc() : 0;
         [ +  - ][ +  - ]
    1225                 :            :     //wurde ein FieldMaster attached, dann ist das Dokument schon festgelegt!
    1226 [ +  - ][ +  + ]:        127 :     if(pDoc && (!m_pDoc || m_pDoc == pDoc))
                 [ +  - ]
    1227                 :            :     {
    1228         [ +  - ]:        127 :         SwUnoInternalPaM aPam(*pDoc);
    1229                 :            :         //das muss jetzt sal_True liefern
    1230         [ +  - ]:        127 :         ::sw::XTextRangeToSwPaM(aPam, xTextRange);
    1231                 :        127 :         SwField* pFld = 0;
    1232   [ +  -  +  -  :        127 :         switch(m_nServiceId)
          -  -  +  -  -  
          +  +  -  -  -  
          -  -  +  -  -  
          -  -  -  +  +  
          +  +  -  -  -  
             -  -  -  - ]
    1233                 :            :         {
    1234                 :            :             case SW_SERVICE_FIELDTYPE_ANNOTATION:
    1235                 :            :             {
    1236         [ +  - ]:         24 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_POSTITFLD);
    1237                 :            : 
    1238                 :         24 :                 DateTime aDateTime( DateTime::EMPTY );
    1239         [ +  - ]:         24 :                 if (m_pProps->pDateTime)
    1240                 :            :                 {
    1241         [ +  - ]:         24 :                     aDateTime.SetYear(m_pProps->pDateTime->Year);
    1242         [ +  - ]:         24 :                     aDateTime.SetMonth(m_pProps->pDateTime->Month);
    1243         [ +  - ]:         24 :                     aDateTime.SetDay(m_pProps->pDateTime->Day);
    1244         [ +  - ]:         24 :                     aDateTime.SetHour(m_pProps->pDateTime->Hours);
    1245         [ +  - ]:         24 :                     aDateTime.SetMin(m_pProps->pDateTime->Minutes);
    1246         [ +  - ]:         24 :                     aDateTime.SetSec(m_pProps->pDateTime->Seconds);
    1247                 :            :                 }
    1248                 :            :                 pFld = new SwPostItField((SwPostItFieldType*)pFldType,
    1249 [ +  - ][ +  - ]:         24 :                         m_pProps->sPar1, m_pProps->sPar2, m_pProps->sPar3, m_pProps->sPar4, aDateTime);
    1250         [ +  + ]:         24 :                 if ( m_pTextObject )
    1251                 :            :                 {
    1252 [ +  - ][ +  - ]:         18 :                     ((SwPostItField*)pFld)->SetTextObject( m_pTextObject->CreateText() );
    1253 [ +  - ][ +  - ]:         18 :                       ((SwPostItField*)pFld)->SetPar2(m_pTextObject->GetText());
         [ +  - ][ +  - ]
    1254                 :            :                 }
    1255                 :            :             }
    1256                 :         24 :             break;
    1257                 :            :             case SW_SERVICE_FIELDTYPE_SCRIPT:
    1258                 :            :             {
    1259         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_SCRIPTFLD);
    1260                 :            :                 pFld = new SwScriptField((SwScriptFieldType*)pFldType,
    1261                 :            :                         m_pProps->sPar1, m_pProps->sPar2,
    1262 [ #  # ][ #  # ]:          0 :                         m_pProps->bBool1);
    1263                 :            :             }
    1264                 :          0 :             break;
    1265                 :            :             case SW_SERVICE_FIELDTYPE_DATETIME:
    1266                 :            :             {
    1267                 :         11 :                 sal_uInt16 nSub = 0;
    1268         [ -  + ]:         11 :                 if(m_pProps->bBool1)
    1269                 :          0 :                     nSub |= FIXEDFLD;
    1270         [ +  + ]:         11 :                 if(m_pProps->bBool2)
    1271                 :          7 :                     nSub |= DATEFLD;
    1272                 :            :                 else
    1273                 :          4 :                     nSub |= TIMEFLD;
    1274         [ +  - ]:         11 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_DATETIMEFLD);
    1275                 :            :                 pFld = new SwDateTimeField((SwDateTimeFieldType*)pFldType,
    1276 [ +  - ][ +  - ]:         11 :                 nSub, m_pProps->nFormat);
    1277         [ -  + ]:         11 :                 if(m_pProps->fDouble > 0.)
    1278         [ #  # ]:          0 :                     ((SwDateTimeField*)pFld)->SetValue( m_pProps->fDouble );
    1279         [ -  + ]:         11 :                 if(m_pProps->pDateTime)
    1280                 :            :                 {
    1281         [ #  # ]:          0 :                     uno::Any aVal; aVal <<= *m_pProps->pDateTime;
    1282         [ #  # ]:          0 :                     pFld->PutValue( aVal, FIELD_PROP_DATE_TIME );
    1283                 :            :                 }
    1284                 :         11 :                 ((SwDateTimeField*)pFld)->SetOffset(m_pProps->nSubType);
    1285                 :            :             }
    1286                 :         11 :             break;
    1287                 :            :             case SW_SERVICE_FIELDTYPE_FILE_NAME:
    1288                 :            :             {
    1289         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_FILENAMEFLD);
    1290                 :          0 :                 sal_Int32 nFormat = m_pProps->nFormat;
    1291         [ #  # ]:          0 :                 if(m_pProps->bBool2)
    1292                 :          0 :                     nFormat |= FF_FIXED;
    1293 [ #  # ][ #  # ]:          0 :                 pFld = new SwFileNameField((SwFileNameFieldType*)pFldType, nFormat);
    1294         [ #  # ]:          0 :                 if(m_pProps->sPar3.Len())
    1295         [ #  # ]:          0 :                     ((SwFileNameField*)pFld)->SetExpansion(m_pProps->sPar3);
    1296         [ #  # ]:          0 :                 uno::Any aFormat(&m_pProps->nFormat, ::getCppuType(&m_pProps->nFormat));
    1297         [ #  # ]:          0 :                 pFld->PutValue( aFormat, FIELD_PROP_FORMAT );
    1298                 :            :             }
    1299                 :          0 :             break;
    1300                 :            :             case SW_SERVICE_FIELDTYPE_TEMPLATE_NAME:
    1301                 :            :             {
    1302         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_TEMPLNAMEFLD);
    1303                 :            :                 pFld = new SwTemplNameField((SwTemplNameFieldType*)pFldType,
    1304 [ #  # ][ #  # ]:          0 :                                                     m_pProps->nFormat);
    1305         [ #  # ]:          0 :                 uno::Any aFormat(&m_pProps->nFormat, ::getCppuType(&m_pProps->nFormat));
    1306         [ #  # ]:          0 :                 pFld->PutValue(aFormat, FIELD_PROP_FORMAT);
    1307                 :            :             }
    1308                 :          0 :             break;
    1309                 :            :             case SW_SERVICE_FIELDTYPE_CHAPTER:
    1310                 :            :             {
    1311         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_CHAPTERFLD);
    1312 [ #  # ][ #  # ]:          0 :                 pFld = new SwChapterField((SwChapterFieldType*)pFldType, m_pProps->nUSHORT1);
    1313                 :          0 :                 ((SwChapterField*)pFld)->SetLevel(m_pProps->nByte1);
    1314         [ #  # ]:          0 :                 uno::Any aVal; aVal <<= (sal_Int16)m_pProps->nUSHORT1;
    1315         [ #  # ]:          0 :                 pFld->PutValue(aVal, FIELD_PROP_USHORT1 );
    1316                 :            :             }
    1317                 :          0 :             break;
    1318                 :            :             case SW_SERVICE_FIELDTYPE_AUTHOR:
    1319                 :            :             {
    1320                 :         38 :                 long nFormat = m_pProps->bBool1 ? AF_NAME : AF_SHORTCUT;
    1321         [ +  - ]:         38 :                 if(m_pProps->bBool2)
    1322                 :         38 :                     nFormat |= AF_FIXED;
    1323                 :            : 
    1324         [ +  - ]:         38 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_AUTHORFLD);
    1325 [ +  - ][ +  - ]:         38 :                 pFld = new SwAuthorField((SwAuthorFieldType*)pFldType, nFormat);
    1326         [ +  - ]:         38 :                 ((SwAuthorField*)pFld)->SetExpansion(m_pProps->sPar1);
    1327                 :            :             }
    1328                 :         38 :             break;
    1329                 :            :             case SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT:
    1330                 :            :             case SW_SERVICE_FIELDTYPE_HIDDEN_TEXT:
    1331                 :            :             {
    1332         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_HIDDENTXTFLD);
    1333                 :            :                 pFld = new SwHiddenTxtField(((SwHiddenTxtFieldType*)pFldType),
    1334                 :            :                         m_pProps->sPar1,
    1335                 :            :                         m_pProps->sPar2, m_pProps->sPar3,
    1336                 :            :                         static_cast< sal_uInt16 >(SW_SERVICE_FIELDTYPE_HIDDEN_TEXT == m_nServiceId ?
    1337 [ #  # ][ #  # ]:          0 :                              TYP_HIDDENTXTFLD : TYP_CONDTXTFLD));
                 [ #  # ]
    1338                 :          0 :                 ((SwHiddenTxtField*)pFld)->SetValue(m_pProps->bBool1);
    1339 [ #  # ][ #  # ]:          0 :                 uno::Any aVal; aVal <<= (OUString)m_pProps->sPar4;
    1340         [ #  # ]:          0 :                 pFld->PutValue(aVal, FIELD_PROP_PAR4 );
    1341                 :            :             }
    1342                 :          0 :             break;
    1343                 :            :             case SW_SERVICE_FIELDTYPE_HIDDEN_PARA:
    1344                 :            :             {
    1345         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_HIDDENPARAFLD);
    1346                 :            :                 pFld = new SwHiddenParaField((SwHiddenParaFieldType*)pFldType,
    1347 [ #  # ][ #  # ]:          0 :                                                 m_pProps->sPar1);
    1348                 :          0 :                 ((SwHiddenParaField*)pFld)->SetHidden(m_pProps->bBool1);
    1349                 :            :             }
    1350                 :          0 :             break;
    1351                 :            :             case SW_SERVICE_FIELDTYPE_GET_REFERENCE:
    1352                 :            :             {
    1353         [ +  - ]:         14 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_GETREFFLD);
    1354                 :            :                 pFld = new SwGetRefField((SwGetRefFieldType*)pFldType,
    1355                 :            :                             m_pProps->sPar1,
    1356                 :            :                             0,
    1357                 :            :                             0,
    1358 [ +  - ][ +  - ]:         14 :                             0);
    1359         [ +  + ]:         14 :                 if(m_pProps->sPar3.Len())
    1360         [ +  - ]:         12 :                     ((SwGetRefField*)pFld)->SetExpand(m_pProps->sPar3);
    1361         [ +  - ]:         14 :                 uno::Any aVal; aVal <<=(sal_Int16)m_pProps->nUSHORT1;
    1362         [ +  - ]:         14 :                 pFld->PutValue(aVal, FIELD_PROP_USHORT1 );
    1363         [ +  - ]:         14 :                 aVal <<=(sal_Int16)m_pProps->nUSHORT2;
    1364         [ +  - ]:         14 :                 pFld->PutValue(aVal, FIELD_PROP_USHORT2 );
    1365         [ +  - ]:         14 :                 aVal <<=(sal_Int16)m_pProps->nSHORT1;
    1366         [ +  - ]:         14 :                 pFld->PutValue(aVal, FIELD_PROP_SHORT1 );
    1367                 :            :             }
    1368                 :         14 :             break;
    1369                 :            :             case SW_SERVICE_FIELDTYPE_JUMP_EDIT:
    1370                 :            :             {
    1371         [ +  - ]:         14 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_JUMPEDITFLD);
    1372                 :            :                 pFld = new SwJumpEditField((SwJumpEditFieldType*)pFldType,
    1373 [ +  - ][ +  - ]:         14 :                         m_pProps->nUSHORT1, m_pProps->sPar2, m_pProps->sPar1);
    1374                 :            :             }
    1375                 :         14 :             break;
    1376                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR     :
    1377                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME  :
    1378                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME         :
    1379                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION       :
    1380                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR     :
    1381                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME  :
    1382                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM            :
    1383                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR      :
    1384                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME   :
    1385                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS         :
    1386                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT           :
    1387                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_TITLE             :
    1388                 :            :             case SW_SERVICE_FIELDTYPE_DOCINFO_REVISION          :
    1389                 :            :             case SW_SERVICE_FIELDTYPE_DOC_INFO:
    1390                 :            :             {
    1391         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_DOCINFOFLD);
    1392                 :            :                 sal_uInt16 nSubType = aDocInfoSubTypeFromService[
    1393                 :          0 :                         m_nServiceId - SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR];
    1394 [ #  # ][ #  # ]:          0 :                 if( SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME == m_nServiceId ||
         [ #  # ][ #  # ]
    1395                 :            :                     SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME == m_nServiceId ||
    1396                 :            :                     SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME == m_nServiceId ||
    1397                 :            :                     SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME == m_nServiceId )
    1398                 :            :                 {
    1399         [ #  # ]:          0 :                     if(m_pProps->bBool2) //IsDate
    1400                 :            :                     {
    1401                 :          0 :                         nSubType &= 0xf0ff;
    1402                 :          0 :                         nSubType |= DI_SUB_DATE;
    1403                 :            :                     }
    1404                 :            :                     else
    1405                 :            :                     {
    1406                 :          0 :                         nSubType &= 0xf0ff;
    1407                 :          0 :                         nSubType |= DI_SUB_TIME;
    1408                 :            :                     }
    1409                 :            :                 }
    1410         [ #  # ]:          0 :                 if(m_pProps->bBool1)
    1411                 :          0 :                     nSubType |= DI_SUB_FIXED;
    1412 [ #  # ][ #  # ]:          0 :                 pFld = new SwDocInfoField((SwDocInfoFieldType*)pFldType, nSubType, m_pProps->sPar4, m_pProps->nFormat);
    1413         [ #  # ]:          0 :                 if(m_pProps->sPar3.Len())
    1414         [ #  # ]:          0 :                     ((SwDocInfoField*)pFld)->SetExpansion(m_pProps->sPar3);
    1415                 :            :             }
    1416                 :          0 :             break;
    1417                 :            :             case SW_SERVICE_FIELDTYPE_USER_EXT:
    1418                 :            :             {
    1419                 :          0 :                 sal_Int32 nFormat = 0;
    1420         [ #  # ]:          0 :                 if(m_pProps->bBool1)
    1421                 :          0 :                     nFormat = AF_FIXED;
    1422                 :            : 
    1423         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_EXTUSERFLD);
    1424 [ #  # ][ #  # ]:          0 :                 pFld = new SwExtUserField((SwExtUserFieldType*)pFldType, m_pProps->nUSHORT1, nFormat);
    1425         [ #  # ]:          0 :                 ((SwExtUserField*)pFld)->SetExpansion(m_pProps->sPar1);
    1426                 :            :             }
    1427                 :          0 :             break;
    1428                 :            :             case SW_SERVICE_FIELDTYPE_USER:
    1429                 :            :             {
    1430         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetFldType(RES_USERFLD, m_sTypeName, sal_True);
    1431         [ #  # ]:          0 :                 if(!pFldType)
    1432         [ #  # ]:          0 :                     throw uno::RuntimeException();
    1433         [ #  # ]:          0 :                 sal_uInt16 nUserSubType = m_pProps->bBool1 ? nsSwExtendedSubType::SUB_INVISIBLE : 0;
    1434         [ #  # ]:          0 :                 if(m_pProps->bBool2)
    1435                 :          0 :                     nUserSubType |= nsSwExtendedSubType::SUB_CMD;
    1436   [ #  #  #  # ]:          0 :                 if(m_pProps->bFormatIsDefault &&
                 [ #  # ]
    1437                 :          0 :                     nsSwGetSetExpType::GSE_STRING == ((SwUserFieldType*)pFldType)->GetType())
    1438                 :          0 :                         m_pProps->nFormat = -1;
    1439                 :            :                 pFld = new SwUserField((SwUserFieldType*)pFldType,
    1440                 :            :                                     nUserSubType,
    1441 [ #  # ][ #  # ]:          0 :                                     m_pProps->nFormat);
    1442                 :            :             }
    1443                 :          0 :             break;
    1444                 :            :             case SW_SERVICE_FIELDTYPE_REF_PAGE_SET:
    1445                 :            :             {
    1446         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_REFPAGESETFLD);
    1447                 :            :                 pFld = new SwRefPageSetField( (SwRefPageSetFieldType*)pFldType,
    1448                 :            :                                     m_pProps->nUSHORT1,
    1449 [ #  # ][ #  # ]:          0 :                                     m_pProps->bBool1 );
    1450                 :            :             }
    1451                 :          0 :             break;
    1452                 :            :             case SW_SERVICE_FIELDTYPE_REF_PAGE_GET:
    1453                 :            :             {
    1454         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_REFPAGEGETFLD);
    1455                 :            :                 pFld = new SwRefPageGetField( (SwRefPageGetFieldType*)pFldType,
    1456 [ #  # ][ #  # ]:          0 :                                                 m_pProps->nUSHORT1 );
    1457         [ #  # ]:          0 :                 ((SwRefPageGetField*)pFld)->SetText(m_pProps->sPar1);
    1458                 :            :             }
    1459                 :          0 :             break;
    1460                 :            :             case SW_SERVICE_FIELDTYPE_PAGE_NUM:
    1461                 :            :             {
    1462         [ +  - ]:         12 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_PAGENUMBERFLD);
    1463                 :            :                 pFld = new SwPageNumberField((SwPageNumberFieldType*)pFldType,
    1464                 :            :                                                 PG_RANDOM,
    1465                 :            :                                                 m_pProps->nFormat,
    1466 [ +  - ][ +  - ]:         12 :                                                 m_pProps->nUSHORT1);
    1467         [ +  - ]:         12 :                 ((SwPageNumberField*)pFld)->SetUserString(m_pProps->sPar1);
    1468         [ +  - ]:         12 :                 uno::Any aVal; aVal <<= m_pProps->nSubType;
    1469         [ +  - ]:         12 :                 pFld->PutValue( aVal, FIELD_PROP_SUBTYPE );
    1470                 :            :             }
    1471                 :         12 :             break;
    1472                 :            :             case SW_SERVICE_FIELDTYPE_DDE:
    1473                 :            :             {
    1474         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetFldType(RES_DDEFLD, m_sTypeName, sal_True);
    1475         [ #  # ]:          0 :                 if(!pFldType)
    1476         [ #  # ]:          0 :                     throw uno::RuntimeException();
    1477 [ #  # ][ #  # ]:          0 :                 pFld = new SwDDEField( (SwDDEFieldType*)pFldType );
    1478                 :            :             }
    1479                 :          0 :             break;
    1480                 :            :             case SW_SERVICE_FIELDTYPE_DATABASE_NAME:
    1481                 :            :             {
    1482         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_DBNAMEFLD);
    1483                 :          0 :                 SwDBData aData;
    1484         [ #  # ]:          0 :                 aData.sDataSource = m_pProps->sPar1;
    1485         [ #  # ]:          0 :                 aData.sCommand = m_pProps->sPar2;
    1486                 :          0 :                 aData.nCommandType = m_pProps->nSHORT1;
    1487 [ #  # ][ #  # ]:          0 :                 pFld = new SwDBNameField((SwDBNameFieldType*)pFldType, aData);
    1488         [ #  # ]:          0 :                 sal_uInt16  nSubType = pFld->GetSubType();
    1489         [ #  # ]:          0 :                 if(m_pProps->bBool2)
    1490                 :          0 :                     nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
    1491                 :            :                 else
    1492                 :          0 :                     nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
    1493         [ #  # ]:          0 :                 pFld->SetSubType(nSubType);
    1494                 :            :             }
    1495                 :          0 :             break;
    1496                 :            :             case SW_SERVICE_FIELDTYPE_DATABASE_NEXT_SET:
    1497                 :            :             {
    1498                 :          0 :                 SwDBData aData;
    1499         [ #  # ]:          0 :                 aData.sDataSource = m_pProps->sPar1;
    1500         [ #  # ]:          0 :                 aData.sCommand = m_pProps->sPar2;
    1501                 :          0 :                 aData.nCommandType = m_pProps->nSHORT1;
    1502         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_DBNEXTSETFLD);
    1503                 :            :                 pFld = new SwDBNextSetField((SwDBNextSetFieldType*)pFldType,
    1504                 :            :                         m_pProps->sPar3, aEmptyStr,
    1505 [ #  # ][ #  # ]:          0 :                         aData);
    1506                 :            :             }
    1507                 :          0 :             break;
    1508                 :            :             case SW_SERVICE_FIELDTYPE_DATABASE_NUM_SET:
    1509                 :            :             {
    1510                 :          0 :                 SwDBData aData;
    1511         [ #  # ]:          0 :                 aData.sDataSource = m_pProps->sPar1;
    1512         [ #  # ]:          0 :                 aData.sCommand = m_pProps->sPar2;
    1513                 :          0 :                 aData.nCommandType = m_pProps->nSHORT1;
    1514                 :            :                 pFld = new SwDBNumSetField( (SwDBNumSetFieldType*)
    1515                 :          0 :                     pDoc->GetSysFldType(RES_DBNUMSETFLD),
    1516                 :            :                     m_pProps->sPar3,
    1517                 :            :                     String::CreateFromInt32(m_pProps->nFormat),
    1518 [ #  # ][ #  # ]:          0 :                     aData );
         [ #  # ][ #  # ]
                 [ #  # ]
    1519                 :            :             }
    1520                 :          0 :             break;
    1521                 :            :             case SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM:
    1522                 :            :             {
    1523                 :          0 :                 SwDBData aData;
    1524         [ #  # ]:          0 :                 aData.sDataSource = m_pProps->sPar1;
    1525         [ #  # ]:          0 :                 aData.sCommand = m_pProps->sPar2;
    1526                 :          0 :                 aData.nCommandType = m_pProps->nSHORT1;
    1527                 :            :                 pFld = new SwDBSetNumberField((SwDBSetNumberFieldType*)
    1528                 :          0 :                         pDoc->GetSysFldType(RES_DBSETNUMBERFLD),
    1529                 :            :                         aData,
    1530 [ #  # ][ #  # ]:          0 :                         m_pProps->nUSHORT1);
                 [ #  # ]
    1531                 :          0 :                 ((SwDBSetNumberField*)pFld)->SetSetNumber(m_pProps->nFormat);
    1532         [ #  # ]:          0 :                 sal_uInt16  nSubType = pFld->GetSubType();
    1533         [ #  # ]:          0 :                 if(m_pProps->bBool2)
    1534                 :          0 :                     nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
    1535                 :            :                 else
    1536                 :          0 :                     nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
    1537         [ #  # ]:          0 :                 pFld->SetSubType(nSubType);
    1538                 :            :             }
    1539                 :          0 :             break;
    1540                 :            :             case SW_SERVICE_FIELDTYPE_DATABASE:
    1541                 :            :             {
    1542         [ +  - ]:          6 :                 SwFieldType* pFldType = pDoc->GetFldType(RES_DBFLD, m_sTypeName, sal_False);
    1543         [ -  + ]:          6 :                 if(!pFldType)
    1544         [ #  # ]:          0 :                     throw uno::RuntimeException();
    1545 [ +  - ][ +  - ]:          6 :                 pFld = new SwDBField((SwDBFieldType*)pFldType, m_pProps->nFormat);
    1546         [ +  - ]:          6 :                 ((SwDBField*)pFld)->InitContent(m_pProps->sPar1);
    1547         [ +  - ]:          6 :                 sal_uInt16  nSubType = pFld->GetSubType();
    1548         [ +  - ]:          6 :                 if(m_pProps->bBool2)
    1549                 :          6 :                     nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
    1550                 :            :                 else
    1551                 :          0 :                     nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
    1552         [ +  - ]:          6 :                 pFld->SetSubType(nSubType);
    1553                 :            :             }
    1554                 :          6 :             break;
    1555                 :            :             case SW_SERVICE_FIELDTYPE_SET_EXP:
    1556                 :            :             {
    1557         [ +  - ]:          3 :                 SwFieldType* pFldType = pDoc->GetFldType(RES_SETEXPFLD, m_sTypeName, sal_True);
    1558         [ -  + ]:          3 :                 if(!pFldType)
    1559         [ #  # ]:          0 :                     throw uno::RuntimeException();
    1560                 :            :                 // detect the field type's sub type and set an appropriate number format
    1561   [ +  -  +  - ]:          6 :                 if(m_pProps->bFormatIsDefault &&
                 [ +  - ]
    1562                 :          3 :                     nsSwGetSetExpType::GSE_STRING == ((SwSetExpFieldType*)pFldType)->GetType())
    1563                 :          3 :                         m_pProps->nFormat = -1;
    1564                 :            :                 pFld = new SwSetExpField((SwSetExpFieldType*)pFldType,
    1565                 :            :                     m_pProps->sPar2,
    1566                 :            :                     m_pProps->nUSHORT2 != USHRT_MAX ?  //#i79471# the field can have a number format or a number_ing_ format
    1567 [ +  - ][ -  + ]:          3 :                     m_pProps->nUSHORT2 : m_pProps->nFormat);
                 [ +  - ]
    1568                 :            : 
    1569         [ +  - ]:          3 :                 sal_uInt16  nSubType = pFld->GetSubType();
    1570         [ -  + ]:          3 :                 if(m_pProps->bBool2)
    1571                 :          0 :                     nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
    1572                 :            :                 else
    1573                 :          3 :                     nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
    1574         [ -  + ]:          3 :                 if(m_pProps->bBool3)
    1575                 :          0 :                     nSubType |= nsSwExtendedSubType::SUB_CMD;
    1576                 :            :                 else
    1577                 :          3 :                     nSubType &= ~nsSwExtendedSubType::SUB_CMD;
    1578         [ +  - ]:          3 :                 pFld->SetSubType(nSubType);
    1579                 :          3 :                 ((SwSetExpField*)pFld)->SetSeqNumber( m_pProps->nUSHORT1 );
    1580                 :          3 :                 ((SwSetExpField*)pFld)->SetInputFlag(m_pProps->bBool1);
    1581         [ +  - ]:          3 :                 ((SwSetExpField*)pFld)->SetPromptText(m_pProps->sPar3);
    1582         [ -  + ]:          3 :                 if(m_pProps->sPar4.Len())
    1583         [ #  # ]:          0 :                     ((SwSetExpField*)pFld)->ChgExpStr(m_pProps->sPar4);
    1584                 :            : 
    1585                 :            :             }
    1586                 :          3 :             break;
    1587                 :            :             case SW_SERVICE_FIELDTYPE_GET_EXP:
    1588                 :            :             {
    1589                 :            :                 sal_uInt16 nSubType;
    1590   [ +  -  -  - ]:          3 :                 switch(m_pProps->nSubType)
    1591                 :            :                 {
    1592                 :          3 :                     case text::SetVariableType::STRING: nSubType = nsSwGetSetExpType::GSE_STRING;   break;
    1593                 :          0 :                     case text::SetVariableType::VAR:        nSubType = nsSwGetSetExpType::GSE_EXPR;  break;
    1594                 :            :                     //case text::SetVariableType::SEQUENCE:   nSubType = nsSwGetSetExpType::GSE_SEQ;  break;
    1595                 :          0 :                     case text::SetVariableType::FORMULA:    nSubType = nsSwGetSetExpType::GSE_FORMULA; break;
    1596                 :            :                     default:
    1597                 :            :                         OSL_FAIL("wrong value");
    1598                 :          0 :                         nSubType = nsSwGetSetExpType::GSE_EXPR;
    1599                 :            :                 }
    1600                 :            :                 //make sure the SubType matches the field type
    1601         [ +  - ]:          3 :                 SwFieldType* pSetExpFld = pDoc->GetFldType(RES_SETEXPFLD, m_pProps->sPar1, sal_False);
    1602                 :          3 :                 bool bSetGetExpFieldUninitialized = false;
    1603         [ +  - ]:          3 :                 if( pSetExpFld )
    1604                 :            :                 {
    1605   [ -  +  #  # ]:          3 :                     if( nSubType != nsSwGetSetExpType::GSE_STRING &&
                 [ -  + ]
    1606                 :          0 :                         static_cast< SwSetExpFieldType* >(pSetExpFld)->GetType() == nsSwGetSetExpType::GSE_STRING )
    1607                 :          0 :                     nSubType = nsSwGetSetExpType::GSE_STRING;
    1608                 :            :                 }
    1609                 :            :                 else
    1610                 :          0 :                     bSetGetExpFieldUninitialized = true; // #i82544#
    1611                 :            : 
    1612         [ -  + ]:          3 :                 if(m_pProps->bBool2)
    1613                 :          0 :                     nSubType |= nsSwExtendedSubType::SUB_CMD;
    1614                 :            :                 else
    1615                 :          3 :                     nSubType &= ~nsSwExtendedSubType::SUB_CMD;
    1616                 :            :                 pFld = new SwGetExpField((SwGetExpFieldType*)
    1617                 :          3 :                         pDoc->GetSysFldType(RES_GETEXPFLD),
    1618 [ +  - ][ +  - ]:          3 :                         m_pProps->sPar1, nSubType, m_pProps->nFormat);
                 [ +  - ]
    1619                 :            :                 //TODO: SubType auswerten!
    1620         [ +  - ]:          3 :                 if(m_pProps->sPar4.Len())
    1621         [ +  - ]:          3 :                     ((SwGetExpField*)pFld)->ChgExpStr(m_pProps->sPar4);
    1622                 :            :                 // #i82544#
    1623         [ -  + ]:          3 :                 if( bSetGetExpFieldUninitialized )
    1624                 :          0 :                     ((SwGetExpField*)pFld)->SetLateInitialization();
    1625                 :            :             }
    1626                 :          3 :             break;
    1627                 :            :             case SW_SERVICE_FIELDTYPE_INPUT_USER:
    1628                 :            :             case SW_SERVICE_FIELDTYPE_INPUT:
    1629                 :            :             {
    1630         [ +  - ]:          2 :                 SwFieldType* pFldType = pDoc->GetFldType(RES_INPUTFLD, m_sTypeName, sal_True);
    1631         [ -  + ]:          2 :                 if(!pFldType)
    1632         [ #  # ]:          0 :                     throw uno::RuntimeException();
    1633         [ -  + ]:          2 :                 sal_uInt16 nInpSubType = sal::static_int_cast< sal_uInt16 >(SW_SERVICE_FIELDTYPE_INPUT_USER == m_nServiceId ? INP_USR : INP_TXT);
    1634                 :            :                 SwInputField * pTxtField =
    1635                 :            :                     new SwInputField((SwInputFieldType*)pFldType,
    1636                 :            :                                      m_pProps->sPar1, m_pProps->sPar2,
    1637 [ +  - ][ +  - ]:          2 :                                      nInpSubType);
    1638         [ +  - ]:          2 :                 pTxtField->SetHelp(m_pProps->sPar3);
    1639         [ +  - ]:          2 :                 pTxtField->SetToolTip(m_pProps->sPar4);
    1640                 :            : 
    1641                 :          2 :                 pFld = pTxtField;
    1642                 :            :             }
    1643                 :          2 :             break;
    1644                 :            :             case SW_SERVICE_FIELDTYPE_MACRO:
    1645                 :            :             {
    1646         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_MACROFLD);
    1647                 :          0 :                 rtl::OUString aName;
    1648                 :            : 
    1649                 :            :                 // support for Scripting Framework macros
    1650         [ #  # ]:          0 :                 if (m_pProps->sPar4.Len() != 0)
    1651                 :            :                 {
    1652         [ #  # ]:          0 :                     aName = m_pProps->sPar4;
    1653                 :            :                 }
    1654                 :            :                 else
    1655                 :            :                 {
    1656                 :            :                     SwMacroField::CreateMacroString(
    1657         [ #  # ]:          0 :                         aName, m_pProps->sPar1, m_pProps->sPar3 );
    1658                 :            :                 }
    1659                 :            :                 pFld = new SwMacroField((SwMacroFieldType*)pFldType, aName,
    1660 [ #  # ][ #  # ]:          0 :                                         m_pProps->sPar2);
         [ #  # ][ #  # ]
    1661                 :            :             }
    1662                 :          0 :             break;
    1663                 :            :             case SW_SERVICE_FIELDTYPE_PAGE_COUNT            :
    1664                 :            :             case SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT       :
    1665                 :            :             case SW_SERVICE_FIELDTYPE_WORD_COUNT            :
    1666                 :            :             case SW_SERVICE_FIELDTYPE_CHARACTER_COUNT       :
    1667                 :            :             case SW_SERVICE_FIELDTYPE_TABLE_COUNT           :
    1668                 :            :             case SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT  :
    1669                 :            :             case SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT :
    1670                 :            :             {
    1671                 :          0 :                 sal_uInt16 nSubType = DS_PAGE;
    1672   [ #  #  #  #  :          0 :                 switch(m_nServiceId)
                #  #  # ]
    1673                 :            :                 {
    1674                 :            : //                  case SW_SERVICE_FIELDTYPE_PAGE_COUNT            : break;
    1675                 :          0 :                     case SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT       : nSubType = DS_PARA;break;
    1676                 :          0 :                     case SW_SERVICE_FIELDTYPE_WORD_COUNT            : nSubType = DS_WORD;break;
    1677                 :          0 :                     case SW_SERVICE_FIELDTYPE_CHARACTER_COUNT       : nSubType = DS_CHAR;break;
    1678                 :          0 :                     case SW_SERVICE_FIELDTYPE_TABLE_COUNT           : nSubType = DS_TBL;break;
    1679                 :          0 :                     case SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT  : nSubType = DS_GRF;break;
    1680                 :          0 :                     case SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT : nSubType = DS_OLE;break;
    1681                 :            :                 }
    1682         [ #  # ]:          0 :                 SwFieldType* pFldType = pDoc->GetSysFldType(RES_DOCSTATFLD);
    1683 [ #  # ][ #  # ]:          0 :                 pFld = new SwDocStatField((SwDocStatFieldType*)pFldType, nSubType, m_pProps->nUSHORT2);
    1684                 :            :             }
    1685                 :          0 :             break;
    1686                 :            :             case SW_SERVICE_FIELDTYPE_BIBLIOGRAPHY:
    1687                 :            :             {
    1688         [ #  # ]:          0 :                 SwAuthorityFieldType const type(pDoc);
    1689                 :            :                 pFld = new SwAuthorityField(static_cast<SwAuthorityFieldType*>(
    1690                 :          0 :                             pDoc->InsertFldType(type)),
    1691 [ #  # ][ #  # ]:          0 :                         aEmptyStr );
                 [ #  # ]
    1692         [ #  # ]:          0 :                 if(m_pProps->aPropSeq.getLength())
    1693                 :            :                 {
    1694         [ #  # ]:          0 :                     uno::Any aVal; aVal <<= m_pProps->aPropSeq;
    1695         [ #  # ]:          0 :                     pFld->PutValue( aVal, FIELD_PROP_PROP_SEQ );
    1696         [ #  # ]:          0 :                 }
    1697                 :            :             }
    1698                 :          0 :             break;
    1699                 :            :             case SW_SERVICE_FIELDTYPE_COMBINED_CHARACTERS:
    1700                 :            :                 // create field
    1701                 :            :                 pFld = new SwCombinedCharField( (SwCombinedCharFieldType*)
    1702                 :          0 :                             pDoc->GetSysFldType(RES_COMBINED_CHARS),
    1703 [ #  # ][ #  # ]:          0 :                             m_pProps->sPar1);
                 [ #  # ]
    1704                 :          0 :                 break;
    1705                 :            :             case SW_SERVICE_FIELDTYPE_DROPDOWN:
    1706                 :            :                 pFld = new SwDropDownField
    1707                 :            :                     ((SwDropDownFieldType *)
    1708 [ #  # ][ #  # ]:          0 :                      pDoc->GetSysFldType(RES_DROPDOWN));
                 [ #  # ]
    1709                 :            : 
    1710         [ #  # ]:          0 :                 ((SwDropDownField *) pFld)->SetItems(m_pProps->aStrings);
    1711 [ #  # ][ #  # ]:          0 :                 ((SwDropDownField *) pFld)->SetSelectedItem(m_pProps->sPar1);
    1712 [ #  # ][ #  # ]:          0 :                 ((SwDropDownField *) pFld)->SetName(m_pProps->sPar2);
    1713 [ #  # ][ #  # ]:          0 :                 ((SwDropDownField *) pFld)->SetHelp(m_pProps->sPar3);
    1714 [ #  # ][ #  # ]:          0 :                 ((SwDropDownField *) pFld)->SetToolTip(m_pProps->sPar4);
    1715                 :          0 :                 break;
    1716                 :            : 
    1717                 :            :             case SW_SERVICE_FIELDTYPE_TABLE_FORMULA :
    1718                 :            :             {
    1719                 :            : 
    1720                 :            :                 // create field
    1721                 :          0 :                 sal_uInt16 nType = nsSwGetSetExpType::GSE_FORMULA;
    1722         [ #  # ]:          0 :                 if(m_pProps->bBool1)
    1723                 :            :                 {
    1724                 :          0 :                     nType |= nsSwExtendedSubType::SUB_CMD;
    1725         [ #  # ]:          0 :                     if(m_pProps->bFormatIsDefault)
    1726                 :          0 :                         m_pProps->nFormat = -1;
    1727                 :            :                 }
    1728                 :            :                 pFld = new SwTblField( (SwTblFieldType*)
    1729                 :          0 :                     pDoc->GetSysFldType(RES_TABLEFLD),
    1730                 :            :                     m_pProps->sPar2,
    1731                 :            :                     nType,
    1732 [ #  # ][ #  # ]:          0 :                     m_pProps->nFormat);
                 [ #  # ]
    1733         [ #  # ]:          0 :                ((SwTblField*)pFld)->ChgExpStr(m_pProps->sPar1);
    1734                 :            :             }
    1735                 :          0 :             break;
    1736                 :            :             default: OSL_FAIL("was ist das fuer ein Typ?");
    1737                 :            :         }
    1738         [ +  - ]:        127 :         if(pFld)
    1739                 :            :         {
    1740                 :        127 :             pFld->SetAutomaticLanguage(!m_pProps->bBool4);
    1741         [ +  - ]:        127 :             SwFmtFld aFmt( *pFld );
    1742                 :            : 
    1743         [ +  - ]:        127 :             UnoActionContext aCont(pDoc);
    1744                 :        127 :             SwTxtAttr* pTxtAttr = 0;
    1745 [ +  + ][ +  + ]:        127 :             if(aPam.HasMark() && m_nServiceId != SW_SERVICE_FIELDTYPE_ANNOTATION)
                 [ +  + ]
    1746         [ +  - ]:          4 :                 pDoc->DeleteAndJoin(aPam);
    1747                 :            : 
    1748                 :            :             SwXTextCursor const*const pTextCursor(
    1749         [ +  + ]:        127 :                     dynamic_cast<SwXTextCursor*>(pCursor));
    1750                 :            :             const bool bForceExpandHints( (pTextCursor)
    1751 [ +  + ][ +  - ]:        127 :                     ? pTextCursor->IsAtEndOfMeta() : false );
    1752                 :            :             const SetAttrMode nInsertFlags = (bForceExpandHints)
    1753                 :            :                 ? nsSetAttrMode::SETATTR_FORCEHINTEXPAND
    1754         [ +  + ]:        127 :                 : nsSetAttrMode::SETATTR_DEFAULT;
    1755                 :            : 
    1756 [ +  - ][ +  + ]:        127 :             if (*aPam.GetPoint() != *aPam.GetMark() && m_nServiceId == SW_SERVICE_FIELDTYPE_ANNOTATION)
         [ +  - ][ +  + ]
    1757                 :            :             {
    1758         [ +  - ]:         18 :                 IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess();
    1759                 :            :                 sw::mark::IFieldmark* pFieldmark = pMarksAccess->makeFieldBookmark(
    1760                 :            :                         aPam,
    1761                 :            :                         OUString(),
    1762         [ +  - ]:         18 :                         ODF_COMMENTRANGE);
    1763                 :         18 :                 SwPostItField* pPostItField = (SwPostItField*)aFmt.GetFld();
    1764 [ +  + ][ +  - ]:         18 :                 if (pPostItField->GetName().isEmpty())
    1765                 :            :                     // The fieldmark always has a (generated) name.
    1766 [ +  - ][ +  - ]:         12 :                     pPostItField->SetName(pFieldmark->GetName());
    1767                 :            :                 else
    1768                 :            :                     // The field has a name already, use it.
    1769 [ +  - ][ +  - ]:          6 :                     pMarksAccess->renameMark(pFieldmark, pPostItField->GetName());
                 [ +  - ]
    1770                 :            : 
    1771                 :            :                 // Make sure we always insert the field at the end
    1772 [ +  - ][ +  - ]:         18 :                 SwPaM aEnd(*aPam.End(), *aPam.End());
                 [ +  - ]
    1773 [ +  - ][ +  - ]:         18 :                 pDoc->InsertPoolItem(aEnd, aFmt, nInsertFlags);
    1774                 :            :             }
    1775                 :            :             else
    1776         [ +  - ]:        109 :                 pDoc->InsertPoolItem(aPam, aFmt, nInsertFlags);
    1777                 :            : 
    1778                 :            :             pTxtAttr = aPam.GetNode()->GetTxtNode()->GetTxtAttrForCharAt(
    1779         [ +  - ]:        127 :                     aPam.GetPoint()->nContent.GetIndex()-1, RES_TXTATR_FIELD);
    1780                 :            : 
    1781                 :            :             // was passiert mit dem Update der Felder ? (siehe fldmgr.cxx)
    1782         [ +  - ]:        127 :             if(pTxtAttr)
    1783                 :            :             {
    1784                 :        127 :                 const SwFmtFld& rFld = pTxtAttr->GetFld();
    1785                 :        127 :                 pFmtFld = &rFld;
    1786 [ +  - ][ +  - ]:        127 :             }
    1787                 :            :         }
    1788 [ +  - ][ +  - ]:        127 :         delete pFld;
    1789                 :            : 
    1790                 :        127 :         m_pDoc = pDoc;
    1791 [ +  - ][ +  - ]:        127 :         m_pDoc->GetUnoCallBack()->Add(this);
    1792                 :        127 :         m_bIsDescriptor = sal_False;
    1793         [ +  + ]:        127 :         if(m_aFieldTypeClient.GetRegisteredIn())
    1794         [ +  - ]:          9 :             const_cast<SwModify*>(m_aFieldTypeClient.GetRegisteredIn())->Remove(&m_aFieldTypeClient);
    1795 [ +  - ][ +  - ]:        127 :         DELETEZ(m_pProps);
    1796         [ -  + ]:        127 :         if(m_bCallUpdate)
    1797 [ #  # ][ +  - ]:        127 :             update();
    1798                 :            :     }
    1799                 :            :     else
    1800 [ #  # ][ +  - ]:        127 :         throw lang::IllegalArgumentException();
    1801                 :        127 : }
    1802                 :            : 
    1803                 :        127 : void SwXTextField::attach(const uno::Reference< text::XTextRange > & xTextRange)
    1804                 :            :     throw( lang::IllegalArgumentException, uno::RuntimeException )
    1805                 :            : {
    1806         [ +  - ]:        127 :     SolarMutexGuard aGuard;
    1807 [ +  - ][ +  - ]:        127 :     attachToRange( xTextRange );
    1808                 :        127 : }
    1809                 :            : 
    1810                 :         37 : uno::Reference< text::XTextRange >  SwXTextField::getAnchor(void) throw( uno::RuntimeException )
    1811                 :            : {
    1812         [ +  - ]:         37 :     SolarMutexGuard aGuard;
    1813                 :         37 :     uno::Reference< text::XTextRange >   aRef;
    1814                 :         37 :     SwField* pField = (SwField*)GetField();
    1815         [ +  - ]:         37 :     if(pField)
    1816                 :            :     {
    1817                 :         37 :         const SwTxtFld* pTxtFld = pFmtFld->GetTxtFld();
    1818         [ -  + ]:         37 :         if(!pTxtFld)
    1819         [ #  # ]:          0 :             throw uno::RuntimeException();
    1820                 :         37 :         const SwTxtNode& rTxtNode = pTxtFld->GetTxtNode();
    1821                 :            : 
    1822         [ +  - ]:         37 :         SwPaM aPam(rTxtNode, *pTxtFld->GetStart() + 1, rTxtNode, *pTxtFld->GetStart());
    1823                 :            : 
    1824                 :            :         aRef = SwXTextRange::CreateXTextRange(
    1825 [ +  - ][ +  - ]:         37 :                 *m_pDoc, *aPam.GetPoint(), aPam.GetMark());
                 [ +  - ]
    1826                 :            :     }
    1827         [ +  - ]:         37 :     return aRef;
    1828                 :            : 
    1829                 :            : }
    1830                 :            : 
    1831                 :         12 : void SwXTextField::dispose(void) throw( uno::RuntimeException )
    1832                 :            : {
    1833         [ +  - ]:         12 :     SolarMutexGuard aGuard;
    1834                 :         12 :     SwField* pField = (SwField*)GetField();
    1835         [ +  - ]:         12 :     if(pField)
    1836                 :            :     {
    1837         [ +  - ]:         12 :         UnoActionContext aContext(GetDoc());
    1838                 :         12 :         const SwTxtFld* pTxtFld = pFmtFld->GetTxtFld();
    1839                 :         12 :         SwTxtNode& rTxtNode = (SwTxtNode&)*pTxtFld->GetpTxtNode();
    1840         [ +  - ]:         12 :         SwPaM aPam(rTxtNode, *pTxtFld->GetStart());
    1841         [ +  - ]:         12 :         aPam.SetMark();
    1842         [ +  - ]:         12 :         aPam.Move();
    1843 [ +  - ][ +  - ]:         12 :         GetDoc()->DeleteAndJoin(aPam);
                 [ +  - ]
    1844                 :            :     }
    1845                 :            : 
    1846         [ -  + ]:         12 :     if ( m_pTextObject )
    1847                 :            :     {
    1848         [ #  # ]:          0 :         m_pTextObject->DisposeEditSource();
    1849                 :          0 :         m_pTextObject->release();
    1850                 :          0 :         m_pTextObject = 0;
    1851         [ +  - ]:         12 :     }
    1852                 :         12 : }
    1853                 :            : 
    1854                 :          4 : void SwXTextField::addEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException )
    1855                 :            : {
    1856         [ -  + ]:          4 :     if(!GetRegisteredIn())
    1857         [ #  # ]:          0 :         throw uno::RuntimeException();
    1858                 :          4 :     aLstnrCntnr.AddListener(aListener);
    1859                 :          4 : }
    1860                 :            : 
    1861                 :          2 : void SwXTextField::removeEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException )
    1862                 :            : {
    1863 [ +  - ][ -  + ]:          2 :     if(!GetRegisteredIn() || !aLstnrCntnr.RemoveListener(aListener))
                 [ -  + ]
    1864         [ #  # ]:          0 :         throw uno::RuntimeException();
    1865                 :          2 : }
    1866                 :            : 
    1867                 :         21 : uno::Reference< beans::XPropertySetInfo >  SwXTextField::getPropertySetInfo(void)
    1868                 :            :         throw( uno::RuntimeException )
    1869                 :            : {
    1870         [ +  - ]:         21 :     SolarMutexGuard aGuard;
    1871                 :            :     //kein static
    1872                 :         21 :     uno::Reference< beans::XPropertySetInfo >  aRef;
    1873         [ +  - ]:         21 :     if(m_nServiceId != USHRT_MAX)
    1874                 :            :     {
    1875                 :            :         const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(
    1876         [ +  - ]:         21 :                         lcl_GetPropertyMapOfService( m_nServiceId ));
    1877         [ +  - ]:         21 :         uno::Reference< beans::XPropertySetInfo >  xInfo = pPropSet->getPropertySetInfo();
    1878                 :            :         // extend PropertySetInfo!
    1879 [ +  - ][ +  - ]:         21 :         const uno::Sequence<beans::Property> aPropSeq = xInfo->getProperties();
    1880                 :            :         aRef = new SfxExtItemPropertySetInfo(
    1881                 :            :             aSwMapProvider.GetPropertyMapEntries(PROPERTY_MAP_PARAGRAPH_EXTENSIONS),
    1882 [ +  - ][ +  - ]:         21 :             aPropSeq );
         [ +  - ][ +  - ]
                 [ +  - ]
    1883                 :            :     }
    1884                 :            :     else
    1885         [ #  # ]:         21 :         throw uno::RuntimeException();
    1886         [ +  - ]:         42 :     return aRef;
    1887                 :            : }
    1888                 :            : 
    1889                 :        451 : void SwXTextField::setPropertyValue(const OUString& rPropertyName, const uno::Any& rValue)
    1890                 :            :     throw( beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException,
    1891                 :            :         lang::WrappedTargetException, uno::RuntimeException )
    1892                 :            : {
    1893         [ +  - ]:        451 :     SolarMutexGuard aGuard;
    1894                 :        451 :     SwField* pField = (SwField*)GetField();
    1895                 :            :     const SfxItemPropertySet* _pPropSet = aSwMapProvider.GetPropertySet(
    1896         [ +  - ]:        451 :                                 lcl_GetPropertyMapOfService( m_nServiceId));
    1897         [ +  - ]:        451 :     const SfxItemPropertySimpleEntry*   pEntry = _pPropSet->getPropertyMap().getByName(rPropertyName);
    1898                 :            : 
    1899         [ +  + ]:        451 :     if (!pEntry)
    1900 [ +  - ][ +  - ]:         12 :         throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
                 [ +  - ]
    1901         [ -  + ]:        439 :     if ( pEntry->nFlags & beans::PropertyAttribute::READONLY)
    1902 [ #  # ][ #  # ]:          0 :         throw beans::PropertyVetoException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Property is read-only: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
                 [ #  # ]
    1903                 :            : 
    1904         [ +  + ]:        439 :     if(pField)
    1905                 :            :     {
    1906                 :            :         // special treatment for mail merge fields
    1907                 :         62 :         sal_uInt16 nWhich = pField->Which();
    1908 [ +  - ][ +  +  :        158 :         if( RES_DBFLD == nWhich &&
          +  -  +  -  +  
                -  -  + ]
    1909 [ +  - ][ +  - ]:         24 :             (rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_NAME)) ||
    1910 [ +  - ][ +  - ]:         24 :             rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_BASE_URL))||
    1911 [ +  - ][ +  - ]:         24 :             rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_TABLE_NAME))||
    1912 [ +  - ][ +  - ]:         24 :             rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_NAME_DATA_COLUMN_NAME))))
    1913                 :            :         {
    1914                 :            :             // here a new field type must be created and the field must
    1915                 :            :             // be registered at the new type
    1916                 :            :             OSL_FAIL("not implemented");
    1917                 :            :         }
    1918                 :            :         else
    1919                 :            :         {
    1920                 :         62 :             SwDoc * pDoc = GetDoc();
    1921                 :            :             assert(pDoc);
    1922                 :         62 :             const SwTxtFld* pTxtFld = pFmtFld->GetTxtFld();
    1923         [ -  + ]:         62 :             if(!pTxtFld)
    1924         [ #  # ]:          0 :                 throw uno::RuntimeException();
    1925         [ +  - ]:         62 :             SwPosition aPosition( pTxtFld->GetTxtNode() );
    1926         [ +  - ]:         62 :             aPosition.nContent = *pTxtFld->GetStart();
    1927 [ +  - ][ +  - ]:         62 :             pDoc->PutValueToField( aPosition, rValue, pEntry->nWID);
    1928                 :            :         }
    1929                 :            : 
    1930                 :            :         //#i100374# notify SwPostIt about new field content
    1931 [ -  + ][ #  # ]:         62 :         if (RES_POSTITFLD== nWhich && pFmtFld)
    1932                 :            :         {
    1933                 :            :             const_cast<SwFmtFld*>(pFmtFld)->Broadcast(
    1934 [ #  # ][ #  # ]:          0 :                     SwFmtFldHint( 0, SWFMTFLD_CHANGED ));
                 [ #  # ]
    1935                 :            :         }
    1936                 :            : 
    1937                 :            :         // fdo#42073 notify SwTxtFld about changes of the expanded string
    1938         [ +  - ]:         62 :         if (pFmtFld->GetTxtFld())
    1939                 :            :         {
    1940         [ +  - ]:         62 :             pFmtFld->GetTxtFld()->Expand();
    1941                 :            :         }
    1942                 :            : 
    1943                 :            :         //#i100374# changing a document field should set the modify flag
    1944                 :         62 :         SwDoc* pDoc = GetDoc();
    1945         [ +  - ]:         62 :         if (pDoc)
    1946         [ +  - ]:         62 :             pDoc->SetModified();
    1947                 :            : 
    1948                 :            :     }
    1949         [ +  - ]:        377 :     else if(m_pProps)
    1950                 :            :     {
    1951                 :        377 :         String* pStr = 0;
    1952                 :        377 :         sal_Bool* pBool = 0;
    1953   [ +  +  +  +  :        377 :         switch(pEntry->nWID)
          +  +  -  +  +  
          -  +  -  +  -  
             -  +  -  -  
                      - ]
    1954                 :            :         {
    1955                 :            :         case FIELD_PROP_PAR1:
    1956                 :         93 :             pStr = &m_pProps->sPar1;
    1957                 :         93 :             break;
    1958                 :            :         case FIELD_PROP_PAR2:
    1959                 :         23 :             pStr = &m_pProps->sPar2;
    1960                 :         23 :             break;
    1961                 :            :         case FIELD_PROP_PAR3:
    1962                 :         39 :             pStr = &m_pProps->sPar3;
    1963                 :         39 :             break;
    1964                 :            :         case FIELD_PROP_PAR4:
    1965                 :         15 :             pStr = &m_pProps->sPar4;
    1966                 :         15 :             break;
    1967                 :            :         case FIELD_PROP_FORMAT:
    1968                 :         19 :             rValue >>= m_pProps->nFormat;
    1969                 :         19 :             m_pProps->bFormatIsDefault = sal_False;
    1970                 :         19 :             break;
    1971                 :            :         case FIELD_PROP_SUBTYPE:
    1972         [ +  - ]:         22 :             m_pProps->nSubType = SWUnoHelper::GetEnumAsInt32( rValue );
    1973                 :         22 :             break;
    1974                 :            :         case FIELD_PROP_BYTE1 :
    1975                 :          0 :             rValue >>= m_pProps->nByte1;
    1976                 :          0 :             break;
    1977                 :            :         case FIELD_PROP_BOOL1 :
    1978                 :         48 :             pBool = &m_pProps->bBool1;
    1979                 :         48 :             break;
    1980                 :            :         case FIELD_PROP_BOOL2 :
    1981                 :         48 :             pBool = &m_pProps->bBool2;
    1982                 :         48 :             break;
    1983                 :            :         case FIELD_PROP_BOOL3 :
    1984                 :          0 :             pBool = &m_pProps->bBool3;
    1985                 :          0 :             break;
    1986                 :            :         case FIELD_PROP_BOOL4:
    1987                 :          4 :             pBool = &m_pProps->bBool4;
    1988                 :          4 :         break;
    1989                 :            :         case FIELD_PROP_DATE :
    1990                 :            :         {
    1991 [ #  # ][ #  # ]:          0 :             if(rValue.getValueType() != ::getCppuType(static_cast<const util::Date*>(0)))
    1992         [ #  # ]:          0 :                 throw lang::IllegalArgumentException();
    1993                 :            : 
    1994                 :          0 :             util::Date aTemp = *(const util::Date*)rValue.getValue();
    1995                 :          0 :             m_pProps->aDate = Date(aTemp.Day, aTemp.Month, aTemp.Year);
    1996                 :            :         }
    1997                 :          0 :         break;
    1998                 :            :         case FIELD_PROP_USHORT1:
    1999                 :            :         case FIELD_PROP_USHORT2:
    2000                 :            :             {
    2001                 :         42 :                  sal_Int16 nVal = 0;
    2002                 :         42 :                 rValue >>= nVal;
    2003         [ +  + ]:         42 :                 if( FIELD_PROP_USHORT1 == pEntry->nWID)
    2004                 :         28 :                     m_pProps->nUSHORT1 = nVal;
    2005                 :            :                 else
    2006                 :         14 :                     m_pProps->nUSHORT2 = nVal;
    2007                 :            :             }
    2008                 :         42 :             break;
    2009                 :            :         case FIELD_PROP_SHORT1:
    2010                 :          0 :             rValue >>= m_pProps->nSHORT1;
    2011                 :          0 :             break;
    2012                 :            :         case FIELD_PROP_DOUBLE:
    2013 [ #  # ][ #  # ]:          0 :             if(rValue.getValueType() != ::getCppuType(static_cast<const double*>(0)))
    2014         [ #  # ]:          0 :                 throw lang::IllegalArgumentException();
    2015                 :          0 :             m_pProps->fDouble = *(double*)rValue.getValue();
    2016                 :          0 :             break;
    2017                 :            : 
    2018                 :            :         case FIELD_PROP_DATE_TIME :
    2019         [ +  - ]:         24 :             if(!m_pProps->pDateTime)
    2020         [ +  - ]:         24 :                 m_pProps->pDateTime = new util::DateTime;
    2021         [ +  - ]:         24 :             rValue >>= (*m_pProps->pDateTime);
    2022                 :         24 :             break;
    2023                 :            :         case FIELD_PROP_PROP_SEQ:
    2024         [ #  # ]:          0 :             rValue >>= m_pProps->aPropSeq;
    2025                 :          0 :             break;
    2026                 :            :         case FIELD_PROP_STRINGS:
    2027         [ #  # ]:          0 :             rValue >>= m_pProps->aStrings;
    2028                 :          0 :             break;
    2029                 :            :         }
    2030         [ +  + ]:        377 :         if( pStr )
    2031         [ +  - ]:        170 :             ::GetString( rValue, *pStr );
    2032         [ +  + ]:        207 :         else if( pBool )
    2033                 :            :         {
    2034 [ +  - ][ +  - ]:        100 :             if( rValue.getValueType() == getCppuBooleanType() )
    2035                 :        100 :                 *pBool = *(sal_Bool*)rValue.getValue();
    2036                 :            :             else
    2037         [ #  # ]:          0 :                 throw lang::IllegalArgumentException();
    2038                 :            :         }
    2039                 :            :     }
    2040                 :            :     else
    2041 [ #  # ][ +  - ]:        451 :         throw uno::RuntimeException();
    2042                 :        439 : }
    2043                 :            : 
    2044                 :        297 : uno::Any SwXTextField::getPropertyValue(const OUString& rPropertyName)
    2045                 :            :     throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
    2046                 :            : {
    2047         [ +  - ]:        297 :     SolarMutexGuard aGuard;
    2048                 :        297 :     uno::Any aRet;
    2049                 :        297 :     const SwField* pField = GetField();
    2050                 :            :     const SfxItemPropertySet* _pPropSet = aSwMapProvider.GetPropertySet(
    2051         [ +  - ]:        297 :                                 lcl_GetPropertyMapOfService( m_nServiceId));
    2052         [ +  - ]:        297 :     const SfxItemPropertySimpleEntry*   pEntry = _pPropSet->getPropertyMap().getByName(rPropertyName);
    2053         [ +  + ]:        297 :     if(!pEntry )
    2054                 :            :     {
    2055         [ +  - ]:         45 :         const SfxItemPropertySet* _pParaPropSet = aSwMapProvider.GetPropertySet(PROPERTY_MAP_PARAGRAPH_EXTENSIONS);
    2056         [ +  - ]:         45 :         pEntry = _pParaPropSet->getPropertyMap().getByName(rPropertyName);
    2057                 :            :     }
    2058         [ +  + ]:        297 :     if (!pEntry)
    2059 [ +  - ][ +  - ]:         33 :         throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
                 [ +  - ]
    2060                 :            : 
    2061   [ +  +  +  + ]:        264 :     switch( pEntry->nWID )
    2062                 :            :     {
    2063                 :            :     case FN_UNO_TEXT_WRAP:
    2064         [ +  - ]:          4 :         aRet <<= text::WrapTextMode_NONE;
    2065                 :          4 :         break;
    2066                 :            :     case FN_UNO_ANCHOR_TYPE:
    2067         [ +  - ]:          4 :         aRet <<= text::TextContentAnchorType_AS_CHARACTER;
    2068                 :          4 :         break;
    2069                 :            :     case FN_UNO_ANCHOR_TYPES:
    2070                 :            :         {
    2071         [ +  - ]:          4 :             uno::Sequence<text::TextContentAnchorType> aTypes(1);
    2072         [ +  - ]:          4 :             text::TextContentAnchorType* pArray = aTypes.getArray();
    2073                 :          4 :             pArray[0] = text::TextContentAnchorType_AS_CHARACTER;
    2074 [ +  - ][ +  - ]:          4 :             aRet.setValue(&aTypes, ::getCppuType(static_cast<uno::Sequence<text::TextContentAnchorType>*>(0)));
    2075                 :            :         }
    2076                 :          4 :         break;
    2077                 :            : 
    2078                 :            :     default:
    2079         [ +  + ]:        252 :         if( pField )
    2080                 :            :         {
    2081 [ +  - ][ -  + ]:        231 :             if (FIELD_PROP_IS_FIELD_USED      == pEntry->nWID ||
    2082                 :            :                 FIELD_PROP_IS_FIELD_DISPLAYED == pEntry->nWID)
    2083                 :            :             {
    2084                 :          0 :                 sal_Bool bIsFieldUsed       = sal_False;
    2085                 :          0 :                 sal_Bool bIsFieldDisplayed  = sal_False;
    2086                 :            : 
    2087                 :            :                 // in order to have the information about fields
    2088                 :            :                 // correctly evaluated the document needs a layout
    2089                 :            :                 // (has to be already formatted)
    2090                 :          0 :                 SwDoc *pDoc = GetDoc();
    2091                 :          0 :                 ViewShell *pViewShell = 0;
    2092 [ #  # ][ #  # ]:          0 :                 SwEditShell *pEditShell = pDoc ? pDoc->GetEditShell( &pViewShell ) : 0;
    2093         [ #  # ]:          0 :                 if (pEditShell)
    2094         [ #  # ]:          0 :                     pEditShell->CalcLayout();
    2095         [ #  # ]:          0 :                 else if (pViewShell) // a page preview has no SwEditShell it should only have a view shell
    2096         [ #  # ]:          0 :                     pViewShell->CalcLayout();
    2097                 :            :                 else
    2098         [ #  # ]:          0 :                     throw uno::RuntimeException();
    2099                 :            : 
    2100                 :            :                 // get text node for the text field
    2101         [ #  # ]:          0 :                 const SwFmtFld *pFldFmt = GetFldFmt();
    2102         [ #  # ]:          0 :                 const SwTxtFld* pTxtFld = pFldFmt ? pFmtFld->GetTxtFld() : 0;
    2103         [ #  # ]:          0 :                 if(!pTxtFld)
    2104         [ #  # ]:          0 :                     throw uno::RuntimeException();
    2105                 :          0 :                 const SwTxtNode& rTxtNode = pTxtFld->GetTxtNode();
    2106                 :            : 
    2107                 :            :                 // skip fields that are currently not in the document
    2108                 :            :                 // e.g. fields in undo or redo array
    2109 [ #  # ][ #  # ]:          0 :                 if (rTxtNode.GetNodes().IsDocNodes())
    2110                 :            :                 {
    2111         [ #  # ]:          0 :                     sal_Bool bFrame = 0 != rTxtNode.FindLayoutRect().Width(); // oder so
    2112         [ #  # ]:          0 :                     sal_Bool bHidden = rTxtNode.IsHidden();
    2113         [ #  # ]:          0 :                     if ( !bHidden )
    2114                 :            :                     {
    2115                 :            :                         xub_StrLen nHiddenStart;
    2116                 :            :                         xub_StrLen nHiddenEnd;
    2117                 :            : 
    2118         [ #  # ]:          0 :                         SwPosition aPosition( pTxtFld->GetTxtNode() );
    2119         [ #  # ]:          0 :                         aPosition.nContent = *pTxtFld->GetStart();
    2120                 :            : 
    2121                 :          0 :                         bHidden = SwScriptInfo::GetBoundsOfHiddenRange( pTxtFld->GetTxtNode(),
    2122                 :          0 :                                         *pTxtFld->GetStart(),
    2123 [ #  # ][ #  # ]:          0 :                                         nHiddenStart, nHiddenEnd );
    2124                 :            :                     }
    2125                 :            : 
    2126                 :            :                     // !bFrame && !bHidden: aller Wahrscheinlichkeit handelt es
    2127                 :            :                     // sich um ein Feld in einem unbenutzten Seitenstyle
    2128                 :            :                     //
    2129                 :            :                     // bHidden: Feld ist versteckt
    2130                 :            :                     // FME: Problem: Verstecktes Feld in unbenutzter Seitenvorlage =>
    2131                 :            :                     // bIsFieldUsed = true
    2132                 :            :                     // bIsFieldDisplayed = false
    2133 [ #  # ][ #  # ]:          0 :                     bIsFieldUsed       = bFrame || bHidden;
    2134 [ #  # ][ #  # ]:          0 :                     bIsFieldDisplayed  = bIsFieldUsed && !bHidden;
    2135                 :            :                 }
    2136                 :            :                 sal_Bool bRetVal = (FIELD_PROP_IS_FIELD_USED == pEntry->nWID) ?
    2137         [ #  # ]:          0 :                                             bIsFieldUsed : bIsFieldDisplayed;
    2138         [ #  # ]:          0 :                 aRet.setValue( &bRetVal, ::getCppuBooleanType() );
    2139                 :            :             }
    2140                 :            :             else
    2141         [ +  - ]:        231 :                 pField->QueryValue( aRet, pEntry->nWID );
    2142                 :            :         }
    2143         [ +  - ]:         21 :         else if( m_pProps )     // currently just a descriptor...
    2144                 :            :         {
    2145   [ +  -  -  -  :         21 :             switch(pEntry->nWID)
          -  +  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
                -  -  - ]
    2146                 :            :             {
    2147                 :            :             case FIELD_PROP_TEXT:
    2148                 :            :                 {
    2149         [ +  - ]:         18 :                     if (!m_pTextObject)
    2150                 :            :                     {
    2151 [ +  - ][ +  - ]:         18 :                         SwTextAPIEditSource* pObj = new SwTextAPIEditSource( m_pDoc );
    2152         [ +  - ]:         18 :                         m_pTextObject = new SwTextAPIObject( pObj );
    2153                 :         18 :                         m_pTextObject->acquire();
    2154                 :            :                     }
    2155                 :            : 
    2156 [ +  - ][ +  - ]:         18 :                     uno::Reference < text::XText > xText( m_pTextObject  );
    2157         [ +  - ]:         18 :                     aRet <<= xText;
    2158                 :         18 :                     break;
    2159                 :            :                 }
    2160                 :            :             case FIELD_PROP_PAR1:
    2161 [ #  # ][ #  # ]:          0 :                 aRet <<= OUString(m_pProps->sPar1);
    2162                 :          0 :                 break;
    2163                 :            :             case FIELD_PROP_PAR2:
    2164 [ #  # ][ #  # ]:          0 :                 aRet <<= OUString(m_pProps->sPar2);
    2165                 :          0 :                 break;
    2166                 :            :             case FIELD_PROP_PAR3:
    2167 [ #  # ][ #  # ]:          0 :                 aRet <<= OUString(m_pProps->sPar3);
    2168                 :          0 :                 break;
    2169                 :            :             case FIELD_PROP_PAR4:
    2170 [ #  # ][ #  # ]:          0 :                 aRet <<= OUString(m_pProps->sPar4);
    2171                 :          0 :                 break;
    2172                 :            :             case FIELD_PROP_FORMAT:
    2173         [ +  - ]:          3 :                 aRet <<= m_pProps->nFormat;
    2174                 :          3 :                 break;
    2175                 :            :             case FIELD_PROP_SUBTYPE:
    2176         [ #  # ]:          0 :                 aRet <<= m_pProps->nSubType;
    2177                 :          0 :                 break;
    2178                 :            :             case FIELD_PROP_BYTE1 :
    2179         [ #  # ]:          0 :                 aRet <<= m_pProps->nByte1;
    2180                 :          0 :                 break;
    2181                 :            :             case FIELD_PROP_BOOL1 :
    2182         [ #  # ]:          0 :                 aRet.setValue(&m_pProps->bBool1, ::getCppuBooleanType());
    2183                 :          0 :                 break;
    2184                 :            :             case FIELD_PROP_BOOL2 :
    2185         [ #  # ]:          0 :                 aRet.setValue(&m_pProps->bBool2, ::getCppuBooleanType());
    2186                 :          0 :                 break;
    2187                 :            :             case FIELD_PROP_BOOL3 :
    2188         [ #  # ]:          0 :                 aRet.setValue(&m_pProps->bBool3, ::getCppuBooleanType());
    2189                 :          0 :                 break;
    2190                 :            :             case FIELD_PROP_BOOL4 :
    2191         [ #  # ]:          0 :                 aRet.setValue(&m_pProps->bBool4, ::getCppuBooleanType());
    2192                 :          0 :                 break;
    2193                 :            :             case FIELD_PROP_DATE :
    2194         [ #  # ]:          0 :                 aRet.setValue(&m_pProps->aDate, ::getCppuType(static_cast<const util::Date*>(0)));
    2195                 :          0 :                 break;
    2196                 :            :             case FIELD_PROP_USHORT1:
    2197         [ #  # ]:          0 :                 aRet <<= (sal_Int16)m_pProps->nUSHORT1;
    2198                 :          0 :                 break;
    2199                 :            :             case FIELD_PROP_USHORT2:
    2200         [ #  # ]:          0 :                 aRet <<= (sal_Int16)m_pProps->nUSHORT2;
    2201                 :          0 :                 break;
    2202                 :            :             case FIELD_PROP_SHORT1:
    2203         [ #  # ]:          0 :                 aRet <<= m_pProps->nSHORT1;
    2204                 :          0 :                 break;
    2205                 :            :             case FIELD_PROP_DOUBLE:
    2206         [ #  # ]:          0 :                 aRet <<= m_pProps->fDouble;
    2207                 :          0 :                 break;
    2208                 :            :             case FIELD_PROP_DATE_TIME :
    2209         [ #  # ]:          0 :                 if(m_pProps->pDateTime)
    2210         [ #  # ]:          0 :                     aRet <<= (*m_pProps->pDateTime);
    2211                 :          0 :                 break;
    2212                 :            :             case FIELD_PROP_PROP_SEQ:
    2213         [ #  # ]:          0 :                 aRet <<= m_pProps->aPropSeq;
    2214                 :          0 :                 break;
    2215                 :            :             case FIELD_PROP_STRINGS:
    2216         [ #  # ]:          0 :                 aRet <<= m_pProps->aStrings;
    2217                 :          0 :                 break;
    2218                 :            :             case FIELD_PROP_IS_FIELD_USED:
    2219                 :            :             case FIELD_PROP_IS_FIELD_DISPLAYED:
    2220         [ #  # ]:          0 :                 aRet.setValue( sal_False, ::getCppuBooleanType() );
    2221                 :         21 :                 break;
    2222                 :            :             }
    2223                 :            :         }
    2224                 :            :         else
    2225         [ #  # ]:          0 :             throw uno::RuntimeException();
    2226                 :            :     }
    2227         [ +  - ]:        297 :     return aRet;
    2228                 :            : }
    2229                 :            : 
    2230                 :          0 : void SwXTextField::addPropertyChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
    2231                 :            : {
    2232                 :            :     OSL_FAIL("not implemented");
    2233                 :          0 : }
    2234                 :            : 
    2235                 :          0 : void SwXTextField::removePropertyChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
    2236                 :            : {
    2237                 :            :     OSL_FAIL("not implemented");
    2238                 :          0 : }
    2239                 :            : 
    2240                 :          0 : void SwXTextField::addVetoableChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
    2241                 :            : {
    2242                 :            :     OSL_FAIL("not implemented");
    2243                 :          0 : }
    2244                 :            : 
    2245                 :          0 : void SwXTextField::removeVetoableChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
    2246                 :            : {
    2247                 :            :     OSL_FAIL("not implemented");
    2248                 :          0 : }
    2249                 :            : 
    2250                 :          0 : void SwXTextField::update(  ) throw (uno::RuntimeException)
    2251                 :            : {
    2252         [ #  # ]:          0 :     SolarMutexGuard aGuard;
    2253                 :          0 :     const SwField* pFld = GetField();
    2254         [ #  # ]:          0 :     if(pFld)
    2255                 :            :     {
    2256   [ #  #  #  #  :          0 :         switch(pFld->Which())
                   #  # ]
    2257                 :            :         {
    2258                 :            :             case RES_DATETIMEFLD:
    2259 [ #  # ][ #  # ]:          0 :             ((SwDateTimeField*)pFld)->SetDateTime( ::DateTime( ::DateTime::SYSTEM ) );
    2260                 :          0 :             break;
    2261                 :            : 
    2262                 :            :             case RES_EXTUSERFLD:
    2263                 :            :             {
    2264                 :          0 :                 SwExtUserField* pExtUserFld = (SwExtUserField*)pFld;
    2265                 :          0 :                 pExtUserFld->SetExpansion( ((SwExtUserFieldType*)pFld->GetTyp())->Expand(
    2266         [ #  # ]:          0 :                                             pExtUserFld->GetSubType(),
    2267 [ #  # ][ #  # ]:          0 :                                             pExtUserFld->GetFormat() ) );
                 [ #  # ]
    2268                 :            :             }
    2269                 :          0 :             break;
    2270                 :            : 
    2271                 :            :             case RES_AUTHORFLD:
    2272                 :            :             {
    2273                 :          0 :                 SwAuthorField* pAuthorFld = (SwAuthorField*)pFld;
    2274                 :          0 :                 pAuthorFld->SetExpansion( ((SwAuthorFieldType*)pFld->GetTyp())->Expand(
    2275 [ #  # ][ #  # ]:          0 :                                             pAuthorFld->GetFormat() ) );
                 [ #  # ]
    2276                 :            :             }
    2277                 :          0 :             break;
    2278                 :            : 
    2279                 :            :             case RES_FILENAMEFLD:
    2280                 :            :             {
    2281                 :          0 :                 SwFileNameField* pFileNameFld = (SwFileNameField*)pFld;
    2282                 :          0 :                 pFileNameFld->SetExpansion( ((SwFileNameFieldType*)pFld->GetTyp())->Expand(
    2283 [ #  # ][ #  # ]:          0 :                                             pFileNameFld->GetFormat() ) );
                 [ #  # ]
    2284                 :            :             }
    2285                 :          0 :             break;
    2286                 :            : 
    2287                 :            :             case RES_DOCINFOFLD:
    2288                 :            :             {
    2289                 :          0 :                     SwDocInfoField* pDocInfFld = (SwDocInfoField*)pFld;
    2290                 :          0 :                     pDocInfFld->SetExpansion( ((SwDocInfoFieldType*)pFld->GetTyp())->Expand(
    2291         [ #  # ]:          0 :                                                 pDocInfFld->GetSubType(),
    2292                 :            :                                                 pDocInfFld->GetFormat(),
    2293                 :          0 :                                                 pDocInfFld->GetLanguage(),
    2294   [ #  #  #  # ]:          0 :                                                 pDocInfFld->GetName() ) );
         [ #  # ][ #  # ]
                 [ #  # ]
    2295                 :            :             }
    2296                 :          0 :             break;
    2297                 :            :         }
    2298                 :            :         // Text formatting has to be triggered.
    2299         [ #  # ]:          0 :         const_cast<SwFmtFld*>(pFmtFld)->ModifyNotification( 0, 0 );
    2300                 :            :     }
    2301                 :            :     else
    2302         [ #  # ]:          0 :         m_bCallUpdate = sal_True;
    2303                 :          0 : }
    2304                 :            : 
    2305                 :          0 : OUString SwXTextField::getImplementationName(void) throw( uno::RuntimeException )
    2306                 :            : {
    2307                 :          0 :     return C2U("SwXTextField");
    2308                 :            : }
    2309                 :            : 
    2310                 :         87 : static OUString OldNameToNewName_Impl( const OUString &rOld )
    2311                 :            : {
    2312 [ +  + ][ +  - ]:         87 :     static OUString aOldNamePart1(RTL_CONSTASCII_USTRINGPARAM(".TextField.DocInfo."));
         [ +  - ][ #  # ]
    2313 [ +  + ][ +  - ]:         87 :     static OUString aOldNamePart2(RTL_CONSTASCII_USTRINGPARAM(".TextField."));
         [ +  - ][ #  # ]
    2314 [ +  + ][ +  - ]:         87 :     static OUString aNewNamePart1(RTL_CONSTASCII_USTRINGPARAM(".textfield.docinfo."));
         [ +  - ][ #  # ]
    2315 [ +  + ][ +  - ]:         87 :     static OUString aNewNamePart2(RTL_CONSTASCII_USTRINGPARAM(".textfield."));
         [ +  - ][ #  # ]
    2316                 :         87 :     OUString sServiceNameCC( rOld );
    2317                 :         87 :     sal_Int32 nIdx = sServiceNameCC.indexOf( aOldNamePart1 );
    2318         [ -  + ]:         87 :     if (nIdx >= 0)
    2319                 :          0 :         sServiceNameCC = sServiceNameCC.replaceAt( nIdx, aOldNamePart1.getLength(), aNewNamePart1 );
    2320                 :         87 :     nIdx = sServiceNameCC.indexOf( aOldNamePart2 );
    2321         [ +  - ]:         87 :     if (nIdx >= 0)
    2322                 :         87 :         sServiceNameCC = sServiceNameCC.replaceAt( nIdx, aOldNamePart2.getLength(), aNewNamePart2 );
    2323                 :         87 :     return sServiceNameCC;
    2324                 :            : }
    2325                 :            : 
    2326                 :         81 : sal_Bool SwXTextField::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
    2327                 :            : {
    2328         [ +  - ]:         81 :     OUString sServiceName = SwXServiceProvider::GetProviderName(m_nServiceId);
    2329                 :            : 
    2330                 :            :     // case-corected version of service-name (see #i67811)
    2331                 :            :     // (need to supply both because of compatibility to older versions)
    2332         [ +  - ]:         81 :     OUString sServiceNameCC(  OldNameToNewName_Impl( sServiceName ) );
    2333                 :            : 
    2334                 :        139 :     return sServiceName == rServiceName || sServiceNameCC == rServiceName ||
    2335                 :            :         rServiceName.equalsAsciiL(
    2336         [ +  + ]:        139 :                 RTL_CONSTASCII_STRINGPARAM("com.sun.star.text.TextContent"));
           [ +  +  +  - ]
    2337                 :            : }
    2338                 :            : 
    2339                 :          6 : uno::Sequence< OUString > SwXTextField::getSupportedServiceNames(void) throw( uno::RuntimeException )
    2340                 :            : {
    2341         [ +  - ]:          6 :     OUString sServiceName = SwXServiceProvider::GetProviderName(m_nServiceId);
    2342                 :            : 
    2343                 :            :     // case-corected version of service-name (see #i67811)
    2344                 :            :     // (need to supply both because of compatibility to older versions)
    2345         [ +  - ]:          6 :     OUString sServiceNameCC(  OldNameToNewName_Impl( sServiceName ) );
    2346         [ -  + ]:          6 :     sal_Int32 nLen = sServiceName == sServiceNameCC ? 2 : 3;
    2347                 :            : 
    2348         [ +  - ]:          6 :     uno::Sequence< OUString > aRet( nLen );
    2349         [ +  - ]:          6 :     OUString* pArray = aRet.getArray();
    2350                 :          6 :     *pArray++ = sServiceName;
    2351         [ +  - ]:          6 :     if (nLen == 3)
    2352                 :          6 :         *pArray++ = sServiceNameCC;
    2353         [ +  - ]:          6 :     *pArray++ = C2U("com.sun.star.text.TextContent");
    2354                 :          6 :     return aRet;
    2355                 :            : }
    2356                 :            : 
    2357                 :        132 : void SwXTextField::Invalidate()
    2358                 :            : {
    2359         [ +  - ]:        132 :     if (GetRegisteredIn())
    2360                 :            :     {
    2361                 :        132 :         ((SwModify*)GetRegisteredIn())->Remove(this);
    2362                 :        132 :         aLstnrCntnr.Disposing();
    2363                 :        132 :         pFmtFld = 0;
    2364                 :        132 :         m_pDoc = 0;
    2365                 :            :     }
    2366                 :        132 : }
    2367                 :            : 
    2368                 :            : 
    2369                 :        172 : void SwXTextField::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew)
    2370                 :            : {
    2371         [ +  - ]:        172 :     switch( pOld ? pOld->Which() : 0 )
           [ +  -  +  - ]
    2372                 :            :     {
    2373                 :            :     case RES_REMOVE_UNO_OBJECT:
    2374                 :            :     case RES_OBJECTDYING:
    2375         [ +  - ]:         62 :         if( (void*)GetRegisteredIn() == ((SwPtrMsgPoolItem *)pOld)->pObject )
    2376                 :         62 :             Invalidate();
    2377                 :         62 :         break;
    2378                 :            : 
    2379                 :            :     case RES_FMT_CHG:
    2380                 :            :         // wurden wir an das neue umgehaengt und wird das alte geloscht?
    2381   [ #  #  #  # ]:          0 :         if( ((SwFmtChg*)pNew)->pChangedFmt == GetRegisteredIn() &&
                 [ #  # ]
    2382                 :          0 :             ((SwFmtChg*)pOld)->pChangedFmt->IsFmtInDTOR() )
    2383                 :          0 :             Invalidate();
    2384                 :          0 :         break;
    2385                 :            :     case RES_FIELD_DELETED:
    2386         [ +  + ]:        110 :         if( (void*)pFmtFld == ((SwPtrMsgPoolItem *)pOld)->pObject )
    2387                 :         70 :             Invalidate();
    2388                 :        110 :         break;
    2389                 :            :     }
    2390                 :        172 : }
    2391                 :            : 
    2392                 :        846 : const SwField*  SwXTextField::GetField() const
    2393                 :            : {
    2394 [ +  + ][ +  - ]:        846 :     if(GetRegisteredIn() && pFmtFld)
                 [ +  + ]
    2395                 :        442 :         return  pFmtFld->GetFld();
    2396                 :        846 :     return 0;
    2397                 :            : }
    2398                 :            : 
    2399                 :            : /******************************************************************
    2400                 :            :  * SwXTextFieldMasters
    2401                 :            :  ******************************************************************/
    2402                 :          0 : OUString SwXTextFieldMasters::getImplementationName(void) throw( uno::RuntimeException )
    2403                 :            : {
    2404                 :          0 :     return C2U("SwXTextFieldMasters");
    2405                 :            : }
    2406                 :            : 
    2407                 :          0 : sal_Bool SwXTextFieldMasters::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
    2408                 :            : {
    2409                 :          0 :     return rServiceName == "com.sun.star.text.TextFieldMasters";
    2410                 :            : }
    2411                 :            : 
    2412                 :          0 : uno::Sequence< OUString > SwXTextFieldMasters::getSupportedServiceNames(void) throw( uno::RuntimeException )
    2413                 :            : {
    2414                 :          0 :     uno::Sequence< OUString > aRet(1);
    2415         [ #  # ]:          0 :     OUString* pArray = aRet.getArray();
    2416         [ #  # ]:          0 :     pArray[0] = C2U("com.sun.star.text.TextFieldMasters");
    2417                 :          0 :     return aRet;
    2418                 :            : }
    2419                 :            : 
    2420                 :         80 : SwXTextFieldMasters::SwXTextFieldMasters(SwDoc* _pDoc) :
    2421                 :         80 :     SwUnoCollection(_pDoc)
    2422                 :            : {
    2423                 :         80 : }
    2424                 :            : 
    2425                 :         68 : SwXTextFieldMasters::~SwXTextFieldMasters()
    2426                 :            : {
    2427                 :            : 
    2428         [ -  + ]:        136 : }
    2429                 :            : 
    2430                 :            : /*-----------------------------------------------------------------------
    2431                 :            :     Iteration ueber nicht-Standard Feldtypen
    2432                 :            :     USER/SETEXP/DDE/DATABASE
    2433                 :            :     Der Name ist demnach:
    2434                 :            :     "com.sun.star.text.fieldmaster.User" + <Feltypname>
    2435                 :            :     "com.sun.star.text.fieldmaster.DDE" + <Feltypname>
    2436                 :            :     "com.sun.star.text.fieldmaster.SetExpression" + <Feltypname>
    2437                 :            :     "com.sun.star.text.fieldmaster.DataBase" + <Feltypname>
    2438                 :            : 
    2439                 :            :     Falls wir grosszuegig werden wollen, dann koennte man com.sun.star.text
    2440                 :            :     auch optional weglassen
    2441                 :            :   -----------------------------------------------------------------------*/
    2442                 :        823 : sal_uInt16 lcl_GetIdByName( String& rName, String& rTypeName )
    2443                 :            : {
    2444 [ +  - ][ +  + ]:       1004 :     if( rName.EqualsAscii( COM_TEXT_FLDMASTER, 0, RTL_CONSTASCII_LENGTH(COM_TEXT_FLDMASTER ))
         [ +  + ][ +  + ]
    2445         [ +  - ]:        181 :         ||  rName.EqualsAscii( COM_TEXT_FLDMASTER_CC, 0, RTL_CONSTASCII_LENGTH(COM_TEXT_FLDMASTER_CC )))
    2446         [ +  - ]:        819 :         rName.Erase(0, 30);
    2447                 :            : 
    2448                 :        823 :     sal_uInt16 nResId = USHRT_MAX;
    2449                 :        823 :     xub_StrLen nFound = 0;
    2450 [ +  - ][ +  - ]:        823 :     rTypeName = rName.GetToken( 0, '.', nFound );
                 [ +  - ]
    2451 [ +  - ][ +  + ]:        823 :     if(rTypeName.EqualsAscii("User"))
    2452                 :         57 :         nResId = RES_USERFLD;
    2453 [ +  - ][ -  + ]:        766 :     else if(rTypeName.EqualsAscii("DDE"))
    2454                 :          0 :         nResId = RES_DDEFLD;
    2455 [ +  - ][ +  + ]:        766 :     else if(rTypeName.EqualsAscii("SetExpression"))
    2456                 :            :     {
    2457                 :        739 :         nResId = RES_SETEXPFLD;
    2458                 :            : 
    2459         [ +  - ]:        739 :         String sFldTypName( rName.GetToken( 1, '.' ));
    2460         [ +  - ]:        739 :         String sUIName( SwStyleNameMapper::GetSpecialExtraUIName( sFldTypName ) );
    2461                 :            : 
    2462 [ +  - ][ -  + ]:        739 :         if( sUIName != sFldTypName )
    2463 [ #  # ][ +  - ]:        739 :             rName.SetToken( 1, '.', sUIName );
                 [ +  - ]
    2464                 :            :     }
    2465 [ +  - ][ -  + ]:         27 :     else if(rTypeName.EqualsAscii("DataBase"))
    2466                 :            :     {
    2467         [ #  # ]:          0 :         rName.Erase( 0, RTL_CONSTASCII_LENGTH( "DataBase." ));
    2468 [ #  # ][ #  # ]:          0 :         sal_uInt16 nDotCount = comphelper::string::getTokenCount(rName, '.');
    2469         [ #  # ]:          0 :         if( 2 <= nDotCount )
    2470                 :            :         {
    2471                 :            :             // #i51815#
    2472                 :            :             //rName.SearchAndReplace('.', DB_DELIM);
    2473                 :            :             //rName.SetChar( rName.SearchBackward( '.' ), DB_DELIM );
    2474                 :            : 
    2475         [ #  # ]:          0 :             rName.InsertAscii( "DataBase.", 0 );
    2476                 :          0 :             nResId = RES_DBFLD;
    2477                 :            :         }
    2478                 :            :     }
    2479 [ +  - ][ +  + ]:         27 :     else if( rTypeName.EqualsAscii("Bibliography"))
    2480                 :         23 :         nResId = RES_AUTHORITY;
    2481                 :        823 :     return nResId;
    2482                 :            : }
    2483                 :            : 
    2484                 :        431 : uno::Any SwXTextFieldMasters::getByName(const OUString& rName)
    2485                 :            :     throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException )
    2486                 :            : {
    2487         [ +  - ]:        431 :     SolarMutexGuard aGuard;
    2488         [ -  + ]:        431 :     if(!GetDoc())
    2489         [ #  # ]:          0 :         throw uno::RuntimeException();
    2490                 :            : 
    2491 [ +  - ][ +  - ]:        431 :     String sName(rName), sTypeName;
    2492         [ +  - ]:        431 :     sal_uInt16 nResId = lcl_GetIdByName( sName, sTypeName );
    2493         [ +  + ]:        431 :     if( USHRT_MAX == nResId )
    2494         [ +  - ]:          2 :         throw container::NoSuchElementException();
    2495                 :            : 
    2496         [ +  - ]:        429 :     sName.Erase(0, sTypeName.Len()+1);
    2497         [ +  - ]:        429 :     SwFieldType* pType = GetDoc()->GetFldType(nResId, sName, sal_True);
    2498         [ -  + ]:        429 :     if(!pType)
    2499         [ #  # ]:          0 :         throw container::NoSuchElementException();
    2500         [ +  - ]:        429 :     SwXFieldMaster* pMaster = SwIterator<SwXFieldMaster,SwFieldType>::FirstElement( *pType );
    2501         [ +  - ]:        429 :     if(!pMaster)
    2502         [ +  - ]:        429 :         pMaster = new SwXFieldMaster(*pType, GetDoc());
    2503 [ +  - ][ +  - ]:        429 :     uno::Reference< beans::XPropertySet >  aRef = pMaster;
    2504         [ +  - ]:        429 :     uno::Any aRet(&aRef, ::getCppuType( static_cast<const uno::Reference<beans::XPropertySet>* >(0)));
    2505 [ +  - ][ +  - ]:        431 :     return aRet;
                 [ +  - ]
    2506                 :            : }
    2507                 :            : 
    2508                 :        738 : sal_Bool SwXTextFieldMasters::getInstanceName(
    2509                 :            :     const SwFieldType& rFldType, String& rName)
    2510                 :            : {
    2511                 :        738 :     sal_Bool bRet = sal_True;
    2512   [ -  -  +  -  :        738 :     switch( rFldType.Which() )
                   +  + ]
    2513                 :            :     {
    2514                 :            :     case RES_USERFLD:
    2515                 :          0 :         rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( COM_TEXT_FLDMASTER_CC ));
    2516                 :          0 :         rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "User."));
    2517                 :          0 :         rName += rFldType.GetName();
    2518                 :          0 :         break;
    2519                 :            :     case RES_DDEFLD:
    2520                 :          0 :         rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( COM_TEXT_FLDMASTER_CC ));
    2521                 :          0 :         rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "DDE."));
    2522                 :          0 :         rName += rFldType.GetName();
    2523                 :          0 :         break;
    2524                 :            : 
    2525                 :            :     case RES_SETEXPFLD:
    2526                 :         92 :         rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( COM_TEXT_FLDMASTER_CC ));
    2527                 :         92 :         rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "SetExpression."));
    2528 [ +  - ][ +  - ]:         92 :         rName += String( SwStyleNameMapper::GetSpecialExtraProgName( rFldType.GetName() ) );
                 [ +  - ]
    2529                 :         92 :         break;
    2530                 :            : 
    2531                 :            :     case RES_DBFLD:
    2532                 :            :         {
    2533         [ #  # ]:          0 :             rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( COM_TEXT_FLDMASTER_CC ));
    2534         [ #  # ]:          0 :             rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "DataBase."));
    2535 [ #  # ][ #  # ]:          0 :             String sDBName(rFldType.GetName());
    2536         [ #  # ]:          0 :             sDBName.SearchAndReplaceAll(DB_DELIM, '.');
    2537 [ #  # ][ #  # ]:          0 :             rName += sDBName;
    2538                 :            :         }
    2539                 :          0 :         break;
    2540                 :            : 
    2541                 :            :     case RES_AUTHORITY:
    2542                 :          2 :         rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( COM_TEXT_FLDMASTER_CC ));
    2543                 :          2 :         rName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "Bibliography"));
    2544                 :          2 :         break;
    2545                 :            : 
    2546                 :            :     default:
    2547                 :        644 :         bRet = sal_False;
    2548                 :            :     }
    2549                 :            : 
    2550                 :        738 :     return bRet;
    2551                 :            : }
    2552                 :            : 
    2553                 :         23 : uno::Sequence< OUString > SwXTextFieldMasters::getElementNames(void)
    2554                 :            :     throw( uno::RuntimeException )
    2555                 :            : {
    2556         [ +  - ]:         23 :     SolarMutexGuard aGuard;
    2557         [ -  + ]:         23 :     if(!GetDoc())
    2558         [ #  # ]:          0 :         throw uno::RuntimeException();
    2559                 :            : 
    2560         [ +  - ]:         23 :     const SwFldTypes* pFldTypes = GetDoc()->GetFldTypes();
    2561                 :         23 :     sal_uInt16 nCount = pFldTypes->size();
    2562                 :            : 
    2563         [ +  - ]:         23 :     std::vector<String*> aFldNames;
    2564 [ +  - ][ +  - ]:         23 :     String* pString = new String();
    2565                 :            : 
    2566         [ +  + ]:        761 :     for( sal_uInt16 i = 0; i < nCount; i++)
    2567                 :            :     {
    2568         [ +  - ]:        738 :         SwFieldType& rFldType = *((*pFldTypes)[i]);
    2569                 :            : 
    2570 [ +  - ][ +  + ]:        738 :         if (SwXTextFieldMasters::getInstanceName(rFldType, *pString))
    2571                 :            :         {
    2572         [ +  - ]:         94 :             aFldNames.push_back(pString);
    2573 [ +  - ][ +  - ]:         94 :             pString = new String();
    2574                 :            :         }
    2575                 :            :     }
    2576 [ +  - ][ +  - ]:         23 :     delete pString;
    2577                 :            : 
    2578         [ +  - ]:         23 :     uno::Sequence< OUString > aSeq( static_cast<sal_uInt16>(aFldNames.size()) );
    2579         [ +  - ]:         23 :     OUString* pArray = aSeq.getArray();
    2580         [ +  + ]:        117 :     for(sal_uInt16 i = 0; i < aFldNames.size();i++)
    2581                 :            :     {
    2582 [ +  - ][ +  - ]:         94 :         pArray[i] = *aFldNames[i];
    2583 [ +  - ][ +  - ]:         94 :         delete aFldNames[i];
                 [ +  - ]
    2584                 :            :     }
    2585                 :            : 
    2586         [ +  - ]:         23 :     return aSeq;
    2587                 :            : }
    2588                 :            : 
    2589                 :        392 : sal_Bool SwXTextFieldMasters::hasByName(const OUString& rName) throw( uno::RuntimeException )
    2590                 :            : {
    2591         [ +  - ]:        392 :     SolarMutexGuard aGuard;
    2592         [ -  + ]:        392 :     if(!GetDoc())
    2593         [ #  # ]:          0 :         throw uno::RuntimeException();
    2594                 :            : 
    2595 [ +  - ][ +  - ]:        392 :     String sName(rName), sTypeName;
    2596         [ +  - ]:        392 :     sal_uInt16 nResId = lcl_GetIdByName( sName, sTypeName );
    2597                 :        392 :     sal_Bool bRet = sal_False;
    2598         [ +  + ]:        392 :     if( USHRT_MAX != nResId )
    2599                 :            :     {
    2600         [ +  - ]:        390 :         sName.Erase(0, sTypeName.Len()+1);
    2601 [ +  - ][ +  - ]:        390 :         bRet = USHRT_MAX != nResId && 0 != GetDoc()->GetFldType(nResId, sName, sal_True);
                 [ +  + ]
    2602                 :            :     }
    2603 [ +  - ][ +  - ]:        392 :     return bRet;
                 [ +  - ]
    2604                 :            : }
    2605                 :            : 
    2606                 :          2 : uno::Type  SwXTextFieldMasters::getElementType(void) throw( uno::RuntimeException )
    2607                 :            : {
    2608                 :          2 :     return ::getCppuType(static_cast<const uno::Reference<beans::XPropertySet>*>(0));
    2609                 :            : 
    2610                 :            : }
    2611                 :            : 
    2612                 :          2 : sal_Bool SwXTextFieldMasters::hasElements(void) throw( uno::RuntimeException )
    2613                 :            : {
    2614         [ +  - ]:          2 :     SolarMutexGuard aGuard;
    2615         [ -  + ]:          2 :     if(!IsValid())
    2616         [ #  # ]:          0 :         throw uno::RuntimeException();
    2617         [ +  - ]:          2 :     return sal_True;
    2618                 :            : }
    2619                 :            : 
    2620                 :          0 : OUString SwXTextFieldTypes::getImplementationName(void) throw( uno::RuntimeException )
    2621                 :            : {
    2622                 :          0 :     return C2U("SwXTextFieldTypes");
    2623                 :            : }
    2624                 :            : 
    2625                 :          0 : sal_Bool SwXTextFieldTypes::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
    2626                 :            : {
    2627                 :          0 :     return rServiceName == "com.sun.star.text.TextFields";
    2628                 :            : }
    2629                 :            : 
    2630                 :          0 : uno::Sequence< OUString > SwXTextFieldTypes::getSupportedServiceNames(void) throw( uno::RuntimeException )
    2631                 :            : {
    2632                 :          0 :     uno::Sequence< OUString > aRet(1);
    2633         [ #  # ]:          0 :     OUString* pArray = aRet.getArray();
    2634         [ #  # ]:          0 :     pArray[0] = C2U("com.sun.star.text.TextFields");
    2635                 :          0 :     return aRet;
    2636                 :            : }
    2637                 :            : 
    2638                 :        508 : SwXTextFieldTypes::SwXTextFieldTypes(SwDoc* _pDoc) :
    2639                 :            :     SwUnoCollection (_pDoc),
    2640         [ +  - ]:        508 :     aRefreshCont    ( static_cast< XEnumerationAccess * >(this) )
    2641                 :            : {
    2642                 :        508 : }
    2643                 :            : 
    2644         [ +  - ]:        436 : SwXTextFieldTypes::~SwXTextFieldTypes()
    2645                 :            : {
    2646         [ -  + ]:        872 : }
    2647                 :            : 
    2648                 :        436 : void SwXTextFieldTypes::Invalidate()
    2649                 :            : {
    2650                 :        436 :     SwUnoCollection::Invalidate();
    2651                 :        436 :     aRefreshCont.Disposing();
    2652                 :        436 : }
    2653                 :            : 
    2654                 :        556 : uno::Reference< container::XEnumeration >  SwXTextFieldTypes::createEnumeration(void)
    2655                 :            :     throw( uno::RuntimeException )
    2656                 :            : {
    2657         [ +  - ]:        556 :     SolarMutexGuard aGuard;
    2658         [ -  + ]:        556 :     if(!IsValid())
    2659         [ #  # ]:          0 :         throw uno::RuntimeException();
    2660 [ +  - ][ +  - ]:        556 :     return new SwXFieldEnumeration(GetDoc());
         [ +  - ][ +  - ]
    2661                 :            : }
    2662                 :            : 
    2663                 :          2 : uno::Type  SwXTextFieldTypes::getElementType(void) throw( uno::RuntimeException )
    2664                 :            : {
    2665                 :          2 :     return ::getCppuType(static_cast<const uno::Reference<text::XDependentTextField>*>(0));
    2666                 :            : }
    2667                 :            : 
    2668                 :          2 : sal_Bool SwXTextFieldTypes::hasElements(void) throw( uno::RuntimeException )
    2669                 :            : {
    2670         [ +  - ]:          2 :     SolarMutexGuard aGuard;
    2671         [ -  + ]:          2 :     if(!IsValid())
    2672         [ #  # ]:          0 :         throw uno::RuntimeException();
    2673                 :            :     //es gibt sie immer
    2674         [ +  - ]:          2 :     return sal_True;
    2675                 :            : }
    2676                 :            : 
    2677                 :         47 : void SwXTextFieldTypes::refresh(void)  throw( uno::RuntimeException )
    2678                 :            : {
    2679         [ +  - ]:         47 :     SolarMutexGuard aGuard;
    2680         [ -  + ]:         47 :     if(!IsValid())
    2681         [ #  # ]:          0 :         throw uno::RuntimeException();
    2682         [ +  - ]:         47 :     UnoActionContext aContext(GetDoc());
    2683         [ +  - ]:         47 :     GetDoc()->UpdateDocStat();
    2684         [ +  - ]:         47 :     GetDoc()->UpdateFlds(0, sal_False);
    2685                 :            : 
    2686                 :            :     // call refresh listeners
    2687 [ +  - ][ +  - ]:         47 :     aRefreshCont.Refreshed();
                 [ +  - ]
    2688                 :         47 : }
    2689                 :            : 
    2690                 :          2 : void SwXTextFieldTypes::addRefreshListener(const uno::Reference< util::XRefreshListener > & l)
    2691                 :            :     throw( uno::RuntimeException )
    2692                 :            : {
    2693         [ +  - ]:          2 :     SolarMutexGuard aGuard;
    2694         [ -  + ]:          2 :     if ( !IsValid() )
    2695         [ #  # ]:          0 :         throw uno::RuntimeException();
    2696 [ +  - ][ +  - ]:          2 :     aRefreshCont.AddListener ( reinterpret_cast < const uno::Reference < lang::XEventListener > &> ( l ));
    2697                 :          2 : }
    2698                 :            : 
    2699                 :          2 : void SwXTextFieldTypes::removeRefreshListener(const uno::Reference< util::XRefreshListener > & l)
    2700                 :            :      throw( uno::RuntimeException )
    2701                 :            : {
    2702         [ +  - ]:          2 :     SolarMutexGuard aGuard;
    2703 [ +  - ][ +  - ]:          2 :     if ( !IsValid() || !aRefreshCont.RemoveListener ( reinterpret_cast < const uno::Reference < lang::XEventListener > &> ( l ) ) )
         [ -  + ][ -  + ]
    2704 [ #  # ][ +  - ]:          2 :         throw uno::RuntimeException();
    2705                 :          2 : }
    2706                 :            : 
    2707                 :            : /******************************************************************
    2708                 :            :  * SwXFieldEnumeration
    2709                 :            :  ******************************************************************/
    2710                 :          0 : OUString SwXFieldEnumeration::getImplementationName(void) throw( uno::RuntimeException )
    2711                 :            : {
    2712                 :          0 :     return C2U("SwXFieldEnumeration");
    2713                 :            : }
    2714                 :            : 
    2715                 :          0 : sal_Bool SwXFieldEnumeration::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
    2716                 :            : {
    2717                 :          0 :     return rServiceName == "com.sun.star.text.FieldEnumeration";
    2718                 :            : }
    2719                 :            : 
    2720                 :          0 : uno::Sequence< OUString > SwXFieldEnumeration::getSupportedServiceNames(void) throw( uno::RuntimeException )
    2721                 :            : {
    2722                 :          0 :     uno::Sequence< OUString > aRet(1);
    2723         [ #  # ]:          0 :     OUString* pArray = aRet.getArray();
    2724         [ #  # ]:          0 :     pArray[0] = C2U("com.sun.star.text.FieldEnumeration");
    2725                 :          0 :     return aRet;
    2726                 :            : }
    2727                 :            : 
    2728                 :        556 : SwXFieldEnumeration::SwXFieldEnumeration(SwDoc* pDc) :
    2729                 :            :     nNextIndex(0),
    2730         [ +  - ]:        556 :     pDoc(pDc)
    2731                 :            : {
    2732 [ +  - ][ +  - ]:        556 :     pDoc->GetPageDescFromPool(RES_POOLPAGE_STANDARD)->Add(this);
    2733                 :            : 
    2734                 :            :     // build sequence
    2735                 :        556 :     sal_Int32 nSize = 32;
    2736         [ +  - ]:        556 :     aItems.realloc( nSize );
    2737         [ +  - ]:        556 :     uno::Reference< text::XTextField > *pItems = aItems.getArray();
    2738                 :        556 :     sal_Int32 nFillPos = 0;
    2739                 :            :     //
    2740         [ +  - ]:        556 :     const SwFldTypes* pFldTypes = pDoc->GetFldTypes();
    2741                 :        556 :     sal_uInt16 nCount = pFldTypes->size();
    2742         [ +  + ]:      18361 :     for(sal_uInt16 nType = 0;  nType < nCount;  ++nType)
    2743                 :            :     {
    2744         [ +  - ]:      17805 :         const SwFieldType *pCurType = (*pFldTypes)[nType];
    2745         [ +  - ]:      17805 :         SwIterator<SwFmtFld,SwFieldType> aIter( *pCurType );
    2746         [ +  - ]:      17805 :         const SwFmtFld* pCurFldFmt = aIter.First();
    2747         [ +  + ]:      17923 :         while (pCurFldFmt)
    2748                 :            :         {
    2749                 :        118 :             const SwTxtFld *pTxtFld = pCurFldFmt->GetTxtFld();
    2750                 :            :             // skip fields that are currently not in the document
    2751                 :            :             // e.g. fields in undo or redo array
    2752                 :            :             sal_Bool bSkip = !pTxtFld ||
    2753 [ +  - ][ -  + ]:        118 :                          !pTxtFld->GetpTxtNode()->GetNodes().IsDocNodes();
                 [ +  + ]
    2754         [ +  + ]:        118 :             if (!bSkip)
    2755 [ +  - ][ +  - ]:        116 :                 pItems[ nFillPos++ ] = new SwXTextField(*pCurFldFmt, pDoc);
                 [ +  - ]
    2756         [ +  - ]:        118 :             pCurFldFmt = aIter.Next();
    2757                 :            : 
    2758                 :            :             // enlarge sequence if necessary
    2759         [ -  + ]:        118 :             if (aItems.getLength() == nFillPos)
    2760                 :            :             {
    2761         [ #  # ]:          0 :                 aItems.realloc( 2 * aItems.getLength() );
    2762         [ #  # ]:          0 :                 pItems = aItems.getArray();
    2763                 :            :             }
    2764                 :            :         }
    2765         [ +  - ]:      17805 :     }
    2766                 :            :     // now handle meta-fields, which are not SwFields
    2767                 :            :     const ::std::vector< uno::Reference<text::XTextField> > MetaFields(
    2768 [ +  - ][ +  - ]:        556 :            pDc->GetMetaFieldManager().getMetaFields() );
    2769         [ +  + ]:        576 :     for (size_t i = 0; i < MetaFields.size(); ++i)
    2770                 :            :     {
    2771         [ +  - ]:         20 :         pItems[ nFillPos ] = MetaFields[i];
    2772                 :         20 :         nFillPos++;
    2773                 :            : 
    2774                 :            :         //FIXME UGLY
    2775                 :            :         // enlarge sequence if necessary
    2776         [ -  + ]:         20 :         if (aItems.getLength() == nFillPos)
    2777                 :            :         {
    2778         [ #  # ]:          0 :             aItems.realloc( 2 * aItems.getLength() );
    2779         [ #  # ]:          0 :             pItems = aItems.getArray();
    2780                 :            :         }
    2781                 :            :     }
    2782                 :            :     // resize sequence to actual used size
    2783         [ +  - ]:        556 :     aItems.realloc( nFillPos );
    2784                 :        556 : }
    2785                 :            : 
    2786 [ +  - ][ +  - ]:        556 : SwXFieldEnumeration::~SwXFieldEnumeration()
    2787                 :            : {
    2788                 :            : 
    2789         [ -  + ]:       1112 : }
    2790                 :            : 
    2791                 :        654 : sal_Bool SwXFieldEnumeration::hasMoreElements(void)
    2792                 :            :     throw( uno::RuntimeException )
    2793                 :            : {
    2794         [ +  - ]:        654 :     SolarMutexGuard aGuard;
    2795         [ +  - ]:        654 :     return nNextIndex < aItems.getLength();
    2796                 :            : }
    2797                 :            : 
    2798                 :        138 : uno::Any SwXFieldEnumeration::nextElement(void)
    2799                 :            :     throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException )
    2800                 :            : {
    2801         [ +  - ]:        138 :     SolarMutexGuard aGuard;
    2802                 :            : 
    2803         [ +  + ]:        138 :     if (!(nNextIndex < aItems.getLength()))
    2804         [ +  - ]:          2 :         throw container::NoSuchElementException();
    2805                 :            : 
    2806                 :            : #if OSL_DEBUG_LEVEL > 1
    2807                 :            :     uno::Reference< text::XTextField > *pItems = aItems.getArray();
    2808                 :            :     (void)pItems;
    2809                 :            : #endif
    2810         [ +  - ]:        136 :     uno::Reference< text::XTextField >  &rxFld = aItems.getArray()[ nNextIndex++ ];
    2811         [ +  - ]:        136 :     uno::Any aRet(&rxFld, ::getCppuType(static_cast<const uno::Reference<text::XTextField>*>(0)));
    2812         [ +  - ]:        136 :     rxFld = 0;  // free memory for item that is not longer used
    2813         [ +  - ]:        138 :     return aRet;
    2814                 :            : }
    2815                 :            : 
    2816                 :          8 : void SwXFieldEnumeration::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew)
    2817                 :            : {
    2818                 :          8 :     ClientModify(this, pOld, pNew);
    2819         [ +  - ]:          8 :     if(!GetRegisteredIn())
    2820                 :          8 :         pDoc = 0;
    2821                 :          8 : }
    2822                 :            : 
    2823                 :        265 : String& GetString( const uno::Any& rAny, String& rStr )
    2824                 :            : {
    2825                 :        265 :     OUString aStr;
    2826                 :        265 :     rAny >>= aStr;
    2827 [ +  - ][ +  - ]:        265 :     rStr = String( aStr );
                 [ +  - ]
    2828                 :        265 :     return rStr;
    2829                 :            : }
    2830                 :            : 
    2831                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10