[ooo-build-commit] .: 3 commits - patches/dev300

Cédric Bosdonnat cbosdo at kemper.freedesktop.org
Thu May 27 07:28:32 PDT 2010


 patches/dev300/apply                          |   13 
 patches/dev300/field-patch-lock.diff          |    6 
 patches/dev300/field-patch-uno-fix.diff       |   65 
 patches/dev300/field-patch.diff               | 2722 --------------------------
 patches/dev300/fields-enable.diff             |   14 
 patches/dev300/writer-doc-comparison.diff     |  145 -
 patches/dev300/writer-navigation-buttons.diff |  110 -
 7 files changed, 132 insertions(+), 2943 deletions(-)

New commits:
commit 564e8b39dd4ed17d0ef8ac0fb284684c3f504c04
Author: Cédric Bosdonnat <cedricbosdo at openoffice.org>
Date:   Thu May 27 16:26:15 2010 +0200

    Updated the writer-doc-comparison patches to DEV300
    
    * patches/dev300/apply:
    * patches/dev300/writer-doc-comparison.diff:

diff --git a/patches/dev300/apply b/patches/dev300/apply
index a0e71bb..53fa82f 100644
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -3222,9 +3222,9 @@ SectionOwner => jholesov
 # http://gsoc-tzvetelina.blogspot.com/
 
 # Improved document comparison
-# FIXME dev300-m77 writer-doc-comparison.diff, tzvetelina
+writer-doc-comparison.diff, tzvetelina
 # Help files for the document comparison
-# FIXME dev300-m77 writer-doc-comparison-help.diff, tzvetelina
+writer-doc-comparison-help.diff, tzvetelina
 
 
 [ ExtensionFixes ]
diff --git a/patches/dev300/writer-doc-comparison.diff b/patches/dev300/writer-doc-comparison.diff
index 2d489f9..37c74e3 100644
--- a/patches/dev300/writer-doc-comparison.diff
+++ b/patches/dev300/writer-doc-comparison.diff
@@ -1,76 +1,3 @@
-From 981650b67f0a2f3f5ffd2a6a1d0fcf0a59f6ec9e Mon Sep 17 00:00:00 2001
-From: Jan Holesovsky <kendy at suse.cz>
-Date: Fri, 14 May 2010 17:06:43 +0200
-Subject: [PATCH 640/768] writer-doc-comparison.diff
-
----
- cui/source/inc/cuires.hrc                          |    1 +
- cui/source/options/treeopt.cxx                     |    1 +
- cui/source/options/treeopt.src                     |    1 +
- editeng/inc/editeng/rsiditem.hxx                   |   57 ++
- editeng/inc/editeng/svxenum.hxx                    |    6 +
- editeng/source/items/textitem.cxx                  |   37 +-
- .../schema/org/openoffice/Office/Writer.xcs        |   30 +
- svx/prj/d.lst                                      |    1 +
- sw/inc/cmdid.h                                     |    1 -
- sw/inc/doc.hxx                                     |   10 +
- sw/inc/globals.hrc                                 |    1 +
- sw/inc/helpid.h                                    |    1 +
- sw/inc/hintids.hxx                                 |  139 ++--
- sw/inc/modcfg.hxx                                  |   41 +
- sw/inc/ndtxt.hxx                                   |    7 +
- sw/inc/swmodule.hxx                                |   10 +
- sw/inc/undobj.hxx                                  |    1 +
- sw/inc/unoprnms.hxx                                |    4 +-
- sw/source/core/bastyp/init.cxx                     |    9 +-
- sw/source/core/doc/doc.cxx                         |   74 ++
- sw/source/core/doc/doccomp.cxx                     |  952 ++++++++++++++++++--
- sw/source/core/doc/docnew.cxx                      |    9 +
- sw/source/core/edit/editsh.cxx                     |    7 +
- sw/source/core/frmedt/fecopy.cxx                   |   17 +
- sw/source/core/text/atrstck.cxx                    |    4 +-
- sw/source/core/txtnode/ndtxt.cxx                   |   41 +-
- sw/source/core/undo/unspnd.cxx                     |    4 +
- sw/source/core/unocore/unomap.cxx                  |    2 +
- sw/source/core/unocore/unoprnms.cxx                |    2 +
- sw/source/filter/ascii/parasc.cxx                  |    3 +
- sw/source/filter/html/css1atr.cxx                  |    3 +-
- sw/source/filter/html/htmlatr.cxx                  |    2 +-
- sw/source/filter/rtf/rtfatr.cxx                    |    3 +-
- sw/source/ui/app/appopt.cxx                        |    1 +
- sw/source/ui/app/docsh.cxx                         |    3 +
- sw/source/ui/app/swmodul1.cxx                      |   40 +
- sw/source/ui/config/modcfg.cxx                     |   89 ++
- sw/source/ui/config/optdlg.hrc                     |    8 +
- sw/source/ui/config/optdlg.src                     |   74 ++
- sw/source/ui/config/optpage.cxx                    |  137 +++-
- sw/source/ui/dialog/swdlgfact.cxx                  |    5 +
- sw/source/ui/inc/optpage.hxx                       |   28 +
- sw/source/ui/uno/SwXDocumentSettings.cxx           |   28 +
- xmloff/inc/xmloff/xmltoken.hxx                     |    2 +
- xmloff/inc/xmloff/xmltypes.hxx                     |    1 +
- xmloff/inc/xmloff/xmluconv.hxx                     |    8 +
- xmloff/source/core/xmltoken.cxx                    |    2 +
- xmloff/source/core/xmluconv.cxx                    |   28 +
- xmloff/source/style/prhdlfac.cxx                   |    3 +
- xmloff/source/style/xmlbahdl.cxx                   |   42 +
- xmloff/source/style/xmlbahdl.hxx                   |   12 +
- xmloff/source/text/txtprmap.cxx                    |    8 +
- 52 files changed, 1862 insertions(+), 138 deletions(-)
- create mode 100644 editeng/inc/editeng/rsiditem.hxx
-
-diff --git cui/source/inc/cuires.hrc cui/source/inc/cuires.hrc
-index c0f8f05..a7f5b83 100644
---- cui/source/inc/cuires.hrc
-+++ cui/source/inc/cuires.hrc
-@@ -133,6 +133,7 @@
- #define RID_SVXPAGE_COLOR                   (RID_SVX_START +  60)
- #define RID_SVXPAGE_SSO                                 (RID_SVX_START + 251)
- #define OFA_TP_LANGUAGES_FOR_SET_DOCUMENT_LANGUAGE      ( RID_OFA_START + 256 )
-+#define RID_SW_TP_COMPARISON_OPT		(RID_OFA_START + 257)
- #define RID_OFADLG_OPTIONS_TREE_PAGES   (RID_OFA_START + 116)
- #define RID_OFADLG_OPTIONS_TREE         (RID_OFA_START + 115)
- #define RID_IMGLIST_TREEOPT             (RID_OFA_START + 174)
 diff --git cui/source/options/treeopt.cxx cui/source/options/treeopt.cxx
 index 47936b4..a44c8c3 100644
 --- cui/source/options/treeopt.cxx
@@ -97,7 +24,7 @@ index 5b22727..3cfd692 100644
              < "Mail Merge E-mail" ; RID_SW_TP_MAILCONFIG ; >;
 diff --git editeng/inc/editeng/rsiditem.hxx editeng/inc/editeng/rsiditem.hxx
 new file mode 100644
-index 0000000..470f3f7
+index 0000000..2fd759e
 --- /dev/null
 +++ editeng/inc/editeng/rsiditem.hxx
 @@ -0,0 +1,57 @@
@@ -136,7 +63,7 @@ index 0000000..470f3f7
 +
 +#include <svl/intitem.hxx>
 +#include <svx/svddef.hxx>
-+#include "svx/svxdllapi.h"
++#include "editeng/editengdllapi.h"
 +
 +//----------------------
 +// SvxRsidItem
@@ -274,23 +201,35 @@ index 9abada4..9379a1b 100644
  		<group oor:name="Insert">
  			<info>
  				<desc>Specifies the settings for inserting various object types.</desc>
-diff --git svx/prj/d.lst svx/prj/d.lst
-index 07b500b..761ec91 100644
---- svx/prj/d.lst
-+++ svx/prj/d.lst
-@@ -417,6 +417,7 @@ mkdir: %_DEST%\inc%_EXT%\svx
- ..\inc\svx\view3d.hxx %_DEST%\inc%_EXT%\svx\view3d.hxx
- ..\inc\svx\viewpt3d.hxx %_DEST%\inc%_EXT%\svx\viewpt3d.hxx
- ..\inc\svx\wghtitem.hxx %_DEST%\inc%_EXT%\svx\wghtitem.hxx
-+..\inc\svx\rsiditem.hxx %_DEST%\inc%_EXT%\svx\rsiditem.hxx
- ..\inc\svx\widwitem.hxx %_DEST%\inc%_EXT%\svx\widwitem.hxx
- ..\inc\svx\wrlmitem.hxx %_DEST%\inc%_EXT%\svx\wrlmitem.hxx
- ..\inc\svx\xbitmap.hxx %_DEST%\inc%_EXT%\svx\xbitmap.hxx
+diff --git svx/inc/svx/dialogs.hrc svx/inc/svx/dialogs.hrc
+index fa1e703..65b0aa1 100644
+--- svx/inc/svx/dialogs.hrc
++++ svx/inc/svx/dialogs.hrc
+@@ -132,6 +132,7 @@
+ #define RID_SW_TP_OPTTABLE_PAGE         (RID_OFA_START + 210)
+ #define RID_SW_TP_REDLINE_OPT           (RID_OFA_START + 212)
+ #define RID_SW_TP_OPTCOMPATIBILITY_PAGE (RID_OFA_START + 255)
++#define RID_SW_TP_COMPARISON_OPT		(RID_OFA_START + 257)
+ #define RID_SW_TP_HTML_CONTENT_OPT      (RID_OFA_START + 240)
+ #define RID_SW_TP_HTML_OPTPRINT_PAGE    (RID_OFA_START + 242)
+ #define RID_SW_TP_HTML_OPTTABLE_PAGE    (RID_OFA_START + 243)
+diff --git svx/source/src/app.hrc svx/source/src/app.hrc
+index 1cdc416..5002627 100644
+--- svx/source/src/app.hrc
++++ svx/source/src/app.hrc
+@@ -201,6 +201,7 @@
+ #define	RID_OFA_TP_INTERNATIONAL_IMPR	(RID_OFA_START + 254)		// 4 impress
+ #define RID_SW_TP_OPTCOMPATIBILITY_PAGE (RID_OFA_START + 255)
+ #define RID_SW_TP_OPTCAPTION_PAGE       (RID_OFA_START + 256)
++#define RID_SW_TP_COMPARISON_OPT		(RID_OFA_START + 257)
+ 
+ // Strings ------------------------------------------
+ 
 diff --git sw/inc/cmdid.h sw/inc/cmdid.h
-index 6dbc773..83549ce 100644
+index e33894d..1d8cd15 100644
 --- sw/inc/cmdid.h
 +++ sw/inc/cmdid.h
-@@ -1192,7 +1192,6 @@ Achtung: Ab sofort sind in diesem File keine C++-Kommentare (//) mehr
+@@ -1195,7 +1195,6 @@ Achtung: Ab sofort sind in diesem File keine C++-Kommentare (//) mehr
  // --> OD 2004-10-28 #i36248#
  #define FN_SHAPE_STARTPOSITION_IN_HORI_L2R (FN_PARAM2+25)
  #define FN_SHAPE_ENDPOSITION_IN_HORI_L2R   (FN_PARAM2+26)
@@ -346,7 +285,7 @@ index 39b7b7f..476f7de 100644
  
  #if STR_DOC_STAT > RC_GLOBALS_END
 diff --git sw/inc/helpid.h sw/inc/helpid.h
-index 0ff576a..9f5c6ad 100644
+index 1fb0828..f0658f1 100644
 --- sw/inc/helpid.h
 +++ sw/inc/helpid.h
 @@ -310,6 +310,7 @@
@@ -555,7 +494,7 @@ index 584b472..4a3b504 100644
  };
  
 diff --git sw/inc/modcfg.hxx sw/inc/modcfg.hxx
-index 0dd9594..bccfbea 100644
+index 0dd9594..54c5dd6 100644
 --- sw/inc/modcfg.hxx
 +++ sw/inc/modcfg.hxx
 @@ -38,6 +38,7 @@
@@ -566,7 +505,7 @@ index 0dd9594..bccfbea 100644
  class SwModuleOptions;
  
  //-----------------------------------------------------------------------------
-@@ -167,7 +168,27 @@ class SwMiscConfig : public utl::ConfigItem
+@@ -167,7 +168,28 @@ class SwMiscConfig : public utl::ConfigItem
      void					Load();
      void 					SetModified(){ConfigItem::SetModified();}
  };
@@ -588,13 +527,14 @@ index 0dd9594..bccfbea 100644
 +        ~SwCompareConfig();
 +
 +    virtual void			Commit();
++    virtual void Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ){ };
 +    void					Load();
 +    void 					SetModified() {ConfigItem::SetModified(); }
 +};
  /* ---------------------------------------------------------------------------
  
   ---------------------------------------------------------------------------*/
-@@ -182,6 +203,8 @@ class SW_DLLPUBLIC SwModuleOptions
+@@ -182,6 +204,8 @@ class SW_DLLPUBLIC SwModuleOptions
  
      SwMiscConfig					aMiscConfig;
  
@@ -603,7 +543,7 @@ index 0dd9594..bccfbea 100644
      //fiscus: don't show tips of text fields - it's not part of the configuration!
      BOOL 		bHideFieldTips : 1;
  
-@@ -338,6 +361,24 @@ public:
+@@ -338,6 +362,24 @@ public:
  
      BOOL 		IsHideFieldTips() const {return bHideFieldTips;}
      void		SetHideFieldTips(BOOL bSet) {bHideFieldTips = bSet;}
@@ -647,7 +587,7 @@ index afccd21..7553206 100644
  };
  
 diff --git sw/inc/swmodule.hxx sw/inc/swmodule.hxx
-index cd661f3..6b2f5b3 100644
+index cd661f3..221e37d 100644
 --- sw/inc/swmodule.hxx
 +++ sw/inc/swmodule.hxx
 @@ -40,6 +40,7 @@
@@ -702,14 +642,14 @@ index 85e1c97..518ec58 100644
  
  
 diff --git sw/source/core/bastyp/init.cxx sw/source/core/bastyp/init.cxx
-index b5a2895..8999c06 100644
+index b5a2895..a887264 100644
 --- sw/source/core/bastyp/init.cxx
 +++ sw/source/core/bastyp/init.cxx
 @@ -135,6 +135,7 @@
  #include <fmtfollowtextflow.hxx>
  // OD 2004-05-05 #i28701#
  #include <fmtwrapinfluenceonobjpos.hxx>
-+#include <svx/rsiditem.hxx>
++#include <editeng/rsiditem.hxx>
  
  #include <fmtmeta.hxx>
  
@@ -2256,7 +2196,7 @@ index b80b567..13a726a 100644
      SetError( nErr ? nErr : nVBWarning, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) );
  
 diff --git sw/source/ui/app/swmodul1.cxx sw/source/ui/app/swmodul1.cxx
-index ee34a77..7e774b6 100644
+index 1927c66..d8156f5 100644
 --- sw/source/ui/app/swmodul1.cxx
 +++ sw/source/ui/app/swmodul1.cxx
 @@ -738,3 +738,43 @@ void SwModule::ApplyDefaultPageMode(sal_Bool bIsSquaredPageMode)
@@ -2499,7 +2439,7 @@ index a2573ed..3000962 100755
 +    };
 +};
 diff --git sw/source/ui/config/optpage.cxx sw/source/ui/config/optpage.cxx
-index 2e77b27..9ff09cc 100644
+index 2e77b27..7ed2551 100644
 --- sw/source/ui/config/optpage.cxx
 +++ sw/source/ui/config/optpage.cxx
 @@ -100,7 +100,7 @@
@@ -2790,7 +2730,7 @@ index 70690bc..fc7a0c9 100644
          {
              sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::PROTECT_FORM);
 diff --git xmloff/inc/xmloff/xmltoken.hxx xmloff/inc/xmloff/xmltoken.hxx
-index a3e3562..d39b3de 100644
+index c8dab78..0788be0 100644
 --- xmloff/inc/xmloff/xmltoken.hxx
 +++ xmloff/inc/xmloff/xmltoken.hxx
 @@ -1486,6 +1486,8 @@ namespace xmloff { namespace token {
@@ -2834,7 +2774,7 @@ index ca22ef8..7687722 100644
      static void convertNumber( ::rtl::OUStringBuffer& rBuffer,
                                 sal_Int32 nNumber );
 diff --git xmloff/source/core/xmltoken.cxx xmloff/source/core/xmltoken.cxx
-index a677f9b..8fd1a43 100644
+index 56f3f09..d23e75a 100644
 --- xmloff/source/core/xmltoken.cxx
 +++ xmloff/source/core/xmltoken.cxx
 @@ -1494,6 +1494,8 @@ namespace xmloff { namespace token {
@@ -3001,6 +2941,3 @@ index 87e8bf1..422f82c 100644
      // RES_CHRATR_WORDLINEMODE
      MT_E( "CharWordMode",	STYLE,	TEXT_UNDERLINE_MODE,		XML_TYPE_TEXT_LINE_MODE|MID_FLAG_MERGE_PROPERTY, 0 ),
      MT_E( "CharWordMode",   STYLE,  TEXT_OVERLINE_MODE,     XML_TYPE_TEXT_LINE_MODE|MID_FLAG_MERGE_PROPERTY, 0 ),
--- 
-1.7.0.1
-
commit e7276b8129d086524ef741837b6c579e90bb145c
Author: Cédric Bosdonnat <cedricbosdo at openoffice.org>
Date:   Thu May 27 13:37:59 2010 +0200

    Updated maja's patch to DEV300
    
    * patches/dev300/apply:
    * patches/dev300/writer-navigation-buttons.diff:

diff --git a/patches/dev300/apply b/patches/dev300/apply
index 5e9f004..a0e71bb 100644
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -3214,7 +3214,7 @@ stream-read-csv-always-single-line.diff, n#523517, kohei
 impress-autolayout.diff, cocofan
 
 [ WriterNavigation ]
-# FIXME dev300-m77 writer-navigation-buttons.diff, ovcica
+writer-navigation-buttons.diff, ovcica
 
 [ WriterDocComparison ]
 SectionOwner => jholesov
diff --git a/patches/dev300/writer-navigation-buttons.diff b/patches/dev300/writer-navigation-buttons.diff
index 2a71a93..63273bb 100644
--- a/patches/dev300/writer-navigation-buttons.diff
+++ b/patches/dev300/writer-navigation-buttons.diff
@@ -1,8 +1,8 @@
 diff --git officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
-index 0ba86ef..3646b88 100644
+index fa0611e..35916b7 100644
 --- officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
 +++ officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
-@@ -2249,6 +2249,22 @@
+@@ -2241,6 +2241,22 @@
                      <value xml:lang="en-US">Continue previous numbering</value>
                  </prop>
              </node>
@@ -26,10 +26,10 @@ index 0ba86ef..3646b88 100644
      </node>
  </oor:component-data>
 diff --git officecfg/registry/data/org/openoffice/Office/UI/WriterGlobalWindowState.xcu officecfg/registry/data/org/openoffice/Office/UI/WriterGlobalWindowState.xcu
-index aeb443e..dc62716 100644
+index 3988e6d..dcda7ab 100644
 --- officecfg/registry/data/org/openoffice/Office/UI/WriterGlobalWindowState.xcu
 +++ officecfg/registry/data/org/openoffice/Office/UI/WriterGlobalWindowState.xcu
-@@ -446,6 +446,29 @@
+@@ -443,6 +443,29 @@
                      <value>true</value>
                  </prop>
              </node>
@@ -60,10 +60,10 @@ index aeb443e..dc62716 100644
                  <prop oor:name="DockingArea" oor:type="xs:int">
                      <value>0</value>
 diff --git officecfg/registry/data/org/openoffice/Office/UI/WriterWindowState.xcu officecfg/registry/data/org/openoffice/Office/UI/WriterWindowState.xcu
-index 12cc7a9..3400db3 100644
+index ec70817..1da701c 100644
 --- officecfg/registry/data/org/openoffice/Office/UI/WriterWindowState.xcu
 +++ officecfg/registry/data/org/openoffice/Office/UI/WriterWindowState.xcu
-@@ -452,6 +452,29 @@
+@@ -449,6 +449,29 @@
                      <value>true</value>
                  </prop>
              </node>
@@ -106,10 +106,10 @@ index 43202b8..1118b3a 100644
  uiconfig/modules/swriter/toolbar/oleobjectbar.xml
  uiconfig/modules/swriter/toolbar/optimizetablebar.xml
 diff --git sfx2/source/appl/workwin.cxx sfx2/source/appl/workwin.cxx
-index 5e2bb23..3ea1f7d 100644
+index 89b52ac..ee739da 100644
 --- sfx2/source/appl/workwin.cxx
 +++ sfx2/source/appl/workwin.cxx
-@@ -143,6 +143,7 @@ static const ResIdToResName pToolBarResToName[] =
+@@ -140,6 +140,7 @@ static const ResIdToResName pToolBarResToName[] =
      { 23031,    "mediaobjectbar"       },      //draw/impress
      { 25060,    "mediaobjectbar"       },      //calc
      { 23311,    "mediaobjectbar"       },      //writer
@@ -118,10 +118,10 @@ index 5e2bb23..3ea1f7d 100644
  };
  
 diff --git sw/inc/cmdid.h sw/inc/cmdid.h
-index 900a110..26ce6ec 100644
+index cf5bcd5..e33894d 100644
 --- sw/inc/cmdid.h
 +++ sw/inc/cmdid.h
-@@ -912,6 +912,9 @@ Achtung: Ab sofort sind in diesem File keine C++-Kommentare (//) mehr
+@@ -908,6 +908,9 @@ Achtung: Ab sofort sind in diesem File keine C++-Kommentare (//) mehr
  #define FN_UNO_TABLE_NAME                   (FN_EXTRA2 + 111)
  #define FN_UNO_META                         (FN_EXTRA2 + 112)
  
@@ -132,19 +132,19 @@ index 900a110..26ce6ec 100644
      Bereich: Hilfe
   --------------------------------------------------------------------*/
 diff --git sw/inc/helpid.h sw/inc/helpid.h
-index 3172447..1227e80 100644
+index 0ff576a..1fb0828 100644
 --- sw/inc/helpid.h
 +++ sw/inc/helpid.h
-@@ -984,3 +984,4 @@
+@@ -981,3 +981,4 @@
  #define HID_MM_HEADER_12                            (HID_BASE + 2279)
  #define HID_MM_HEADER_13                            (HID_BASE + 2280)
  
 +#define HID_NAVIGATION_TOOLBOX                      (HID_BASE + 2281)
 diff --git sw/inc/shellid.hxx sw/inc/shellid.hxx
-index df82192..a3676a5 100644
+index 65af848..e3ef3e6 100644
 --- sw/inc/shellid.hxx
 +++ sw/inc/shellid.hxx
-@@ -73,4 +73,5 @@
+@@ -70,4 +70,5 @@
  #define SW_MEDIASHELL 			(SFX_INTERFACE_SW_START + 31)
  #define SW_ANNOTATIONSHELL 		(SFX_INTERFACE_SW_START + 32)
  
@@ -152,7 +152,7 @@ index df82192..a3676a5 100644
  #endif // _UIPARAM_HXX
 diff --git sw/sdi/_navsh.sdi sw/sdi/_navsh.sdi
 new file mode 100644
-index 0000000..deb4fb9
+index 0000000..d8820cf
 --- /dev/null
 +++ sw/sdi/_navsh.sdi
 @@ -0,0 +1,49 @@
@@ -206,10 +206,10 @@ index 0000000..deb4fb9
 +}
 +
 diff --git sw/sdi/makefile.mk sw/sdi/makefile.mk
-index 25b75fe..0fc59ed 100644
+index e539c7a..0cf3813 100644
 --- sw/sdi/makefile.mk
 +++ sw/sdi/makefile.mk
-@@ -95,6 +95,8 @@ SVSDI1DEPEND= \
+@@ -96,6 +96,8 @@ SVSDI1DEPEND= \
          mediash.sdi\
          _annotsh.sdi\
          annotsh.sdi\
@@ -217,10 +217,10 @@ index 25b75fe..0fc59ed 100644
 +        navsh.sdi \
          swslots.hrc \
          $(INC)$/globals.hrc \
-                 $(INC)$/cmdid.h \
+                 $(INC)$/cmdid.h 
 diff --git sw/sdi/navsh.sdi sw/sdi/navsh.sdi
 new file mode 100644
-index 0000000..791ec99
+index 0000000..5919775
 --- /dev/null
 +++ sw/sdi/navsh.sdi
 @@ -0,0 +1,34 @@
@@ -259,10 +259,10 @@ index 0000000..791ec99
 +    import _Navigation[Automation];
 +}
 diff --git sw/sdi/swriter.sdi sw/sdi/swriter.sdi
-index 6f2914d..d1a1ae0 100644
+index aede246..a5e3afe 100644
 --- sw/sdi/swriter.sdi
 +++ sw/sdi/swriter.sdi
-@@ -10391,3 +10391,54 @@ SfxVoidItem CopyHyperlinkLocation FN_COPY_HYPERLINK_LOCATION
+@@ -10316,3 +10316,54 @@ SfxVoidItem CopyHyperlinkLocation FN_COPY_HYPERLINK_LOCATION
      ToolBoxConfig = TRUE,
      GroupId = GID_EDIT;
  ]
@@ -318,7 +318,7 @@ index 6f2914d..d1a1ae0 100644
 +    GroupId = GID_NAVIGATOR;
 +]
 diff --git sw/sdi/swslots.sdi sw/sdi/swslots.sdi
-index 789301f..9997bd1 100644
+index eb43955..2d72843 100644
 --- sw/sdi/swslots.sdi
 +++ sw/sdi/swslots.sdi
 @@ -120,6 +120,8 @@ ModulePrefix( "Sw" )
@@ -331,10 +331,10 @@ index 789301f..9997bd1 100644
  
  
 diff --git sw/sdi/swslots.src sw/sdi/swslots.src
-index f794901..1546a32 100644
+index b67716c..bdd22a5 100644
 --- sw/sdi/swslots.src
 +++ sw/sdi/swslots.src
-@@ -1500,4 +1500,12 @@ SfxSlotInfo FN_VIEW_NOTES
+@@ -1485,4 +1485,12 @@ SfxSlotInfo FN_VIEW_NOTES
  {
      Slotname [ en-US ] = "Notes";
  };
@@ -348,10 +348,10 @@ index f794901..1546a32 100644
 +}
  
 diff --git sw/source/ui/app/swmodule.cxx sw/source/ui/app/swmodule.cxx
-index d4607da..ded9c5b 100644
+index f2de617..0beccae 100644
 --- sw/source/ui/app/swmodule.cxx
 +++ sw/source/ui/app/swmodule.cxx
-@@ -163,6 +163,7 @@
+@@ -160,6 +160,7 @@
  #include <avmedia/mediatoolbox.hxx>
  
  #include <annotsh.hxx>
@@ -359,7 +359,7 @@ index d4607da..ded9c5b 100644
  
  #include <app.hrc>
  #include <svx/xmlsecctrl.hxx>
-@@ -351,6 +352,7 @@ void SwDLL::RegisterInterfaces()
+@@ -348,6 +349,7 @@ void SwDLL::RegisterInterfaces()
      SwBezierShell::RegisterInterface(pMod);
      SwGrfShell::RegisterInterface(pMod);
      SwOleShell::RegisterInterface(pMod);
@@ -369,7 +369,7 @@ index d4607da..ded9c5b 100644
      SwWebGrfShell::RegisterInterface(pMod);
 diff --git sw/source/ui/inc/navmgr.hxx sw/source/ui/inc/navmgr.hxx
 new file mode 100644
-index 0000000..68b43f2
+index 0000000..e510b8e
 --- /dev/null
 +++ sw/source/ui/inc/navmgr.hxx
 @@ -0,0 +1,62 @@
@@ -493,10 +493,10 @@ index 0000000..5f0c3c6
 +
 +#endif
 diff --git sw/source/ui/inc/shells.hrc sw/source/ui/inc/shells.hrc
-index feb200c..92a11bb 100644
+index 243c4fc..847d322 100644
 --- sw/source/ui/inc/shells.hrc
 +++ sw/source/ui/inc/shells.hrc
-@@ -105,7 +105,10 @@
+@@ -102,7 +102,10 @@
  
  #define RID_MEDIA_TOOLBOX         	(RC_SHELLS_BEGIN + 61)
  
@@ -509,10 +509,10 @@ index feb200c..92a11bb 100644
  #if SHELLS_ACT_END > RC_SHELLS_END
  #error Resource-Id Ueberlauf in #file, #line
 diff --git sw/source/ui/inc/view.hxx sw/source/ui/inc/view.hxx
-index 75e5b6e..7e88191 100644
+index 9553d88..a6cc6de 100644
 --- sw/source/ui/inc/view.hxx
 +++ sw/source/ui/inc/view.hxx
-@@ -131,7 +131,8 @@ enum ShellModes
+@@ -129,7 +129,8 @@ enum ShellModes
      SHELL_MODE_MEDIA,
      SHELL_MODE_EXTRUDED_CUSTOMSHAPE,
      SHELL_MODE_FONTWORK,
@@ -523,10 +523,10 @@ index 75e5b6e..7e88191 100644
  
  /*--------------------------------------------------------------------
 diff --git sw/source/ui/inc/wrtsh.hxx sw/source/ui/inc/wrtsh.hxx
-index 956d06f..3f22de4 100644
+index ff1143b..8e8190f 100644
 --- sw/source/ui/inc/wrtsh.hxx
 +++ sw/source/ui/inc/wrtsh.hxx
-@@ -37,6 +37,7 @@
+@@ -34,6 +34,7 @@
  #include <swurl.hxx>
  #include <IMark.hxx>
  
@@ -534,7 +534,7 @@ index 956d06f..3f22de4 100644
  class Window;
  class OutputDevice;
  class SbxArray;
-@@ -87,6 +88,7 @@ namespace nsSelectionType
+@@ -84,6 +85,7 @@ namespace nsSelectionType
      const SelectionType SEL_EXTRUDED_CUSTOMSHAPE = 0x008000; 	// extruded custom shape
      const SelectionType SEL_FONTWORK  		= 0x010000;	// fontwork
      const SelectionType SEL_POSTIT			= 0x020000;	//annotation
@@ -542,7 +542,7 @@ index 956d06f..3f22de4 100644
  }
  
  
-@@ -477,6 +479,7 @@ typedef BOOL (SwWrtShell:: *FNSimpleMove)();
+@@ -474,6 +476,7 @@ typedef BOOL (SwWrtShell:: *FNSimpleMove)();
  
      String GetSelDescr() const;
  
@@ -550,7 +550,7 @@ index 956d06f..3f22de4 100644
  private:
  
      SW_DLLPRIVATE void	OpenMark();
-@@ -533,6 +536,7 @@ private:
+@@ -530,6 +533,7 @@ private:
      } *pCrsrStack;
  
      SwView	&rView;
@@ -559,10 +559,10 @@ index 956d06f..3f22de4 100644
      Point	aDest;
      BOOL	bDestOnStack;
 diff --git sw/source/ui/shells/makefile.mk sw/source/ui/shells/makefile.mk
-index 2e4a96c..44478cb 100644
+index e9a03a5..0e0b815 100644
 --- sw/source/ui/shells/makefile.mk
 +++ sw/source/ui/shells/makefile.mk
-@@ -62,6 +62,7 @@ SLOFILES =  \
+@@ -58,6 +58,7 @@ SLOFILES =  \
          $(SLO)$/grfshex.obj \
          $(SLO)$/mediash.obj \
          $(SLO)$/listsh.obj \
@@ -572,7 +572,7 @@ index 2e4a96c..44478cb 100644
          $(SLO)$/tabsh.obj \
 diff --git sw/source/ui/shells/navsh.cxx sw/source/ui/shells/navsh.cxx
 new file mode 100644
-index 0000000..663c7eb
+index 0000000..82fec06
 --- /dev/null
 +++ sw/source/ui/shells/navsh.cxx
 @@ -0,0 +1,150 @@
@@ -727,10 +727,10 @@ index 0000000..663c7eb
 +    }
 +}
 diff --git sw/source/ui/shells/shells.src sw/source/ui/shells/shells.src
-index 9243411..9f7fc0b 100644
+index 42b3b00..87c9b94 100644
 --- sw/source/ui/shells/shells.src
 +++ sw/source/ui/shells/shells.src
-@@ -1033,6 +1033,43 @@ ToolBox RID_NUM_TOOLBOX
+@@ -1030,6 +1030,43 @@ ToolBox RID_NUM_TOOLBOX
      };
      Scroll = TRUE ;
  };
@@ -775,10 +775,10 @@ index 9243411..9f7fc0b 100644
  {
          Text [ en-US ] = "Text" ;
 diff --git sw/source/ui/uiview/view.cxx sw/source/ui/uiview/view.cxx
-index afb41b7..deb2cc7 100644
+index e5884cb..1cb760a 100644
 --- sw/source/ui/uiview/view.cxx
 +++ sw/source/ui/uiview/view.cxx
-@@ -77,6 +77,7 @@
+@@ -73,6 +73,7 @@
  #include <drformsh.hxx>
  #include <drwtxtsh.hxx>
  #include <beziersh.hxx>
@@ -786,7 +786,7 @@ index afb41b7..deb2cc7 100644
  #include <globdoc.hxx>
  #include <scroll.hxx>
  #include <globdoc.hxx>
-@@ -346,6 +347,13 @@ void SwView::SelectShell()
+@@ -335,6 +336,13 @@ void SwView::SelectShell()
          if ( !( nSelectionType & nsSelectionType::SEL_FOC_FRM_CTRL ) )
              rDispatcher.Push( *pFormShell );
  
@@ -801,10 +801,10 @@ index afb41b7..deb2cc7 100644
          {
              eShellMode = SHELL_MODE_OBJECT;
 diff --git sw/source/ui/utlui/content.cxx sw/source/ui/utlui/content.cxx
-index cee0116..f2f0c73 100644
+index bbb3d98..382f403 100644
 --- sw/source/ui/utlui/content.cxx
 +++ sw/source/ui/utlui/content.cxx
-@@ -118,6 +118,7 @@
+@@ -115,6 +115,7 @@
  #include "globals.hrc"
  #include <unomid.h>
  
@@ -812,7 +812,7 @@ index cee0116..f2f0c73 100644
  
  #define CTYPE_CNT	0
  #define CTYPE_CTT	1
-@@ -3188,6 +3189,12 @@ void SwContentTree::GotoContent(SwContent* pCnt)
+@@ -3185,6 +3186,12 @@ void SwContentTree::GotoContent(SwContent* pCnt)
  
      sal_Bool bSel = sal_False;
      sal_uInt16 nJumpType = pCnt->GetParent()->GetType();
@@ -826,10 +826,10 @@ index cee0116..f2f0c73 100644
      {
          case CONTENT_TYPE_OUTLINE	:
 diff --git sw/source/ui/wrtsh/makefile.mk sw/source/ui/wrtsh/makefile.mk
-index b082743..370c790 100644
+index baeb3ac..b7fef6c 100644
 --- sw/source/ui/wrtsh/makefile.mk
 +++ sw/source/ui/wrtsh/makefile.mk
-@@ -47,6 +47,7 @@ SRC1FILES =  \
+@@ -43,6 +43,7 @@ SRC1FILES =  \
          wrtsh.src
  
  SLOFILES =  \
@@ -839,7 +839,7 @@ index b082743..370c790 100644
          $(SLO)$/wrtsh1.obj \
 diff --git sw/source/ui/wrtsh/navmgr.cxx sw/source/ui/wrtsh/navmgr.cxx
 new file mode 100644
-index 0000000..f5f0a93
+index 0000000..56cb5e1
 --- /dev/null
 +++ sw/source/ui/wrtsh/navmgr.cxx
 @@ -0,0 +1,73 @@
@@ -917,7 +917,7 @@ index 0000000..f5f0a93
 +    _iCurrent = _entries.end(); _nCurrent = _entries.size() - 1;
 +}
 diff --git sw/source/ui/wrtsh/wrtsh1.cxx sw/source/ui/wrtsh/wrtsh1.cxx
-index e50d1b6..d63f1fb 100644
+index 5403b8a..701aae9 100644
 --- sw/source/ui/wrtsh/wrtsh1.cxx
 +++ sw/source/ui/wrtsh/wrtsh1.cxx
 @@ -1527,6 +1527,8 @@ SelectionType SwWrtShell::GetSelectionType() const
@@ -940,9 +940,9 @@ index e50d1b6..d63f1fb 100644
  /*------------------------------------------------------------------------
   Beschreibung:	Anwenden der Vorlagen
 @@ -1764,6 +1769,7 @@ SwWrtShell::SwWrtShell( SwWrtShell& rSh, Window *_pWin, SwView &rShell )
- 	if ( IsFormProtected() && ( pBM = GetFieldmarkAfter( ) ) !=NULL ) {
- 	    GotoFieldmark(pBM);
- 	}
+     if ( IsFormProtected() && ( pBM = GetFieldmarkAfter( ) ) !=NULL ) {
+         GotoFieldmark(pBM);
+     }
 +    aNavigationMgr.setShell(this);
  }
  
commit 775568e0a56bd73a91562751e7c19496eb779bac
Author: Cédric Bosdonnat <cedricbosdo at openoffice.org>
Date:   Thu May 27 13:14:10 2010 +0200

    Updated the field-patch set for DEV300-m77
    
    * patches/dev300/apply:
    * patches/dev300/field-patch-lock.diff:
    * patches/dev300/field-patch-uno-fix.diff:
        Updated patches
    * patches/dev300/field-patch.diff:
        Remove because it has been upstreamed in cbosdo02
    * patches/dev300/fields-enable.diff:
        Activates the changes introduced by cbosdo02

diff --git a/patches/dev300/apply b/patches/dev300/apply
index e283ab8..5e9f004 100644
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -2823,9 +2823,10 @@ sw-section-import-fix.diff, n#364533, freuter
 
 sw-allow-negative-spacing.diff, n#364534, freuter
 
-# FIXME dev300-m77 field-patch.diff, n#248354, freuter #upstreamed?
-# FIXME dev300-m77 field-patch-uno-fix.diff, cbosdo #upstreamed?
-# FIXME dev300-m77 field-patch-lock.diff, n#601355, cbosdo #upstreamed?
+# Activate the changed upstreamed by cbosdo02 CWS
+fields-enable.diff, cbosdo
+field-patch-uno-fix.diff, cbosdo #upstreamed?
+field-patch-lock.diff, n#601355, cbosdo #upstreamed?
 
 sw-import-html-controls.diff, n#485609, freuter
 svx-hacky-htmlselect-control-import.diff, n#523191, noelpwer
diff --git a/patches/dev300/field-patch-lock.diff b/patches/dev300/field-patch-lock.diff
index efb990d..008f77c 100644
--- a/patches/dev300/field-patch-lock.diff
+++ b/patches/dev300/field-patch-lock.diff
@@ -7,10 +7,10 @@ Subject: [PATCH 624/878] field-patch-lock.diff
  sw/source/core/crsr/pam.cxx |   36 +++++++++++++++++++++---------------
  1 files changed, 21 insertions(+), 15 deletions(-)
 
-diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx
+diff --git sw/source/core/crsr/pam.cxx sw/source/core/crsr/pam.cxx
 index 5212c12..1e2dbe9 100644
---- a/sw/source/core/crsr/pam.cxx
-+++ b/sw/source/core/crsr/pam.cxx
+--- sw/source/core/crsr/pam.cxx
++++ sw/source/core/crsr/pam.cxx
 @@ -825,21 +825,27 @@ BOOL SwPaM::HasReadonlySel( bool bFormView ) const
      }
      //FIXME FieldBk
diff --git a/patches/dev300/field-patch-uno-fix.diff b/patches/dev300/field-patch-uno-fix.diff
index 94bad18..da8bc2e 100644
--- a/patches/dev300/field-patch-uno-fix.diff
+++ b/patches/dev300/field-patch-uno-fix.diff
@@ -1,17 +1,8 @@
-From 3a502de50fe5cb00d7b8ae9643745564265804cb Mon Sep 17 00:00:00 2001
-From: Jan Holesovsky <kendy at suse.cz>
-Date: Fri, 14 May 2010 17:04:28 +0200
-Subject: [PATCH 623/878] field-patch-uno-fix.diff
-
----
- sw/source/core/unocore/unocoll.cxx |   40 ++++++++++++++++++-----------------
- 1 files changed, 21 insertions(+), 19 deletions(-)
-
-diff --git a/sw/source/core/unocore/unocoll.cxx b/sw/source/core/unocore/unocoll.cxx
-index 25c8297..512b302 100644
---- a/sw/source/core/unocore/unocoll.cxx
-+++ b/sw/source/core/unocore/unocoll.cxx
-@@ -1720,7 +1720,7 @@ sal_Int32 SwXBookmarks::getCount(void)
+diff --git sw/source/core/unocore/unocoll.cxx sw/source/core/unocore/unocoll.cxx
+index 9e6fba9..79c8e09 100644
+--- sw/source/core/unocore/unocoll.cxx
++++ sw/source/core/unocore/unocoll.cxx
+@@ -1503,7 +1503,7 @@ sal_Int32 SwXBookmarks::getCount(void)
      vos::OGuard aGuard(Application::GetSolarMutex());
      if(!IsValid())
          throw uno::RuntimeException();
@@ -20,7 +11,7 @@ index 25c8297..512b302 100644
  }
  
  uno::Any SwXBookmarks::getByIndex(sal_Int32 nIndex)
-@@ -1730,11 +1730,11 @@ uno::Any SwXBookmarks::getByIndex(sal_Int32 nIndex)
+@@ -1513,11 +1513,11 @@ uno::Any SwXBookmarks::getByIndex(sal_Int32 nIndex)
      if(!IsValid())
          throw uno::RuntimeException();
      IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess();
@@ -31,10 +22,10 @@ index 25c8297..512b302 100644
      uno::Any aRet;
 -    ::sw::mark::IMark* pBkmk = pMarkAccess->getBookmarksBegin()[nIndex].get();
 +    ::sw::mark::IMark* pBkmk = pMarkAccess->getMarksBegin()[nIndex].get();
-     uno::Reference< XTextContent > xRef = GetObject(*pBkmk, GetDoc());
-     aRet.setValue(&xRef, ::getCppuType((uno::Reference<XTextContent>*)0));
-     return aRet;
-@@ -1748,8 +1748,8 @@ uno::Any SwXBookmarks::getByName(const rtl::OUString& rName)
+     const uno::Reference< text::XTextContent > xRef =
+         SwXBookmark::CreateXBookmark(*GetDoc(), *pBkmk);
+     aRet <<= xRef;
+@@ -1532,8 +1532,8 @@ uno::Any SwXBookmarks::getByName(const rtl::OUString& rName)
          throw uno::RuntimeException();
  
      IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess();
@@ -45,7 +36,7 @@ index 25c8297..512b302 100644
          throw NoSuchElementException();
  
      uno::Any aRet;
-@@ -1766,10 +1766,10 @@ uno::Sequence< OUString > SwXBookmarks::getElementNames(void)
+@@ -1551,10 +1551,10 @@ uno::Sequence< OUString > SwXBookmarks::getElementNames(void)
          throw uno::RuntimeException();
  
      IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess();
@@ -59,7 +50,7 @@ index 25c8297..512b302 100644
          aSeq[nCnt++] = (*ppMark++)->GetName();
      return aSeq;
  }
-@@ -1782,7 +1782,7 @@ sal_Bool SwXBookmarks::hasByName(const OUString& rName)
+@@ -1567,7 +1567,7 @@ sal_Bool SwXBookmarks::hasByName(const OUString& rName)
          throw uno::RuntimeException();
  
      IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess();
@@ -68,35 +59,3 @@ index 25c8297..512b302 100644
  }
  
  uno::Type SAL_CALL SwXBookmarks::getElementType()
-@@ -1807,16 +1807,18 @@ SwXBookmark* SwXBookmarks::GetObject( ::sw::mark::IMark& rBkmk, SwDoc* pDoc)
-     if(!pXBkmk)
-     {
-         // FIXME: These belong in XTextFieldsSupplier
--        //if (dynamic_cast< ::sw::mark::TextFieldmark* >(&rBkmk))
--        //    pXBkmk = new SwXFieldmark(false, &rBkmk, pDoc);
--        //else if (dynamic_cast< ::sw::mark::CheckboxFieldmark* >(&rBkmk))
--        //    pXBkmk = new SwXFieldmark(true, &rBkmk, pDoc);
--        //else
--        OSL_ENSURE(
--            dynamic_cast< ::sw::mark::IBookmark* >(&rBkmk),
--            "<SwXBookmark::GetObject(..)>"
--            "SwXBookmark requested for non-bookmark mark.");
--        pXBkmk = new SwXBookmark(&rBkmk, pDoc);
-+        if (dynamic_cast< ::sw::mark::ICheckboxFieldmark* >(&rBkmk))
-+            pXBkmk = new SwXFieldmark(true, &rBkmk, pDoc);
-+        else if (dynamic_cast< ::sw::mark::IFieldmark* >(&rBkmk))
-+            pXBkmk = new SwXFieldmark(false, &rBkmk, pDoc);
-+        else
-+        {
-+            OSL_ENSURE(
-+                dynamic_cast< ::sw::mark::IBookmark* >(&rBkmk),
-+                "<SwXBookmark::GetObject(..)>"
-+                "SwXBookmark requested for non-bookmark mark.");
-+            pXBkmk = new SwXBookmark(&rBkmk, pDoc);
-+        }
-     }
-     return pXBkmk;
- }
--- 
-1.7.0.1
-
diff --git a/patches/dev300/field-patch.diff b/patches/dev300/field-patch.diff
deleted file mode 100644
index 80caba0..0000000
--- a/patches/dev300/field-patch.diff
+++ /dev/null
@@ -1,2722 +0,0 @@
-From c6f5908e8ee3090a2b8f6d22f009cccbe5d1defe Mon Sep 17 00:00:00 2001
-From: Jan Holesovsky <kendy at suse.cz>
-Date: Fri, 14 May 2010 17:04:27 +0200
-Subject: [PATCH 622/878] field-patch.diff
-
----
- offapi/com/sun/star/text/XFormField.idl         |   15 +-
- svtools/source/config/fltrcfg.cxx               |    3 +-
- sw/inc/IDocumentMarkAccess.hxx                  |    7 +
- sw/inc/IMark.hxx                                |   23 +++-
- sw/inc/crsrsh.hxx                               |    5 +-
- sw/inc/ecmaflds.hxx                             |   68 +++++++++
- sw/inc/editsh.hxx                               |    4 +
- sw/inc/hintids.hxx                              |    6 +-
- sw/inc/pam.hxx                                  |    1 +
- sw/inc/unoobj.hxx                               |   12 +-
- sw/source/core/crsr/bookmrk.cxx                 |  125 +++++++++++++++-
- sw/source/core/crsr/crossrefbookmark.cxx        |    2 +-
- sw/source/core/crsr/crstrvl.cxx                 |   11 ++
- sw/source/core/crsr/pam.cxx                     |   38 ++++--
- sw/source/core/doc/docbm.cxx                    |   60 +++++++-
- sw/source/core/edit/edtox.cxx                   |   22 +++
- sw/source/core/inc/MarkManager.hxx              |   10 ++
- sw/source/core/inc/bookmrk.hxx                  |   41 ++++--
- sw/source/core/inc/crossrefbookmark.hxx         |    6 +-
- sw/source/core/text/inftxt.cxx                  |   57 +++++---
- sw/source/core/text/portxt.cxx                  |  116 +++++++++++----
- sw/source/core/unocore/unobkm.cxx               |  102 ++++++++-----
- sw/source/filter/ww8/wrtw8nds.cxx               |  111 +++++++++++---
- sw/source/filter/ww8/wrtww8.cxx                 |   59 +++++++-
- sw/source/filter/ww8/wrtww8.hxx                 |    2 +
- sw/source/filter/ww8/ww8par.cxx                 |   34 +----
- sw/source/filter/ww8/ww8par.hxx                 |   42 +++---
- sw/source/filter/ww8/ww8par3.cxx                |  179 ++++++++++++-----------
- sw/source/filter/ww8/ww8par5.cxx                |  107 +++++++++++++-
- sw/source/ui/docvw/edtwin.cxx                   |   32 ++++-
- sw/source/ui/inc/view.hxx                       |    4 +-
- sw/source/ui/inc/wrtsh.hxx                      |    4 +
- sw/source/ui/uiview/viewling.cxx                |  136 +++++++++++++++++
- sw/source/ui/wrtsh/wrtsh1.cxx                   |    8 +
- sw/source/ui/wrtsh/wrtsh2.cxx                   |    7 +
- xmloff/inc/xmloff/ecmaflds.hxx                  |   68 +++++++++
- xmloff/source/text/XMLTextMarkImportContext.cxx |   46 +++++--
- xmloff/source/text/txtimp.cxx                   |   12 +-
- xmloff/source/text/txtparae.cxx                 |   29 ++---
- 39 files changed, 1250 insertions(+), 364 deletions(-)
- create mode 100644 sw/inc/ecmaflds.hxx
- create mode 100644 xmloff/inc/xmloff/ecmaflds.hxx
-
-diff --git a/offapi/com/sun/star/text/XFormField.idl b/offapi/com/sun/star/text/XFormField.idl
-index b8d6023..ab2985c 100644
---- a/offapi/com/sun/star/text/XFormField.idl
-+++ b/offapi/com/sun/star/text/XFormField.idl
-@@ -11,14 +11,13 @@
-  */
-  interface XFormField: com::sun::star::uno::XInterface
-  {
--     short getType();
--     short getRes();
--     string getDescription( ); 	
-- 
--     void setType([in] short fieldType );
--     void setRes([in] short res );
--     void setDescription([in] string description );
-- 
-+     string getFieldType();
-+     void setFieldType([in] string fieldType);
-+
-+     short getParamCount();
-+     string getParamName([in] short i);
-+     string getParamValue([in] short i);
-+     void addParam([in] string name, [in] string value, [in] boolean replaceExisting);
-  };
-  
-  }; }; }; }; 
-diff --git a/svtools/source/config/fltrcfg.cxx b/svtools/source/config/fltrcfg.cxx
-index 44741af..f421179 100644
---- a/svtools/source/config/fltrcfg.cxx
-+++ b/svtools/source/config/fltrcfg.cxx
-@@ -582,8 +582,7 @@ void SvtFilterOptions::SetWriter2WinWord( BOOL bFlag )
- 
- BOOL SvtFilterOptions::IsUseEnhancedFields() const
- {
--    return false; // disable for now;
--//	return pImp->IsFlag( FILTERCFG_USE_ENHANCED_FIELDS );
-+    return pImp->IsFlag( FILTERCFG_USE_ENHANCED_FIELDS );
- }
- 
- void SvtFilterOptions::SetUseEnhancedFields( BOOL bFlag )
-diff --git a/sw/inc/IDocumentMarkAccess.hxx b/sw/inc/IDocumentMarkAccess.hxx
-index e3ee488..d38b9f2 100644
---- a/sw/inc/IDocumentMarkAccess.hxx
-+++ b/sw/inc/IDocumentMarkAccess.hxx
-@@ -83,6 +83,13 @@ class IDocumentMarkAccess
-             const ::rtl::OUString& rProposedName,
-             MarkType eMark) =0;
- 
-+        virtual sw::mark::IFieldmark* makeFieldBookmark( const SwPaM& rPaM,
-+            const rtl::OUString& rName,
-+            const rtl::OUString& rType) = 0;
-+        virtual sw::mark::IFieldmark* makeNoTextFieldBookmark( const SwPaM& rPaM,
-+            const rtl::OUString& rName,
-+            const rtl::OUString& rType) = 0;
-+
-         /** Returns a mark in the document for a paragraph.
-             If there is none, a mark will be created.
- 
-diff --git a/sw/inc/IMark.hxx b/sw/inc/IMark.hxx
-index a1b4c65..5445b28 100644
---- a/sw/inc/IMark.hxx
-+++ b/sw/inc/IMark.hxx
-@@ -48,12 +48,12 @@ namespace sw { namespace mark
-     {
-         public:
-             //getters
--            virtual const SwPosition& GetMarkPos() const =0;
-+            virtual SwPosition& GetMarkPos() const =0;
-             // GetOtherMarkPos() is only guaranteed to return a valid
-             // reference if IsExpanded() returned true
--            virtual const SwPosition& GetOtherMarkPos() const =0;
--            virtual const SwPosition& GetMarkStart() const =0;
--            virtual const SwPosition& GetMarkEnd() const =0;
-+            virtual SwPosition& GetOtherMarkPos() const =0;
-+            virtual SwPosition& GetMarkStart() const =0;
-+            virtual SwPosition& GetMarkEnd() const =0;
-             virtual const ::rtl::OUString& GetName() const =0;
-             virtual bool IsExpanded() const =0;
-             virtual bool IsCoveringPosition(const SwPosition& rPos) const =0;
-@@ -76,6 +76,9 @@ namespace sw { namespace mark
-                 { return GetMarkEnd() < rPos; }
-             bool EndsAfter(const SwPosition& rPos) const
-                 { return GetMarkEnd() > rPos; }
-+
-+            // Use for debugging purpose
-+            virtual rtl::OUString toString( ) const = 0;
-     };
- 
-     class IBookmark
-@@ -92,13 +95,25 @@ namespace sw { namespace mark
-         : virtual public IMark
-     {
-         public:
-+            typedef  std::pair< ::rtl::OUString, ::rtl::OUString > ParamPair_t;
-+
-             //getters
-             virtual ::rtl::OUString GetFieldname() const =0;
-             virtual ::rtl::OUString GetFieldHelptext() const =0;
- 
-+            virtual void addParam( rtl::OUString rParamName,
-+                    rtl::OUString rParamValue,
-+                    bool bReplaceExisting = true ) = 0;
-+            virtual void addParam( const char* paramName, int value ) = 0;
-+            virtual void addParams( std::vector<ParamPair_t>& params ) = 0;
-+            virtual int  getNumOfParams() const = 0;
-+            virtual ParamPair_t getParam( int pos ) const = 0;
-+            virtual ParamPair_t getParam( const char *name, const char *defaultValue = NULL ) const = 0;
-+
-             //setters
-             virtual void SetFieldname(const ::rtl::OUString& rFieldname) =0;
-             virtual void SetFieldHelptext(const ::rtl::OUString& rFieldHelptext) =0;
-+            virtual void invalidate( ) = 0;
-     };
- 
-     class ICheckboxFieldmark
-diff --git a/sw/inc/crsrsh.hxx b/sw/inc/crsrsh.hxx
-index 1c988f7..9533d46 100644
---- a/sw/inc/crsrsh.hxx
-+++ b/sw/inc/crsrsh.hxx
-@@ -42,6 +42,7 @@
- #include <node.hxx>
- #include <tblsel.hxx>
- #include <IDocumentMarkAccess.hxx>
-+#include <IMark.hxx>
- 
- 
- // einige Forward Deklarationen
-@@ -107,7 +108,8 @@ struct SwContentAtPos
-         SW_REFMARK          = 0x0100,
-         SW_NUMLABEL         = 0x0200, // #i23726#
-         SW_CONTENT_CHECK    = 0x0400, // --> FME 2005-05-13 #i43742# <--
--        SW_SMARTTAG         = 0x0800
-+        SW_SMARTTAG         = 0x0800,
-+    SW_FORMCTRL         = 0x1000
- #ifndef PRODUCT
-         ,SW_CURR_ATTRS 		= 0x4000		// nur zum Debuggen
-         ,SW_TABLEBOXVALUE	= 0x8000		// nur zum Debuggen
-@@ -119,6 +121,7 @@ struct SwContentAtPos
-         const SfxPoolItem* pAttr;
-         const SwRedline* pRedl;
-         SwCntntNode * pNode; // #i23726#
-+        const sw::mark::IFieldmark* pFldmark;
-     } aFnd;
- 
-     int nDist; // #i23726#
-diff --git a/sw/inc/ecmaflds.hxx b/sw/inc/ecmaflds.hxx
-new file mode 100644
-index 0000000..a18bad1
---- /dev/null
-+++ b/sw/inc/ecmaflds.hxx
-@@ -0,0 +1,68 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: $
-+ * $Revision: $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+/* and also:
-+ * Author: Florian Reuter <freuter at novell.com>
-+ * Copyright 2008 by Novell, Inc.
-+*/
-+#ifndef _ECMAFLDS_HXX
-+#define _ECMAFLDS_HXX
-+
-+
-+#define ECMA_FORMTEXT "ecma.office-open-xml.field.FORMTEXT"
-+#define ECMA_FORMTEXT_NAME "name"
-+#define ECMA_FORMTEXT_HELPTEXT "helpText"
-+#define ECMA_FORMTEXT_STATUSTEXT "statusText"
-+#define ECMA_FORMTEXT_DEFAULT "default"
-+#define ECMA_FORMTEXT_FORMAT "format"
-+#define ECMA_FORMTEXT_MAXLENGTH "maxLength"
-+#define ECMA_FORMTEXT_TYPE "type"
-+
-+#define ECMA_FORMCHECKBOX "ecma.office-open-xml.field.FORMCHECKBOX"
-+#define ECMA_FORMCHECKBOX_NAME "name"
-+#define ECMA_FORMCHECKBOX_HELPTEXT "helpText"
-+#define ECMA_FORMCHECKBOX_STATUSTEXT "statusText"
-+#define ECMA_FORMCHECKBOX_CHECKED "checked"
-+#define ECMA_FORMCHECKBOX_DEFAULT "default"
-+#define ECMA_FORMCHECKBOX_SIZE "size"
-+#define ECMA_FORMCHECKBOX_SIZEAUTO "sizeAuto"
-+
-+
-+#define ECMA_FORMDROPDOWN "ecma.office-open-xml.field.FORMDROPDOWN"
-+#define ECMA_FORMDROPDOWN_DEFAULT "default"
-+#define ECMA_FORMDROPDOWN_LISTENTRY "listEntry"
-+#define ECMA_FORMDROPDOWN_RESULT "result"
-+
-+#define ECMA_TOC "ecma.office-open-xml.field.TOC"
-+
-+#define ECMA_HYPERLINK "ecma.office-open-xml.field.HYPERLINK"
-+
-+#define ECMA_PAGEREF "ecma.office-open-xml.field.PAGEREF"
-+
-+#endif /*  _ECMAFLDS_HXX */
-diff --git a/sw/inc/editsh.hxx b/sw/inc/editsh.hxx
-index 231d37a..c352cc7 100644
---- a/sw/inc/editsh.hxx
-+++ b/sw/inc/editsh.hxx
-@@ -41,6 +41,7 @@
- #include <com/sun/star/linguistic2/ProofreadingResult.hpp>
- #include <fldupde.hxx>
- #include <tblenum.hxx>
-+#include <IMark.hxx>
- 
- #include <vector>
- #include <swundo.hxx>
-@@ -412,6 +413,9 @@ public:
-     const SwTOXType* 	GetTOXType(TOXTypes eTyp, USHORT nId) const;
-     void			 	InsertTOXType(const SwTOXType& rTyp);
- 
-+    // new field stuff
-+    BOOL	            UpdateField(sw::mark::IFieldmark &fieldBM);
-+
-     //AutoMark file
-     const String&	GetTOIAutoMarkURL() const;
-     void			SetTOIAutoMarkURL(const String& rSet);
-diff --git a/sw/inc/hintids.hxx b/sw/inc/hintids.hxx
-index 9689d97..04fd64c 100644
---- a/sw/inc/hintids.hxx
-+++ b/sw/inc/hintids.hxx
-@@ -41,12 +41,8 @@
- #define CH_TXT_ATR_FIELDEND ((sal_Unicode)0x05)
- #define CH_TXT_ATR_SUBST_FIELDSTART ("[")
- #define CH_TXT_ATR_SUBST_FIELDEND ("]")
--//#define CH_TXT_ATR_FORMELEMENT ((sal_Unicode)'#')
- #define CH_TXT_ATR_FORMELEMENT ((sal_Unicode)0x06)
--/*
--#define FIELD_BOOKMARK_PREFIX "__"
--#define FIELD_FORM_BOOKMARK_PREFIX "__FORM"
--*/
-+
- /*
-  * Hier kommen erst mal die enums fuer die Hints
-  */
-diff --git a/sw/inc/pam.hxx b/sw/inc/pam.hxx
-index 5124b72..3227b89 100644
---- a/sw/inc/pam.hxx
-+++ b/sw/inc/pam.hxx
-@@ -269,6 +269,7 @@ public:
-     DECL_FIXEDMEMPOOL_NEWDEL(SwPaM);
- 
-     String GetTxt() const;
-+    void Invalidate();
- };
- 
- 
-diff --git a/sw/inc/unoobj.hxx b/sw/inc/unoobj.hxx
-index 7498ef6..f7c4141 100644
---- a/sw/inc/unoobj.hxx
-+++ b/sw/inc/unoobj.hxx
-@@ -671,13 +671,13 @@ class SwXFieldmark : public SwXFieldmark_BASE
-         SwXFieldmark(bool isReplacementObject, ::sw::mark::IMark* pBkm = 0, SwDoc* pDoc = 0);
- 
-         virtual void attachToRange(const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & xTextRange) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException );
--        virtual ::rtl::OUString SAL_CALL getDescription(void) throw( ::com::sun::star::uno::RuntimeException );
--        virtual ::sal_Int16 SAL_CALL getType(  ) throw (::com::sun::star::uno::RuntimeException);
--        virtual ::sal_Int16 SAL_CALL getRes(  ) throw (::com::sun::star::uno::RuntimeException);
-+        virtual ::rtl::OUString SAL_CALL getFieldType(void)  throw( ::com::sun::star::uno::RuntimeException );
-+        virtual void SAL_CALL setFieldType( const ::rtl::OUString& description ) throw (::com::sun::star::uno::RuntimeException);
- 
--        virtual void SAL_CALL setType( ::sal_Int16 fieldType ) throw (::com::sun::star::uno::RuntimeException);
--        virtual void SAL_CALL setRes( ::sal_Int16 res ) throw (::com::sun::star::uno::RuntimeException);
--        virtual void SAL_CALL setDescription( const ::rtl::OUString& description ) throw (::com::sun::star::uno::RuntimeException);
-+        virtual ::sal_Int16 SAL_CALL getParamCount(  ) throw (::com::sun::star::uno::RuntimeException);
-+        virtual ::rtl::OUString SAL_CALL getParamName(::sal_Int16 i)  throw( ::com::sun::star::uno::RuntimeException );
-+        virtual ::rtl::OUString SAL_CALL getParamValue(::sal_Int16 i)  throw( ::com::sun::star::uno::RuntimeException );
-+        virtual void SAL_CALL addParam( const ::rtl::OUString& name, const ::rtl::OUString& value, ::sal_Bool replaceExisting ) throw (::com::sun::star::uno::RuntimeException);
- };
- 
- /*-----------------23.02.98 10:45-------------------
-diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx
-index 5af85f0..1c7bdfb 100644
---- a/sw/source/core/crsr/bookmrk.cxx
-+++ b/sw/source/core/crsr/bookmrk.cxx
-@@ -74,20 +74,21 @@ namespace
-         const sal_Unicode aStartMark,
-         const sal_Unicode aEndMark)
-     {
--        const SwPosition& rStart = pField->GetMarkStart();
--        const SwPosition& rEnd = pField->GetMarkEnd();
-+        SwPosition& rStart = pField->GetMarkStart();
-+        SwPosition& rEnd = pField->GetMarkEnd();
-         SwTxtNode const * const pStartTxtNode = io_pDoc->GetNodes()[rStart.nNode]->GetTxtNode();
-         SwTxtNode const * const pEndTxtNode = io_pDoc->GetNodes()[rEnd.nNode]->GetTxtNode();
-         const sal_Unicode ch_start=pStartTxtNode->GetTxt().GetChar(rStart.nContent.GetIndex());
--        const sal_Unicode ch_end=pEndTxtNode->GetTxt().GetChar(rEnd.nContent.GetIndex()-1);
--        const SwPaM aStartPaM(rStart);
--        const SwPaM aEndPaM(rEnd);
-+        xub_StrLen nEndPos = rEnd.nContent.GetIndex() == 0 ? 0 : rEnd.nContent.GetIndex() - 1;
-+        const sal_Unicode ch_end=pEndTxtNode->GetTxt().GetChar( nEndPos );
-+        SwPaM aStartPaM(rStart);
-+        SwPaM aEndPaM(rEnd);
-         io_pDoc->StartUndo(UNDO_UI_REPLACE, NULL);
-         if(ch_start != aStartMark)
-         {
-             io_pDoc->InsertString(aStartPaM, aStartMark);
-         }
--        if(aEndMark && ch_end != aEndMark)
-+        if ( aEndMark && ( ch_end != aEndMark ) && ( rStart != rEnd ) )
-         {
-             io_pDoc->InsertString(aEndPaM, aEndMark);
-         }
-@@ -111,6 +112,11 @@ namespace sw { namespace mark
-         }
-     }
- 
-+    bool MarkBase::IsCoveringPosition(const SwPosition& rPos) const
-+    {
-+        return GetMarkStart() <= rPos && rPos <= GetMarkEnd();
-+    }
-+
-     void MarkBase::SetMarkPos(const SwPosition& rNewPos)
-     {
-         ::boost::scoped_ptr<SwPosition>(new SwPosition(rNewPos)).swap(m_pPos1);
-@@ -123,6 +129,17 @@ namespace sw { namespace mark
-         //lcl_FixPosition(*m_pPos2);
-     }
- 
-+    rtl::OUString MarkBase::toString( ) const
-+    {
-+        rtl::OUStringBuffer buf;
-+        buf.appendAscii( "Mark: ( Name, [ Node1, Index1 ] ): ( " );
-+        buf.append( m_aName ).appendAscii( ", [ " );
-+        buf.append( sal_Int32( GetMarkPos().nNode.GetIndex( ) ) ).appendAscii( ", " );
-+        buf.append( sal_Int32( GetMarkPos().nContent.GetIndex( ) ) ).appendAscii( " ] )" );
-+
-+        return buf.makeStringAndClear( );
-+    }
-+
-     MarkBase::~MarkBase()
-     { }
- 
-@@ -265,6 +282,96 @@ namespace sw { namespace mark
-             SetOtherMarkPos(GetMarkPos());
-     }
- 
-+    rtl::OUString Fieldmark::toString( ) const
-+    {
-+        rtl::OUStringBuffer buf;
-+        buf.appendAscii( "Fieldmark: ( Name, Type, [ Nd1, Id1 ], [ Nd2, Id2 ] ): ( " );
-+        buf.append( m_aName ).appendAscii( ", " );
-+        buf.append( m_aFieldname ).appendAscii( ", [ " );
-+        buf.append( sal_Int32( GetMarkPos().nNode.GetIndex( ) ) ).appendAscii( ", " );
-+        buf.append( sal_Int32( GetMarkPos( ).nContent.GetIndex( ) ) ).appendAscii( " ], [" );
-+        buf.append( sal_Int32( GetOtherMarkPos().nNode.GetIndex( ) ) ).appendAscii( ", " );
-+        buf.append( sal_Int32( GetOtherMarkPos( ).nContent.GetIndex( ) ) ).appendAscii( " ] ) " );
-+
-+        return buf.makeStringAndClear( );
-+    }
-+
-+    void Fieldmark::addParam( ::rtl::OUString paramName,
-+                              ::rtl::OUString paramValue,
-+                              bool replaceExisting )
-+    {
-+        if ( replaceExisting )
-+        {
-+            bool replaced = false;
-+            const int len = m_params.size(  );
-+            for ( int i = 0; i < len; i++ )
-+            {
-+                if ( m_params[i].first.compareTo( paramName ) == 0 )
-+                {
-+                    m_params[i] = ParamPair_t( paramName, paramValue );
-+                    replaced = true;
-+                }
-+            }
-+            if ( !replaced )
-+            {
-+                m_params.push_back( ParamPair_t( paramName, paramValue ) );
-+            }
-+        }
-+        else
-+        {
-+            m_params.push_back( ParamPair_t( paramName, paramValue ) );
-+        }
-+    }
-+
-+    void Fieldmark::addParam( const char *paramName, int value )
-+    {
-+        rtl::OUString sName = rtl::OUString::createFromAscii( paramName );
-+        rtl::OUString sValue =::rtl::OUString::valueOf( ( sal_Int32 ) value );
-+        addParam( sName, sValue );
-+    }
-+
-+    void Fieldmark::addParams( std::vector < ParamPair_t > &params )
-+    {
-+        for ( std::vector < ParamPair_t >::iterator i = params.begin(  );
-+              i != params.end(  ); i++ )
-+        {
-+            m_params.push_back( *i );
-+        }
-+    }
-+
-+    int Fieldmark::getNumOfParams(  ) const
-+    {
-+        return m_params.size(  );
-+    }
-+
-+    Fieldmark::ParamPair_t Fieldmark::getParam( int pos ) const
-+    {
-+        return m_params[pos];
-+    }
-+
-+    Fieldmark::ParamPair_t Fieldmark::getParam( const char *name,
-+                                                const char *defaultValue ) const
-+    {
-+        for ( std::vector < ParamPair_t >::iterator i = const_cast< Fieldmark* >( this )->m_params.begin(  );
-+              i != m_params.end(  ); i++ )
-+        {
-+            if ( i->first.compareToAscii( name ) == 0 )
-+            {
-+                return *i;
-+            }
-+        }
-+        return ParamPair_t( rtl::OUString(  ),
-+                            ( defaultValue ?
-+                                rtl::OUString::createFromAscii( defaultValue ) :
-+                                rtl::OUString(  ) ) );
-+    }
-+
-+    void Fieldmark::invalidate( )
-+    {
-+        SwPaM aPaM( this->GetMarkPos(), this->GetOtherMarkPos() );
-+        aPaM.Invalidate();
-+    }
-+
-     const ::rtl::OUString Fieldmark::our_sNamePrefix = ::rtl::OUString::createFromAscii("__Fieldmark__");
- 
-     TextFieldmark::TextFieldmark(const SwPaM& rPaM)
-@@ -282,7 +389,11 @@ namespace sw { namespace mark
- 
-     void CheckboxFieldmark::InitDoc(SwDoc* const io_pDoc)
-     {
--        lcl_AssureFieldMarksSet(this, io_pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FIELDEND);
-+        lcl_AssureFieldMarksSet(this, io_pDoc, CH_TXT_ATR_FORMELEMENT, CH_TXT_ATR_FIELDEND);
-+
-+        // For some reason the end mark is moved from 1 by the Insert: we don't
-+        // want this for checkboxes
-+        this->GetMarkEnd( ).nContent--;
-     }
- 
-     void CheckboxFieldmark::SetChecked(bool checked)
-diff --git a/sw/source/core/crsr/crossrefbookmark.cxx b/sw/source/core/crsr/crossrefbookmark.cxx
-index 4e0d1a4..dc08380 100644
---- a/sw/source/core/crsr/crossrefbookmark.cxx
-+++ b/sw/source/core/crsr/crossrefbookmark.cxx
-@@ -64,7 +64,7 @@ namespace sw { namespace mark
-         MarkBase::SetMarkPos(rNewPos);
-     }
- 
--    const SwPosition& CrossRefBookmark::GetOtherMarkPos() const
-+    SwPosition& CrossRefBookmark::GetOtherMarkPos() const
-     {
-         OSL_PRECOND(false,
-             "<SwCrossRefBookmark::GetOtherMarkPos(..)>"
-diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx
-index 5972ab0..3a10d5d 100644
---- a/sw/source/core/crsr/crstrvl.cxx
-+++ b/sw/source/core/crsr/crstrvl.cxx
-@@ -1172,6 +1172,17 @@ BOOL SwCrsrShell::GetContentAtPos( const Point& rPt,
-                     }
-                 }
- 
-+        if( !bRet && SwContentAtPos::SW_FORMCTRL & rCntntAtPos.eCntntAtPos )
-+        {
-+            IDocumentMarkAccess* pMarksAccess = GetDoc()->getIDocumentMarkAccess( );
-+            sw::mark::IFieldmark* pFldBookmark = pMarksAccess->getFieldmarkFor( aPos );
-+            if( bCrsrFoundExact && pTxtNd && pFldBookmark) {
-+                rCntntAtPos.eCntntAtPos = SwContentAtPos::SW_FORMCTRL;
-+                rCntntAtPos.aFnd.pFldmark = pFldBookmark;
-+                bRet=TRUE;
-+            }
-+        }
-+
-                 if( !bRet && SwContentAtPos::SW_FTN & rCntntAtPos.eCntntAtPos )
-                 {
-                     if( aTmpState.bFtnNoInfo )
-diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx
-index 6faff57..5212c12 100644
---- a/sw/source/core/crsr/pam.cxx
-+++ b/sw/source/core/crsr/pam.cxx
-@@ -53,6 +53,7 @@
- #include <ndtxt.hxx> // #111827#
- 
- #include <IMark.hxx>
-+#include <hints.hxx>
- 
- // fuer den dummen ?MSC-? Compiler
- inline xub_StrLen GetSttOrEnd( BOOL bCondition, const SwCntntNode& rNd )
-@@ -824,16 +825,21 @@ BOOL SwPaM::HasReadonlySel( bool bFormView ) const
-     }
-     //FIXME FieldBk
-     // TODO: Form Protection when Enhanced Fields are enabled
--//	if( !bRet )
--//    {
--//	    const SwDoc *pDoc=GetDoc();
--//	    SwBookmark *pA = ( pDoc && pPoint ? pDoc->getFieldmarkFor( *pPoint ) : NULL );
--//	    SwBookmark *pB = ( pDoc && pMark ? pDoc->getFieldmarkFor( *pMark ) : pA );
--//	    bRet = ( pA != pB );
--//	    bool bProtectForm = pDoc->get( IDocumentSettingAccess::PROTECT_FORM );
--//	    if( bProtectForm )
--//            bRet |= ( pA==NULL || pB==NULL );
--//	}
-+	if (!bRet) {
-+	    const SwDoc *pDoc = GetDoc();
-+        sw::mark::IMark* pA = NULL;
-+        sw::mark::IMark* pB = NULL;
-+        if ( pDoc )
-+        {
-+            const IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess( );
-+	        pA = GetPoint() ? pMarksAccess->getFieldmarkFor( *GetPoint( ) ) : NULL;
-+	        pB = GetMark( ) ? pMarksAccess->getFieldmarkFor( *GetMark( ) ) : pA;
-+	    bRet = ( pA != pB );
-+        }
-+	    bool bProtectForm = pDoc->get( IDocumentSettingAccess::PROTECT_FORM );
-+	    if ( bProtectForm )
-+		bRet |= ( pA == NULL || pB == NULL );
-+	}
-     return bRet;
- }
- 
-@@ -1220,6 +1226,18 @@ BOOL SwPaM::Overlap(const SwPaM & a, const SwPaM & b)
-     return !(*b.End() <= *a.Start() || *a.End() <= *b.End());
- }
- 
-+void SwPaM::Invalidate()
-+{
-+    const SwNode *_pNd=this->GetNode();
-+    const SwTxtNode *_pTxtNd=(_pNd!=NULL?_pNd->GetTxtNode():NULL);
-+    if (_pTxtNd!=NULL) {
-+    //pretent we've added a char to force layout to recalc the portion...
-+    SwInsChr aHint(_pTxtNd->GetIndex());
-+    SwModify *_pModify=(SwModify*)_pTxtNd;
-+    _pModify->Modify( 0, &aHint);
-+    }
-+}
-+
- BOOL SwPaM::LessThan(const SwPaM & a, const SwPaM & b)
- {
-     return (*a.Start() < *b.Start()) || (*a.Start() == *b.Start() && *a.End() < *b.End()); 
-diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx
-index 6ea6719..821ec82 100644
---- a/sw/source/core/doc/docbm.cxx
-+++ b/sw/source/core/doc/docbm.cxx
-@@ -37,6 +37,7 @@
- #include <dcontact.hxx>
- #include <doc.hxx>
- #include <docary.hxx>
-+#include <ecmaflds.hxx>
- #include <editsh.hxx>
- #include <errhdl.hxx>
- #include <fmtanchr.hxx>
-@@ -62,6 +63,23 @@
- #include <viscrs.hxx>
- #include <stdio.h>
- 
-+static void lcl_docbm_FixPosition( SwPosition& rPos )
-+{
-+    // make sure the position has 1) the proper node, and 2) a proper index
-+    SwTxtNode* pTxtNode = rPos.nNode.GetNode().GetTxtNode();
-+
-+    if( rPos.nContent.GetIndex() > ( pTxtNode == NULL ? 0 : pTxtNode->Len() ) )
-+    {
-+        DBG_ERROR( "illegal position" );
-+        xub_StrLen nLen = rPos.nContent.GetIndex();
-+        if( pTxtNode == NULL )
-+            nLen = 0;
-+        else if( nLen >= pTxtNode->Len() )
-+            nLen = pTxtNode->Len();
-+        rPos.nContent.Assign( pTxtNode, nLen );
-+    }
-+}
-+
- 
- using namespace ::std;
- using namespace ::boost;
-@@ -305,6 +323,17 @@ namespace sw { namespace mark
-         : m_pDoc(&rDoc)
-     { }
- 
-+    void MarkManager::dumpFieldmarks( ) const
-+    {
-+        const_iterator_t pIt = m_vFieldmarks.begin( );
-+        for ( ; pIt != m_vFieldmarks.end( ); pIt++ )
-+        {
-+            rtl::OUString str = ( *pIt )->toString( );
-+            fprintf( stderr, "%s\n",
-+                  rtl::OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr( ) );
-+        }
-+    }
-+
-     ::sw::mark::IMark* MarkManager::makeMark(const SwPaM& rPaM,
-         const ::rtl::OUString& rName,
-         const IDocumentMarkAccess::MarkType eType)
-@@ -410,6 +439,30 @@ namespace sw { namespace mark
-         return pMark.get();
-     }
- 
-+    ::sw::mark::IFieldmark* MarkManager::makeFieldBookmark( const SwPaM& rPaM,
-+        const rtl::OUString& rName,
-+        const rtl::OUString& rType )
-+    {
-+        sw::mark::IMark* pMark = makeMark( rPaM, rName,
-+                IDocumentMarkAccess::TEXT_FIELDMARK );
-+        sw::mark::IFieldmark* pFieldMark = dynamic_cast<sw::mark::IFieldmark*>( pMark );
-+        pFieldMark->SetFieldname( rType );
-+
-+        return pFieldMark;
-+    }
-+
-+    ::sw::mark::IFieldmark* MarkManager::makeNoTextFieldBookmark( const SwPaM& rPaM,
-+        const rtl::OUString& rName,
-+        const rtl::OUString& rType)
-+    {
-+        sw::mark::IMark* pMark = makeMark( rPaM, rName,
-+                IDocumentMarkAccess::CHECKBOX_FIELDMARK );
-+        sw::mark::IFieldmark* pFieldMark = dynamic_cast<sw::mark::IFieldmark*>( pMark );
-+        pFieldMark->SetFieldname( rType );
-+
-+        return pFieldMark;
-+    }
-+
-     ::sw::mark::IMark* MarkManager::getMarkForTxtNode(const SwTxtNode& rTxtNode,
-         const IDocumentMarkAccess::MarkType eType)
-     {
-@@ -763,12 +816,7 @@ namespace sw { namespace mark
-     {
-         const_iterator_t pFieldmark = find_if(
-             m_vFieldmarks.begin(),
--            // we do not need to check marks starting behind the positon
--            lower_bound(
--                m_vFieldmarks.begin(),
--                m_vFieldmarks.end(),
--                rPos,
--                bind(&IMark::StartsAfter, _1, _2)),
-+            m_vFieldmarks.end( ),
-             bind(&IMark::IsCoveringPosition, _1, rPos));
-         if(pFieldmark == m_vFieldmarks.end()) return NULL;
-         return dynamic_cast<IFieldmark*>(pFieldmark->get());
-diff --git a/sw/source/core/edit/edtox.cxx b/sw/source/core/edit/edtox.cxx
-index ca89430..f8b5270 100644
---- a/sw/source/core/edit/edtox.cxx
-+++ b/sw/source/core/edit/edtox.cxx
-@@ -57,6 +57,9 @@
- #ifndef _STATSTR_HRC
- #include <statstr.hrc>
- #endif
-+#include <bookmrk.hxx>
-+#include <ecmaflds.hxx>
-+
- 
- using namespace ::com::sun::star;
- using namespace ::com::sun::star::i18n;
-@@ -232,6 +235,25 @@ BOOL SwEditShell::UpdateTableOf( const SwTOXBase& rTOX, const SfxItemSet* pSet )
-     return bRet;
- }
- 
-+BOOL SwEditShell::UpdateField( sw::mark::IFieldmark &fieldBM)
-+{
-+//    SwDocShell* pDocSh = pDoc->GetDocShell();
-+    //@TODO implement me...; add undo etc...
-+    if ( pDoc && fieldBM.IsExpanded( ) ) {
-+        SwPosition aSttPos = fieldBM.GetMarkStart( );
-+        aSttPos.nContent++;
-+
-+        SwPosition aEndPos = fieldBM.GetMarkEnd( );
-+        aEndPos.nContent--;
-+
-+        SwPaM aPaM( aSttPos, aEndPos );
-+        pDoc->DeleteRange(aPaM);
-+        pDoc->InsertString(aPaM, String::CreateFromAscii("Implement me ;-)") );
-+    }
-+    return TRUE;
-+}
-+
-+
- /*--------------------------------------------------------------------
-      Beschreibung: Aktuelles Verzeichnis vor oder in dem der Cursor
-                                    steht
-diff --git a/sw/source/core/inc/MarkManager.hxx b/sw/source/core/inc/MarkManager.hxx
-index e583ea4..63cfdbf 100644
---- a/sw/source/core/inc/MarkManager.hxx
-+++ b/sw/source/core/inc/MarkManager.hxx
-@@ -40,8 +40,18 @@ namespace sw { namespace mark
-         public:
-             MarkManager(/*[in/out]*/ SwDoc& rDoc);
- 
-+            void dumpFieldmarks( ) const;
-+
-             // IDocumentMarkAccess
-             virtual ::sw::mark::IMark* makeMark(const SwPaM& rPaM, const ::rtl::OUString& rName, IDocumentMarkAccess::MarkType eMark);
-+
-+            virtual sw::mark::IFieldmark* makeFieldBookmark( const SwPaM& rPaM,
-+                const rtl::OUString& rName,
-+                const rtl::OUString& rType);
-+            virtual sw::mark::IFieldmark* makeNoTextFieldBookmark( const SwPaM& rPaM,
-+                const rtl::OUString& rName,
-+                const rtl::OUString& rType);
-+
-             virtual ::sw::mark::IMark* getMarkForTxtNode(const SwTxtNode& rTxtNode, IDocumentMarkAccess::MarkType eMark);
- 
-             virtual void repositionMark(::sw::mark::IMark* io_pMark, const SwPaM& rPaM);
-diff --git a/sw/source/core/inc/bookmrk.hxx b/sw/source/core/inc/bookmrk.hxx
-index 9500be4..e27f1fa 100644
---- a/sw/source/core/inc/bookmrk.hxx
-+++ b/sw/source/core/inc/bookmrk.hxx
-@@ -45,26 +45,31 @@ namespace sw { namespace mark
-     {
-         public:
-             //getters
--            virtual const SwPosition& GetMarkPos() const
-+            virtual SwPosition& GetMarkPos() const
-                 { return *m_pPos1; }
-             virtual const ::rtl::OUString& GetName() const
-                 { return m_aName; }
--            virtual bool IsCoveringPosition(const SwPosition& rPos) const
--                { return GetMarkStart() <= rPos && rPos <= GetMarkEnd(); };
--            virtual const SwPosition& GetOtherMarkPos() const
-+            virtual bool IsCoveringPosition(const SwPosition& rPos) const;
-+            virtual SwPosition& GetOtherMarkPos() const
-             {
-                 OSL_PRECOND(IsExpanded(), "<SwPosition::GetOtherMarkPos(..)> - I have no other Pos set." );
-                 return *m_pPos2;
-             }
--            virtual const SwPosition& GetMarkStart() const
-+            virtual SwPosition& GetMarkStart() const
-             {
--                if(!m_pPos2 /* !IsExpanded()*/) return *m_pPos1;
--                return *m_pPos1 < *m_pPos2 ? *m_pPos1 : *m_pPos2;
-+                if( !IsExpanded() ) return GetMarkPos( );
-+                if ( GetMarkPos( ) < GetOtherMarkPos( ) )
-+                    return GetMarkPos();
-+                else
-+                    return GetOtherMarkPos( );
-             }
--            virtual const SwPosition& GetMarkEnd() const
-+            virtual SwPosition& GetMarkEnd() const
-             {
--                if(!m_pPos2 /* !IsExpanded()*/ ) return *m_pPos1;
--                return *m_pPos1 > *m_pPos2 ? *m_pPos1 : *m_pPos2;
-+                if( !IsExpanded() ) return GetMarkPos();
-+                if ( GetMarkPos( ) > GetOtherMarkPos( ) )
-+                    return GetMarkPos( );
-+                else
-+                    return GetOtherMarkPos( );
-             }
-             virtual bool IsExpanded() const
-                 { return m_pPos2; }
-@@ -77,6 +82,8 @@ namespace sw { namespace mark
-             virtual void ClearOtherMarkPos()
-                 { m_pPos2.reset(); }
- 
-+            virtual rtl::OUString toString( ) const;
-+
-             virtual void Swap()
-             {
-                 if(m_pPos2)
-@@ -187,11 +194,23 @@ namespace sw { namespace mark
-             ::rtl::OUString GetFieldHelptext() const
-                 { return m_aFieldHelptext; }
- 
-+            void addParam( rtl::OUString rParamName,
-+                           rtl::OUString rParamValue,
-+                           bool bReplaceExisting = true );
-+            void addParam( const char* paramName, int value );
-+            void addParams(std::vector<ParamPair_t>& params);
-+            int  getNumOfParams() const;
-+            ParamPair_t getParam(int pos) const;
-+            ParamPair_t getParam(const char *name, const char *defaultValue) const;
-+
-             // setters
-             void SetFieldname(const ::rtl::OUString& aFieldname)
-                 { m_aFieldname = aFieldname; }
-             void SetFieldHelptext(const ::rtl::OUString& aFieldHelptext)
-                 { m_aFieldHelptext = aFieldHelptext; }
-+            void invalidate( );
-+
-+            virtual rtl::OUString toString( ) const;
-         private:
-             //int fftype; // Type: 0 = Text, 1 = Check Box, 2 = List
-             //bool ffprot;
-@@ -199,7 +218,7 @@ namespace sw { namespace mark
-             ::rtl::OUString m_aFieldname;
-             ::rtl::OUString m_aFieldHelptext;
-             static const ::rtl::OUString our_sNamePrefix;
--
-+            std::vector<ParamPair_t> m_params;
-     };
- 
-     class TextFieldmark
-diff --git a/sw/source/core/inc/crossrefbookmark.hxx b/sw/source/core/inc/crossrefbookmark.hxx
-index cfacf26..27f920b 100644
---- a/sw/source/core/inc/crossrefbookmark.hxx
-+++ b/sw/source/core/inc/crossrefbookmark.hxx
-@@ -45,10 +45,10 @@ namespace sw { namespace mark
-                 const ::rtl::OUString& rPrefix);
- 
-             // getters
--            virtual const SwPosition& GetOtherMarkPos() const;
--            virtual const SwPosition& GetMarkStart() const
-+            virtual SwPosition& GetOtherMarkPos() const;
-+            virtual SwPosition& GetMarkStart() const
-                 { return *m_pPos1; }
--            virtual const SwPosition& GetMarkEnd() const
-+            virtual SwPosition& GetMarkEnd() const
-                 { return *m_pPos1; }
-             virtual bool IsExpanded() const
-                 { return false; }
-diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx
-index 58c3cff..5198fe2 100644
---- a/sw/source/core/text/inftxt.cxx
-+++ b/sw/source/core/text/inftxt.cxx
-@@ -1148,27 +1148,30 @@ void SwTxtPaintInfo::DrawCheckBox( const SwFieldFormPortion &rPor, bool checked)
- {
-     SwRect aIntersect;
-     CalcRect( rPor, &aIntersect, 0 );
--    if ( aIntersect.HasArea() ) {
--    if (OnWin()) {
--        OutputDevice* pOutDev = (OutputDevice*)GetOut();
--        pOutDev->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR );
--        pOutDev->SetLineColor( Color(220, 233, 245));
--        pOutDev->SetFillColor( Color(220, 233, 245));
--        pOutDev->DrawRect( aIntersect.SVRect() );
--        pOutDev->Pop();
--    }
--    const int delta=10;
--    Rectangle r(aIntersect.Left()+delta, aIntersect.Top()+delta, aIntersect.Right()-delta, aIntersect.Bottom()-delta);
--    pOut->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR );	    
--    pOut->SetLineColor( Color(0, 0, 0));
--    pOut->SetFillColor();
--    pOut->DrawRect( r );
--    if (checked) {
--        pOut->DrawLine(r.TopLeft(), r.BottomRight());
--        pOut->DrawLine(r.TopRight(), r.BottomLeft());
-+    if ( aIntersect.HasArea() )
-+    {
-+        if (OnWin() && SwViewOption::IsFieldShadings() &&
-+                !GetOpt().IsPagePreview())
-+        {
-+            OutputDevice* pOut_ = (OutputDevice*)GetOut();
-+            pOut_->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR );
-+            pOut_->SetFillColor( SwViewOption::GetFieldShadingsColor() );
-+            pOut_->SetLineColor();
-+            pOut_->DrawRect( aIntersect.SVRect() );
-+            pOut_->Pop();
-+        }
-+        const int delta=10;
-+        Rectangle r(aIntersect.Left()+delta, aIntersect.Top()+delta, aIntersect.Right()-delta, aIntersect.Bottom()-delta);
-+        pOut->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR );
-+        pOut->SetLineColor( Color(0, 0, 0));
-+        pOut->SetFillColor();
-+        pOut->DrawRect( r );
-+        if (checked) {
-+            pOut->DrawLine(r.TopLeft(), r.BottomRight());
-+            pOut->DrawLine(r.TopRight(), r.BottomLeft());
-+        }
-         pOut->Pop();
-     }
--    }
- }
- 
- /*************************************************************************
-@@ -1222,14 +1225,22 @@ void SwTxtPaintInfo::_DrawBackBrush( const SwLinePortion &rPor ) const
-                 }
-             }
-             bool bIsStartMark=(1==GetLen() && CH_TXT_ATR_FIELDSTART==GetTxt().GetChar(GetIdx()));
--            if(pFieldmark) OSL_TRACE("Found Fieldmark");
-+            if(pFieldmark) {
-+                OSL_TRACE("Found Fieldmark");
-+#if DEBUG
-+                rtl::OUString str = pFieldmark->toString( );
-+                fprintf( stderr, "%s\n", rtl::OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr( ) );
-+#endif
-+            }
-             if(bIsStartMark) OSL_TRACE("Found StartMark");
--            if (OnWin() && (pFieldmark!=NULL || bIsStartMark))
-+            if (OnWin() && (pFieldmark!=NULL || bIsStartMark) &&
-+                    SwViewOption::IsFieldShadings() &&
-+                    !GetOpt().IsPagePreview())
-             {
-                 OutputDevice* pOutDev = (OutputDevice*)GetOut();
-                 pOutDev->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR );
--                pOutDev->SetLineColor( Color(220, 233, 245));
--                pOutDev->SetFillColor( Color(220, 233, 245));
-+			pOutDev->SetFillColor( SwViewOption::GetFieldShadingsColor() );
-+                pOutDev->SetLineColor( );
-                 pOutDev->DrawRect( aIntersect.SVRect() );
-                 pOutDev->Pop();
-             }
-diff --git a/sw/source/core/text/portxt.cxx b/sw/source/core/text/portxt.cxx
-index 551ca43..1494482 100644
---- a/sw/source/core/text/portxt.cxx
-+++ b/sw/source/core/text/portxt.cxx
-@@ -52,11 +52,13 @@
- #include <IMark.hxx>
- #include <pam.hxx>
- #include <doc.hxx>
-+#include <ecmaflds.hxx>
- 
- #if OSL_DEBUG_LEVEL > 1
- const sal_Char *GetLangName( const MSHORT nLang );
- #endif
- 
-+using namespace ::sw::mark;
- using namespace ::com::sun::star;
- using namespace ::com::sun::star::i18n::ScriptType;
- 
-@@ -770,9 +772,10 @@ void SwHolePortion::HandlePortion( SwPortionHandler& rPH ) const
-     rPH.Text( GetLen(), GetWhichPor() );
- }
- 
--void SwFieldMarkPortion::Paint( const SwTxtPaintInfo & rInf) const
-+void SwFieldMarkPortion::Paint( const SwTxtPaintInfo & /*rInf*/) const
- {
--    SwTxtPortion::Paint(rInf);
-+    // These shouldn't be painted!
-+    // SwTxtPortion::Paint(rInf);
- }
- 
- sal_Bool SwFieldMarkPortion::Format( SwTxtFormatInfo & )
-@@ -782,38 +785,95 @@ sal_Bool SwFieldMarkPortion::Format( SwTxtFormatInfo & )
-     return ret;
- }
- 
-+namespace ecma {
-+    static int getCurrentListIndex( IFieldmark* pBM,
-+            ::rtl::OUString *currentText = NULL )
-+    {
-+        int currentIndex = pBM->getParam( ECMA_FORMDROPDOWN_RESULT, "0" ).second.toInt32();
-+        int idx = 0;
-+        for( int i = 0; i < pBM->getNumOfParams(); i++ )
-+        {
-+            IFieldmark::ParamPair_t p = pBM->getParam( i );
-+            if ( p.first.compareToAscii( ECMA_FORMDROPDOWN_LISTENTRY ) == 0 )
-+            {
-+	            if ( idx == currentIndex )
-+                {
-+	                if ( currentText!=NULL ) *currentText=p.second;
-+	                    break;
-+	            }
-+                else
-+		    idx++;
-+            }
-+        }
-+        return idx;
-+    }
-+} /* ecma */
- 
- //FIXME Fieldbk
--//void SwFieldFormPortion::Paint( const SwTxtPaintInfo& rInf ) const
--void SwFieldFormPortion::Paint( const SwTxtPaintInfo& ) const
-+void SwFieldFormPortion::Paint( const SwTxtPaintInfo& rInf ) const
- {
--//    SwTxtNode *pNd=const_cast<SwTxtNode*>(rInf.GetTxtFrm()->GetTxtNode());
--//    const SwDoc *doc=pNd->GetDoc();
--//    SwIndex aIndex( pNd, rInf.GetIdx() );
--//    SwPosition aPosition(*pNd, aIndex);
--//    pMark = dynamic_cast< doc->getFieldmarkFor(aPosition);
--//    OSL_ENSURE(pMark,
--//        "SwFieldFormPortion::Paint(..)"
--//        " - Where is my form field bookmark???");
--
--//    bool checked=(pBM!=NULL?pBM->IsChecked():false);
--//    rInf.DrawCheckBox(*this , checked);
--}
-+    SwTxtNode* pNd = const_cast<SwTxtNode*>(rInf.GetTxtFrm()->GetTxtNode());
-+    const SwDoc *doc=pNd->GetDoc();
-+    SwIndex aIndex( pNd, rInf.GetIdx() );
-+    SwPosition aPosition(*pNd, aIndex);
- 
--sal_Bool SwFieldFormPortion::Format( SwTxtFormatInfo &rInf )
--{
--    sal_Bool ret=0;
--//	ret=SwTxtPortion::Format(rInf);
-+    IFieldmark* pBM = doc->getIDocumentMarkAccess( )->getFieldmarkFor( aPosition );
- 
--    Width(rInf.GetTxtHeight());
--    Height(rInf.GetTxtHeight());
--    SetAscent(rInf.GetAscent());
--    //int h=rInf.GetTxtHeight();
-+    OSL_ENSURE( pBM,
-+        "SwFieldFormPortion::Paint(..)"
-+        " - Where is my form field bookmark???");
-+
-+    if ( pBM != NULL )
-+    {
-+        if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) )
-+        { // a checkbox...
-+            bool checked = pBM->getParam( ECMA_FORMCHECKBOX_CHECKED ).second.compareToAscii("on") == 0;
-+            rInf.DrawCheckBox( *this , checked);
-+        }
-+        else if ( pBM->GetFieldname( ).equalsAscii(  ECMA_FORMDROPDOWN ) )
-+        { // a list...
-+		rtl::OUString aTxt;
-+		rInf.DrawViewOpt( *this, POR_FLD );
-+		rInf.DrawText( aTxt, *this, 0, aTxt.getLength(), false );
-+        }
-+        else
-+        {
-+		assert(0); // unknown type...
-+        }
-+    }
-+}
- 
--/*
--    Height(100);
--    SetAscent(100);
--*/
-+sal_Bool SwFieldFormPortion::Format( SwTxtFormatInfo & rInf )
-+{
-+    sal_Bool ret = 0;
-+    SwTxtNode *pNd = const_cast < SwTxtNode * >( rInf.GetTxtFrm(  )->GetTxtNode(  ) );
-+    const SwDoc *doc = pNd->GetDoc(  );
-+    SwIndex aIndex( pNd, rInf.GetIdx(  ) );
-+    SwPosition aPosition( *pNd, aIndex );
-+    IFieldmark *pBM = doc->getIDocumentMarkAccess( )->getFieldmarkFor( aPosition );
-+    ASSERT( pBM != NULL, "Where is my form field bookmark???" );
-+    if ( pBM != NULL )
-+    {
-+        if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) )
-+        {
-+            Width( rInf.GetTxtHeight(  ) );
-+            Height( rInf.GetTxtHeight(  ) );
-+            SetAscent( rInf.GetAscent(  ) );
-+        }
-+        else if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) )
-+        {
-+            ::rtl::OUString aTxt;
-+            ecma::getCurrentListIndex( pBM, &aTxt );
-+            SwPosSize aPosSize = rInf.GetTxtSize( aTxt );
-+            Width( aPosSize.Width(  ) );
-+            Height( aPosSize.Height(  ) );
-+            SetAscent( rInf.GetAscent(  ) );
-+        }
-+        else
-+        {
-+            assert( 0 );        // unknown type...
-+        }
-+    }
-     return ret;
- }
- 
-diff --git a/sw/source/core/unocore/unobkm.cxx b/sw/source/core/unocore/unobkm.cxx
-index 480b206..05d4c45 100644
---- a/sw/source/core/unocore/unobkm.cxx
-+++ b/sw/source/core/unocore/unobkm.cxx
-@@ -46,6 +46,7 @@
- #include <docsh.hxx>
- 
- 
-+using namespace ::sw::mark;
- using namespace ::com::sun::star;
- using namespace ::com::sun::star::lang;
- using namespace ::com::sun::star::uno;
-@@ -354,66 +355,85 @@ SwXFieldmark::SwXFieldmark(bool _isReplacementObject, ::sw::mark::IMark* pBkm, S
-     , isReplacementObject(_isReplacementObject)
- { }
- 
--void SwXFieldmark::attachToRange(const uno::Reference< text::XTextRange > & xTextRange)
-+void SwXFieldmark::attachToRange( const uno::Reference < text::XTextRange >& xTextRange )
-     throw( lang::IllegalArgumentException, uno::RuntimeException )
- {
--    attachToRangeEx(xTextRange, (isReplacementObject?IDocumentMarkAccess::CHECKBOX_FIELDMARK:IDocumentMarkAccess::TEXT_FIELDMARK));
-+    attachToRangeEx( xTextRange,
-+                     ( isReplacementObject ? IDocumentMarkAccess::CHECKBOX_FIELDMARK : IDocumentMarkAccess::TEXT_FIELDMARK ) );
- }
- 
--::rtl::OUString SwXFieldmark::getDescription(void) throw( ::com::sun::star::uno::RuntimeException )
-+::rtl::OUString SwXFieldmark::getFieldType( void )
-+    throw( ::com::sun::star::uno::RuntimeException )
- {
--    vos::OGuard aGuard(Application::GetSolarMutex());
--//        TODO implement...
--//        if(!GetBookmark())
--    ::sw::mark::IFieldmark const * const pMark =
--        dynamic_cast< ::sw::mark::IFieldmark const * const>(GetBookmark());
--    if(!pMark)
--        throw uno::RuntimeException();
--    return pMark->GetFieldHelptext();
-+    vos::OGuard aGuard( Application::GetSolarMutex(  ) );
-+    IMark* pMark = const_cast< IMark* >( GetBookmark( ) );
-+    IFieldmark *pBkm = dynamic_cast< IFieldmark* > ( pMark );
-+    if ( pBkm )
-+        return pBkm->GetFieldname( );
-+    else
-+        throw uno::RuntimeException(  );
- }
- 
--::sal_Int16 SAL_CALL SwXFieldmark::getType() throw (::com::sun::star::uno::RuntimeException)
-+void SwXFieldmark::setFieldType( const::rtl::OUString & fieldType )
-+    throw( ::com::sun::star::uno::RuntimeException )
- {
--    vos::OGuard aGuard(Application::GetSolarMutex());
--    ::sw::mark::ICheckboxFieldmark const * const pAsCheckbox =
--        dynamic_cast< ::sw::mark::ICheckboxFieldmark const * const>(GetBookmark());
--    if(pAsCheckbox)
--        return 1;
--    return 0;
-+    vos::OGuard aGuard( Application::GetSolarMutex(  ) );
-+    IMark* pMark = const_cast< IMark* >( GetBookmark( ) );
-+    IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark );
-+    if ( pBkm )
-+        pBkm->SetFieldname( fieldType );
-+    else
-+        throw uno::RuntimeException(  );
- }
- 
--::sal_Int16 SAL_CALL SwXFieldmark::getRes() throw (::com::sun::star::uno::RuntimeException)
-+sal_Int16 SwXFieldmark::getParamCount(  )
-+    throw( ::com::sun::star::uno::RuntimeException )
- {
--    vos::OGuard aGuard(Application::GetSolarMutex());
--    ::sw::mark::ICheckboxFieldmark const * const pAsCheckbox =
--        dynamic_cast< ::sw::mark::ICheckboxFieldmark const * const>(GetBookmark());
--    if(pAsCheckbox && pAsCheckbox->IsChecked())
--        return 1;
--    return 0;
-+    vos::OGuard aGuard( Application::GetSolarMutex(  ) );
-+    IMark* pMark = const_cast< IMark* >( GetBookmark( ) );
-+    IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark );
-+    if ( pBkm )
-+        return pBkm->getNumOfParams(  );
-+    else
-+        throw uno::RuntimeException(  );
- }
- 
--//FIXME Remove Method
--void SAL_CALL SwXFieldmark::setType( ::sal_Int16 ) throw (::com::sun::star::uno::RuntimeException)
-+rtl::OUString SwXFieldmark::getParamName( sal_Int16 i )
-+    throw( ::com::sun::star::uno::RuntimeException )
- {
--    vos::OGuard aGuard(Application::GetSolarMutex());
--    throw uno::RuntimeException();
-+    vos::OGuard aGuard( Application::GetSolarMutex(  ) );
-+    IMark* pMark = const_cast< IMark* >( GetBookmark( ) );
-+    IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark );
-+    if ( pBkm )
-+        return pBkm->getParam( i ).first;
-+    else
-+        throw uno::RuntimeException(  );
- }
- 
--//FIXME Remove Method
--void SAL_CALL SwXFieldmark::setRes( ::sal_Int16  ) throw (::com::sun::star::uno::RuntimeException)
-+::rtl::OUString SwXFieldmark::getParamValue( ::sal_Int16 i )
-+    throw( ::com::sun::star::uno::RuntimeException )
- {
--    vos::OGuard aGuard(Application::GetSolarMutex());
--    throw uno::RuntimeException();
-+    vos::OGuard aGuard( Application::GetSolarMutex(  ) );
-+    IMark* pMark = const_cast< IMark* >( GetBookmark( ) );
-+    IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark );
-+    if ( pBkm )
-+        return pBkm->getParam( i ).second;
-+    else
-+        throw uno::RuntimeException(  );
- }
- 
--void SAL_CALL SwXFieldmark::setDescription( const ::rtl::OUString& description )
--    throw (::com::sun::star::uno::RuntimeException)
-+void SwXFieldmark::addParam( const ::rtl::OUString & name,
-+                             const ::rtl::OUString & value,
-+                             sal_Bool replaceExisting )
-+    throw( ::com::sun::star::uno::RuntimeException )
- {
--    vos::OGuard aGuard(Application::GetSolarMutex());
--    const ::sw::mark::IFieldmark* pMark =
--        dynamic_cast<const ::sw::mark::IFieldmark*>(GetBookmark());
--    if(pMark)
--        const_cast< ::sw::mark::IFieldmark*>(pMark)->SetFieldHelptext(description);
-+    vos::OGuard aGuard( Application::GetSolarMutex(  ) );
-+    IMark* pMark = const_cast< IMark* >( GetBookmark( ) );
-+    IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark );
-+    if ( pBkm )
-+        pBkm->addParam( const_cast< rtl::OUString& >( name ),
-+                const_cast< rtl::OUString& >( value ),
-+                replaceExisting );
-     else
--        throw uno::RuntimeException();
-+        throw uno::RuntimeException(  );
- }
-diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx
-index a082a55..b299867 100644
---- a/sw/source/filter/ww8/wrtw8nds.cxx
-+++ b/sw/source/filter/ww8/wrtw8nds.cxx
-@@ -111,8 +111,48 @@ using namespace ::com::sun::star;
- using namespace ::com::sun::star::i18n;
- using namespace sw::util;
- using namespace sw::types;
-+using namespace sw::mark;
- using namespace nsFieldFlags;
- 
-+
-+static String lcl_getFieldCode( const IFieldmark* pFieldmark ) {
-+    ASSERT(pFieldmark!=NULL, "where is my fieldmark???");
-+    if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMTEXT ) ) {
-+        return String::CreateFromAscii(" FORMTEXT ");
-+    } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) ) {
-+        return String::CreateFromAscii(" FORMDROPDOWN ");
-+    } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) {
-+        return String::CreateFromAscii(" FORMCHECKBOX ");
-+    } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_TOC ) ) {
-+        return String::CreateFromAscii(" TOC ");
-+    } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_HYPERLINK ) ) {
-+        return String::CreateFromAscii(" HYPERLINK ");
-+    } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_PAGEREF ) ) {
-+        return String::CreateFromAscii(" PAGEREF ");
-+    } else {
-+        return pFieldmark->GetFieldname();
-+    }
-+}
-+
-+ww::eField lcl_getFieldId( const IFieldmark* pFieldmark ) {
-+    ASSERT(pFieldmark!=NULL, "where is my fieldmark???");
-+    if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMTEXT ) ) {
-+        return ww::eFORMTEXT;
-+    } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) ) {
-+        return ww::eFORMDROPDOWN;
-+    } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) {
-+        return ww::eFORMCHECKBOX;
-+    } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_TOC ) ) {
-+        return ww::eTOC;
-+    } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_HYPERLINK ) ) {
-+        return ww::eHYPERLINK;
-+    } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_PAGEREF ) ) {
-+        return ww::ePAGEREF;
-+    } else {
-+        return ww::eUNKNOWN;
-+    }
-+}
-+
- /*  */
- 
- MSWordAttrIter::MSWordAttrIter( MSWordExportBase& rExport )
-@@ -263,22 +303,40 @@ SwAttrIter::SwAttrIter(MSWordExportBase& rWr, const SwTxtNode& rTxtNd) :
-     nAktSwPos = SearchNext(1);
- }
- 
-+xub_StrLen lcl_getMinPos( xub_StrLen pos1, xub_StrLen pos2 )
-+{
-+    xub_StrLen min = STRING_NOTFOUND;
-+    if ( pos1 == STRING_NOTFOUND && pos2 != STRING_NOTFOUND )
-+        min = pos2;
-+    else if ( pos2 == STRING_NOTFOUND && pos1 != STRING_NOTFOUND )
-+        min = pos1;
-+    else if ( pos2 != STRING_NOTFOUND && pos2 != STRING_NOTFOUND )
-+    {
-+        if ( pos1 < pos2 )
-+            min = pos1;
-+        else
-+            min = pos2;
-+    }
-+
-+    return min;
-+}
-+
- xub_StrLen SwAttrIter::SearchNext( xub_StrLen nStartPos )
- {
-     xub_StrLen nPos;
-     xub_StrLen nMinPos = STRING_MAXLEN;
-+    xub_StrLen i=0;
-+
-     const String aTxt = rNd.GetTxt();
--    xub_StrLen pos = aTxt.Search(CH_TXT_ATR_FIELDSTART, nStartPos);
--    if( pos==STRING_NOTFOUND )
--    {
--        pos = aTxt.Search(CH_TXT_ATR_FIELDEND, nStartPos);
--        if( pos==STRING_NOTFOUND )
--            pos = aTxt.Search(CH_TXT_ATR_FORMELEMENT, nStartPos);
--    }
--    if( pos!=STRING_NOTFOUND )
--        nMinPos=pos;
-+    xub_StrLen fieldEndPos = aTxt.Search(CH_TXT_ATR_FIELDEND, nStartPos);
-+    xub_StrLen fieldStartPos = aTxt.Search(CH_TXT_ATR_FIELDSTART, nStartPos);
-+    xub_StrLen formElementPos = aTxt.Search(CH_TXT_ATR_FORMELEMENT, nStartPos);
- 
--    xub_StrLen i=0;
-+    xub_StrLen pos = lcl_getMinPos( fieldEndPos, fieldStartPos );
-+    pos = lcl_getMinPos( pos, formElementPos );
-+
-+    if (pos!=STRING_NOTFOUND)
-+        nMinPos=pos;
- 
-     // first the redline, then the attributes
-     if( pCurRedline )
-@@ -1705,12 +1763,14 @@ void MSWordExportBase::OutputTextNode( const SwTxtNode& rNode )
-                 ::sw::mark::IFieldmark const * const pFieldmark = pMarkAccess->getFieldmarkFor( aPosition );
-                 OSL_ENSURE( pFieldmark, "Looks like this doc is broken...; where is the Fieldmark for the FIELDSTART??" );
- 
--                if ( pFieldmark )
--                    AppendBookmark( pFieldmark->GetName(), true );
--                OutputField( NULL, ww::eFORMTEXT, String::CreateFromAscii( " FORMTEXT " ), WRITEFIELD_START | WRITEFIELD_CMD_START );
--                if ( pFieldmark )
-+                if ( pFieldmark->GetFieldname().equalsAscii( ECMA_FORMTEXT ) )
-+                    AppendBookmark( pFieldmark->GetName(), false );
-+                OutputField( NULL, lcl_getFieldId( pFieldmark ), lcl_getFieldCode( pFieldmark ), WRITEFIELD_START | WRITEFIELD_CMD_START );
-+                if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMTEXT ) )
-                     WriteFormData( *pFieldmark );
--                OutputField( NULL, ww::eFORMTEXT, String(), WRITEFIELD_CMD_END );
-+                else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_HYPERLINK ) )
-+                    WriteHyperlinkData( *pFieldmark );
-+                OutputField( NULL, lcl_getFieldId( pFieldmark ), String(), WRITEFIELD_CMD_END );
-             }
-             else if ( ch == CH_TXT_ATR_FIELDEND )
-             {
-@@ -1718,8 +1778,8 @@ void MSWordExportBase::OutputTextNode( const SwTxtNode& rNode )
-                 ::sw::mark::IFieldmark const * const pFieldmark = pMarkAccess->getFieldmarkFor( aPosition );
-                 OSL_ENSURE( pFieldmark, "Looks like this doc is broken...; where is the Fieldmark for the FIELDSTART??" );
- 
--                OutputField( NULL, ww::eFORMTEXT, String(), WRITEFIELD_CLOSE );
--                if ( pFieldmark )
-+                OutputField( NULL, lcl_getFieldId( pFieldmark ), String(), WRITEFIELD_CLOSE );
-+                if ( pFieldmark->GetFieldname().equalsAscii( ECMA_FORMTEXT ) )
-                     AppendBookmark( pFieldmark->GetName(), false );
-             }
-             else if ( ch == CH_TXT_ATR_FORMELEMENT )
-@@ -1728,13 +1788,18 @@ void MSWordExportBase::OutputTextNode( const SwTxtNode& rNode )
-                 ::sw::mark::IFieldmark const * const pFieldmark = pMarkAccess->getFieldmarkFor( aPosition );
-                 OSL_ENSURE( pFieldmark, "Looks like this doc is broken...; where is the Fieldmark for the FIELDSTART??" );
- 
--                if ( pFieldmark )
--                    AppendBookmark( pFieldmark->GetName(), true );
--                OutputField( NULL, ww::eFORMCHECKBOX, String::CreateFromAscii( " FORMCHECKBOX " ), WRITEFIELD_START | WRITEFIELD_CMD_START );
--                if ( pFieldmark )
-+                bool isEcma = pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) ||
-+                    pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX );
-+
-+                if ( isEcma )
-+                    AppendBookmark( pFieldmark->GetName(), 0 );
-+                OutputField( NULL, lcl_getFieldId( pFieldmark ),
-+                        lcl_getFieldCode( pFieldmark ),
-+                        WRITEFIELD_START | WRITEFIELD_CMD_START );
-+                if ( isEcma )
-                     WriteFormData( *pFieldmark );
--                OutputField( NULL, ww::eFORMCHECKBOX, String(), WRITEFIELD_CMD_END | WRITEFIELD_CLOSE );
--                if ( pFieldmark )
-+                OutputField( NULL, lcl_getFieldId( pFieldmark ), String(), WRITEFIELD_CLOSE );
-+                if ( isEcma )
-                     AppendBookmark( pFieldmark->GetName(), false );
-             }
-             nLen -= static_cast< USHORT >( ofs );
-diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx
-index 56987ff..bb90047 100644
---- a/sw/source/filter/ww8/wrtww8.cxx
-+++ b/sw/source/filter/ww8/wrtww8.cxx
-@@ -102,6 +102,7 @@
- #include "ww8attributeoutput.hxx"
- 
- #include <IDocumentMarkAccess.hxx>
-+#include <ecmaflds.hxx>
- 
- #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
- #include <com/sun/star/document/XDocumentProperties.hpp>
-@@ -3517,11 +3518,20 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
-     const ::sw::mark::IFieldmark* pFieldmark = &rFieldmark;
-     const ::sw::mark::ICheckboxFieldmark* pAsCheckbox = dynamic_cast< const ::sw::mark::ICheckboxFieldmark* >( pFieldmark );
- 
-+
-+    ASSERT(rFieldmark.GetFieldname().equalsAscii( ECMA_FORMTEXT ) || rFieldmark.GetFieldname().equalsAscii( ECMA_FORMDROPDOWN ) || rFieldmark.GetFieldname().equalsAscii( ECMA_FORMCHECKBOX ), "Unknown field type!!!");
-+    if ( ! ( rFieldmark.GetFieldname().equalsAscii( ECMA_FORMTEXT ) ||
-+                rFieldmark.GetFieldname().equalsAscii( ECMA_FORMDROPDOWN ) ||
-+                rFieldmark.GetFieldname().equalsAscii( ECMA_FORMCHECKBOX ) ) )
-+        return;
-+
-     int type = 0; // TextFieldmark
-     if ( pAsCheckbox )
-         type = 1;
-+    if ( rFieldmark.GetFieldname().equalsAscii( ECMA_FORMDROPDOWN ) )
-+        type=2;
- 
--    const ::rtl::OUString ffname = rFieldmark.GetFieldname();
-+    const String ffname = rFieldmark.getParam("name").second;
- 
-     ULONG nDataStt = pDataStrm->Tell();
-     pChpPlc->AppendFkpEntry(Strm().Tell());
-@@ -3543,15 +3553,28 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
-     sal_uInt8 aFldHeader[] =
-     {
-         0xFF, 0xFF, 0xFF, 0xFF, // Unicode Marker...
--        0, 0, 0, 0//, 0, 0, 0, 0
-+        0, 0, 0, 0, 0, 0 //, 0, 0
-     };
- 
-     aFldHeader[4] |= (type & 0x03);
-     int ffres = 0; // rFieldmark.GetFFRes();
-     if ( pAsCheckbox && pAsCheckbox->IsChecked() )
-         ffres = 1;
-+    else if ( type == 2 )
-+        ffres = rFieldmark.getParam( ECMA_FORMDROPDOWN_RESULT, "0" ).second.toInt32();
-     aFldHeader[4] |= ( (ffres<<2) & 0x7C );
- 
-+    std::vector< ::rtl::OUString > aListItems;
-+    if (type==2)
-+    {
-+        aFldHeader[5] |= 0x80; // ffhaslistbox
-+        for ( int i = 0; i < rFieldmark.getNumOfParams() ; i++ )
-+        {
-+            if (rFieldmark.getParam(i).first.compareToAscii(ECMA_FORMDROPDOWN_LISTENTRY)==0)
-+                aListItems.push_back(rFieldmark.getParam(i).second);
-+        }
-+    }
-+
-     const ::rtl::OUString ffdeftext;
-     const ::rtl::OUString ffformat;
-     const ::rtl::OUString ffhelptext;
-@@ -3559,6 +3582,7 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
-     const ::rtl::OUString ffentrymcr;
-     const ::rtl::OUString ffexitmcr;
- 
-+
-     const sal_uInt8 aFldData[] =
-     {
-         0,0,0,0,        // len of struct
-@@ -3571,13 +3595,22 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
-     };
-     int slen = sizeof( aFldData )
-         + sizeof( aFldHeader )
--        + 2*ffname.getLength() + 4
-+        + 2*ffname.Len() + 4
-         + 2*ffdeftext.getLength() + 4
-         + 2*ffformat.getLength() + 4
-         + 2*ffhelptext.getLength() + 4
-         + 2*ffstattext.getLength() + 4
-         + 2*ffentrymcr.getLength() + 4
-         + 2*ffexitmcr.getLength() + 4;
-+    if ( type==2 ) {
-+        slen += 2; // for 0xFF, 0xFF
-+        slen += 4; // for num of list items
-+        const int items = aListItems.size();
-+        for( int i = 0; i < items; i++ ) {
-+            rtl::OUString item = aListItems[i];
-+            slen += 2 * item.getLength() + 2;
-+        }
-+    }
- #ifdef OSL_BIGENDIAN
-     slen = SWAPLONG( slen );
- #endif // OSL_BIGENDIAN
-@@ -3588,6 +3621,7 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
- 
-     len = sizeof( aFldHeader );
-     OSL_ENSURE( len == 8, "SwWW8Writer::WriteFormData(..) - wrong aFldHeader length" );
-+
-     pDataStrm->Write( aFldHeader, len );
- 
-     SwWW8Writer::WriteString_xstz( *pDataStrm, ffname, true ); // Form field name
-@@ -3602,11 +3636,20 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
-     SwWW8Writer::WriteString_xstz( *pDataStrm, String( ffstattext ), true );
-     SwWW8Writer::WriteString_xstz( *pDataStrm, String( ffentrymcr ), true );
-     SwWW8Writer::WriteString_xstz( *pDataStrm, String( ffexitmcr ), true );
--//    if (type==2) {
--//        // 0xFF, 0xFF
--//        // sal_uInt32 number of strings
--//        // (sal_uInt16 len; sal_uInt16 unicode char[len])*num of strings
--//    }
-+    if (type==2) {
-+        *pDataStrm<<(sal_uInt16)0xFFFF;
-+        const int items=aListItems.size();
-+        *pDataStrm<<(sal_uInt32)items;
-+        for(int i=0;i<items;i++) {
-+            rtl::OUString item=aListItems[i];
-+            SwWW8Writer::WriteString_xstz( *pDataStrm, item, false );
-+        }
-+    }
-+}
-+
-+void WW8Export::WriteHyperlinkData( const sw::mark::IFieldmark& rFieldmark )
-+{
-+    //@TODO implement me !!!
- }
- 
- void WW8AttributeOutput::TableNodeInfoInner( ww8::WW8TableNodeInfoInner::Pointer_t pNodeInfoInner )
-diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx
-index 71f433b..d70dfaa 100644
---- a/sw/source/filter/ww8/wrtww8.hxx
-+++ b/sw/source/filter/ww8/wrtww8.hxx
-@@ -706,6 +706,7 @@ public:
- 
-     /// Write the data of the form field
-     virtual void WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) = 0;
-+    virtual void WriteHyperlinkData( const ::sw::mark::IFieldmark& rFieldmark ) = 0;
-     
-     virtual void DoComboBox(const rtl::OUString &rName,
-                     const rtl::OUString &rHelp,
-@@ -1073,6 +1074,7 @@ public:
- 
-     /// Write the data of the form field
-     virtual void WriteFormData( const ::sw::mark::IFieldmark& rFieldmark );
-+    virtual void WriteHyperlinkData( const ::sw::mark::IFieldmark& rFieldmark );
- 
-     /// Fields.
-     WW8_WrPlcFld* CurrentFieldPlc() const;
-diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
-index 6e82b97..c7cb580 100644
---- a/sw/source/filter/ww8/ww8par.cxx
-+++ b/sw/source/filter/ww8/ww8par.cxx
-@@ -1598,7 +1598,6 @@ WW8ReaderSave::WW8ReaderSave(SwWW8ImplReader* pRdr ,WW8_CP nStartCp) :
-     maOldApos.push_back(false);
-     maOldApos.swap(pRdr->maApos);
-     maOldFieldStack.swap(pRdr->maFieldStack);
--    maFieldCtxStack.swap(pRdr->maNewFieldCtxStack);
- }
- 
- void WW8ReaderSave::Restore( SwWW8ImplReader* pRdr )
-@@ -1645,7 +1644,6 @@ void WW8ReaderSave::Restore( SwWW8ImplReader* pRdr )
-         pRdr->pPlcxMan->RestoreAllPLCFx(maPLCFxSave);
-     pRdr->maApos.swap(maOldApos);
-     pRdr->maFieldStack.swap(maOldFieldStack);
--    pRdr->maNewFieldCtxStack.swap(maFieldCtxStack);
- }
- 
- void SwWW8ImplReader::Read_HdFtFtnText( const SwNodeIndex* pSttIdx,
-@@ -2762,29 +2760,6 @@ bool SwWW8ImplReader::ReadChar(long nPosCp, long nCpOfs)
-         case 0x15:

... etc. - the rest is truncated


More information about the ooo-build-commit mailing list