Conflicts: starmath/inc/applicat.hxx starmath/inc/dialog.hxx starmath/inc/document.hxx starmath/inc/edit.hxx starmath/inc/format.hxx starmath/inc/node.hxx starmath/inc/parse.hxx starmath/inc/rect.hxx starmath/inc/smdll.hxx starmath/inc/smmod.hxx starmath/inc/starmath.hrc starmath/inc/symbol.hxx starmath/inc/toolbox.hxx starmath/inc/utility.hxx starmath/inc/view.hxx starmath/prj/build.lst starmath/qa/cppunit/version.map starmath/sdi/smslots.sdi starmath/source/accessibility.cxx starmath/source/cfgitem.cxx starmath/source/cfgitem.hxx starmath/source/config.cxx starmath/source/dialog.cxx starmath/source/document.cxx starmath/source/edit.cxx starmath/source/format.cxx starmath/source/makefile.mk starmath/source/math_pch.cxx starmath/source/mathmlexport.cxx starmath/source/mathmlimport.cxx starmath/source/mathtype.cxx starmath/source/node.cxx starmath/source/parse.cxx starmath/source/rect.cxx starmath/source/register.cxx starmath/source/smdetect.cxx starmath/source/smdll.cxx starmath/source/smmod.cxx starmath/source/smres.src starmath/source/symbol.cxx starmath/source/toolbox.cxx starmath/source/unomodel.cxx starmath/source/utility.cxx starmath/source/view.cxx sw/JunitTest_sw_unoapi.mk sw/Library_swd.mk sw/Makefile sw/inc/IDocumentFieldsAccess.hxx sw/inc/IDocumentSettingAccess.hxx sw/inc/IDocumentUndoRedo.hxx sw/inc/IShellCursorSupplier.hxx sw/inc/SwUndoField.hxx sw/inc/acmplwrd.hxx sw/inc/authfld.hxx sw/inc/bparr.hxx sw/inc/calbck.hxx sw/inc/calc.hxx sw/inc/ccoll.hxx sw/inc/cellatr.hxx sw/inc/cellfml.hxx sw/inc/chpfld.hxx sw/inc/cmdid.h sw/inc/crsrsh.hxx sw/inc/crstate.hxx sw/inc/dbfld.hxx sw/inc/dbmgr.hxx sw/inc/dcontact.hxx sw/inc/ddefld.hxx sw/inc/doc.hxx sw/inc/docary.hxx sw/inc/docsh.hxx sw/inc/docstat.hxx sw/inc/docstyle.hxx sw/inc/docufld.hxx sw/inc/editsh.hxx sw/inc/errhdl.hxx sw/inc/expfld.hxx sw/inc/fchrfmt.hxx sw/inc/fesh.hxx sw/inc/fldbas.hxx sw/inc/flddat.hxx sw/inc/flddropdown.hxx sw/inc/flypos.hxx sw/inc/fmtanchr.hxx sw/inc/fmtautofmt.hxx sw/inc/fmtclds.hxx sw/inc/fmtcnct.hxx sw/inc/fmtcol.hxx sw/inc/fmtfsize.hxx sw/inc/fmtftn.hxx sw/inc/fmtftntx.hxx sw/inc/fmthdft.hxx sw/inc/fmtinfmt.hxx sw/inc/fmtline.hxx sw/inc/fmtornt.hxx sw/inc/fmtpdsc.hxx sw/inc/fmtruby.hxx sw/inc/fmtsrnd.hxx sw/inc/fmturl.hxx sw/inc/fmtwrapinfluenceonobjpos.hxx sw/inc/format.hxx sw/inc/frmatr.hxx sw/inc/frmfmt.hxx sw/inc/grfatr.hxx sw/inc/helpid.h sw/inc/hintids.hxx sw/inc/hints.hxx sw/inc/htmltbl.hxx sw/inc/inetfld.hxx sw/inc/io.hxx sw/inc/iodetect.hxx sw/inc/itabenum.hxx sw/inc/ndarr.hxx sw/inc/ndgrf.hxx sw/inc/ndindex.hxx sw/inc/ndnotxt.hxx sw/inc/ndole.hxx sw/inc/ndtxt.hxx sw/inc/ndtyp.hxx sw/inc/node.hxx sw/inc/numrule.hxx sw/inc/pagedesc.hxx sw/inc/pagepreviewlayout.hxx sw/inc/pam.hxx sw/inc/paratr.hxx sw/inc/poolfmt.awk sw/inc/poolfmt.hxx sw/inc/printdata.hxx sw/inc/reffld.hxx sw/inc/shellio.hxx sw/inc/shellres.hxx sw/inc/swabstdlg.hxx sw/inc/swatrset.hxx sw/inc/swerror.h sw/inc/swprtopt.hxx sw/inc/swtable.hxx sw/inc/swtypes.hxx sw/inc/tblafmt.hxx sw/inc/tgrditem.hxx sw/inc/tox.hxx sw/inc/undobj.hxx sw/inc/unocoll.hxx sw/inc/unoframe.hxx sw/inc/unoprnms.hxx sw/inc/usrfld.hxx sw/inc/viewopt.hxx sw/inc/viewsh.hxx sw/inc/viscrs.hxx sw/prj/build.lst sw/qa/complex/accessibility/makefile.mk sw/qa/core/Test-BigPtrArray.cxx sw/qa/core/makefile.mk sw/sdi/makefile.mk sw/source/core/access/makefile.mk sw/source/core/access/textmarkuphelper.cxx sw/source/core/attr/calbck.cxx sw/source/core/attr/cellatr.cxx sw/source/core/attr/fmtwrapinfluenceonobjpos.cxx sw/source/core/attr/format.cxx sw/source/core/attr/hints.cxx sw/source/core/bastyp/calc.cxx sw/source/core/bastyp/init.cxx sw/source/core/bastyp/makefile.mk sw/source/core/bastyp/swcache.cxx sw/source/core/crsr/bookmrk.cxx sw/source/core/crsr/callnk.cxx sw/source/core/crsr/crsrsh.cxx sw/source/core/crsr/crstrvl.cxx sw/source/core/crsr/findattr.cxx sw/source/core/crsr/findcoll.cxx sw/source/core/crsr/makefile.mk sw/source/core/crsr/pam.cxx sw/source/core/crsr/swcrsr.cxx sw/source/core/crsr/trvltbl.cxx sw/source/core/crsr/unocrsr.cxx sw/source/core/crsr/viscrs.cxx sw/source/core/doc/acmplwrd.cxx sw/source/core/doc/doc.cxx sw/source/core/doc/docbm.cxx sw/source/core/doc/doccomp.cxx sw/source/core/doc/docdesc.cxx sw/source/core/doc/docdraw.cxx sw/source/core/doc/docedt.cxx sw/source/core/doc/docfld.cxx sw/source/core/doc/docfly.cxx sw/source/core/doc/docfmt.cxx sw/source/core/doc/docftn.cxx sw/source/core/doc/docglbl.cxx sw/source/core/doc/docglos.cxx sw/source/core/doc/doclay.cxx sw/source/core/doc/docnew.cxx sw/source/core/doc/docnum.cxx sw/source/core/doc/docredln.cxx sw/source/core/doc/docruby.cxx sw/source/core/doc/docsort.cxx sw/source/core/doc/docstat.cxx sw/source/core/doc/doctxm.cxx sw/source/core/doc/fmtcol.cxx sw/source/core/doc/gctable.cxx sw/source/core/doc/htmltbl.cxx sw/source/core/doc/makefile.mk sw/source/core/doc/number.cxx sw/source/core/doc/poolfmt.cxx sw/source/core/doc/tblafmt.cxx sw/source/core/doc/tblcpy.cxx sw/source/core/doc/tblrwcl.cxx sw/source/core/docnode/makefile.mk sw/source/core/docnode/ndcopy.cxx sw/source/core/docnode/ndnum.cxx sw/source/core/docnode/ndsect.cxx sw/source/core/docnode/ndtbl.cxx sw/source/core/docnode/ndtbl1.cxx sw/source/core/docnode/node.cxx sw/source/core/docnode/node2lay.cxx sw/source/core/docnode/nodes.cxx sw/source/core/docnode/section.cxx sw/source/core/docnode/swbaslnk.cxx sw/source/core/draw/dcontact.cxx sw/source/core/draw/dflyobj.cxx sw/source/core/draw/drawdoc.cxx sw/source/core/draw/dview.cxx sw/source/core/draw/makefile.mk sw/source/core/edit/autofmt.cxx sw/source/core/edit/edattr.cxx sw/source/core/edit/eddel.cxx sw/source/core/edit/edfcol.cxx sw/source/core/edit/edfld.cxx sw/source/core/edit/edfldexp.cxx sw/source/core/edit/edfmt.cxx sw/source/core/edit/edglss.cxx sw/source/core/edit/editsh.cxx sw/source/core/edit/edlingu.cxx sw/source/core/edit/ednumber.cxx sw/source/core/edit/edsect.cxx sw/source/core/edit/edtab.cxx sw/source/core/edit/edtox.cxx sw/source/core/edit/edundo.cxx sw/source/core/edit/makefile.mk sw/source/core/except/dbgloop.cxx sw/source/core/except/errhdl.cxx sw/source/core/fields/authfld.cxx sw/source/core/fields/cellfml.cxx sw/source/core/fields/chpfld.cxx sw/source/core/fields/dbfld.cxx sw/source/core/fields/ddefld.cxx sw/source/core/fields/ddetbl.cxx sw/source/core/fields/docufld.cxx sw/source/core/fields/expfld.cxx sw/source/core/fields/fldbas.cxx sw/source/core/fields/flddat.cxx sw/source/core/fields/flddropdown.cxx sw/source/core/fields/macrofld.cxx sw/source/core/fields/makefile.mk sw/source/core/fields/reffld.cxx sw/source/core/fields/scrptfld.cxx sw/source/core/fields/tblcalc.cxx sw/source/core/fields/usrfld.cxx sw/source/core/frmedt/fecopy.cxx sw/source/core/frmedt/fedesc.cxx sw/source/core/frmedt/fefly1.cxx sw/source/core/frmedt/feshview.cxx sw/source/core/frmedt/fetab.cxx sw/source/core/frmedt/fews.cxx sw/source/core/frmedt/makefile.mk sw/source/core/frmedt/tblsel.cxx sw/source/core/graphic/grfatr.cxx sw/source/core/inc/SwUndoFmt.hxx sw/source/core/inc/SwUndoTOXChange.hxx sw/source/core/inc/anchoredobjectposition.hxx sw/source/core/inc/dbgloop.hxx sw/source/core/inc/drawfont.hxx sw/source/core/inc/flowfrm.hxx sw/source/core/inc/frame.hxx sw/source/core/inc/frmtool.hxx sw/source/core/inc/layact.hxx sw/source/core/inc/layfrm.hxx sw/source/core/inc/notxtfrm.hxx sw/source/core/inc/rolbck.hxx sw/source/core/inc/rootfrm.hxx sw/source/core/inc/scriptinfo.hxx sw/source/core/inc/swblocks.hxx sw/source/core/inc/swcache.hxx sw/source/core/inc/tabfrm.hxx sw/source/core/inc/txmsrt.hxx sw/source/core/inc/undoflystrattr.hxx sw/source/core/inc/viewimp.hxx sw/source/core/layout/atrfrm.cxx sw/source/core/layout/calcmove.cxx sw/source/core/layout/dbg_lay.cxx sw/source/core/layout/findfrm.cxx sw/source/core/layout/flowfrm.cxx sw/source/core/layout/fly.cxx sw/source/core/layout/flycnt.cxx sw/source/core/layout/flyincnt.cxx sw/source/core/layout/flylay.cxx sw/source/core/layout/frmtool.cxx sw/source/core/layout/ftnfrm.cxx sw/source/core/layout/layact.cxx sw/source/core/layout/laycache.cxx sw/source/core/layout/makefile.mk sw/source/core/layout/objectformatter.cxx sw/source/core/layout/pagechg.cxx sw/source/core/layout/pagedesc.cxx sw/source/core/layout/paintfrm.cxx sw/source/core/layout/sectfrm.cxx sw/source/core/layout/tabfrm.cxx sw/source/core/layout/trvlfrm.cxx sw/source/core/layout/unusedf.cxx sw/source/core/layout/wsfrm.cxx sw/source/core/makefile.mk sw/source/core/objectpositioning/anchoredobjectposition.cxx sw/source/core/objectpositioning/ascharanchoredobjectposition.cxx sw/source/core/objectpositioning/makefile.mk sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx sw/source/core/objectpositioning/tolayoutanchoredobjectposition.cxx sw/source/core/ole/ndole.cxx sw/source/core/para/makefile.mk sw/source/core/para/paratr.cxx sw/source/core/sw3io/makefile.mk sw/source/core/sw3io/sw3convert.cxx sw/source/core/swg/SwXMLTextBlocks.cxx sw/source/core/swg/makefile.mk sw/source/core/swg/swblocks.cxx sw/source/core/table/swnewtable.cxx sw/source/core/table/swtable.cxx sw/source/core/text/EnhancedPDFExportHelper.cxx sw/source/core/text/atrstck.cxx sw/source/core/text/frmcrsr.cxx sw/source/core/text/frmform.cxx sw/source/core/text/itrcrsr.cxx sw/source/core/text/itrform2.cxx sw/source/core/text/makefile.mk sw/source/core/text/porlay.cxx sw/source/core/text/pormulti.cxx sw/source/core/text/txtfld.cxx sw/source/core/text/txtfrm.cxx sw/source/core/text/txtio.cxx sw/source/core/tox/makefile.mk sw/source/core/tox/txmsrt.cxx sw/source/core/txtnode/fmtatr2.cxx sw/source/core/txtnode/fntcache.cxx sw/source/core/txtnode/fntcap.cxx sw/source/core/txtnode/makefile.mk sw/source/core/txtnode/ndhints.cxx sw/source/core/txtnode/ndtxt.cxx sw/source/core/txtnode/swfont.cxx sw/source/core/txtnode/thints.cxx sw/source/core/txtnode/txtatr2.cxx sw/source/core/txtnode/txtedt.cxx sw/source/core/undo/SwUndoField.cxx sw/source/core/undo/SwUndoPageDesc.cxx sw/source/core/undo/SwUndoTOXChange.cxx sw/source/core/undo/docundo.cxx sw/source/core/undo/makefile.mk sw/source/core/undo/rolbck.cxx sw/source/core/undo/unbkmk.cxx sw/source/core/undo/undel.cxx sw/source/core/undo/undobj.cxx sw/source/core/undo/undobj1.cxx sw/source/core/undo/unfmco.cxx sw/source/core/undo/unins.cxx sw/source/core/undo/unnum.cxx sw/source/core/undo/unoutl.cxx sw/source/core/undo/unredln.cxx sw/source/core/undo/unsect.cxx sw/source/core/undo/unsort.cxx sw/source/core/undo/unspnd.cxx sw/source/core/undo/untbl.cxx sw/source/core/unocore/makefile.mk sw/source/core/unocore/swunohelper.cxx sw/source/core/unocore/unobkm.cxx sw/source/core/unocore/unocoll.cxx sw/source/core/unocore/unocrsrhelper.cxx sw/source/core/unocore/unodraw.cxx sw/source/core/unocore/unofield.cxx sw/source/core/unocore/unoframe.cxx sw/source/core/unocore/unomap.cxx sw/source/core/unocore/unoprnms.cxx sw/source/core/unocore/unoredlines.cxx sw/source/core/unocore/unosett.cxx sw/source/core/unocore/unosrch.cxx sw/source/core/unocore/unostyle.cxx sw/source/core/unocore/unotbl.cxx sw/source/core/view/vdraw.cxx sw/source/core/view/viewimp.cxx sw/source/core/view/viewpg.cxx sw/source/core/view/viewsh.cxx sw/source/core/view/vnew.cxx sw/source/core/view/vprint.cxx sw/source/filter/ascii/ascatr.cxx sw/source/filter/ascii/makefile.mk sw/source/filter/ascii/wrtasc.cxx sw/source/filter/basflt/fltini.cxx sw/source/filter/basflt/iodetect.cxx sw/source/filter/basflt/makefile.mk sw/source/filter/html/SwAppletImpl.cxx sw/source/filter/html/css1atr.cxx sw/source/filter/html/htmlatr.cxx sw/source/filter/html/htmlbas.cxx sw/source/filter/html/htmlcss1.cxx sw/source/filter/html/htmlfly.cxx sw/source/filter/html/htmlftn.cxx sw/source/filter/html/htmlgrin.cxx sw/source/filter/html/htmlnum.cxx sw/source/filter/html/htmlplug.cxx sw/source/filter/html/htmltab.cxx sw/source/filter/html/makefile.mk sw/source/filter/html/parcss1.cxx sw/source/filter/html/svxcss1.cxx sw/source/filter/html/swhtml.cxx sw/source/filter/inc/msfilter.hxx sw/source/filter/inc/wrtswtbl.hxx sw/source/filter/rtf/makefile.mk sw/source/filter/rtf/rtffly.cxx sw/source/filter/rtf/rtfnum.cxx sw/source/filter/rtf/rtftbl.cxx sw/source/filter/rtf/swparrtf.cxx sw/source/filter/rtf/swparrtf.hxx sw/source/filter/writer/makefile.mk sw/source/filter/writer/writer.cxx sw/source/filter/writer/wrt_fn.cxx sw/source/filter/writer/wrtswtbl.cxx sw/source/filter/ww1/fltshell.cxx sw/source/filter/ww1/makefile.mk sw/source/filter/ww1/w1class.cxx sw/source/filter/ww1/w1class.hxx sw/source/filter/ww1/w1filter.cxx sw/source/filter/ww1/w1par.cxx sw/source/filter/ww1/w1sprm.cxx sw/source/filter/ww1/w1struct.hxx sw/source/filter/ww8/README-rtf.txt sw/source/filter/ww8/attributeoutputbase.hxx sw/source/filter/ww8/docxattributeoutput.cxx sw/source/filter/ww8/docxattributeoutput.hxx sw/source/filter/ww8/docxexport.cxx sw/source/filter/ww8/docxexport.hxx sw/source/filter/ww8/docxexportfilter.cxx sw/source/filter/ww8/dump/dump8.cxx sw/source/filter/ww8/dump/dump8a.cxx sw/source/filter/ww8/dump/msvbasic.cxx sw/source/filter/ww8/dump/msvbasic.hxx sw/source/filter/ww8/dump/ww8darr.cxx sw/source/filter/ww8/dump/ww8darr.hxx sw/source/filter/ww8/dump/ww8dout.cxx sw/source/filter/ww8/dump/ww8dout.hxx sw/source/filter/ww8/dump/ww8scan.cxx sw/source/filter/ww8/dump/ww8scan.hxx sw/source/filter/ww8/dump/ww8struc.hxx sw/source/filter/ww8/makefile.mk sw/source/filter/ww8/rtfattributeoutput.cxx sw/source/filter/ww8/rtfattributeoutput.hxx sw/source/filter/ww8/rtfexport.cxx sw/source/filter/ww8/rtfexport.hxx sw/source/filter/ww8/rtfexportfilter.cxx sw/source/filter/ww8/rtfexportfilter.hxx sw/source/filter/ww8/rtfimportfilter.cxx sw/source/filter/ww8/rtfimportfilter.hxx sw/source/filter/ww8/rtfsdrexport.cxx sw/source/filter/ww8/rtfsdrexport.hxx sw/source/filter/ww8/writerhelper.cxx sw/source/filter/ww8/writerwordglue.cxx sw/source/filter/ww8/wrtw8esh.cxx sw/source/filter/ww8/wrtw8nds.cxx sw/source/filter/ww8/wrtw8num.cxx sw/source/filter/ww8/wrtw8sty.cxx sw/source/filter/ww8/wrtww8.cxx sw/source/filter/ww8/wrtww8.hxx sw/source/filter/ww8/wrtww8gr.cxx sw/source/filter/ww8/ww8atr.cxx sw/source/filter/ww8/ww8attributeoutput.hxx sw/source/filter/ww8/ww8graf.cxx sw/source/filter/ww8/ww8graf.hxx sw/source/filter/ww8/ww8graf2.cxx sw/source/filter/ww8/ww8par.cxx sw/source/filter/ww8/ww8par.hxx sw/source/filter/ww8/ww8par2.cxx sw/source/filter/ww8/ww8par3.cxx sw/source/filter/ww8/ww8par5.cxx sw/source/filter/ww8/ww8par6.cxx sw/source/filter/ww8/ww8scan.cxx sw/source/filter/ww8/ww8scan.hxx sw/source/filter/ww8/ww8struc.hxx sw/source/filter/xml/makefile.mk sw/source/filter/xml/xmlimpit.cxx sw/source/filter/xml/xmltble.cxx sw/source/filter/xml/xmltbli.cxx sw/source/ui/app/appenv.cxx sw/source/ui/app/apphdl.cxx sw/source/ui/app/applab.cxx sw/source/ui/app/appopt.cxx sw/source/ui/app/docsh.cxx sw/source/ui/app/docsh2.cxx sw/source/ui/app/docshini.cxx sw/source/ui/app/docst.cxx sw/source/ui/app/docstyle.cxx sw/source/ui/app/makefile.mk sw/source/ui/app/mn.src sw/source/ui/app/swmodul1.cxx sw/source/ui/cctrl/makefile.mk sw/source/ui/cctrl/swlbox.cxx sw/source/ui/chrdlg/break.cxx sw/source/ui/chrdlg/ccoll.cxx sw/source/ui/chrdlg/chardlg.cxx sw/source/ui/chrdlg/drpcps.cxx sw/source/ui/chrdlg/makefile.mk sw/source/ui/chrdlg/numpara.cxx sw/source/ui/chrdlg/pardlg.cxx sw/source/ui/chrdlg/swuiccoll.cxx sw/source/ui/config/barcfg.cxx sw/source/ui/config/caption.cxx sw/source/ui/config/cfgitems.cxx sw/source/ui/config/fontcfg.cxx sw/source/ui/config/mailconfigpage.cxx sw/source/ui/config/makefile.mk sw/source/ui/config/modcfg.cxx sw/source/ui/config/optcomp.cxx sw/source/ui/config/optload.cxx sw/source/ui/config/optpage.cxx sw/source/ui/config/prtopt.cxx sw/source/ui/config/uinums.cxx sw/source/ui/config/usrpref.cxx sw/source/ui/config/viewopt.cxx sw/source/ui/dbui/dbinsdlg.cxx sw/source/ui/dbui/dbmgr.cxx sw/source/ui/dbui/dbtree.cxx sw/source/ui/dbui/makefile.mk sw/source/ui/dbui/mmaddressblockpage.cxx sw/source/ui/dbui/mmdocselectpage.cxx sw/source/ui/dbui/mmoutputpage.cxx sw/source/ui/dbui/swdbtoolsclient.cxx sw/source/ui/dialog/abstract.cxx sw/source/ui/dialog/ascfldlg.cxx sw/source/ui/dialog/macassgn.cxx sw/source/ui/dialog/makefile.mk sw/source/ui/dialog/regionsw.cxx sw/source/ui/dialog/swdlgfact.cxx sw/source/ui/dialog/swdlgfact.hxx sw/source/ui/dialog/uiregionsw.cxx sw/source/ui/dochdl/gloshdl.cxx sw/source/ui/dochdl/makefile.mk sw/source/ui/dochdl/swdtflvr.cxx sw/source/ui/docvw/PostItMgr.cxx sw/source/ui/docvw/SidebarWin.cxx sw/source/ui/docvw/edtdd.cxx sw/source/ui/docvw/edtwin.cxx sw/source/ui/docvw/edtwin2.cxx sw/source/ui/docvw/edtwin3.cxx sw/source/ui/docvw/makefile.mk sw/source/ui/docvw/romenu.cxx sw/source/ui/docvw/romenu.hxx sw/source/ui/docvw/srcedtw.cxx sw/source/ui/envelp/envfmt.cxx sw/source/ui/envelp/envimg.cxx sw/source/ui/envelp/envlop1.cxx sw/source/ui/envelp/envprt.cxx sw/source/ui/envelp/label1.cxx sw/source/ui/envelp/labfmt.cxx sw/source/ui/envelp/labprt.cxx sw/source/ui/envelp/mailmrge.cxx sw/source/ui/envelp/makefile.mk sw/source/ui/fldui/flddb.cxx sw/source/ui/fldui/flddinf.cxx sw/source/ui/fldui/flddok.cxx sw/source/ui/fldui/fldedt.cxx sw/source/ui/fldui/fldfunc.cxx sw/source/ui/fldui/fldmgr.cxx sw/source/ui/fldui/fldpage.cxx sw/source/ui/fldui/fldref.cxx sw/source/ui/fldui/fldtdlg.cxx sw/source/ui/fldui/fldvar.cxx sw/source/ui/fldui/fldwrap.cxx sw/source/ui/fldui/inpdlg.cxx sw/source/ui/fldui/makefile.mk sw/source/ui/fmtui/makefile.mk sw/source/ui/fmtui/tmpdlg.cxx sw/source/ui/frmdlg/colmgr.cxx sw/source/ui/frmdlg/column.cxx sw/source/ui/frmdlg/cption.cxx sw/source/ui/frmdlg/frmdlg.cxx sw/source/ui/frmdlg/frmmgr.cxx sw/source/ui/frmdlg/frmpage.cxx sw/source/ui/frmdlg/makefile.mk sw/source/ui/frmdlg/wrap.cxx sw/source/ui/globdoc/makefile.mk sw/source/ui/inc/bmpwin.hxx sw/source/ui/inc/colmgr.hxx sw/source/ui/inc/column.hxx sw/source/ui/inc/envimg.hxx sw/source/ui/inc/envlop.hxx sw/source/ui/inc/frmpage.hxx sw/source/ui/inc/inputwin.hxx sw/source/ui/inc/javaedit.hxx sw/source/ui/inc/num.hxx sw/source/ui/inc/optpage.hxx sw/source/ui/inc/regionsw.hxx sw/source/ui/inc/split.hxx sw/source/ui/inc/swlbox.hxx sw/source/ui/inc/swmn_tmpl.hrc sw/source/ui/inc/swuiidxmrk.hxx sw/source/ui/inc/tabsh.hxx sw/source/ui/inc/toxmgr.hxx sw/source/ui/inc/uiitems.hxx sw/source/ui/inc/view.hxx sw/source/ui/inc/workctrl.hxx sw/source/ui/inc/wrap.hxx sw/source/ui/inc/wrtsh.hxx sw/source/ui/index/cnttab.cxx sw/source/ui/index/makefile.mk sw/source/ui/index/toxmgr.cxx sw/source/ui/lingu/hhcwrp.cxx sw/source/ui/lingu/makefile.mk sw/source/ui/lingu/olmenu.cxx sw/source/ui/misc/bookmark.cxx sw/source/ui/misc/docfnote.cxx sw/source/ui/misc/glosbib.cxx sw/source/ui/misc/glosdoc.cxx sw/source/ui/misc/glshell.cxx sw/source/ui/misc/insfnote.cxx sw/source/ui/misc/linenum.cxx sw/source/ui/misc/makefile.mk sw/source/ui/misc/num.cxx sw/source/ui/misc/numberingtypelistbox.cxx sw/source/ui/misc/outline.cxx sw/source/ui/misc/pgfnote.cxx sw/source/ui/misc/pggrid.cxx sw/source/ui/misc/redlndlg.cxx sw/source/ui/misc/srtdlg.cxx sw/source/ui/misc/swmodalredlineacceptdlg.cxx sw/source/ui/ribbar/conarc.cxx sw/source/ui/ribbar/drawbase.cxx sw/source/ui/ribbar/inputwin.cxx sw/source/ui/ribbar/inputwin.src sw/source/ui/ribbar/makefile.mk sw/source/ui/ribbar/tbxanchr.cxx sw/source/ui/ribbar/workctrl.cxx sw/source/ui/ribbar/workctrl.src sw/source/ui/shells/annotsh.cxx sw/source/ui/shells/basesh.cxx sw/source/ui/shells/beziersh.cxx sw/source/ui/shells/drawdlg.cxx sw/source/ui/shells/drwbassh.cxx sw/source/ui/shells/drwtxtex.cxx sw/source/ui/shells/drwtxtsh.cxx sw/source/ui/shells/frmsh.cxx sw/source/ui/shells/grfsh.cxx sw/source/ui/shells/grfshex.cxx sw/source/ui/shells/makefile.mk sw/source/ui/shells/tabsh.cxx sw/source/ui/shells/textfld.cxx sw/source/ui/shells/textglos.cxx sw/source/ui/shells/textsh.cxx sw/source/ui/shells/textsh1.cxx sw/source/ui/shells/txtattr.cxx sw/source/ui/shells/txtcrsr.cxx sw/source/ui/shells/txtnum.cxx sw/source/ui/table/convert.cxx sw/source/ui/table/instable.cxx sw/source/ui/table/makefile.mk sw/source/ui/table/swtablerep.cxx sw/source/ui/table/tabledlg.cxx sw/source/ui/table/tablemgr.cxx sw/source/ui/table/tablepg.hxx sw/source/ui/table/tautofmt.cxx sw/source/ui/uiview/formatclipboard.cxx sw/source/ui/uiview/makefile.mk sw/source/ui/uiview/pview.cxx sw/source/ui/uiview/pview.src sw/source/ui/uiview/scroll.cxx sw/source/ui/uiview/srcview.cxx sw/source/ui/uiview/swcli.cxx sw/source/ui/uiview/uivwimp.cxx sw/source/ui/uiview/view.cxx sw/source/ui/uiview/view1.cxx sw/source/ui/uiview/view2.cxx sw/source/ui/uiview/viewcoll.cxx sw/source/ui/uiview/viewdlg2.cxx sw/source/ui/uiview/viewling.cxx sw/source/ui/uiview/viewmdi.cxx sw/source/ui/uiview/viewport.cxx sw/source/ui/uiview/viewprt.cxx sw/source/ui/uiview/viewsrch.cxx sw/source/ui/uiview/viewtab.cxx sw/source/ui/uno/SwXDocumentSettings.cxx sw/source/ui/uno/SwXPrintPreviewSettings.cxx sw/source/ui/uno/SwXPrintPreviewSettings.hxx sw/source/ui/uno/unoatxt.cxx sw/source/ui/uno/unomod.cxx sw/source/ui/uno/unotxdoc.cxx sw/source/ui/uno/unotxvw.cxx sw/source/ui/utlui/attrdesc.cxx sw/source/ui/utlui/content.cxx sw/source/ui/utlui/glbltree.cxx sw/source/ui/utlui/initui.cxx sw/source/ui/utlui/makefile.mk sw/source/ui/utlui/navipi.cxx sw/source/ui/utlui/navipi.src sw/source/ui/utlui/numfmtlb.cxx sw/source/ui/utlui/prcntfld.cxx sw/source/ui/utlui/uiitems.cxx sw/source/ui/utlui/uitool.cxx sw/source/ui/utlui/unotools.cxx sw/source/ui/utlui/viewlayoutctrl.cxx sw/source/ui/utlui/zoomctrl.cxx sw/source/ui/vba/makefile.mk sw/source/ui/vba/service.cxx sw/source/ui/web/makefile.mk sw/source/ui/wrtsh/makefile.mk sw/source/ui/wrtsh/wrtsh1.cxx sw/source/ui/wrtsh/wrtsh2.cxx sw/source/ui/wrtsh/wrtsh4.cxx sw/source/ui/wrtsh/wrtundo.cxx sw/util/hidother.src sw/util/makefile.mk sw/util/msword.map
1517 lines
44 KiB
C++
1517 lines
44 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||
/*************************************************************************
|
||
*
|
||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||
*
|
||
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
||
*
|
||
* OpenOffice.org - a multi-platform office productivity suite
|
||
*
|
||
* 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.
|
||
*
|
||
************************************************************************/
|
||
|
||
// MARKER(update_precomp.py): autogen include statement, do not remove
|
||
#include "precompiled_sw.hxx"
|
||
|
||
#include <rolbck.hxx>
|
||
|
||
#include <tools/resid.hxx>
|
||
|
||
#include <svl/itemiter.hxx>
|
||
|
||
#include <editeng/brkitem.hxx>
|
||
|
||
#include <hints.hxx>
|
||
#include <hintids.hxx>
|
||
#include <fmtftn.hxx>
|
||
#include <fchrfmt.hxx>
|
||
#include <fmtflcnt.hxx>
|
||
#include <fmtrfmrk.hxx>
|
||
#include <fmtfld.hxx>
|
||
#include <fmtpdsc.hxx>
|
||
#include <txtfld.hxx>
|
||
#include <txtrfmrk.hxx>
|
||
#include <txttxmrk.hxx>
|
||
#include <txtftn.hxx>
|
||
#include <txtflcnt.hxx>
|
||
#include <fmtanchr.hxx>
|
||
#include <fmtcnct.hxx>
|
||
#include <frmfmt.hxx>
|
||
#include <ftnidx.hxx>
|
||
#include <doc.hxx> // SwDoc.GetNodes()
|
||
#include <IDocumentUndoRedo.hxx>
|
||
#include <docary.hxx>
|
||
#include <ndtxt.hxx> // SwTxtNode
|
||
#include <paratr.hxx> //
|
||
#include <cellatr.hxx> //
|
||
#include <fldbas.hxx> // fuer Felder
|
||
#include <pam.hxx> // fuer SwPaM
|
||
#include <swtable.hxx>
|
||
#include <ndgrf.hxx> // SwGrfNode
|
||
#include <UndoCore.hxx>
|
||
#include <IMark.hxx> // fuer SwBookmark
|
||
#include <charfmt.hxx> // #i27615#
|
||
#include <comcore.hrc>
|
||
#include <undo.hrc>
|
||
#include <bookmrk.hxx>
|
||
|
||
SV_IMPL_PTRARR( SwpHstry, SwHistoryHintPtr)
|
||
|
||
String SwHistoryHint::GetDescription() const
|
||
{
|
||
return String();
|
||
}
|
||
|
||
|
||
SwHistorySetFmt::SwHistorySetFmt( const SfxPoolItem* pFmtHt, sal_uLong nNd )
|
||
: SwHistoryHint( HSTRY_SETFMTHNT )
|
||
, m_pAttr( pFmtHt->Clone() )
|
||
, m_nNodeIndex( nNd )
|
||
{
|
||
switch ( m_pAttr->Which() )
|
||
{
|
||
case RES_PAGEDESC:
|
||
static_cast<SwFmtPageDesc&>(*m_pAttr).ChgDefinedIn( 0 );
|
||
break;
|
||
case RES_PARATR_DROP:
|
||
static_cast<SwFmtDrop&>(*m_pAttr).ChgDefinedIn( 0 );
|
||
break;
|
||
case RES_BOXATR_FORMULA:
|
||
{
|
||
//JP 30.07.98: Bug 54295 - Formeln immer im Klartext speichern
|
||
SwTblBoxFormula& rNew = static_cast<SwTblBoxFormula&>(*m_pAttr);
|
||
if ( rNew.IsIntrnlName() )
|
||
{
|
||
const SwTblBoxFormula& rOld =
|
||
*static_cast<const SwTblBoxFormula*>(pFmtHt);
|
||
const SwNode* pNd = rOld.GetNodeOfFormula();
|
||
if ( pNd )
|
||
{
|
||
const SwTableNode* pTableNode = pNd->FindTableNode();
|
||
if (pTableNode)
|
||
{
|
||
SwTableFmlUpdate aMsgHnt( &pTableNode->GetTable() );
|
||
aMsgHnt.eFlags = TBL_BOXNAME;
|
||
rNew.ChgDefinedIn( rOld.GetDefinedIn() );
|
||
rNew.ChangeState( &aMsgHnt );
|
||
}
|
||
}
|
||
}
|
||
rNew.ChgDefinedIn( 0 );
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
String SwHistorySetFmt::GetDescription() const
|
||
{
|
||
String aResult ;
|
||
|
||
sal_uInt16 nWhich = m_pAttr->Which();
|
||
switch (nWhich)
|
||
{
|
||
case RES_BREAK:
|
||
switch ((static_cast<SvxFmtBreakItem &>(*m_pAttr)).GetBreak())
|
||
{
|
||
case SVX_BREAK_PAGE_BEFORE:
|
||
case SVX_BREAK_PAGE_AFTER:
|
||
case SVX_BREAK_PAGE_BOTH:
|
||
aResult = SW_RES(STR_UNDO_PAGEBREAKS);
|
||
|
||
break;
|
||
case SVX_BREAK_COLUMN_BEFORE:
|
||
case SVX_BREAK_COLUMN_AFTER:
|
||
case SVX_BREAK_COLUMN_BOTH:
|
||
aResult = SW_RES(STR_UNDO_COLBRKS);
|
||
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
return aResult;
|
||
}
|
||
|
||
void SwHistorySetFmt::SetInDoc( SwDoc* pDoc, bool bTmpSet )
|
||
{
|
||
SwNode * pNode = pDoc->GetNodes()[ m_nNodeIndex ];
|
||
if ( pNode->IsCntntNode() )
|
||
{
|
||
static_cast<SwCntntNode*>(pNode)->SetAttr( *m_pAttr );
|
||
}
|
||
else if ( pNode->IsTableNode() )
|
||
{
|
||
static_cast<SwTableNode*>(pNode)->GetTable().GetFrmFmt()->SetFmtAttr(
|
||
*m_pAttr );
|
||
}
|
||
else if ( pNode->IsStartNode() && (SwTableBoxStartNode ==
|
||
static_cast<SwStartNode*>(pNode)->GetStartNodeType()) )
|
||
{
|
||
SwTableNode* pTNd = pNode->FindTableNode();
|
||
if ( pTNd )
|
||
{
|
||
SwTableBox* pBox = pTNd->GetTable().GetTblBox( m_nNodeIndex );
|
||
if (pBox)
|
||
{
|
||
pBox->ClaimFrmFmt()->SetFmtAttr( *m_pAttr );
|
||
}
|
||
}
|
||
}
|
||
|
||
if ( !bTmpSet )
|
||
{
|
||
m_pAttr.reset();
|
||
}
|
||
}
|
||
|
||
SwHistorySetFmt::~SwHistorySetFmt()
|
||
{
|
||
}
|
||
|
||
|
||
SwHistoryResetFmt::SwHistoryResetFmt(const SfxPoolItem* pFmtHt, sal_uLong nNodeIdx)
|
||
: SwHistoryHint( HSTRY_RESETFMTHNT )
|
||
, m_nNodeIndex( nNodeIdx )
|
||
, m_nWhich( pFmtHt->Which() )
|
||
{
|
||
}
|
||
|
||
|
||
void SwHistoryResetFmt::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
SwNode * pNode = pDoc->GetNodes()[ m_nNodeIndex ];
|
||
if ( pNode->IsCntntNode() )
|
||
{
|
||
static_cast<SwCntntNode*>(pNode)->ResetAttr( m_nWhich );
|
||
}
|
||
else if ( pNode->IsTableNode() )
|
||
{
|
||
static_cast<SwTableNode*>(pNode)->GetTable().GetFrmFmt()->
|
||
ResetFmtAttr( m_nWhich );
|
||
}
|
||
}
|
||
|
||
|
||
SwHistorySetTxt::SwHistorySetTxt( SwTxtAttr* pTxtHt, sal_uLong nNodePos )
|
||
: SwHistoryHint( HSTRY_SETTXTHNT )
|
||
, m_nNodeIndex( nNodePos )
|
||
, m_nStart( *pTxtHt->GetStart() )
|
||
, m_nEnd( *pTxtHt->GetAnyEnd() )
|
||
{
|
||
// !! Achtung: folgende Attribute erzeugen keine FormatAttribute:
|
||
// - NoLineBreak, NoHypen, Inserted, Deleted
|
||
// Dafuer muessen Sonderbehandlungen gemacht werden !!!
|
||
|
||
// ein bisschen kompliziert, aber ist Ok so: erst vom default
|
||
// eine Kopie und dann die Werte aus dem Text Attribut zuweisen
|
||
sal_uInt16 nWhich = pTxtHt->Which();
|
||
if ( RES_TXTATR_CHARFMT == nWhich )
|
||
{
|
||
m_pAttr.reset( new SwFmtCharFmt( pTxtHt->GetCharFmt().GetCharFmt() ) );
|
||
}
|
||
else
|
||
{
|
||
m_pAttr.reset( pTxtHt->GetAttr().Clone() );
|
||
}
|
||
}
|
||
|
||
|
||
SwHistorySetTxt::~SwHistorySetTxt()
|
||
{
|
||
}
|
||
|
||
|
||
void SwHistorySetTxt::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
if ( !m_pAttr.get() )
|
||
return;
|
||
|
||
if ( RES_TXTATR_CHARFMT == m_pAttr->Which() )
|
||
{
|
||
// ask the Doc if the CharFmt still exists
|
||
if ( USHRT_MAX == pDoc->GetCharFmts()->GetPos(
|
||
(static_cast<SwFmtCharFmt&>(*m_pAttr)).GetCharFmt() ) )
|
||
return; // do not set, format does not exist
|
||
}
|
||
|
||
SwTxtNode * pTxtNd = pDoc->GetNodes()[ m_nNodeIndex ]->GetTxtNode();
|
||
OSL_ENSURE( pTxtNd, "SwHistorySetTxt::SetInDoc: not a TextNode" );
|
||
|
||
if ( pTxtNd )
|
||
{
|
||
pTxtNd->InsertItem( *m_pAttr, m_nStart, m_nEnd,
|
||
nsSetAttrMode::SETATTR_NOTXTATRCHR |
|
||
nsSetAttrMode::SETATTR_NOHINTADJUST );
|
||
}
|
||
}
|
||
|
||
|
||
SwHistorySetTxtFld::SwHistorySetTxtFld( SwTxtFld* pTxtFld, sal_uLong nNodePos )
|
||
: SwHistoryHint( HSTRY_SETTXTFLDHNT )
|
||
, m_pFldType( 0 )
|
||
, m_pFld( new SwFmtFld( *pTxtFld->GetFld().GetFld() ) )
|
||
{
|
||
// only copy if not Sys-FieldType
|
||
SwDoc* pDoc = pTxtFld->GetTxtNode().GetDoc();
|
||
|
||
m_nFldWhich = m_pFld->GetFld()->GetTyp()->Which();
|
||
if (m_nFldWhich == RES_DBFLD ||
|
||
m_nFldWhich == RES_USERFLD ||
|
||
m_nFldWhich == RES_SETEXPFLD ||
|
||
m_nFldWhich == RES_DDEFLD ||
|
||
!pDoc->GetSysFldType( m_nFldWhich ))
|
||
{
|
||
m_pFldType.reset( m_pFld->GetFld()->GetTyp()->Copy() );
|
||
m_pFld->GetFld()->ChgTyp( m_pFldType.get() ); // change field type
|
||
}
|
||
m_nNodeIndex = nNodePos;
|
||
m_nPos = *pTxtFld->GetStart();
|
||
}
|
||
|
||
String SwHistorySetTxtFld::GetDescription() const
|
||
{
|
||
return m_pFld->GetFld()->GetDescription();;
|
||
}
|
||
|
||
SwHistorySetTxtFld::~SwHistorySetTxtFld()
|
||
{
|
||
}
|
||
|
||
|
||
void SwHistorySetTxtFld::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
if ( !m_pFld.get() )
|
||
return;
|
||
|
||
SwFieldType* pNewFldType = m_pFldType.get();
|
||
if ( !pNewFldType )
|
||
{
|
||
pNewFldType = pDoc->GetSysFldType( m_nFldWhich );
|
||
}
|
||
else
|
||
{
|
||
// register type with the document
|
||
pNewFldType = pDoc->InsertFldType( *m_pFldType );
|
||
}
|
||
|
||
m_pFld->GetFld()->ChgTyp( pNewFldType ); // change field type
|
||
|
||
SwTxtNode * pTxtNd = pDoc->GetNodes()[ m_nNodeIndex ]->GetTxtNode();
|
||
OSL_ENSURE( pTxtNd, "SwHistorySetTxtFld: no TextNode" );
|
||
|
||
if ( pTxtNd )
|
||
{
|
||
pTxtNd->InsertItem( *m_pFld, m_nPos, m_nPos,
|
||
nsSetAttrMode::SETATTR_NOTXTATRCHR );
|
||
}
|
||
}
|
||
|
||
|
||
|
||
SwHistorySetRefMark::SwHistorySetRefMark( SwTxtRefMark* pTxtHt, sal_uLong nNodePos )
|
||
: SwHistoryHint( HSTRY_SETREFMARKHNT )
|
||
, m_RefName( pTxtHt->GetRefMark().GetRefName() )
|
||
, m_nNodeIndex( nNodePos )
|
||
, m_nStart( *pTxtHt->GetStart() )
|
||
, m_nEnd( *pTxtHt->GetAnyEnd() )
|
||
{
|
||
}
|
||
|
||
|
||
void SwHistorySetRefMark::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
SwTxtNode * pTxtNd = pDoc->GetNodes()[ m_nNodeIndex ]->GetTxtNode();
|
||
OSL_ENSURE( pTxtNd, "SwHistorySetRefMark: no TextNode" );
|
||
if ( !pTxtNd )
|
||
return;
|
||
|
||
SwFmtRefMark aRefMark( m_RefName );
|
||
|
||
// if a reference mark without an end already exists here: must not insert!
|
||
if ( m_nStart != m_nEnd ||
|
||
!pTxtNd->GetTxtAttrForCharAt( m_nStart, RES_TXTATR_REFMARK ) )
|
||
{
|
||
pTxtNd->InsertItem( aRefMark, m_nStart, m_nEnd,
|
||
nsSetAttrMode::SETATTR_NOTXTATRCHR );
|
||
}
|
||
}
|
||
|
||
|
||
SwHistorySetTOXMark::SwHistorySetTOXMark( SwTxtTOXMark* pTxtHt, sal_uLong nNodePos )
|
||
: SwHistoryHint( HSTRY_SETTOXMARKHNT )
|
||
, m_TOXMark( pTxtHt->GetTOXMark() )
|
||
, m_TOXName( m_TOXMark.GetTOXType()->GetTypeName() )
|
||
, m_eTOXTypes( m_TOXMark.GetTOXType()->GetType() )
|
||
, m_nNodeIndex( nNodePos )
|
||
, m_nStart( *pTxtHt->GetStart() )
|
||
, m_nEnd( *pTxtHt->GetAnyEnd() )
|
||
{
|
||
const_cast<SwModify*>(m_TOXMark.GetRegisteredIn())->Remove( &m_TOXMark );
|
||
}
|
||
|
||
|
||
void SwHistorySetTOXMark::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
SwTxtNode * pTxtNd = pDoc->GetNodes()[ m_nNodeIndex ]->GetTxtNode();
|
||
OSL_ENSURE( pTxtNd, "SwHistorySetTOXMark: no TextNode" );
|
||
if ( !pTxtNd )
|
||
return;
|
||
|
||
// search for respective TOX type
|
||
sal_uInt16 nCnt = pDoc->GetTOXTypeCount( m_eTOXTypes );
|
||
SwTOXType* pToxType = 0;
|
||
for ( sal_uInt16 n = 0; n < nCnt; ++n )
|
||
{
|
||
pToxType = const_cast<SwTOXType*>(pDoc->GetTOXType( m_eTOXTypes, n ));
|
||
if ( pToxType->GetTypeName() == m_TOXName )
|
||
break;
|
||
pToxType = 0;
|
||
}
|
||
|
||
if ( !pToxType ) // TOX type not found, create new
|
||
{
|
||
pToxType = const_cast<SwTOXType*>(
|
||
pDoc->InsertTOXType( SwTOXType( m_eTOXTypes, m_TOXName )));
|
||
}
|
||
|
||
SwTOXMark aNew( m_TOXMark );
|
||
pToxType->Add( &aNew );
|
||
|
||
pTxtNd->InsertItem( aNew, m_nStart, m_nEnd,
|
||
nsSetAttrMode::SETATTR_NOTXTATRCHR );
|
||
}
|
||
|
||
|
||
int SwHistorySetTOXMark::IsEqual( const SwTOXMark& rCmp ) const
|
||
{
|
||
return m_TOXName == rCmp.GetTOXType()->GetTypeName() &&
|
||
m_eTOXTypes == rCmp.GetTOXType()->GetType() &&
|
||
m_TOXMark.GetAlternativeText() == rCmp.GetAlternativeText() &&
|
||
( (TOX_INDEX == m_eTOXTypes)
|
||
? ( m_TOXMark.GetPrimaryKey() == rCmp.GetPrimaryKey() &&
|
||
m_TOXMark.GetSecondaryKey() == rCmp.GetSecondaryKey() )
|
||
: m_TOXMark.GetLevel() == rCmp.GetLevel()
|
||
);
|
||
}
|
||
|
||
|
||
SwHistoryResetTxt::SwHistoryResetTxt( sal_uInt16 nWhich,
|
||
xub_StrLen nAttrStart, xub_StrLen nAttrEnd, sal_uLong nNodePos )
|
||
: SwHistoryHint( HSTRY_RESETTXTHNT )
|
||
, m_nNodeIndex( nNodePos ), m_nStart( nAttrStart ), m_nEnd( nAttrEnd )
|
||
, m_nAttr( nWhich )
|
||
{
|
||
}
|
||
|
||
|
||
void SwHistoryResetTxt::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
SwTxtNode * pTxtNd = pDoc->GetNodes()[ m_nNodeIndex ]->GetTxtNode();
|
||
OSL_ENSURE( pTxtNd, "SwHistoryResetTxt: no TextNode" );
|
||
if ( pTxtNd )
|
||
{
|
||
pTxtNd->DeleteAttributes( m_nAttr, m_nStart, m_nEnd );
|
||
}
|
||
}
|
||
|
||
|
||
SwHistorySetFootnote::SwHistorySetFootnote( SwTxtFtn* pTxtFtn, sal_uLong nNodePos )
|
||
: SwHistoryHint( HSTRY_SETFTNHNT )
|
||
, m_pUndo( new SwUndoSaveSection )
|
||
, m_FootnoteNumber( pTxtFtn->GetFtn().GetNumStr() )
|
||
, m_nNodeIndex( nNodePos )
|
||
, m_nStart( *pTxtFtn->GetStart() )
|
||
, m_bEndNote( pTxtFtn->GetFtn().IsEndNote() )
|
||
{
|
||
OSL_ENSURE( pTxtFtn->GetStartNode(),
|
||
"SwHistorySetFootnote: Footnote without Section" );
|
||
|
||
// merke die alte NodePos, denn wer weiss was alles in der SaveSection
|
||
// gespeichert (geloescht) wird
|
||
SwDoc* pDoc = const_cast<SwDoc*>(pTxtFtn->GetTxtNode().GetDoc());
|
||
SwNode* pSaveNd = pDoc->GetNodes()[ m_nNodeIndex ];
|
||
|
||
//Pointer auf StartNode der FtnSection merken und erstmal den Pointer im
|
||
//Attribut zuruecksetzen -> Damit werden automatisch die Frms vernichtet.
|
||
SwNodeIndex aSttIdx( *pTxtFtn->GetStartNode() );
|
||
pTxtFtn->SetStartNode( 0, sal_False );
|
||
|
||
m_pUndo->SaveSection( pDoc, aSttIdx );
|
||
m_nNodeIndex = pSaveNd->GetIndex();
|
||
}
|
||
|
||
SwHistorySetFootnote::SwHistorySetFootnote( const SwTxtFtn &rTxtFtn )
|
||
: SwHistoryHint( HSTRY_SETFTNHNT )
|
||
, m_pUndo( 0 )
|
||
, m_FootnoteNumber( rTxtFtn.GetFtn().GetNumStr() )
|
||
, m_nNodeIndex( _SwTxtFtn_GetIndex( (&rTxtFtn) ) )
|
||
, m_nStart( *rTxtFtn.GetStart() )
|
||
, m_bEndNote( rTxtFtn.GetFtn().IsEndNote() )
|
||
{
|
||
OSL_ENSURE( rTxtFtn.GetStartNode(),
|
||
"SwHistorySetFootnote: Footnote without Section" );
|
||
}
|
||
|
||
String SwHistorySetFootnote::GetDescription() const
|
||
{
|
||
return SW_RES(STR_FOOTNOTE);
|
||
}
|
||
|
||
SwHistorySetFootnote::~SwHistorySetFootnote()
|
||
{
|
||
}
|
||
|
||
|
||
void SwHistorySetFootnote::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
SwTxtNode * pTxtNd = pDoc->GetNodes()[ m_nNodeIndex ]->GetTxtNode();
|
||
OSL_ENSURE( pTxtNd, "SwHistorySetFootnote: no TextNode" );
|
||
if ( !pTxtNd )
|
||
return;
|
||
|
||
if ( m_pUndo.get() )
|
||
{
|
||
// set the footnote in the TextNode
|
||
SwFmtFtn aTemp( m_bEndNote );
|
||
SwFmtFtn& rNew = const_cast<SwFmtFtn&>(
|
||
static_cast<const SwFmtFtn&>(pDoc->GetAttrPool().Put(aTemp)) );
|
||
if ( m_FootnoteNumber.Len() )
|
||
{
|
||
rNew.SetNumStr( m_FootnoteNumber );
|
||
}
|
||
SwTxtFtn* pTxtFtn = new SwTxtFtn( rNew, m_nStart );
|
||
|
||
// create the section of the Footnote
|
||
SwNodeIndex aIdx( *pTxtNd );
|
||
m_pUndo->RestoreSection( pDoc, &aIdx, SwFootnoteStartNode );
|
||
pTxtFtn->SetStartNode( &aIdx );
|
||
if ( m_pUndo->GetHistory() )
|
||
{
|
||
// create frames only now
|
||
m_pUndo->GetHistory()->Rollback( pDoc );
|
||
}
|
||
|
||
pTxtNd->InsertHint( pTxtFtn );
|
||
}
|
||
else
|
||
{
|
||
SwTxtFtn * const pFtn =
|
||
const_cast<SwTxtFtn*>( static_cast<const SwTxtFtn*>(
|
||
pTxtNd->GetTxtAttrForCharAt( m_nStart )));
|
||
SwFmtFtn &rFtn = const_cast<SwFmtFtn&>(pFtn->GetFtn());
|
||
rFtn.SetNumStr( m_FootnoteNumber );
|
||
if ( rFtn.IsEndNote() != m_bEndNote )
|
||
{
|
||
rFtn.SetEndNote( m_bEndNote );
|
||
pFtn->CheckCondColl();
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
SwHistoryChangeFmtColl::SwHistoryChangeFmtColl( SwFmtColl* pFmtColl, sal_uLong nNd,
|
||
sal_uInt8 nNodeWhich )
|
||
: SwHistoryHint( HSTRY_CHGFMTCOLL )
|
||
, m_pColl( pFmtColl )
|
||
, m_nNodeIndex( nNd )
|
||
, m_nNodeType( nNodeWhich )
|
||
{
|
||
}
|
||
|
||
void SwHistoryChangeFmtColl::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
SwCntntNode * pCntntNd = pDoc->GetNodes()[ m_nNodeIndex ]->GetCntntNode();
|
||
OSL_ENSURE( pCntntNd, "SwHistoryChangeFmtColl: no ContentNode" );
|
||
|
||
// before setting the format, check if it is still available in the
|
||
// document. if it has been deleted, there is no undo!
|
||
if ( pCntntNd && m_nNodeType == pCntntNd->GetNodeType() )
|
||
{
|
||
if ( ND_TEXTNODE == m_nNodeType )
|
||
{
|
||
if ( USHRT_MAX != pDoc->GetTxtFmtColls()->GetPos(
|
||
static_cast<SwTxtFmtColl * const>(m_pColl) ))
|
||
{
|
||
pCntntNd->ChgFmtColl( m_pColl );
|
||
}
|
||
}
|
||
else if ( USHRT_MAX != pDoc->GetGrfFmtColls()->GetPos(
|
||
static_cast<SwGrfFmtColl * const>(m_pColl) ))
|
||
{
|
||
pCntntNd->ChgFmtColl( m_pColl );
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
SwHistoryTxtFlyCnt::SwHistoryTxtFlyCnt( SwFrmFmt* const pFlyFmt )
|
||
: SwHistoryHint( HSTRY_FLYCNT )
|
||
, m_pUndo( new SwUndoDelLayFmt( pFlyFmt ) )
|
||
{
|
||
OSL_ENSURE( pFlyFmt, "SwHistoryTxtFlyCnt: no Format" );
|
||
m_pUndo->ChgShowSel( sal_False );
|
||
}
|
||
|
||
|
||
SwHistoryTxtFlyCnt::~SwHistoryTxtFlyCnt()
|
||
{
|
||
}
|
||
|
||
|
||
void SwHistoryTxtFlyCnt::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
::sw::IShellCursorSupplier *const pISCS(pDoc->GetIShellCursorSupplier());
|
||
OSL_ASSERT(pISCS);
|
||
::sw::UndoRedoContext context(*pDoc, *pISCS);
|
||
m_pUndo->UndoImpl(context);
|
||
}
|
||
|
||
|
||
|
||
SwHistoryBookmark::SwHistoryBookmark(
|
||
const ::sw::mark::IMark& rBkmk,
|
||
bool bSavePos,
|
||
bool bSaveOtherPos)
|
||
: SwHistoryHint(HSTRY_BOOKMARK)
|
||
, m_aName(rBkmk.GetName())
|
||
, m_aShortName()
|
||
, m_aKeycode()
|
||
, m_nNode(bSavePos ?
|
||
rBkmk.GetMarkPos().nNode.GetIndex() : 0)
|
||
, m_nOtherNode(bSaveOtherPos ?
|
||
rBkmk.GetOtherMarkPos().nNode.GetIndex() : 0)
|
||
, m_nCntnt(bSavePos ?
|
||
rBkmk.GetMarkPos().nContent.GetIndex() : 0)
|
||
, m_nOtherCntnt(bSaveOtherPos ?
|
||
rBkmk.GetOtherMarkPos().nContent.GetIndex() :0)
|
||
, m_bSavePos(bSavePos)
|
||
, m_bSaveOtherPos(bSaveOtherPos)
|
||
, m_bHadOtherPos(rBkmk.IsExpanded())
|
||
, m_eBkmkType(IDocumentMarkAccess::GetType(rBkmk))
|
||
{
|
||
const ::sw::mark::IBookmark* const pBookmark = dynamic_cast< const ::sw::mark::IBookmark* >(&rBkmk);
|
||
if(pBookmark)
|
||
{
|
||
m_aKeycode = pBookmark->GetKeyCode();
|
||
m_aShortName = pBookmark->GetShortName();
|
||
|
||
::sfx2::Metadatable const*const pMetadatable(
|
||
dynamic_cast< ::sfx2::Metadatable const* >(pBookmark));
|
||
if (pMetadatable)
|
||
{
|
||
m_pMetadataUndo = pMetadatable->CreateUndo();
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
void SwHistoryBookmark::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo());
|
||
|
||
SwNodes& rNds = pDoc->GetNodes();
|
||
IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
|
||
::std::auto_ptr<SwPaM> pPam;
|
||
::sw::mark::IMark* pMark = NULL;
|
||
|
||
if(m_bSavePos)
|
||
{
|
||
SwCntntNode* const pCntntNd = rNds[m_nNode]->GetCntntNode();
|
||
OSL_ENSURE(pCntntNd,
|
||
"<SwHistoryBookmark::SetInDoc(..)>"
|
||
" - wrong node for a mark");
|
||
|
||
// #111660# don't crash when nNode1 doesn't point to content node.
|
||
if(pCntntNd)
|
||
pPam = ::std::auto_ptr<SwPaM>(new SwPaM(*pCntntNd, m_nCntnt));
|
||
}
|
||
else
|
||
{
|
||
pMark = pMarkAccess->findMark(m_aName)->get();
|
||
pPam = ::std::auto_ptr<SwPaM>(new SwPaM(pMark->GetMarkPos()));
|
||
}
|
||
|
||
if(m_bSaveOtherPos)
|
||
{
|
||
SwCntntNode* const pCntntNd = rNds[m_nOtherNode]->GetCntntNode();
|
||
OSL_ENSURE(pCntntNd,
|
||
"<SwHistoryBookmark::SetInDoc(..)>"
|
||
" - wrong node for a mark");
|
||
|
||
if(pPam.get() != NULL && pCntntNd)
|
||
{
|
||
pPam->SetMark();
|
||
pPam->GetMark()->nNode = m_nOtherNode;
|
||
pPam->GetMark()->nContent.Assign(pCntntNd, m_nOtherCntnt);
|
||
}
|
||
}
|
||
else if(m_bHadOtherPos)
|
||
{
|
||
if(!pMark)
|
||
pMark = pMarkAccess->findMark(m_aName)->get();
|
||
OSL_ENSURE(pMark->IsExpanded(),
|
||
"<SwHistoryBookmark::SetInDoc(..)>"
|
||
" - missing pos on old mark");
|
||
pPam->SetMark();
|
||
*pPam->GetMark() = pMark->GetOtherMarkPos();
|
||
}
|
||
|
||
if(pPam.get())
|
||
{
|
||
if(pMark)
|
||
pMarkAccess->deleteMark(pMark);
|
||
::sw::mark::IBookmark* const pBookmark = dynamic_cast< ::sw::mark::IBookmark* >(
|
||
pMarkAccess->makeMark(*pPam, m_aName, m_eBkmkType));
|
||
if(pBookmark)
|
||
{
|
||
pBookmark->SetKeyCode(m_aKeycode);
|
||
pBookmark->SetShortName(m_aShortName);
|
||
if (m_pMetadataUndo)
|
||
{
|
||
::sfx2::Metadatable * const pMeta(
|
||
dynamic_cast< ::sfx2::Metadatable* >(pBookmark));
|
||
OSL_ENSURE(pMeta, "metadata undo, but not metadatable?");
|
||
if (pMeta)
|
||
{
|
||
pMeta->RestoreMetadata(m_pMetadataUndo);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
bool SwHistoryBookmark::IsEqualBookmark(const ::sw::mark::IMark& rBkmk)
|
||
{
|
||
return m_nNode == rBkmk.GetMarkPos().nNode.GetIndex()
|
||
&& m_nCntnt == rBkmk.GetMarkPos().nContent.GetIndex()
|
||
&& m_aName == rBkmk.GetName();
|
||
}
|
||
|
||
const ::rtl::OUString& SwHistoryBookmark::GetName() const
|
||
{
|
||
return m_aName;
|
||
}
|
||
|
||
/*************************************************************************/
|
||
|
||
|
||
SwHistorySetAttrSet::SwHistorySetAttrSet( const SfxItemSet& rSet,
|
||
sal_uLong nNodePos, const SvUShortsSort& rSetArr )
|
||
: SwHistoryHint( HSTRY_SETATTRSET )
|
||
, m_OldSet( rSet )
|
||
, m_ResetArray( 0, 4 )
|
||
, m_nNodeIndex( nNodePos )
|
||
{
|
||
SfxItemIter aIter( m_OldSet ), aOrigIter( rSet );
|
||
const SfxPoolItem* pItem = aIter.FirstItem(),
|
||
* pOrigItem = aOrigIter.FirstItem();
|
||
do {
|
||
if( !rSetArr.Seek_Entry( pOrigItem->Which() ))
|
||
{
|
||
m_ResetArray.Insert( pOrigItem->Which(), m_ResetArray.Count() );
|
||
m_OldSet.ClearItem( pOrigItem->Which() );
|
||
}
|
||
else
|
||
{
|
||
switch ( pItem->Which() )
|
||
{
|
||
case RES_PAGEDESC:
|
||
static_cast<SwFmtPageDesc*>(
|
||
const_cast<SfxPoolItem*>(pItem))->ChgDefinedIn( 0 );
|
||
break;
|
||
|
||
case RES_PARATR_DROP:
|
||
static_cast<SwFmtDrop*>(
|
||
const_cast<SfxPoolItem*>(pItem))->ChgDefinedIn( 0 );
|
||
break;
|
||
|
||
case RES_BOXATR_FORMULA:
|
||
{
|
||
//JP 20.04.98: Bug 49502 - wenn eine Formel gesetzt ist, nie den
|
||
// Value mit sichern. Der muss gegebenfalls neu
|
||
// errechnet werden!
|
||
//JP 30.07.98: Bug 54295 - Formeln immer im Klartext speichern
|
||
m_OldSet.ClearItem( RES_BOXATR_VALUE );
|
||
|
||
SwTblBoxFormula& rNew =
|
||
*static_cast<SwTblBoxFormula*>(
|
||
const_cast<SfxPoolItem*>(pItem));
|
||
if ( rNew.IsIntrnlName() )
|
||
{
|
||
const SwTblBoxFormula& rOld =
|
||
static_cast<const SwTblBoxFormula&>(
|
||
rSet.Get( RES_BOXATR_FORMULA ));
|
||
const SwNode* pNd = rOld.GetNodeOfFormula();
|
||
if ( pNd )
|
||
{
|
||
const SwTableNode* pTableNode
|
||
= pNd->FindTableNode();
|
||
if (pTableNode)
|
||
{
|
||
SwTableFmlUpdate aMsgHnt(
|
||
&pTableNode->GetTable() );
|
||
aMsgHnt.eFlags = TBL_BOXNAME;
|
||
rNew.ChgDefinedIn( rOld.GetDefinedIn() );
|
||
rNew.ChangeState( &aMsgHnt );
|
||
}
|
||
}
|
||
}
|
||
rNew.ChgDefinedIn( 0 );
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
if( aIter.IsAtEnd() )
|
||
break;
|
||
pItem = aIter.NextItem();
|
||
pOrigItem = aOrigIter.NextItem();
|
||
} while( sal_True );
|
||
}
|
||
|
||
void SwHistorySetAttrSet::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo());
|
||
|
||
SwNode * pNode = pDoc->GetNodes()[ m_nNodeIndex ];
|
||
if ( pNode->IsCntntNode() )
|
||
{
|
||
static_cast<SwCntntNode*>(pNode)->SetAttr( m_OldSet );
|
||
if ( m_ResetArray.Count() )
|
||
{
|
||
static_cast<SwCntntNode*>(pNode)->ResetAttr( m_ResetArray );
|
||
}
|
||
}
|
||
else if ( pNode->IsTableNode() )
|
||
{
|
||
SwFmt& rFmt =
|
||
*static_cast<SwTableNode*>(pNode)->GetTable().GetFrmFmt();
|
||
rFmt.SetFmtAttr( m_OldSet );
|
||
if ( m_ResetArray.Count() )
|
||
{
|
||
rFmt.ResetFmtAttr( *m_ResetArray.GetData() );
|
||
}
|
||
}
|
||
}
|
||
|
||
/*************************************************************************/
|
||
|
||
|
||
SwHistoryResetAttrSet::SwHistoryResetAttrSet( const SfxItemSet& rSet,
|
||
sal_uLong nNodePos, xub_StrLen nAttrStt, xub_StrLen nAttrEnd )
|
||
: SwHistoryHint( HSTRY_RESETATTRSET )
|
||
, m_nNodeIndex( nNodePos ), m_nStart( nAttrStt ), m_nEnd( nAttrEnd )
|
||
, m_Array( (sal_uInt8)rSet.Count() )
|
||
{
|
||
SfxItemIter aIter( rSet );
|
||
bool bAutoStyle = false;
|
||
|
||
while( sal_True )
|
||
{
|
||
const sal_uInt16 nWhich = aIter.GetCurItem()->Which();
|
||
|
||
#ifndef PRODUCT
|
||
switch (nWhich)
|
||
{
|
||
case RES_TXTATR_REFMARK:
|
||
case RES_TXTATR_TOXMARK:
|
||
if (m_nStart != m_nEnd) break; // else: fall through!
|
||
case RES_TXTATR_FIELD:
|
||
case RES_TXTATR_FLYCNT:
|
||
case RES_TXTATR_FTN:
|
||
case RES_TXTATR_META:
|
||
case RES_TXTATR_METAFIELD:
|
||
OSL_ENSURE(rSet.Count() == 1,
|
||
"text attribute with CH_TXTATR, but not the only one:"
|
||
"\nnot such a good idea");
|
||
break;
|
||
}
|
||
#endif
|
||
|
||
// Character attribute cannot be inserted into the hints array
|
||
// anymore. Therefore we have to treat them as one RES_TXTATR_AUTOFMT:
|
||
if (isCHRATR(nWhich))
|
||
{
|
||
bAutoStyle = true;
|
||
}
|
||
else
|
||
{
|
||
m_Array.Insert( aIter.GetCurItem()->Which(), m_Array.Count() );
|
||
}
|
||
|
||
if( aIter.IsAtEnd() )
|
||
break;
|
||
|
||
aIter.NextItem();
|
||
}
|
||
|
||
if ( bAutoStyle )
|
||
{
|
||
m_Array.Insert( RES_TXTATR_AUTOFMT, m_Array.Count() );
|
||
}
|
||
}
|
||
|
||
|
||
void SwHistoryResetAttrSet::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo());
|
||
|
||
SwCntntNode * pCntntNd = pDoc->GetNodes()[ m_nNodeIndex ]->GetCntntNode();
|
||
OSL_ENSURE( pCntntNd, "SwHistoryResetAttrSet: no CntntNode" );
|
||
|
||
if (pCntntNd)
|
||
{
|
||
const sal_uInt16* pArr = m_Array.GetData();
|
||
if ( USHRT_MAX == m_nEnd && USHRT_MAX == m_nStart )
|
||
{
|
||
// no area: use ContentNode
|
||
for ( sal_uInt16 n = m_Array.Count(); n; --n, ++pArr )
|
||
{
|
||
pCntntNd->ResetAttr( *pArr );
|
||
}
|
||
}
|
||
else
|
||
{
|
||
// area: use TextNode
|
||
for ( sal_uInt16 n = m_Array.Count(); n; --n, ++pArr )
|
||
{
|
||
static_cast<SwTxtNode*>(pCntntNd)->
|
||
DeleteAttributes( *pArr, m_nStart, m_nEnd );
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/*************************************************************************/
|
||
|
||
|
||
SwHistoryChangeFlyAnchor::SwHistoryChangeFlyAnchor( SwFrmFmt& rFmt )
|
||
: SwHistoryHint( HSTRY_CHGFLYANCHOR )
|
||
, m_rFmt( rFmt )
|
||
, m_nOldNodeIndex( rFmt.GetAnchor().GetCntntAnchor()->nNode.GetIndex() )
|
||
, m_nOldContentIndex( (FLY_AT_CHAR == rFmt.GetAnchor().GetAnchorId())
|
||
? rFmt.GetAnchor().GetCntntAnchor()->nContent.GetIndex()
|
||
: STRING_MAXLEN )
|
||
{
|
||
}
|
||
|
||
|
||
void SwHistoryChangeFlyAnchor::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo());
|
||
|
||
sal_uInt16 nPos = pDoc->GetSpzFrmFmts()->GetPos( &m_rFmt );
|
||
if ( USHRT_MAX != nPos ) // Format does still exist
|
||
{
|
||
SwFmtAnchor aTmp( m_rFmt.GetAnchor() );
|
||
|
||
SwNode* pNd = pDoc->GetNodes()[ m_nOldNodeIndex ];
|
||
SwCntntNode* pCNd = pNd->GetCntntNode();
|
||
SwPosition aPos( *pNd );
|
||
if ( STRING_MAXLEN != m_nOldContentIndex )
|
||
{
|
||
OSL_ENSURE(pCNd, "SwHistoryChangeFlyAnchor: no ContentNode");
|
||
if (pCNd)
|
||
{
|
||
aPos.nContent.Assign( pCNd, m_nOldContentIndex );
|
||
}
|
||
}
|
||
aTmp.SetAnchor( &aPos );
|
||
|
||
// so the Layout does not get confused
|
||
if ( !pCNd || !pCNd->GetFrm( 0, 0, sal_False ) )
|
||
{
|
||
m_rFmt.DelFrms();
|
||
}
|
||
|
||
m_rFmt.SetFmtAttr( aTmp );
|
||
}
|
||
}
|
||
|
||
|
||
/*************************************************************************/
|
||
|
||
SwHistoryChangeFlyChain::SwHistoryChangeFlyChain( SwFlyFrmFmt& rFmt,
|
||
const SwFmtChain& rAttr )
|
||
: SwHistoryHint( HSTRY_CHGFLYCHAIN )
|
||
, m_pPrevFmt( rAttr.GetPrev() )
|
||
, m_pNextFmt( rAttr.GetNext() )
|
||
, m_pFlyFmt( &rFmt )
|
||
{
|
||
}
|
||
|
||
|
||
void SwHistoryChangeFlyChain::SetInDoc( SwDoc* pDoc, bool )
|
||
{
|
||
if ( USHRT_MAX != pDoc->GetSpzFrmFmts()->GetPos( m_pFlyFmt ) )
|
||
{
|
||
SwFmtChain aChain;
|
||
|
||
if ( m_pPrevFmt &&
|
||
USHRT_MAX != pDoc->GetSpzFrmFmts()->GetPos( m_pPrevFmt ) )
|
||
{
|
||
aChain.SetPrev( m_pPrevFmt );
|
||
SwFmtChain aTmp( m_pPrevFmt->GetChain() );
|
||
aTmp.SetNext( m_pFlyFmt );
|
||
m_pPrevFmt->SetFmtAttr( aTmp );
|
||
}
|
||
|
||
if ( m_pNextFmt &&
|
||
USHRT_MAX != pDoc->GetSpzFrmFmts()->GetPos( m_pNextFmt ) )
|
||
{
|
||
aChain.SetNext( m_pNextFmt );
|
||
SwFmtChain aTmp( m_pNextFmt->GetChain() );
|
||
aTmp.SetPrev( m_pFlyFmt );
|
||
m_pNextFmt->SetFmtAttr( aTmp );
|
||
}
|
||
|
||
if ( aChain.GetNext() || aChain.GetPrev() )
|
||
{
|
||
m_pFlyFmt->SetFmtAttr( aChain );
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
// -> #i27615#
|
||
SwHistoryChangeCharFmt::SwHistoryChangeCharFmt(const SfxItemSet & rSet,
|
||
const String & sFmt)
|
||
: SwHistoryHint(HSTRY_CHGCHARFMT)
|
||
, m_OldSet(rSet), m_Fmt(sFmt)
|
||
{
|
||
}
|
||
|
||
void SwHistoryChangeCharFmt::SetInDoc(SwDoc * pDoc, bool )
|
||
{
|
||
SwCharFmt * pCharFmt = pDoc->FindCharFmtByName(m_Fmt);
|
||
|
||
if (pCharFmt)
|
||
{
|
||
pCharFmt->SetFmtAttr(m_OldSet);
|
||
}
|
||
}
|
||
// <- #i27615#
|
||
|
||
/* */
|
||
|
||
|
||
SwHistory::SwHistory( sal_uInt16 nInitSz, sal_uInt16 nGrowSz )
|
||
: m_SwpHstry( (sal_uInt8)nInitSz, (sal_uInt8)nGrowSz )
|
||
, m_nEndDiff( 0 )
|
||
{}
|
||
|
||
|
||
SwHistory::~SwHistory()
|
||
{
|
||
Delete( 0 );
|
||
}
|
||
|
||
|
||
/*************************************************************************
|
||
|*
|
||
|* void SwHistory::Add()
|
||
|*
|
||
|* Beschreibung Dokument 1.0
|
||
|*
|
||
*************************************************************************/
|
||
|
||
void SwHistory::Add( const SfxPoolItem* pOldValue, const SfxPoolItem* pNewValue,
|
||
sal_uLong nNodeIdx )
|
||
{
|
||
OSL_ENSURE( !m_nEndDiff, "History was not deleted after REDO" );
|
||
|
||
sal_uInt16 nWhich = pNewValue->Which();
|
||
if( (nWhich >= POOLATTR_END) || (nWhich == RES_TXTATR_FIELD) )
|
||
return;
|
||
|
||
// no default Attribute?
|
||
SwHistoryHint * pHt;
|
||
if ( pOldValue && pOldValue != GetDfltAttr( pOldValue->Which() ) )
|
||
{
|
||
pHt = new SwHistorySetFmt( pOldValue, nNodeIdx );
|
||
}
|
||
else
|
||
{
|
||
pHt = new SwHistoryResetFmt( pNewValue, nNodeIdx );
|
||
}
|
||
m_SwpHstry.Insert( pHt, Count() );
|
||
}
|
||
|
||
|
||
void SwHistory::Add( SwTxtAttr* pHint, sal_uLong nNodeIdx, bool bNewAttr )
|
||
{
|
||
OSL_ENSURE( !m_nEndDiff, "History was not deleted after REDO" );
|
||
|
||
SwHistoryHint * pHt;
|
||
sal_uInt16 nAttrWhich = pHint->Which();
|
||
|
||
if( !bNewAttr )
|
||
{
|
||
switch ( nAttrWhich )
|
||
{
|
||
case RES_TXTATR_FTN:
|
||
pHt = new SwHistorySetFootnote(
|
||
static_cast<SwTxtFtn*>(pHint), nNodeIdx );
|
||
break;
|
||
case RES_TXTATR_FLYCNT:
|
||
pHt = new SwHistoryTxtFlyCnt( static_cast<SwTxtFlyCnt*>(pHint)
|
||
->GetFlyCnt().GetFrmFmt() );
|
||
break;
|
||
case RES_TXTATR_FIELD:
|
||
pHt = new SwHistorySetTxtFld(
|
||
static_cast<SwTxtFld*>(pHint), nNodeIdx );
|
||
break;
|
||
case RES_TXTATR_TOXMARK:
|
||
pHt = new SwHistorySetTOXMark(
|
||
static_cast<SwTxtTOXMark*>(pHint), nNodeIdx );
|
||
break;
|
||
case RES_TXTATR_REFMARK:
|
||
pHt = new SwHistorySetRefMark(
|
||
static_cast<SwTxtRefMark*>(pHint), nNodeIdx );
|
||
break;
|
||
default:
|
||
pHt = new SwHistorySetTxt(
|
||
static_cast<SwTxtAttr*>(pHint), nNodeIdx );
|
||
}
|
||
}
|
||
else
|
||
{
|
||
pHt = new SwHistoryResetTxt( pHint->Which(), *pHint->GetStart(),
|
||
*pHint->GetAnyEnd(), nNodeIdx );
|
||
}
|
||
m_SwpHstry.Insert( pHt, Count() );
|
||
}
|
||
|
||
|
||
void SwHistory::Add( SwFmtColl* pColl, sal_uLong nNodeIdx, sal_uInt8 nWhichNd )
|
||
{
|
||
OSL_ENSURE( !m_nEndDiff, "History was not deleted after REDO" );
|
||
|
||
SwHistoryHint * pHt =
|
||
new SwHistoryChangeFmtColl( pColl, nNodeIdx, nWhichNd );
|
||
m_SwpHstry.Insert( pHt, Count() );
|
||
}
|
||
|
||
|
||
void SwHistory::Add(const ::sw::mark::IMark& rBkmk, bool bSavePos, bool bSaveOtherPos)
|
||
{
|
||
OSL_ENSURE( !m_nEndDiff, "History was not deleted after REDO" );
|
||
|
||
SwHistoryHint * pHt = new SwHistoryBookmark(rBkmk, bSavePos, bSaveOtherPos);
|
||
m_SwpHstry.Insert( pHt, Count() );
|
||
}
|
||
|
||
|
||
void SwHistory::Add( SwFrmFmt& rFmt )
|
||
{
|
||
SwHistoryHint * pHt = new SwHistoryChangeFlyAnchor( rFmt );
|
||
m_SwpHstry.Insert( pHt, Count() );
|
||
}
|
||
|
||
void SwHistory::Add( SwFlyFrmFmt& rFmt, sal_uInt16& rSetPos )
|
||
{
|
||
OSL_ENSURE( !m_nEndDiff, "History was not deleted after REDO" );
|
||
|
||
SwHistoryHint * pHint;
|
||
const sal_uInt16 nWh = rFmt.Which();
|
||
if( RES_FLYFRMFMT == nWh || RES_DRAWFRMFMT == nWh )
|
||
{
|
||
pHint = new SwHistoryTxtFlyCnt( &rFmt );
|
||
m_SwpHstry.Insert( pHint, Count() );
|
||
|
||
const SwFmtChain* pChainItem;
|
||
if( SFX_ITEM_SET == rFmt.GetItemState( RES_CHAIN, sal_False,
|
||
(const SfxPoolItem**)&pChainItem ))
|
||
{
|
||
if( pChainItem->GetNext() || pChainItem->GetPrev() )
|
||
{
|
||
SwHistoryHint * pHt =
|
||
new SwHistoryChangeFlyChain( rFmt, *pChainItem );
|
||
m_SwpHstry.Insert( pHt, rSetPos++ );
|
||
if ( pChainItem->GetNext() )
|
||
{
|
||
SwFmtChain aTmp( pChainItem->GetNext()->GetChain() );
|
||
aTmp.SetPrev( 0 );
|
||
pChainItem->GetNext()->SetFmtAttr( aTmp );
|
||
}
|
||
if ( pChainItem->GetPrev() )
|
||
{
|
||
SwFmtChain aTmp( pChainItem->GetPrev()->GetChain() );
|
||
aTmp.SetNext( 0 );
|
||
pChainItem->GetPrev()->SetFmtAttr( aTmp );
|
||
}
|
||
}
|
||
rFmt.ResetFmtAttr( RES_CHAIN );
|
||
}
|
||
}
|
||
}
|
||
|
||
void SwHistory::Add( const SwTxtFtn& rFtn )
|
||
{
|
||
SwHistoryHint *pHt = new SwHistorySetFootnote( rFtn );
|
||
m_SwpHstry.Insert( pHt, Count() );
|
||
}
|
||
|
||
// #i27615#
|
||
void SwHistory::Add(const SfxItemSet & rSet, const SwCharFmt & rFmt)
|
||
{
|
||
SwHistoryHint * pHt = new SwHistoryChangeCharFmt(rSet, rFmt.GetName());
|
||
m_SwpHstry.Insert(pHt, Count());
|
||
}
|
||
|
||
/*************************************************************************
|
||
|*
|
||
|* sal_Bool SwHistory::Rollback()
|
||
|*
|
||
|* Beschreibung Dokument 1.0
|
||
|*
|
||
*************************************************************************/
|
||
|
||
|
||
bool SwHistory::Rollback( SwDoc* pDoc, sal_uInt16 nStart )
|
||
{
|
||
if ( !Count() )
|
||
return false;
|
||
|
||
SwHistoryHint * pHHt;
|
||
sal_uInt16 i;
|
||
for ( i = Count(); i > nStart ; )
|
||
{
|
||
pHHt = m_SwpHstry[ --i ];
|
||
pHHt->SetInDoc( pDoc, false );
|
||
delete pHHt;
|
||
}
|
||
m_SwpHstry.Remove( nStart, Count() - nStart );
|
||
m_nEndDiff = 0;
|
||
return true;
|
||
}
|
||
|
||
|
||
|
||
bool SwHistory::TmpRollback( SwDoc* pDoc, sal_uInt16 nStart, bool bToFirst )
|
||
{
|
||
sal_uInt16 nEnd = Count() - m_nEndDiff;
|
||
if ( !Count() || !nEnd || nStart >= nEnd )
|
||
return false;
|
||
|
||
SwHistoryHint * pHHt;
|
||
if ( bToFirst )
|
||
{
|
||
for ( ; nEnd > nStart; ++m_nEndDiff )
|
||
{
|
||
pHHt = m_SwpHstry[ --nEnd ];
|
||
pHHt->SetInDoc( pDoc, true );
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for ( ; nStart < nEnd; ++m_nEndDiff, ++nStart )
|
||
{
|
||
pHHt = m_SwpHstry[ nStart ];
|
||
pHHt->SetInDoc( pDoc, true );
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
|
||
void SwHistory::Delete( sal_uInt16 nStart )
|
||
{
|
||
for ( sal_uInt16 n = Count(); n > nStart; )
|
||
{
|
||
m_SwpHstry.DeleteAndDestroy( --n, 1 );
|
||
}
|
||
m_nEndDiff = 0;
|
||
}
|
||
|
||
|
||
sal_uInt16 SwHistory::SetTmpEnd( sal_uInt16 nNewTmpEnd )
|
||
{
|
||
OSL_ENSURE( nNewTmpEnd <= Count(), "SwHistory::SetTmpEnd: out of bounds" );
|
||
|
||
sal_uInt16 nOld = Count() - m_nEndDiff;
|
||
m_nEndDiff = Count() - nNewTmpEnd;
|
||
|
||
// for every SwHistoryFlyCnt, call the Redo of its UndoObject.
|
||
// this saves the formats of the flys!
|
||
for ( sal_uInt16 n = nOld; n < nNewTmpEnd; n++ )
|
||
{
|
||
if ( HSTRY_FLYCNT == (*this)[ n ]->Which() )
|
||
{
|
||
static_cast<SwHistoryTxtFlyCnt*>((*this)[ n ])
|
||
->GetUDelLFmt()->RedoForRollback();
|
||
}
|
||
}
|
||
|
||
return nOld;
|
||
}
|
||
|
||
void SwHistory::CopyFmtAttr( const SfxItemSet& rSet, sal_uLong nNodeIdx )
|
||
{
|
||
if( rSet.Count() )
|
||
{
|
||
SfxItemIter aIter( rSet );
|
||
do {
|
||
if( (SfxPoolItem*)-1 != aIter.GetCurItem() )
|
||
{
|
||
const SfxPoolItem* pNew = aIter.GetCurItem();
|
||
Add( pNew, pNew, nNodeIdx );
|
||
}
|
||
if( aIter.IsAtEnd() )
|
||
break;
|
||
aIter.NextItem();
|
||
} while( sal_True );
|
||
}
|
||
}
|
||
|
||
void SwHistory::CopyAttr( SwpHints* pHts, sal_uLong nNodeIdx,
|
||
xub_StrLen nStart, xub_StrLen nEnd, bool bFields )
|
||
{
|
||
if( !pHts )
|
||
return;
|
||
|
||
// copy all attributes of the TextNode in the area from nStart to nEnd
|
||
SwTxtAttr* pHt;
|
||
xub_StrLen nAttrStt;
|
||
const xub_StrLen * pEndIdx;
|
||
for( sal_uInt16 n = 0; n < pHts->Count(); n++ )
|
||
{
|
||
// BP: nAttrStt muss auch bei !pEndIdx gesetzt werden
|
||
pHt = pHts->GetTextHint(n);
|
||
nAttrStt = *pHt->GetStart();
|
||
// JP: ???? wieso nAttrStt >= nEnd
|
||
// if( 0 != ( pEndIdx = pHt->GetEnd() ) && nAttrStt >= nEnd )
|
||
if( 0 != ( pEndIdx = pHt->GetEnd() ) && nAttrStt > nEnd )
|
||
break;
|
||
|
||
// Flys und Ftn nie kopieren !!
|
||
sal_Bool bNextAttr = sal_False;
|
||
switch( pHt->Which() )
|
||
{
|
||
case RES_TXTATR_FIELD:
|
||
// keine Felder, .. kopieren ??
|
||
if( !bFields )
|
||
bNextAttr = sal_True;
|
||
break;
|
||
case RES_TXTATR_FLYCNT:
|
||
case RES_TXTATR_FTN:
|
||
bNextAttr = sal_True;
|
||
break;
|
||
}
|
||
|
||
if( bNextAttr )
|
||
continue;
|
||
|
||
// save all attributes that are somehow in this area
|
||
if ( nStart <= nAttrStt )
|
||
{
|
||
if ( nEnd > nAttrStt
|
||
// JP: ???? wieso nAttrStt >= nEnd
|
||
// || (nEnd == nAttrStt && (!pEndIdx || nEnd == pEndIdx->GetIndex()))
|
||
)
|
||
{
|
||
Add( pHt, nNodeIdx, false );
|
||
}
|
||
}
|
||
else if ( pEndIdx && nStart < *pEndIdx )
|
||
{
|
||
Add( pHt, nNodeIdx, false );
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/*************************************************************************/
|
||
|
||
// Klasse zum Registrieren der History am Node, Format, HintsArray, ...
|
||
|
||
SwRegHistory::SwRegHistory( SwHistory* pHst )
|
||
: SwClient( 0 )
|
||
, m_pHistory( pHst )
|
||
, m_nNodeIndex( ULONG_MAX )
|
||
{
|
||
_MakeSetWhichIds();
|
||
}
|
||
|
||
SwRegHistory::SwRegHistory( SwModify* pRegIn, const SwNode& rNd,
|
||
SwHistory* pHst )
|
||
: SwClient( pRegIn )
|
||
, m_pHistory( pHst )
|
||
, m_nNodeIndex( rNd.GetIndex() )
|
||
{
|
||
_MakeSetWhichIds();
|
||
}
|
||
|
||
SwRegHistory::SwRegHistory( const SwNode& rNd, SwHistory* pHst )
|
||
: SwClient( 0 )
|
||
, m_pHistory( pHst )
|
||
, m_nNodeIndex( rNd.GetIndex() )
|
||
{
|
||
_MakeSetWhichIds();
|
||
}
|
||
|
||
void SwRegHistory::Modify( SfxPoolItem* pOld, SfxPoolItem* pNew )
|
||
{
|
||
// --> OD 2010-10-05 #i114861#
|
||
// Do not handle a "noop" modify
|
||
// - e.g. <SwTxtNode::NumRuleChgd()> uses such a "noop" modify
|
||
// if ( m_pHistory && ( pOld || pNew ) )
|
||
if ( m_pHistory && ( pOld || pNew ) &&
|
||
pOld != pNew )
|
||
// <--
|
||
{
|
||
if ( pNew->Which() < POOLATTR_END )
|
||
{
|
||
m_pHistory->Add( pOld, pNew, m_nNodeIndex );
|
||
}
|
||
else if ( RES_ATTRSET_CHG == pNew->Which() )
|
||
{
|
||
SwHistoryHint* pNewHstr;
|
||
const SfxItemSet& rSet =
|
||
*static_cast<SwAttrSetChg*>(pOld)->GetChgSet();
|
||
if ( 1 < rSet.Count() )
|
||
{
|
||
pNewHstr =
|
||
new SwHistorySetAttrSet( rSet, m_nNodeIndex, m_WhichIdSet );
|
||
}
|
||
else
|
||
{
|
||
const SfxPoolItem* pItem = SfxItemIter( rSet ).FirstItem();
|
||
if ( m_WhichIdSet.Seek_Entry( pItem->Which() ) )
|
||
{
|
||
pNewHstr = new SwHistorySetFmt( pItem, m_nNodeIndex );
|
||
}
|
||
else
|
||
{
|
||
pNewHstr = new SwHistoryResetFmt( pItem, m_nNodeIndex );
|
||
}
|
||
}
|
||
m_pHistory->m_SwpHstry.Insert( pNewHstr, m_pHistory->Count() );
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
void SwRegHistory::AddHint( SwTxtAttr* pHt, const bool bNew )
|
||
{
|
||
m_pHistory->Add( pHt, m_nNodeIndex, bNew );
|
||
}
|
||
|
||
|
||
bool SwRegHistory::InsertItems( const SfxItemSet& rSet,
|
||
xub_StrLen const nStart, xub_StrLen const nEnd, SetAttrMode const nFlags )
|
||
{
|
||
if( !rSet.Count() )
|
||
return false;
|
||
|
||
SwTxtNode * const pTxtNode =
|
||
dynamic_cast<SwTxtNode *>(const_cast<SwModify *>(GetRegisteredIn()));
|
||
|
||
OSL_ENSURE(pTxtNode, "SwRegHistory not registered at text node?");
|
||
if (!pTxtNode)
|
||
return false;
|
||
|
||
if ( pTxtNode->GetpSwpHints() && m_pHistory )
|
||
{
|
||
pTxtNode->GetpSwpHints()->Register( this );
|
||
}
|
||
|
||
const bool bInserted = pTxtNode->SetAttr( rSet, nStart, nEnd, nFlags );
|
||
|
||
// Achtung: Durch das Einfuegen eines Attributs kann das Array
|
||
// geloescht werden!!! Wenn das einzufuegende zunaechst ein vorhandenes
|
||
// loescht, selbst aber nicht eingefuegt werden braucht, weil die
|
||
// Absatzattribute identisch sind( -> bForgetAttr in SwpHints::Insert )
|
||
if ( pTxtNode->GetpSwpHints() && m_pHistory )
|
||
{
|
||
pTxtNode->GetpSwpHints()->DeRegister();
|
||
}
|
||
|
||
if ( m_pHistory && bInserted )
|
||
{
|
||
SwHistoryHint* pNewHstr = new SwHistoryResetAttrSet( rSet,
|
||
pTxtNode->GetIndex(), nStart, nEnd );
|
||
// der NodeIndex kann verschoben sein !!
|
||
|
||
m_pHistory->m_SwpHstry.Insert( pNewHstr, m_pHistory->Count() );
|
||
}
|
||
|
||
return bInserted;
|
||
}
|
||
|
||
void SwRegHistory::RegisterInModify( SwModify* pRegIn, const SwNode& rNd )
|
||
{
|
||
if ( m_pHistory && pRegIn )
|
||
{
|
||
pRegIn->Add( this );
|
||
m_nNodeIndex = rNd.GetIndex();
|
||
_MakeSetWhichIds();
|
||
}
|
||
else if ( m_WhichIdSet.Count() )
|
||
{
|
||
m_WhichIdSet.Remove( 0, m_WhichIdSet.Count() );
|
||
}
|
||
}
|
||
|
||
void SwRegHistory::_MakeSetWhichIds()
|
||
{
|
||
if (!m_pHistory) return;
|
||
|
||
if ( m_WhichIdSet.Count() )
|
||
{
|
||
m_WhichIdSet.Remove( 0, m_WhichIdSet.Count() );
|
||
}
|
||
|
||
if( GetRegisteredIn() )
|
||
{
|
||
const SfxItemSet* pSet = 0;
|
||
if( GetRegisteredIn()->ISA( SwCntntNode ) )
|
||
{
|
||
pSet = static_cast<SwCntntNode*>(
|
||
const_cast<SwModify*>(GetRegisteredIn()))->GetpSwAttrSet();
|
||
}
|
||
else if ( GetRegisteredIn()->ISA( SwFmt ) )
|
||
{
|
||
pSet = &static_cast<SwFmt*>(
|
||
const_cast<SwModify*>(GetRegisteredIn()))->GetAttrSet();
|
||
}
|
||
if( pSet && pSet->Count() )
|
||
{
|
||
SfxItemIter aIter( *pSet );
|
||
sal_uInt16 nW = aIter.FirstItem()->Which();
|
||
while( sal_True )
|
||
{
|
||
m_WhichIdSet.Insert( nW );
|
||
if( aIter.IsAtEnd() )
|
||
break;
|
||
nW = aIter.NextItem()->Which();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|