diff options
author | Mathias Bauer <mba@openoffice.org> | 2009-12-05 19:29:07 +0100 |
---|---|---|
committer | Mathias Bauer <mba@openoffice.org> | 2009-12-05 19:29:07 +0100 |
commit | 8d669bc21b9d1976842ba8252d2f0fb953160bdd (patch) | |
tree | 63e5a53c8ff9c4cdff33070e177eda653922f28a /svx | |
parent | f232b25c1eceb8e1c32cfd917d666b3a16b14405 (diff) | |
parent | 875ac20478f16e5107acb222c0b851b99d2e0f27 (diff) |
merge to m67
Diffstat (limited to 'svx')
-rw-r--r-- | svx/inc/svx/msvbahelper.hxx | 58 | ||||
-rw-r--r-- | svx/inc/svx/numitem.hxx | 30 | ||||
-rw-r--r-- | svx/inc/svx/sdr/contact/viewobjectcontactofunocontrol.hxx | 5 | ||||
-rw-r--r-- | svx/inc/svx/selectioncontroller.hxx | 11 | ||||
-rw-r--r-- | svx/inc/svx/svdedxv.hxx | 17 | ||||
-rw-r--r-- | svx/prj/d.lst | 7 | ||||
-rw-r--r-- | svx/source/dialog/hyperdlg.cxx | 6 | ||||
-rw-r--r-- | svx/source/editeng/editdoc.cxx | 11 | ||||
-rw-r--r-- | svx/source/fmcomp/gridcell.cxx | 4 | ||||
-rw-r--r-- | svx/source/intro/intro_tmpl.hrc | 210 | ||||
-rw-r--r-- | svx/source/items/numitem.cxx | 504 | ||||
-rw-r--r-- | svx/source/msfilter/msvbahelper.cxx | 384 | ||||
-rw-r--r-- | svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx | 107 | ||||
-rw-r--r-- | svx/source/sdr/overlay/overlaymanagerbuffered.cxx | 37 | ||||
-rw-r--r-- | svx/source/svdraw/selectioncontroller.cxx | 11 | ||||
-rw-r--r-- | svx/source/svdraw/svdedxv.cxx | 226 | ||||
-rw-r--r-- | svx/source/svdraw/svdotextdecomposition.cxx | 48 | ||||
-rw-r--r-- | svx/source/svdraw/svdpage.cxx | 8 | ||||
-rw-r--r-- | svx/source/table/tablecontroller.cxx | 82 | ||||
-rw-r--r-- | svx/source/table/tablecontroller.hxx | 4 |
20 files changed, 1350 insertions, 420 deletions
diff --git a/svx/inc/svx/msvbahelper.hxx b/svx/inc/svx/msvbahelper.hxx new file mode 100644 index 000000000000..b1db44237fa6 --- /dev/null +++ b/svx/inc/svx/msvbahelper.hxx @@ -0,0 +1,58 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#ifndef _MSVBAHELPER_HXX +#define _MSVBAHELPER_HXX + +#include <sfx2/objsh.hxx> +#include "svx/svxdllapi.h" + +namespace ooo { namespace vba +{ + class SVX_DLLPUBLIC VBAMacroResolvedInfo + { + SfxObjectShell* mpDocContext; + bool mbFound; + String msResolvedMacro; + public: + VBAMacroResolvedInfo() : mpDocContext(NULL), mbFound( false ){} + void SetResolved( bool bRes ) { mbFound = bRes; } + bool IsResolved() { return mbFound; } + void SetMacroDocContext(SfxObjectShell* pShell ) { mpDocContext = pShell; } + SfxObjectShell* MacroDocContext() { return mpDocContext; } + String ResolvedMacro() { return msResolvedMacro; } + void SetResolvedMacro(const String& sMacro ) { msResolvedMacro = sMacro; } + }; + + SVX_DLLPUBLIC String makeMacroURL( const String& sMacroName ); + SVX_DLLPUBLIC VBAMacroResolvedInfo resolveVBAMacro( SfxObjectShell* pShell, const rtl::OUString& sMod, bool bSearchGlobalTemplates = false ); + SVX_DLLPUBLIC sal_Bool executeMacro( SfxObjectShell* pShell, const String& sMacroName, com::sun::star::uno::Sequence< com::sun::star::uno::Any >& aArgs, com::sun::star::uno::Any& aRet, const com::sun::star::uno::Any& aCaller ); +} } + +#endif diff --git a/svx/inc/svx/numitem.hxx b/svx/inc/svx/numitem.hxx index 672619b309d4..86f1eee764a7 100644 --- a/svx/inc/svx/numitem.hxx +++ b/svx/inc/svx/numitem.hxx @@ -76,12 +76,6 @@ namespace com{namespace sun{ namespace star{ #define SVX_NO_NUM 200 // Markierung fuer keine Numerierung #define SVX_NO_NUMLEVEL 0x20 -// --> OD 2008-01-10 #newlistlevelattrs# - no longer used -//#define NUMITEM_VERSION_01 0x01 -//#define NUMITEM_VERSION_02 0x02 -//#define NUMITEM_VERSION_03 0x03 -// <-- - #define LINK_TOKEN 0x80 //indicate linked bitmaps - for use in dialog only class SVX_DLLPUBLIC SvxNumberType { @@ -191,14 +185,10 @@ public: SvxNumPositionAndSpaceMode ePositionAndSpaceMode = LABEL_WIDTH_AND_POSITION ); // <-- SvxNumberFormat(const SvxNumberFormat& rFormat); - // --> OD 2008-01-09 #newlistlevelattrs# - no longer used -// SvxNumberFormat(SvStream &rStream); - // <-- + SvxNumberFormat(SvStream &rStream); virtual ~SvxNumberFormat(); - // --> OD 2008-01-09 #newlistlevelattrs# - no longer used -// SvStream& Store(SvStream &rStream, FontToSubsFontConverter pConverter); - // <-- + SvStream& Store(SvStream &rStream, FontToSubsFontConverter pConverter); SvxNumberFormat& operator=( const SvxNumberFormat& ); BOOL operator==( const SvxNumberFormat& ) const; @@ -304,9 +294,7 @@ public: = SvxNumberFormat::LABEL_WIDTH_AND_POSITION ); // <-- SvxNumRule(const SvxNumRule& rCopy); - // --> OD 2008-01-09 #newlistlevelattrs# - no longer used -// SvxNumRule(SvStream &rStream); - // <-- + SvxNumRule(SvStream &rStream); virtual ~SvxNumRule(); int operator==( const SvxNumRule& ) const; @@ -314,9 +302,7 @@ public: SvxNumRule& operator=( const SvxNumRule& ); - // --> OD 2008-01-09 #newlistlevelattrs# - no longer used -// SvStream& Store(SvStream &rStream); - // <-- + SvStream& Store(SvStream &rStream); const SvxNumberFormat* Get(USHORT nLevel)const; const SvxNumberFormat& GetLevel(USHORT nLevel)const; @@ -354,11 +340,9 @@ public: virtual ~SvxNumBulletItem(); virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; - // --> OD 2008-01-09 #newlistlevelattrs# - no longer used -// virtual SfxPoolItem* Create(SvStream &, USHORT) const; -// virtual SvStream& Store(SvStream &, USHORT nItemVersion ) const; -// virtual USHORT GetVersion( USHORT nFileVersion ) const; - // <-- + virtual SfxPoolItem* Create(SvStream &, USHORT) const; + USHORT GetVersion( USHORT nFileVersion ) const; + virtual SvStream& Store(SvStream &, USHORT nItemVersion ) const; virtual int operator==( const SfxPoolItem& ) const; SvxNumRule* GetNumRule() const {return pNumRule;} diff --git a/svx/inc/svx/sdr/contact/viewobjectcontactofunocontrol.hxx b/svx/inc/svx/sdr/contact/viewobjectcontactofunocontrol.hxx index 87a1de55ec0a..f6cc2abf32f6 100644 --- a/svx/inc/svx/sdr/contact/viewobjectcontactofunocontrol.hxx +++ b/svx/inc/svx/sdr/contact/viewobjectcontactofunocontrol.hxx @@ -105,8 +105,11 @@ namespace sdr { namespace contact { // support for Primitive2D virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + // visibility check + virtual bool isPrimitiveVisible( const DisplayInfo& _rDisplayInfo ) const; + private: - ViewObjectContactOfUnoControl(); // never implemented + ViewObjectContactOfUnoControl(); // never implemented ViewObjectContactOfUnoControl( const ViewObjectContactOfUnoControl& ); // never implemented ViewObjectContactOfUnoControl& operator=( const ViewObjectContactOfUnoControl& ); // never implemented }; diff --git a/svx/inc/svx/selectioncontroller.hxx b/svx/inc/svx/selectioncontroller.hxx index 5cf8c294a1bb..b9c04b54c0dc 100644 --- a/svx/inc/svx/selectioncontroller.hxx +++ b/svx/inc/svx/selectioncontroller.hxx @@ -33,6 +33,8 @@ #include "svx/svxdllapi.h" +#include <boost/shared_ptr.hpp> + #include <cppuhelper/weak.hxx> class KeyEvent; @@ -70,6 +72,15 @@ public: virtual bool GetMarkedObjModel( SdrPage* pNewPage ); virtual bool PasteObjModel( const SdrModel& rModel ); + + /** returns a format paint brush set from the current selection */ + virtual bool TakeFormatPaintBrush( boost::shared_ptr< SfxItemSet >& rFormatSet ); + + /** applies a format paint brush set from the current selection. + if bNoCharacterFormats is true, no character attributes are changed. + if bNoParagraphFormats is true, no paragraph attributes are changed. + */ + virtual bool ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoCharacterFormats, bool bNoParagraphFormats ); }; } diff --git a/svx/inc/svx/svdedxv.hxx b/svx/inc/svx/svdedxv.hxx index 17333ad74459..293e50896044 100644 --- a/svx/inc/svx/svdedxv.hxx +++ b/svx/inc/svx/svdedxv.hxx @@ -41,6 +41,8 @@ // Vorausdeklarationen //************************************************************ +#include <boost/shared_ptr.hpp> + class SdrOutliner; class OutlinerView; class EditStatus; @@ -282,6 +284,21 @@ public: rtl::Reference< sdr::SelectionController > getSelectionController() const { return mxSelectionController; } + /** returns true if the shape identified by its inventor and identifier supports format paint brush operation */ + virtual bool SupportsFormatPaintbrush( UINT32 nObjectInventor, UINT16 nObjectIdentifier ) const; + + /** returns a format paint brush set from the current selection */ + virtual bool TakeFormatPaintBrush( boost::shared_ptr< SfxItemSet >& rFormatSet ); + + /** applies a format paint brush set from the current selection. + if bNoCharacterFormats is true, no character attributes are changed. + if bNoParagraphFormats is true, no paragraph attributes are changed. + */ + virtual void ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoCharacterFormats, bool bNoParagraphFormats ); + + /** helper function for selections with multiple SdrText for one SdrTextObj (f.e. tables ) */ + void ApplyFormatPaintBrushToText( SfxItemSet& rFormatSet, SdrTextObj& rTextObj, SdrText* pText, bool bNoCharacterFormats, bool bNoParagraphFormats ); + protected: virtual void OnBeginPasteOrDrop( PasteOrDropInfos* pInfos ); virtual void OnEndPasteOrDrop( PasteOrDropInfos* pInfos ); diff --git a/svx/prj/d.lst b/svx/prj/d.lst index e4d99f480ad6..8b4675feb3e9 100644 --- a/svx/prj/d.lst +++ b/svx/prj/d.lst @@ -680,5 +680,12 @@ mkdir: %_DEST%\inc%_EXT%\svx\sdr\table ..\uiconfig\accelerator\en-US\*.xml %_DEST%\xml%_EXT%\uiconfig\global\accelerator\en-US\*.xml ..\uiconfig\accelerator\es\*.xml %_DEST%\xml%_EXT%\uiconfig\global\accelerator\es\*.xml +..\inc\svx\subtoolboxcontrol.hxx %_DEST%\inc%_EXT%\svx\subtoolboxcontrol.hxx +..\inc\svx\svdtext.hxx %_DEST%\inc%_EXT%\svx\svdtext.hxx +..\inc\svx\svdotable.hxx %_DEST%\inc%_EXT%\svx\svdotable.hxx +..\inc\svx\selectioncontroller.hxx %_DEST%\inc%_EXT%\svx\selectioncontroller.hxx +..\inc\svx\helperhittest3d.hxx %_DEST%\inc%_EXT%\svx\helperhittest3d.hxx +..\inc\svx\optimprove.hxx %_DEST%\inc%_EXT%\svx\optimprove.hxx +..\inc\svx\msvbahelper.hxx %_DEST%\inc%_EXT%\svx\msvbahelper.hxx ..\%__SRC%\bin\*-layout.zip %_DEST%\pck%_EXT%\*.* diff --git a/svx/source/dialog/hyperdlg.cxx b/svx/source/dialog/hyperdlg.cxx index 9a517a66ad42..ad5854e8bb9c 100644 --- a/svx/source/dialog/hyperdlg.cxx +++ b/svx/source/dialog/hyperdlg.cxx @@ -76,9 +76,11 @@ SvxHlinkDlgWrapper::SvxHlinkDlgWrapper( Window* _pParent, USHORT nId, pWindow = mpDlg->GetWindow(); ((MyStruct*)pImp)->bVisible = FALSE; - if ( pInfo->aSize.Width() != 0 && pInfo->aSize.Height() != 0 ) + Window* pTopWindow = 0; + if ( pInfo->aSize.Width() != 0 && pInfo->aSize.Height() != 0 && + (0 != (pTopWindow = SFX_APP()->GetTopWindow()))) { - Size aParentSize( SFX_APP()->GetTopWindow()->GetSizePixel() ); + Size aParentSize( pTopWindow->GetSizePixel() ); Size aDlgSize ( GetSizePixel () ); if( aParentSize.Width() < pInfo->aPos.X() ) diff --git a/svx/source/editeng/editdoc.cxx b/svx/source/editeng/editdoc.cxx index acf278e2d01f..c43c91a02d1f 100644 --- a/svx/source/editeng/editdoc.cxx +++ b/svx/source/editeng/editdoc.cxx @@ -1427,9 +1427,11 @@ XubString EditDoc::GetParaAsString( ContentNode* pNode, USHORT nStartPos, USHORT else pNextFeature = 0; // Feature interessiert unten nicht - DBG_ASSERT( nEnd >= nIndex, "Ende vorm Index?" ); - aStr += XubString( *pNode, nIndex, nEnd-nIndex ); + //!! beware of sub string length of -1 which is also defined as STRING_LEN and + //!! thus would result in adding the whole sub string up to the end of the node !! + if (nEnd > nIndex) + aStr += XubString( *pNode, nIndex, nEnd - nIndex ); if ( pNextFeature ) { @@ -1790,7 +1792,12 @@ BOOL EditDoc::RemoveAttribs( ContentNode* pNode, USHORT nStart, USHORT nEnd, Edi } if ( bChanged ) + { + // char attributes need to be sorted by start again + pNode->GetCharAttribs().ResortAttribs(); + SetModified( TRUE ); + } return bChanged; } diff --git a/svx/source/fmcomp/gridcell.cxx b/svx/source/fmcomp/gridcell.cxx index 1b98cea4da55..f4229b1bcb0c 100644 --- a/svx/source/fmcomp/gridcell.cxx +++ b/svx/source/fmcomp/gridcell.cxx @@ -2080,7 +2080,7 @@ SpinField* DbCurrencyField::createField( Window* _pParent, WinBits _nFieldStyle, //------------------------------------------------------------------------------ double DbCurrencyField::GetCurrency(const Reference< ::com::sun::star::sdb::XColumn >& _rxField, const Reference< XNumberFormatter >& xFormatter) const { - volatile double fValue = GetValue(_rxField, xFormatter); + double fValue = GetValue(_rxField, xFormatter); if (m_nScale) { // OSL_TRACE("double = %.64f ",fValue); @@ -2158,7 +2158,7 @@ sal_Bool DbCurrencyField::commitControl() Any aVal; if (aText.Len() != 0) // nicht null { - volatile double fValue = ((LongCurrencyField*)m_pWindow)->GetValue(); + double fValue = ((LongCurrencyField*)m_pWindow)->GetValue(); if (m_nScale) { fValue /= ::rtl::math::pow10Exp(1.0, m_nScale); diff --git a/svx/source/intro/intro_tmpl.hrc b/svx/source/intro/intro_tmpl.hrc index ad3a628213be..f724cd476ec2 100644 --- a/svx/source/intro/intro_tmpl.hrc +++ b/svx/source/intro/intro_tmpl.hrc @@ -59,6 +59,7 @@ ItemList = \ < "Jost Ammon" ; > ; \ < "Paolo Amodio" ; > ; \ < "Abdullah Anar" ; > ; \ + < "Gene Anaya" ; > ; \ < "Christian Andersen" ; > ; \ < "Frank J. Andersen" ; > ; \ < "Jan Moller Andersen" ; > ; \ @@ -94,7 +95,9 @@ ItemList = \ < "David Bartlett" ; > ; \ < "Sascha Ballach" ; > ; \ < "Stefan Baltzer" ; > ; \ + < "Jayant Balraj Madavi" ; > ; \ < "Claudio Bandaloukas" ; > ; \ + < "Omar Bar-or" ; > ; \ < "Hrega Basu" ; > ; \ < "Mathias Bauer" ; > ; \ < "Martin Baulig" ; > ; \ @@ -119,6 +122,7 @@ ItemList = \ < "Zaheda Bhorat" ; > ; \ < "Andreas Bille" ; > ; \ < "Oliver Bietzer" ; > ; \ + < "Eric Bischoff" ; > ; \ < "Marissa Bishop" ; > ; \ < "Torkil Bladt" ; > ; \ < "Martin Blapp" ; > ; \ @@ -134,6 +138,7 @@ ItemList = \ < "Csaba Borbola" ; > ; \ < "Gregor Bornemann" ; > ; \ < "Thorsten Bosbach" ; > ; \ + < "Eric Bosdonnat" ; > ; \ < "Daniel Boss" ; > ; \ < "David Boswell" ; > ; \ < "Freddy Boswell" ; > ; \ @@ -179,6 +184,8 @@ ItemList = \ < "Kimmy Chen" ; > ; \ < "Robert Chen" ; > ; \ < "Yu Aaron Cheng" ; > ; \ + < "Jian Hong Cheng" ; > ; \ + < "Xiuzhi Cheng" ; > ; \ < "Allan B. Christensen" ; > ; \ < "Steen Christensen" ; > ; \ < "Marco Ciampa" ; > ; \ @@ -190,6 +197,7 @@ ItemList = \ < "Vicky Chan" ; > ; \ < "Michael J. Cole" ; > ; \ < "Urska Colner" ; > ; \ + < "Alexandro Colorado" ; > ; \ < "Compaq Computer Corperation" ; > ; \ < "Karen Conatser" ; > ; \ < "Confucian Pro. Technology" ; > ; \ @@ -197,11 +205,13 @@ ItemList = \ < "Lee Corbin" ; > ; \ < "Dietmar Cordes" ; > ; \ < "Berend Cornelius" ; > ; \ + < "Clayton Cornell" ; > ; \ < "Jesus Corrius" ; > ; \ < "Martin Coxall" ; > ; \ < "Joszef Csongradi" ; > ; \ < "Alessandro Cumin" ; > ; \ < "Johannes Czerwinski" ; > ; \ + < "Michael Cziebalski" ; > ; \ < "Valentina Dagiene" ; > ; \ < "Richard Daley" ; > ; \ < "Viktoras Dagys" ; > ; \ @@ -218,9 +228,11 @@ ItemList = \ < "Francois Dechelle" ; > ; \ < "Andrea Decorte" ; > ; \ < "Martijn Dekkers" ; > ; \ + < "Andrew Dent" ; > ; \ < "Westley Alan Dent" ; > ; \ < "Luiz Augusto Von Dentz" ; > ; \ < "Helge Delfs" ; > ; \ + < "Naren Devaiah" ; > ; \ < "Frederic Juan Diaz" ; > ; \ < "Scott Dietrich" ; > ; \ < "Frederik Dietz" ; > ; \ @@ -230,8 +242,10 @@ ItemList = \ < "Vitor Domingos" ; > ; \ < "Jean-Francois Donikian" ; > ; \ < "Simford Dong" ; > ; \ + < "Nitri Dongre" ; > ; \ < "Thomas Doru" ; > ; \ < "Willem van Dorp" ; > ; \ + < "Radek Doulik" ; > ; \ < "Davide Dozza" ; > ; \ < "Derek Dreger" ; > ; \ < "Carsten Driesner" ; > ; \ @@ -249,9 +263,11 @@ ItemList = \ < "Rene Engelhard" ; > ; \ < "Mina Erickson" ; > ; \ < "Peter Eriksen" ; > ; \ + < "Per Eriksson" ; > ; \ < "Alberto Escudero-Pascual" ; > ; \ < "Fabalabs Software GmbH" ; > ; \ < "Charles Anthony Fannan" ; > ; \ + < "Jean-Baptiste Faure" ; > ; \ < "Ralf-Michael Fehr" ; > ; \ < "Vladimir Fedak" ; > ; \ < "Zoltan Fekete" ; > ; \ @@ -261,6 +277,7 @@ ItemList = \ < "Claudio Ferreira" ; > ; \ < "Raquel Fares Ferreira" ; > ; \ < "Marco Fiemozzi" ; > ; \ + < "Claudio F Filho" ; > ; \ < "Pierre de Filippis" ; > ; \ < "Jan Firich" ; > ; \ < "Andre Fischer" ; > ; \ @@ -271,6 +288,7 @@ ItemList = \ < "Kenneth Foskey" ; > ; \ < "Duncan Foster" ; > ; \ < "Tim Foster" ; > ; \ + < "David Franser" ; > ; \ < "Peter Frandsen" ; > ; \ < "Gary Frederick" ; > ; \ < "Nils Fuhrmann" ; > ; \ @@ -280,8 +298,11 @@ ItemList = \ < "Tom Garland" ; > ; \ < "Wolfram Garten" ; > ; \ < "Martin Gallwey" ; > ; \ + < "Pierre-Andre Galmes" ; > ; \ < "Roberto Galoppini" ; > ; \ < "Tony Galmiche" ; > ; \ + < "Sunil Gandhi" ; > ; \ + < "Zemin Gao" ; > ; \ < "Sophie Gautier" ; > ; \ < "Kathy Gavin" ; > ; \ < "Alexander Gelfenbain" ; > ; \ @@ -327,6 +348,7 @@ ItemList = \ < "Chris Halls" ; > ; \ < "Arne Christian Harseth" ; > ; \ < "Syamsul Anuar Abdul Hamid" ; > ; \ + < "Bo Han" ; > ; \ < "Ove Hanebring" ; > ; \ < "Jens K. Hansen" ; > ; \ < "Martin Willemoes Hansen" ; > ; \ @@ -423,6 +445,9 @@ ItemList = \ < "Byrial Ole Jensen" ; > ; \ < "Ricky Hugh Jensen" ; > ; \ < "Tatjiana Jevsikova" ; > ; \ + < "Berry Jia" ; > ; \ + < "Mingfei Jia" ; > ; \ + < "Chuang Jiang" ; > ; \ < "Jiao Jianhua" ; > ; \ < "Gary Johnston" ; > ; \ < "Dewi Jones" ; > ; \ @@ -430,6 +455,7 @@ ItemList = \ < "Anders Colding Jorgesen" ; > ; \ < "Peter Junge" ; > ; \ < "Christian Junker" ; > ; \ + < "Pascal Junck" ; > ; \ < "Henrik Just" ; > ; \ < "Christian Kaas" ; > ; \ < "Yukata Kachi" ; > ; \ @@ -438,16 +464,19 @@ ItemList = \ < "masahisa kamataki" ; > ; \ < "Tim Kampa" ; > ; \ < "Petr Kania" ; > ; \ - < "Tim Kampa" ; > ; \ < "Mick Kappenburg" ; > ; \ < "Etsushi Kato" ; > ; \ < "Yosuke Kato" ; > ; \ + < "Hirano Kazunari" ; > ; \ + < "Mihaela Kedikova" ; > ; \ < "Juergen Keil" ; > ; \ < "Lina Kemmel" ; > ; \ < "Darren Kenny" ; > ; \ + < "Dhanajay Keskar" ; > ; \ < "Ilja Ketris" ; > ; \ < "Philipp Kewisch Ketris" ; > ; \ < "Ossama Khayat" ; > ; \ + < "Volodymyr Khrystynych" ; > ; \ < "Ilja Ketris" ; > ; \ < "Hermann Kienlein" ; > ; \ < "Artem Khvat" ; > ; \ @@ -462,6 +491,7 @@ ItemList = \ < "Thomas Klarhoefer" ; > ; \ < "Sven Klawitter" ; > ; \ < "Branislav Klocok" ; > ; \ + < "Matthias Klose" ; > ; \ < "Halfdan Holger Knudsen" ; > ; \ < "Rune Tendal Kock" ; > ; \ < "Magdy Samuel Abdel Koddous" ; > ; \ @@ -473,6 +503,7 @@ ItemList = \ < "Uros Kositer" ; > ; \ < "Peter Kosmalla" ; > ; \ < "Nobuhiro Koura" ; > ; \ + < "Lazlo Kovacs" ; > ; \ < "Martin Kretzchmar" ; > ; \ < "Ramesh Krishnamagaru" ; > ; \ < "Jayamohan Krishnasamy" ; > ; \ @@ -498,6 +529,7 @@ ItemList = \ < "Dr. Swapnil Vishnu Lale" ; > ; \ < "Antti Lampinen/Kongo Group" ; > ; \ < "Massimo Lanfranconi" ; > ; \ + < "Marcus Lange" ; > ; \ < "Peter Lange" ; > ; \ < "Thomas Lange" ; > ; \ < "Lars Langhans" ; > ; \ @@ -518,21 +550,36 @@ ItemList = \ < "Yoann Le Bars" ; > ; \ < "Armin Le Grand" ; > ; \ < "Brigitte Le Grand" ; > ; \ + < "Jakob Lechner" ; > ; \ + < "Michael Leibowitz" ; > ; \ < "Serge Le Louarne" ; > ; \ < "Dong Lee" ; > ; \ < "Kenneth Lee" ; > ; \ < "Gregory Leffler" ; > ; \ < "Hercule Li" ; > ; \ + < "Hui Li" ; > ; \ + < "Jian Li" ; > ; \ < "Tommy C. Li" ; > ; \ < "Wind Li" ; > ; \ + < "Xing Li" ; > ; \ + < "Ping Liao" ; > ; \ < "Xin Liao" ; > ; \ + < "Weike Liang" ; > ; \ < "Rony Liemmukda" ; > ; \ + < "Tor Lillqvist" ; > ; \ < "Patranun Limudomporn" ; > ; \ < "Archie Lin" ; > ; \ < "Fong Lin" ; > ; \ < "Martha J. Lindeman" ; > ; \ < "Joachim Lingner" ; > ; \ < "Christian Lippka" ; > ; \ + < "Chen Liu" ; > ; \ + < "Jianli Liu" ; > ; \ + < "Mindy Liu" ; > ; \ + < "Tao Liu" ; > ; \ + < "YiSong Liu" ; > ; \ + < "Yu Liu" ; > ; \ + < "Yuhua Liu" ; > ; \ < "ALT Linux Russia" ; > ; \ < "Jonathan S. Lister" ; > ; \ < "Vedran Ljubovic" ; > ; \ @@ -544,6 +591,7 @@ ItemList = \ < "Anthony Long" ; > ; \ < "Roberto Loprieno" ; > ; \ < "Riccardo Losselli" ; > ; \ + < "Jackson Low" ; > ; \ < "Patrick Luby" ; > ; \ < "Christoph Lukasiak" ; > ; \ < "Robert Ludvik" ; > ; \ @@ -551,17 +599,23 @@ ItemList = \ < "Edgardo Lugaresi" ; > ; \ < "Gavin Lu" ; > ; \ < "Morton Lund" ; > ; \ + < "Jingrong Luo" ; > ; \ < "Zaoliang Luo" ; > ; \ < "Ian Lynch" ; > ; \ + < "Jun Ma" ; > ; \ < "Thomas J.L. MacDermott" ; > ; \ < "Marcio A. Macendo" ; > ; \ < "George Machitidze" ; > ; \ < "Diane Mackay" ; > ; \ + < "Prasad Madhav" ; > ; \ < "Jorgen Madsen" ; > ; \ < "Ove Madsen" ; > ; \ < "Martin Maher" ; > ; \ + < "Babak Mahbod" ; > ; \ + < "Nakata Maho " ; > ; \ < "Wad Mahsckoff" ; > ; \ < "Milena Majorosova" ; > ; \ + < "Yonggang Mao" ; > ; \ < "Libor Maly" ; > ; \ < "Mandrake Soft S.A." ; > ; \ < "Libor Maly" ; > ; \ @@ -600,15 +654,18 @@ ItemList = \ < "Aaron R. Meck" ; > ; \ < "Nirav Mehta" ; > ; \ < "Michael Meeks" ; > ; \ + < "Frederico Mena-Quintero" ; > ; \ < "James Meng" ; > ; \ < "Frank Meies" ; > ; \ < "Antonius Tjipke Meinen" ; > ; \ + < "Ismael Merzaq" ; > ; \ < "Andreas Meyer" ; > ; \ < "Markus Meyer" ; > ; \ < "Rolf Meyer" ; > ; \ < "Djapparova Meruert" ; > ; \ < "Ismael Merzaq" ; > ; \ < "Michael Mi" ; > ; \ + < "Bjoern Michaelsen" ; > ; \ < "Boris Michelsz" ; > ; \ < "Bjoern Milcke" ; > ; \ < "Marcin Milkowski" ; > ; \ @@ -616,6 +673,7 @@ ItemList = \ < "Aleksander Mikhailov-Erlich" ; > ; \ < "Paul A. Miller" ; > ; \ < "Arkadiusz Miskiewicz" ; > ; \ + < "Petr Mladek" ; > ; \ < "Erica Modena" ; > ; \ < "Filip Molcan" ; > ; \ < "Tadeusz Mollun" ; > ; \ @@ -639,6 +697,7 @@ ItemList = \ < "National Centre for Software Technology, India" ; > ; \ < "Takamichi Nara" ; > ; \ < "Peter Naulls" ; > ; \ + < "Jan Navratil" ; > ; \ < "Niklas Nebel" ; > ; \ < "Ales Nehyba" ; > ; \ < "Christoph Neumann" ; > ; \ @@ -650,11 +709,13 @@ ItemList = \ < "Jan Normann Nielsen" ; > ; \ < "Ko-haw Nieh" ; > ; \ < "Peter Van Nieuwenhoven" ; > ; \ + < "Jan Nieuwenhuizen" ; > ; \ < "Dhiraj Nilange" ; > ; \ < "Sofia Nilsson" ; > ; \ < "Kazutoshi Nimura" ; > ; \ < "Jes Drost Nissen" ; > ; \ < "Sofia Nilsson" ; > ; \ + < "Christoph Noack" ; > ; \ < "Bertram Nolte" ; > ; \ < "Niels Nordmann" ; > ; \ < "Michael Novati" ; > ; \ @@ -683,6 +744,7 @@ ItemList = \ < "Subiaco Paola" ; > ; \ < "Kannada Ganaka Parishat" ; > ; \ < "Anna Parovel" ; > ; \ + < "Pierre Pasteau" ; > ; \ < "Shripad Patki" ; > ; \ < "Andreas Pauley" ; > ; \ < "Viktorija Paulikaite" ; > ; \ @@ -719,13 +781,16 @@ ItemList = \ < "Nicola Previati" ; > ; \ < "Rhoslyn Prys" ; > ; \ < "Jaroslaw Jan Pyszny" ; > ; \ + < "Jonathan Pryor" ; > ; \ < "Zhang Qingbin" ; > ; \ + < "Canghua Qu" ; > ; \ < "Volker Quetschke" ; > ; \ < "Tino Rachui" ; > ; \ < "Radostin Radnev" ; > ; \ < "Pramod Raghavendra" ; > ; \ < "Adam Rambousek" ; > ; \ < "Jacqueline Rahemipour" ; > ; \ + < "Goran Rakic" ; > ; \ < "Adam Rambousek" ; > ; \ < "Kay Ramme" ; > ; \ < "Klaus Ramstock" ; > ; \ @@ -748,6 +813,7 @@ ItemList = \ < "Kjell Arne Rekaa" ; > ; \ < "Frco. Javier Rial" ; > ; \ < "Nicholas Richards" ; > ; \ + < "Georg Richter" ; > ; \ < "Jozef Riha" ; > ; \ < "Michael Lee Rilee" ; > ; \ < "Modestas Rimkus" ; > ; \ @@ -822,6 +888,7 @@ ItemList = \ < "Syed Ahmad Shazali" ; > ; \ < "Darragh Sherwin" ; > ; \ < "Gia Shervashidze" ; > ; \ + < "Wei Guo Shi" ; > ; \ < "Norikatsu Shigemura" ; > ; \ < "Bernhard Siaud" ; > ; \ < "Joerg Sievers" ; > ; \ @@ -830,11 +897,13 @@ ItemList = \ < "Keld Jorn Simonsen" ; > ; \ < "Michael Sicotte" ; > ; \ < "Clytie Ann Siddall" ; > ; \ + < "Raul Siddahartha" ; > ; \ < "SIL International (Freddy Boswell)" ; > ; \ < "Mukund Sivaraman" ; > ; \ < "Manoranjan Kr. Singh" ; > ; \ < "G. Roderick Singleton" ; > ; \ < "Joerg Skottke" ; > ; \ + < "Sarah Smith" ; > ; \ < "Timothy P. Smith" ; > ; \ < "Colm Smyth" ; > ; \ < "Javier Sola" ; > ; \ @@ -860,9 +929,11 @@ ItemList = \ < "Erik William Strack" ; > ; \ < "Daniel Strome" ; > ; \ < "Fridrich Strba" ; > ; \ + < "Keith Stribley" ; > ; \ < "Ulf Stroehler" ; > ; \ < "Daniel Strome" ; > ; \ < "Louis Suarez-Potts" ; > ; \ + < "Muthu Subramanian" ; > ; \ < "Matthias Suess" ; > ; \ < "Tae Hoon Suk of Intellikorea Ca., Ltd." ; > ; \ < "Arthit Suriyawongkul" ; > ; \ @@ -880,7 +951,9 @@ ItemList = \ < "Christina Taliaferro" ; > ; \ < "Makoto Takizawa" ; > ; \ < "Masaki Tamakoshi" ; > ; \ + < "Quanfa Tang" ; > ; \ < "Alberto Di Taranto" ; > ; \ + < "David Tardon" ; > ; \ < "Uday K. Tashildar" ; > ; \ < "Stefan Taxhet" ; > ; \ < "William Terry" ; > ; \ @@ -896,6 +969,7 @@ ItemList = \ < "James M. Thompson" ; > ; \ < "Holger Thon" ; > ; \ < "Alexander Thurgood" ; > ; \ + < "Caio Tiago Oliveira" ; > ; \ < "Lukas Tinkl" ; > ; \ < "Gerhard Tonn" ; > ; \ < "Istvan Torda" ; > ; \ @@ -944,6 +1018,7 @@ ItemList = \ < "William Wan" ; > ; \ < "Funda Wang" ; > ; \ < "Polly Wang" ; > ; \ + < "Xu Ming Wang" ; > ; \ < "Yi Wang" ; > ; \ < "Sangay Wangchuk" ; > ; \ < "Matthew Wardrop" ; > ; \ @@ -954,6 +1029,7 @@ ItemList = \ < "Martin Webermann" ; > ; \ < "Donata Wegener" ; > ; \ < "Law Yee Wei" ; > ; \ + < "Zhao Wei" ; > ; \ < "Michel Weimerskirch" ; > ; \ < "Prof. Dr. Eduard Werner" ; > ; \ < "Michael Wever" ; > ; \ @@ -974,19 +1050,25 @@ ItemList = \ < "Eugene T.S. Wong" ; > ; \ < "Pui Lam Wong" ; > ; \ < "Minna Wu" ; > ; \ + < "Yan Wu" ; > ; \ < "Stephan Wunderlich" ; > ; \ < "Simos Xenitellis" ; > ; \ < "Shun Min Serena Xiao" ; > ; \ < "Nat Friedman for Ximian" ; > ; \ + < "Antonio Xu" ; > ; \ + < "Dehua Xu" ; > ; \ < "Gary Yang" ; > ; \ < "Yukiharu Yabuki" ; > ; \ < "Kliment Pavlov Yanev" ; > ; \ < "Taniguchi Yasuaki" ; > ; \ < "Oleg Yegorov" ; > ; \ + < "Steve Yin" ; > ; \ < "Kunihiko Yokota" ; > ; \ < "Kim Il Yong" ; > ; \ < "Kohei Yoshida" ; > ; \ < "Deltasoft Yu" ; > ; \ + < "Guoqiang Yu" ; > ; \ + < "Xiaoyang Yu" ; > ; \ < "Gary Yuen" ; > ; \ < "Christian Zagrodnick" ; > ; \ < "George Zahopulos" ; > ; \ @@ -996,7 +1078,10 @@ ItemList = \ < "Fuxin Zhang" ; > ; \ < "Joy Zhang" ; > ; \ < "Lei Phill Zhang" ; > ; \ + < "Xiaofei Zhang" ; > ; \ + < "Jianwei Zhao" ; > ; \ < "May Zhang" ; > ; \ + < "Jeremy Zheng" ; > ; \ < "Thorsten Ziehm" ; > ; \ < "Stefan Ziel" ; > ; \ < "Jan Zitniak" ; > ; \ @@ -1015,7 +1100,7 @@ ItemList = \ < "" ; > ; \ < "FUNCTIONAL STAFF" ; 8 ; > ; \ < "" ; > ; \ - < "Sabine Schroeder" ; > ; \ + < "Sabine Huetsch" ; > ; \ < "" ; > ; \ < "OpenOffice.org COORDINATION" ; 8 ; > ; \ < "" ; > ; \ @@ -1026,13 +1111,14 @@ ItemList = \ < "Matthias Huetsch" ; > ; \ < "Kay Ramme" ; > ; \ < "" ; > ; \ - < "SUN SIGMA BLACK BELT" ; 8 ; > ; \ - < "" ; > ; \ - < "Stefan Zimmermann" ; > ; \ - < "" ; > ; \ < "PROGRAM MANAGEMENT" ; 8 ; > ; \ < "" ; > ; \ + < "Joost Andrae" ; > ; \ + < "Martin Damboldt" ; > ; \ + < "Martin Hollmichel" ; > ; \ < "Andre Kuemmel" ; > ; \ + < "Marcus Lange" ; > ; \ + < "Uwe Luebbers" ; > ; \ < "" ; > ; \ < "" ; > ; \ < "%PRODUCTNAME DEVELOPMENT" ; 8 ; > ; \ @@ -1047,7 +1133,6 @@ ItemList = \ < "ODF" ; 8 ; > ; \ < "" ; > ; \ < "Svante Schubert" ; > ; \ - < "Lars Behrmann" ; > ; \ < "" ; > ; \ < "DESIGN" ; 8 ; > ; \ < "" ; > ; \ @@ -1068,10 +1153,9 @@ ItemList = \ < "Thomas Lange" ; > ; \ < "Andreas Martens" ; > ; \ < "Frank Meies" ; > ; \ + < "Bjoern Michaelsen" ; > ; \ < "Andreas Schluens" ; > ; \ < "Oliver Specht" ; > ; \ - < "Gunnar Timm" ; > ; \ - < "Daniel Vogelheim" ; > ; \ < "Oliver-Rainer Wittmann" ; > ; \ < "Michael Stahl" ; > ; \ < "Mikhail Voitenko" ; > ; \ @@ -1081,8 +1165,6 @@ ItemList = \ < "Kai Ahrens" ; > ; \ < "" ; > ; \ < "Volker Ahrendt" ; > ; \ - < "Thorsten Behrens" ; > ; \ - < "Michael Buettner" ; > ; \ < "Herbert Duerr" ; > ; \ < "Andre Fischer" ; > ; \ < "Ilko Hoepping" ; > ; \ @@ -1100,9 +1182,9 @@ ItemList = \ < "Kai Sommerfeld" ; > ; \ < "" ; > ; \ < "Stephan Bergmann" ; > ; \ - < "Oliver Braun" ; > ; \ < "Andreas Bregas" ; > ; \ < "Steffen Grund" ; > ; \ + < "Mihaela Kedikova" ; > ; \ < "Tobias Krause" ; > ; \ < "Joachim Lingner" ; > ; \ < "Christoph Neumann" ; > ; \ @@ -1112,7 +1194,7 @@ ItemList = \ < "Dirk Voelzke" ; > ; \ < "" ; > ; \ < "" ; > ; \ - < "%PRODUCTNAME PIM & CALC" ; 8 ; > ; \ + < "%PRODUCTNAME CALC" ; 8 ; > ; \ < "" ; > ; \ < "Stephan Schaefer" ; > ; \ < "" ; > ; \ @@ -1120,32 +1202,15 @@ ItemList = \ < "Daniel Boelzle" ; > ; \ < "Berend Cornelius" ; > ; \ < "Ingrid Halama" ; > ; \ - < "Philipp Kewisch" ; > ; \ < "Bjoern Milcke" ; > ; \ < "Niklas Nebel" ; > ; \ - < "Frank Neumann" ; > ; \ < "Eike Rathke" ; > ; \ < "Daniel Rentz" ; > ; \ < "" ; > ; \ < "" ; > ; \ - < "%PRODUCTNAME CONFIGURATION MANAGER" ; 8 ; > ; \ - < "" ; > ; \ - < "Dirk Grobler" ; > ; \ - < "" ; > ; \ - < "Joerg Barfurth" ; > ; \ - < "Rodrigo Fernandez-Vizarra Bonet" ; > ; \ - < "Katell Galard" ; > ; \ - < "Geoff Higgins" ; > ; \ - < "Stephen Lewis" ; > ; \ - < "Cyrille Moureaux" ; > ; \ - < "Thomas Pfohe" ; > ; \ - < "Klaus Ruehl" ; > ; \ - < "" ; > ; \ - < "" ; > ; \ < "USER EXPERIENCE" ; 8 ; > ; \ < "" ; > ; \ - < "Lutz Hoeger" ; > ; \ - < "" ; > ; \ + < "Andreas Bartel" ; > ; \ < "Bettina Haberer" ; > ; \ < "Christian Jansen" ; > ; \ < "Frank Loehmann" ; > ; \ @@ -1156,28 +1221,22 @@ ItemList = \ < "" ; > ; \ < "Nils Fuhrmann" ; > ; \ < "" ; > ; \ - < "PROGRAM MANAGEMENT" ; 8 ; > ; \ < "" ; > ; \ - < "Joost Andrae" ; > ; \ - < "Martin Damboldt" ; > ; \ - < "Martin Hollmichel" ; > ; \ - < "" ; > ; \ - < "RELEASE ENGINEERING & DEVELOPMENT TOOLS" ; 8 ; > ; \ - < "" ; > ; \ - < "Joerg Jahnke" ; > ; \ + < "RELEASE ENGINEERING " ; 8 ; > ; \ < "" ; > ; \ - < "RELEASE ENGINEERING" ; 8 ; > ; \ + < "Ruediger Timm" ; > ; \ < "" ; > ; \ < "Oliver Bolte" ; > ; \ < "Vladimir Glazounov" ; > ; \ < "Ivo Hinkelmann" ; > ; \ < "Hans-Joachim Lankenau" ; > ; \ < "Jens-Heiner Rechtien" ; > ; \ - < "Ruediger Timm" ; > ; \ < "Kurt Zenker" ; > ; \ < "" ; > ; \ < "DEVELOPMENT TOOLS" ; 8 ; > ; \ < "" ; > ; \ + < "Joerg Jahnke" ; > ; \ + < "" ; > ; \ < "Bernd Eilers" ; > ; \ < "Gregor Hartmann" ; > ; \ < "Frank Mau" ; > ; \ @@ -1213,12 +1272,10 @@ ItemList = \ < "Marc Neumann" ; > ; \ < "Wolfram Garten" ; > ; \ < "Christian Guenther" ; > ; \ - < "Fredrik Haegg" ; > ; \ < "" ; > ; \ < "QA %PRODUCTNAME INFRASTRUCTURE" ; 8 ; > ; \ < "" ; > ; \ < "Olaf Felka" ; > ; \ - < "Uwe Luebbers" ; > ; \ < "Thorsten Martens" ; > ; \ < "Joerg W. Skottke" ; > ; \ < "Andreas Treumann" ; > ; \ @@ -1238,83 +1295,30 @@ ItemList = \ < "Martina Waller" ; > ; \ < "" ; > ; \ < "" ; > ; \ - < "GLOBALIZATION" ; 8 ; > ; \ - < "" ; > ; \ - < "Management" ; 8 ; > ; \ - < "" ; > ; \ - < "Tom Garland" ; > ; \ - < "Michelle Hills" ; > ; \ - < "Shinobu Matsuzuka" ; > ; \ - < "" ; > ; \ - < "PROGRAM MANAGEMENT" ; 8 ; > ; \ + < "GLOBALIZATION PROGRAM MANAGEMENT" ; 8 ; > ; \ < "" ; > ; \ < "Rafaella Braconi" ; > ; \ < "" ; > ; \ - < "Engineering and Testing" ; 8 ; > ; \ - < "" ; > ; \ - < "Ales Cernosek" ; > ; \ - < "Petr Dudacek" ; > ; \ - < "Karl Hong" ; > ; \ - < "Naoyuki Ishimura" ; > ; \ - < "Aijin Kim" ; > ; \ - < "Ian McDonnell" ; > ; \ - < "Kazuhiro Hatake Takabatake " ; > ; \ - < "Lei Phill Zhang" ; > ; \ - < "May Zhang" ; > ; \ - < "" ; > ; \ - < "Translation Management" ; 8 ; > ; \ - < "" ; > ; \ - < "Monica Badia" ; > ; \ - < "Sofia Nilsson" ; > ; \ - < "Kaoru Oguru" ; > ; \ - < "Joy Zhang" ; > ; \ - < "" ; > ; \ - < "Documentation & Tools" ; 8 ; > ; \ - < "" ; > ; \ - < "Yu Aaron Cheng" ; > ; \ - < "Sven Klawitter" ; > ; \ - < "Hiroko Matano" ; > ; \ - < "Boris Steiner" ; > ; \ - < "Michal Touzin" ; > ; \ - < "" ; > ; \ - < "" ; > ; \ < "MARKETING & OPERATIONS" ; 8 ; > ; \ < "" ; > ; \ - < "PRODUCT & PROGRAM MANAGMENT" ; 8 ; > ; \ + < "PRODUCT MANAGMENT" ; 8 ; > ; \ < "" ; > ; \ < "Goetz Wohlberg" ; > ; \ + < "Lutz Hoeger" ; > ; \ < "" ; > ; \ < "MARKETING" ; 8 ; > ; \ < "" ; > ; \ - < "Alexei Koudriachov" ; > ; \ - < "Ashish Mukharji" ; > ; \ - < "Manish Punjabi" ; > ; \ - < "Erwin Tenhumberg" ; > ; \ + < "Rosana Ardila Biela" ; > ; \ + < "Kay Koll" ; > ; \ < "Iyer Venkatesan" ; > ; \ - < "Jennifer Winger" ; > ; \ < "" ; > ; \ < "OPERATIONS" ; 8 ; > ; \ < "" ; > ; \ - < "Scott Citta" ; > ; \ - < "Jane Cooley" ; > ; \ - < "Lisa Medlin" ; > ; \ < "Parker Proffitt" ; > ; \ < "" ; > ; \ - < "TECHNICAL TRAINING, MARKET &" ; 8 ; > ; \ - < "BUSINESS DEVELOPMENT" ; 8 ; > ; \ - < "" ; > ; \ - < "Matthew Baier" ; > ; \ - < "Herve Bernard" ; > ; \ - < "Kay Koll" ; > ; \ - < "Ted Tudor" ; > ; \ - < "Jane Worden" ; > ; \ - < "Sophia Zheng " ; > ; \ - < "" ; > ; \ - < "ADDITIONAL FUNCTIONS" ; 8 ; > ; \ + < "SUN SIGMA BLACK BELT" ; 8 ; > ; \ < "" ; > ; \ - < "Bill Lane" ; > ; \ - < "Douglas Lenser" ; > ; \ - < "Frank Psotka" ; > ; \ + < "Stefan Zimmermann" ; > ; \ < "" ; > ; \ };\ diff --git a/svx/source/items/numitem.cxx b/svx/source/items/numitem.cxx index 0a9b7786a476..2a607ecf9cab 100644 --- a/svx/source/items/numitem.cxx +++ b/svx/source/items/numitem.cxx @@ -62,6 +62,11 @@ #define DEF_WRITER_LSPACE 500 //Standardeinrueckung #define DEF_DRAW_LSPACE 800 //Standardeinrueckung +#define NUMITEM_VERSION_01 0x01 +#define NUMITEM_VERSION_02 0x02 +#define NUMITEM_VERSION_03 0x03 +#define NUMITEM_VERSION_04 0x04 + using namespace ::com::sun::star; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::uno; @@ -224,157 +229,184 @@ SvxNumberFormat::~SvxNumberFormat() /* -----------------08.12.98 11:14------------------- * * --------------------------------------------------*/ -//SvxNumberFormat::SvxNumberFormat(SvStream &rStream) -//{ -// USHORT nVersion; -// rStream >> nVersion; - -// USHORT nUSHORT; -// rStream >> nUSHORT; -// SetNumberingType((sal_Int16)nUSHORT); -// rStream >> nUSHORT; -// eNumAdjust = (SvxAdjust)nUSHORT; -// rStream >> nUSHORT; -// nInclUpperLevels = (BYTE)nUSHORT; -// rStream >> nUSHORT; -// nStart = nUSHORT; -// rStream >> nUSHORT; -// cBullet = nUSHORT; - -// short nShort; -// rStream >> nShort; -// nFirstLineOffset = nShort; -// rStream >> nShort; -// nAbsLSpace = nShort; -// rStream >> nShort; -// nLSpace = nShort; - -// rStream >> nShort; -// nCharTextDistance = nShort; -// rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); -// rStream.ReadByteString(sPrefix, eEnc); -// rStream.ReadByteString(sSuffix, eEnc); -// rStream.ReadByteString(sCharStyleName, eEnc); -// rStream >> nUSHORT; -// if(nUSHORT) -// { -// SvxBrushItem aHelper(0); -// pGraphicBrush = (SvxBrushItem*) aHelper.Create( rStream, BRUSH_GRAPHIC_VERSION ); -// } -// else -// pGraphicBrush = 0; - -// rStream >> nUSHORT; -// eVertOrient = (sal_Int16)nUSHORT; - -// rStream >> nUSHORT; -// if(nUSHORT) -// { -// pBulletFont = new Font; -// rStream >> *pBulletFont; -// if(!pBulletFont->GetCharSet()) -// pBulletFont->SetCharSet(rStream.GetStreamCharSet()); -// } -// else -// pBulletFont = 0; -// rStream >> aGraphicSize; - -// rStream >> nBulletColor; -// rStream >> nUSHORT; -// nBulletRelSize = nUSHORT; -// rStream >> nUSHORT; -// SetShowSymbol((BOOL)nUSHORT); - -// if( nVersion < NUMITEM_VERSION_03 ) -// cBullet = ByteString::ConvertToUnicode( (sal_Char)cBullet, -// (pBulletFont&&pBulletFont->GetCharSet()) ? pBulletFont->GetCharSet() -// : RTL_TEXTENCODING_SYMBOL ); -// if(pBulletFont) -// { -// BOOL bConvertBulletFont = rStream.GetVersion() <= SOFFICE_FILEFORMAT_50; -// if(bConvertBulletFont) -// { - -// FontToSubsFontConverter pConverter = -// CreateFontToSubsFontConverter(pBulletFont->GetName(), -// FONTTOSUBSFONT_IMPORT|FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS); -// if(pConverter) -// { -// cBullet = ConvertFontToSubsFontChar(pConverter, cBullet); -// String sFontName = GetFontToSubsFontName(pConverter); -// pBulletFont->SetName(sFontName); -// DestroyFontToSubsFontConverter(pConverter); -// } -// } -// } -//} +SvxNumberFormat::SvxNumberFormat(SvStream &rStream) +: mePositionAndSpaceMode( LABEL_WIDTH_AND_POSITION ), + meLabelFollowedBy( LISTTAB ), + mnListtabPos( 0 ), + mnFirstLineIndent( 0 ), + mnIndentAt( 0 ) +{ + + USHORT nVersion; + rStream >> nVersion; + + USHORT nUSHORT; + rStream >> nUSHORT; + SetNumberingType((sal_Int16)nUSHORT); + rStream >> nUSHORT; + eNumAdjust = (SvxAdjust)nUSHORT; + rStream >> nUSHORT; + nInclUpperLevels = (BYTE)nUSHORT; + rStream >> nUSHORT; + nStart = nUSHORT; + rStream >> nUSHORT; + cBullet = nUSHORT; + + short nShort; + rStream >> nShort; + nFirstLineOffset = nShort; + rStream >> nShort; + nAbsLSpace = nShort; + rStream >> nShort; + nLSpace = nShort; + + rStream >> nShort; + nCharTextDistance = nShort; + rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); + rStream.ReadByteString(sPrefix, eEnc); + rStream.ReadByteString(sSuffix, eEnc); + rStream.ReadByteString(sCharStyleName, eEnc); + rStream >> nUSHORT; + if(nUSHORT) + { + SvxBrushItem aHelper(0); + pGraphicBrush = (SvxBrushItem*) aHelper.Create( rStream, BRUSH_GRAPHIC_VERSION ); + } + else + pGraphicBrush = 0; + + rStream >> nUSHORT; + eVertOrient = (sal_Int16)nUSHORT; + + rStream >> nUSHORT; + if(nUSHORT) + { + pBulletFont = new Font; + rStream >> *pBulletFont; + if(!pBulletFont->GetCharSet()) + pBulletFont->SetCharSet(rStream.GetStreamCharSet()); + } + else + pBulletFont = 0; + rStream >> aGraphicSize; + + rStream >> nBulletColor; + rStream >> nUSHORT; + nBulletRelSize = nUSHORT; + rStream >> nUSHORT; + SetShowSymbol((BOOL)nUSHORT); + + if( nVersion < NUMITEM_VERSION_03 ) + cBullet = ByteString::ConvertToUnicode( (sal_Char)cBullet, + (pBulletFont&&pBulletFont->GetCharSet()) ? pBulletFont->GetCharSet() + : RTL_TEXTENCODING_SYMBOL ); + if(pBulletFont) + { + BOOL bConvertBulletFont = rStream.GetVersion() <= SOFFICE_FILEFORMAT_50; + if(bConvertBulletFont) + { + + FontToSubsFontConverter pConverter = + CreateFontToSubsFontConverter(pBulletFont->GetName(), + FONTTOSUBSFONT_IMPORT|FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS); + if(pConverter) + { + cBullet = ConvertFontToSubsFontChar(pConverter, cBullet); + String sFontName = GetFontToSubsFontName(pConverter); + pBulletFont->SetName(sFontName); + DestroyFontToSubsFontConverter(pConverter); + } + } + } + + if( NUMITEM_VERSION_04 <= nVersion ) + { + rStream >> nUSHORT; + mePositionAndSpaceMode = (SvxNumPositionAndSpaceMode) nUSHORT; + rStream >> nUSHORT; + meLabelFollowedBy = ( SvxNumLabelFollowedBy ) nUSHORT; + long nLong; + rStream >> nLong; + mnListtabPos = nLong; + rStream >> nLong; + mnFirstLineIndent = nLong; + rStream >> nLong; + mnIndentAt = nLong; + } +} /* -----------------08.12.98 11:14------------------- * * --------------------------------------------------*/ -// --> OD 2008-01-09 #newlistlevelattrs# - no longer used -//SvStream& SvxNumberFormat::Store(SvStream &rStream, FontToSubsFontConverter pConverter) -//{ -// if(pConverter && pBulletFont) -// { -// cBullet = ConvertFontToSubsFontChar(pConverter, cBullet); -// String sFontName = GetFontToSubsFontName(pConverter); -// pBulletFont->SetName(sFontName); -// } - -// rStream << (USHORT)NUMITEM_VERSION_03; - -// rStream << (USHORT)GetNumberingType(); -// rStream << (USHORT)eNumAdjust; -// rStream << (USHORT)nInclUpperLevels; -// rStream << nStart; -// rStream << (USHORT)cBullet; - -// rStream << nFirstLineOffset; -// rStream << nAbsLSpace; -// rStream << nLSpace; - -// rStream << nCharTextDistance; -// rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); -// rStream.WriteByteString(sPrefix, eEnc); -// rStream.WriteByteString(sSuffix, eEnc); -// rStream.WriteByteString(sCharStyleName, eEnc); -// if(pGraphicBrush) -// { -// rStream << (USHORT)1; - -// // #75113# in SD or SI force bullet itself to be stored, -// // for that purpose throw away link when link and graphic -// // are present, so Brush save is forced -// if(pGraphicBrush->GetGraphicLink() && pGraphicBrush->GetGraphic()) -// { -// String aEmpty; -// pGraphicBrush->SetGraphicLink(aEmpty); -// } - -// pGraphicBrush->Store(rStream, BRUSH_GRAPHIC_VERSION); -// } -// else -// rStream << (USHORT)0; - -// rStream << (USHORT)eVertOrient; -// if(pBulletFont) -// { -// rStream << (USHORT)1; -// rStream << *pBulletFont; -// } -// else -// rStream << (USHORT)0; -// rStream << aGraphicSize; - -// Color nTempColor = nBulletColor; -// if(COL_AUTO == nBulletColor.GetColor()) -// nTempColor = COL_BLACK; -// rStream << nTempColor; -// rStream << nBulletRelSize; -// rStream << (USHORT)IsShowSymbol(); -// return rStream; -//} -// <-- +SvStream& SvxNumberFormat::Store(SvStream &rStream, FontToSubsFontConverter pConverter) +{ + if(pConverter && pBulletFont) + { + cBullet = ConvertFontToSubsFontChar(pConverter, cBullet); + String sFontName = GetFontToSubsFontName(pConverter); + pBulletFont->SetName(sFontName); + } + + rStream << (USHORT)NUMITEM_VERSION_04; + + rStream << (USHORT)GetNumberingType(); + rStream << (USHORT)eNumAdjust; + rStream << (USHORT)nInclUpperLevels; + rStream << nStart; + rStream << (USHORT)cBullet; + + rStream << nFirstLineOffset; + rStream << nAbsLSpace; + rStream << nLSpace; + + rStream << nCharTextDistance; + rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); + rStream.WriteByteString(sPrefix, eEnc); + rStream.WriteByteString(sSuffix, eEnc); + rStream.WriteByteString(sCharStyleName, eEnc); + if(pGraphicBrush) + { + rStream << (USHORT)1; + + // #75113# in SD or SI force bullet itself to be stored, + // for that purpose throw away link when link and graphic + // are present, so Brush save is forced + if(pGraphicBrush->GetGraphicLink() && pGraphicBrush->GetGraphic()) + { + String aEmpty; + pGraphicBrush->SetGraphicLink(aEmpty); + } + + pGraphicBrush->Store(rStream, BRUSH_GRAPHIC_VERSION); + } + else + rStream << (USHORT)0; + + rStream << (USHORT)eVertOrient; + if(pBulletFont) + { + rStream << (USHORT)1; + rStream << *pBulletFont; + } + else + rStream << (USHORT)0; + rStream << aGraphicSize; + + Color nTempColor = nBulletColor; + if(COL_AUTO == nBulletColor.GetColor()) + nTempColor = COL_BLACK; + rStream << nTempColor; + rStream << nBulletRelSize; + rStream << (USHORT)IsShowSymbol(); + + rStream << ( USHORT ) mePositionAndSpaceMode; + rStream << ( USHORT ) meLabelFollowedBy; + rStream << ( long ) mnListtabPos; + rStream << ( long ) mnFirstLineIndent; + rStream << ( long ) mnIndentAt; + + return rStream; +} + /* -----------------------------23.02.01 11:10-------------------------------- ---------------------------------------------------------------------------*/ @@ -839,80 +871,79 @@ SvxNumRule::SvxNumRule(const SvxNumRule& rCopy) /* -----------------08.12.98 11:07------------------- * * --------------------------------------------------*/ -//SvxNumRule::SvxNumRule(SvStream &rStream) -//{ -// ++nRefCount; -// LanguageType eLang = Application::GetSettings().GetLanguage(); -// aLocale = SvxCreateLocale(eLang); -// USHORT nVersion; -// USHORT nTemp; -// rStream >> nVersion; -// rStream >> nLevelCount; -// rStream >> nTemp; -// nFeatureFlags = nTemp; -// rStream >> nTemp; -// bContinuousNumbering = (BOOL)nTemp; -// rStream >> nTemp; -// eNumberingType = (SvxNumRuleType)nTemp; -// memset( aFmts, 0, sizeof( aFmts )); - -// for(USHORT i = 0; i < SVX_MAX_NUM; i++) -// { -// USHORT nSet; -// rStream >> nSet; -// if(nSet) -// aFmts[i] = new SvxNumberFormat(rStream); -// else -// aFmts[i] = 0; -// aFmtsSet[i] = aFmts[i] ? TRUE : FALSE; -// } -// if(NUMITEM_VERSION_02 <= nVersion) -// { -// USHORT nShort; -// rStream >> nShort; -// nFeatureFlags = nShort; -// } -//} +SvxNumRule::SvxNumRule(SvStream &rStream) +{ + ++nRefCount; + LanguageType eLang = Application::GetSettings().GetLanguage(); + aLocale = SvxCreateLocale(eLang); + USHORT nVersion; + USHORT nTemp; + rStream >> nVersion; + rStream >> nLevelCount; + rStream >> nTemp; + nFeatureFlags = nTemp; + rStream >> nTemp; + bContinuousNumbering = (BOOL)nTemp; + rStream >> nTemp; + eNumberingType = (SvxNumRuleType)nTemp; + memset( aFmts, 0, sizeof( aFmts )); + + for(USHORT i = 0; i < SVX_MAX_NUM; i++) + { + USHORT nSet; + rStream >> nSet; + if(nSet) + aFmts[i] = new SvxNumberFormat(rStream); + else + aFmts[i] = 0; + aFmtsSet[i] = aFmts[i] ? TRUE : FALSE; + } + if(NUMITEM_VERSION_02 <= nVersion) + { + USHORT nShort; + rStream >> nShort; + nFeatureFlags = nShort; + } +} /* -----------------08.12.98 11:07------------------- * * --------------------------------------------------*/ -// --> OD 2008-01-09 #newlistlevelattrs# - no longer used -//SvStream& SvxNumRule::Store(SvStream &rStream) -//{ -// rStream<<(USHORT)NUMITEM_VERSION_03; -// rStream<<nLevelCount; -// //first save of nFeatureFlags for old versions -// rStream<<(USHORT)nFeatureFlags; -// rStream<<(USHORT)bContinuousNumbering; -// rStream<<(USHORT)eNumberingType; - -// FontToSubsFontConverter pConverter = 0; -// BOOL bConvertBulletFont = rStream.GetVersion() <= SOFFICE_FILEFORMAT_50; -// for(USHORT i = 0; i < SVX_MAX_NUM; i++) -// { -// if(aFmts[i]) -// { -// rStream << USHORT(1); -// if(bConvertBulletFont && aFmts[i]->GetBulletFont()) -// { -// if(!pConverter) -// pConverter = -// CreateFontToSubsFontConverter(aFmts[i]->GetBulletFont()->GetName(), -// FONTTOSUBSFONT_EXPORT|FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS); -// } -// aFmts[i]->Store(rStream, pConverter); -// } -// else -// rStream << USHORT(0); -// } -// //second save of nFeatureFlags for new versions -// rStream<<(USHORT)nFeatureFlags; -// if(pConverter) -// DestroyFontToSubsFontConverter(pConverter); - -// return rStream; -//} +SvStream& SvxNumRule::Store(SvStream &rStream) +{ + rStream<<(USHORT)NUMITEM_VERSION_03; + rStream<<nLevelCount; + //first save of nFeatureFlags for old versions + rStream<<(USHORT)nFeatureFlags; + rStream<<(USHORT)bContinuousNumbering; + rStream<<(USHORT)eNumberingType; + + FontToSubsFontConverter pConverter = 0; + BOOL bConvertBulletFont = rStream.GetVersion() <= SOFFICE_FILEFORMAT_50; + for(USHORT i = 0; i < SVX_MAX_NUM; i++) + { + if(aFmts[i]) + { + rStream << USHORT(1); + if(bConvertBulletFont && aFmts[i]->GetBulletFont()) + { + if(!pConverter) + pConverter = + CreateFontToSubsFontConverter(aFmts[i]->GetBulletFont()->GetName(), + FONTTOSUBSFONT_EXPORT|FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS); + } + aFmts[i]->Store(rStream, pConverter); + } + else + rStream << USHORT(0); + } + //second save of nFeatureFlags for new versions + rStream<<(USHORT)nFeatureFlags; + if(pConverter) + DestroyFontToSubsFontConverter(pConverter); + + return rStream; +} /* -----------------27.10.98 10:41------------------- * @@ -1179,32 +1210,23 @@ SfxPoolItem* SvxNumBulletItem::Clone( SfxItemPool * ) const /* -----------------08.12.98 10:43------------------- * * --------------------------------------------------*/ -// --> OD 2008-01-09 #newlistlevelattrs# - no longer used -//SfxPoolItem* SvxNumBulletItem::Create(SvStream &rStream, USHORT) const -//{ -// SvxNumRule aRule(rStream); -// return new SvxNumBulletItem(aRule, Which() ); -//} -// <-- -/* -----------------08.12.98 10:43------------------- - * - * --------------------------------------------------*/ -// --> OD 2008-01-09 #newlistlevelattrs# - no longer used -//SvStream& SvxNumBulletItem::Store(SvStream &rStream, USHORT /*nItemVersion*/ )const -//{ -// pNumRule->Store(rStream); -// return rStream; -//} -// <-- +SfxPoolItem* SvxNumBulletItem::Create(SvStream &rStream, USHORT) const +{ + SvxNumRule aRule(rStream); + return new SvxNumBulletItem(aRule, Which() ); +} +USHORT SvxNumBulletItem::GetVersion( USHORT /*nFileVersion*/ ) const +{ + return NUMITEM_VERSION_03; +} /* -----------------08.12.98 10:43------------------- * * --------------------------------------------------*/ -// --> OD 2008-01-10 #newlistlevelattrs# - no longer used -//USHORT SvxNumBulletItem::GetVersion( USHORT /*nFileVersion*/ ) const -//{ -// return NUMITEM_VERSION_03; -//} -// <-- +SvStream& SvxNumBulletItem::Store(SvStream &rStream, USHORT /*nItemVersion*/ )const +{ + pNumRule->Store(rStream); + return rStream; +} /* -----------------08.12.98 10:43------------------- * diff --git a/svx/source/msfilter/msvbahelper.cxx b/svx/source/msfilter/msvbahelper.cxx new file mode 100644 index 000000000000..5b24af6bcc2f --- /dev/null +++ b/svx/source/msfilter/msvbahelper.cxx @@ -0,0 +1,384 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#include "precompiled_svx.hxx" +#include <svx/msvbahelper.hxx> +#include <basic/sbx.hxx> +#include <basic/sbstar.hxx> +#include <basic/basmgr.hxx> +#include <basic/sbmod.hxx> +#include <basic/sbmeth.hxx> +#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> +#include <com/sun/star/document/XDocumentProperties.hpp> +#include <com/sun/star/document/XDocumentInfoSupplier.hpp> +#include <tools/urlobj.hxx> +#include <osl/file.hxx> + +using namespace ::com::sun::star; + +const static rtl::OUString sUrlPart0 = rtl::OUString::createFromAscii( "vnd.sun.star.script:"); +const static rtl::OUString sUrlPart1 = rtl::OUString::createFromAscii( "?language=Basic&location=document"); + +namespace ooo { namespace vba { + +String makeMacroURL( const String& sMacroName ) +{ + return sUrlPart0.concat( sMacroName ).concat( sUrlPart1 ) ; +} + +SfxObjectShell* findShellForUrl( const rtl::OUString& sMacroURLOrPath ) +{ + SfxObjectShell* pFoundShell=NULL; + SfxObjectShell* pShell = SfxObjectShell::GetFirst(); + INetURLObject aObj; + aObj.SetURL( sMacroURLOrPath ); + bool bIsURL = aObj.GetProtocol() != INET_PROT_NOT_VALID; + rtl::OUString aURL; + if ( bIsURL ) + aURL = sMacroURLOrPath; + else + { + osl::FileBase::getFileURLFromSystemPath( sMacroURLOrPath, aURL ); + aObj.SetURL( aURL ); + } + OSL_TRACE("Trying to find shell for url %s", rtl::OUStringToOString( aURL, RTL_TEXTENCODING_UTF8 ).getStr() ); + while ( pShell ) + { + + uno::Reference< frame::XModel > xModel = pShell->GetModel(); + // are we searching for a template? if so we have to cater for the + // fact that in openoffice a document opened from a template is always + // a new document :/ + if ( xModel.is() ) + { + OSL_TRACE("shell 0x%x has model with url %s and we look for %s", pShell + , rtl::OUStringToOString( xModel->getURL(), RTL_TEXTENCODING_UTF8 ).getStr() + , rtl::OUStringToOString( aURL, RTL_TEXTENCODING_UTF8 ).getStr() + ); + if ( sMacroURLOrPath.endsWithIgnoreAsciiCaseAsciiL( ".dot", 4 ) ) + { + uno::Reference< document::XDocumentInfoSupplier > xDocInfoSupp( xModel, uno::UNO_QUERY ); + if( xDocInfoSupp.is() ) + { + uno::Reference< document::XDocumentPropertiesSupplier > xDocPropSupp( xDocInfoSupp->getDocumentInfo(), uno::UNO_QUERY_THROW ); + uno::Reference< document::XDocumentProperties > xDocProps( xDocPropSupp->getDocumentProperties(), uno::UNO_QUERY_THROW ); + rtl::OUString sCurrName = xDocProps->getTemplateName(); + if( sMacroURLOrPath.lastIndexOf( sCurrName ) >= 0 ) + { + pFoundShell = pShell; + break; + } + } + } + else + { + if ( aURL.equals( xModel->getURL() ) ) + { + pFoundShell = pShell; + break; + } + } + } + pShell = SfxObjectShell::GetNext( *pShell ); + } + return pFoundShell; +} + +// sMod can be empty ( but we really need the library to search in ) +// if sMod is empty and a macro is found then sMod is updated +bool hasMacro( SfxObjectShell* pShell, const String& sLibrary, String& sMod, const String& sMacro ) +{ + bool bFound = false; + if ( sLibrary.Len() && sMacro.Len() ) + { + OSL_TRACE("** Searching for %s.%s in library %s" + ,rtl::OUStringToOString( sMod, RTL_TEXTENCODING_UTF8 ).getStr() + ,rtl::OUStringToOString( sMacro, RTL_TEXTENCODING_UTF8 ).getStr() + ,rtl::OUStringToOString( sLibrary, RTL_TEXTENCODING_UTF8 ).getStr() ); + BasicManager* pBasicMgr = pShell-> GetBasicManager(); + if ( pBasicMgr ) + { + StarBASIC* pBasic = pBasicMgr->GetLib( sLibrary ); + if ( !pBasic ) + { + USHORT nId = pBasicMgr->GetLibId( sLibrary ); + pBasicMgr->LoadLib( nId ); + pBasic = pBasicMgr->GetLib( sLibrary ); + } + if ( pBasic ) + { + if ( sMod.Len() ) // we wish to find the macro is a specific module + { + SbModule* pModule = pBasic->FindModule( sMod ); + if ( pModule ) + { + SbxArray* pMethods = pModule->GetMethods(); + if ( pMethods ) + { + SbMethod* pMethod = static_cast< SbMethod* >( pMethods->Find( sMacro, SbxCLASS_METHOD ) ); + if ( pMethod ) + bFound = true; + } + } + } + else if( SbMethod* pMethod = dynamic_cast< SbMethod* >( pBasic->Find( sMacro, SbxCLASS_METHOD ) ) ) + { + if( SbModule* pModule = pMethod->GetModule() ) + { + sMod = pModule->GetName(); + bFound = true; + } + } + } + } + } + return bFound; +} +void parseMacro( const rtl::OUString& sMacro, String& sContainer, String& sModule, String& sProcedure ) +{ + sal_Int32 nMacroDot = sMacro.lastIndexOf( '.' ); + + if ( nMacroDot != -1 ) + { + sProcedure = sMacro.copy( nMacroDot + 1 ); + + sal_Int32 nContainerDot = sMacro.lastIndexOf( '.', nMacroDot - 1 ); + if ( nContainerDot != -1 ) + { + sModule = sMacro.copy( nContainerDot + 1, nMacroDot - nContainerDot - 1 ); + sContainer = sMacro.copy( 0, nContainerDot ); + } + else + sModule = sMacro.copy( 0, nMacroDot ); + } + else + sProcedure = sMacro; +} + +VBAMacroResolvedInfo resolveVBAMacro( SfxObjectShell* pShell, const rtl::OUString& MacroName, bool bSearchGlobalTemplates ) +{ + VBAMacroResolvedInfo aRes; + if ( !pShell ) + return aRes; + aRes.SetMacroDocContext( pShell ); + // parse the macro name + sal_Int32 nDocSepIndex = MacroName.indexOfAsciiL( "!", 1 ); + String sMacroUrl = MacroName; + + String sContainer; + String sModule; + String sProcedure; + + if( nDocSepIndex > 0 ) + { + // macro specified by document name + // find document shell for document name and call ourselves + // recursively + + // assume for now that the document name is *this* document + String sDocUrlOrPath = MacroName.copy( 0, nDocSepIndex ); + sMacroUrl = MacroName.copy( nDocSepIndex + 1 ); + OSL_TRACE("doc search, current shell is 0x%x", pShell ); + SfxObjectShell* pFoundShell = findShellForUrl( sDocUrlOrPath ); + OSL_TRACE("doc search, after find, found shell is 0x%x", pFoundShell ); + aRes = resolveVBAMacro( pFoundShell, sMacroUrl ); + } + else + { + // macro is contained in 'this' document ( or code imported from a template + // where that template is a global template or perhaps the template this + // document is created from ) + + // macro format = Container.Module.Procedure + parseMacro( MacroName, sContainer, sModule, sProcedure ); + uno::Reference< lang::XMultiServiceFactory> xSF( pShell->GetModel(), uno::UNO_QUERY); + uno::Reference< container::XNameContainer > xPrjNameCache; + if ( xSF.is() ) + xPrjNameCache.set( xSF->createInstance( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.VBAProjectNameProvider" ) ) ), uno::UNO_QUERY ); + + std::vector< rtl::OUString > sSearchList; + + if ( sContainer.Len() > 0 ) + { + // get the Project associated with the Container + if ( xPrjNameCache.is() ) + { + if ( xPrjNameCache->hasByName( sContainer ) ) + { + rtl::OUString sProject; + xPrjNameCache->getByName( sContainer ) >>= sProject; + sContainer = sProject; + } + } + sSearchList.push_back( sContainer ); // First Lib to search + } + else + { + // Ok, if we have no Container specified then we need to search them in order, this document, template this document created from, global templates, + // get the name of Project/Library for 'this' document + rtl::OUString sThisProject; + BasicManager* pBasicMgr = pShell-> GetBasicManager(); + if ( pBasicMgr ) + { + if ( pBasicMgr->GetName().Len() ) + sThisProject = pBasicMgr->GetName(); + else // cater for the case where VBA is not enabled + sThisProject = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Standard") ); + } + sSearchList.push_back( sThisProject ); // First Lib to search + if ( xPrjNameCache.is() ) + { + // is this document created from a template? + uno::Reference< document::XDocumentInfoSupplier > xDocInfoSupp( pShell->GetModel(), uno::UNO_QUERY_THROW ); + uno::Reference< document::XDocumentPropertiesSupplier > xDocPropSupp( xDocInfoSupp->getDocumentInfo(), uno::UNO_QUERY_THROW ); + uno::Reference< document::XDocumentProperties > xDocProps( xDocPropSupp->getDocumentProperties(), uno::UNO_QUERY_THROW ); + + rtl::OUString sCreatedFrom = xDocProps->getTemplateURL(); + if ( sCreatedFrom.getLength() ) + { + INetURLObject aObj; + aObj.SetURL( sCreatedFrom ); + bool bIsURL = aObj.GetProtocol() != INET_PROT_NOT_VALID; + rtl::OUString aURL; + if ( bIsURL ) + aURL = sCreatedFrom; + else + { + osl::FileBase::getFileURLFromSystemPath( sCreatedFrom, aURL ); + aObj.SetURL( aURL ); + } + sCreatedFrom = aObj.GetLastName(); + } + + sal_Int32 nIndex = sCreatedFrom.lastIndexOf( '.' ); + if ( nIndex != -1 ) + sCreatedFrom = sCreatedFrom.copy( 0, nIndex ); + + rtl::OUString sPrj; + if ( sCreatedFrom.getLength() && xPrjNameCache->hasByName( sCreatedFrom ) ) + { + xPrjNameCache->getByName( sCreatedFrom ) >>= sPrj; + // Make sure we don't double up with this project + if ( !sPrj.equals( sThisProject ) ) + sSearchList.push_back( sPrj ); + } + + // get list of global template Names + uno::Sequence< rtl::OUString > sTemplateNames = xPrjNameCache->getElementNames(); + sal_Int32 nLen = sTemplateNames.getLength(); + for ( sal_Int32 index = 0; ( bSearchGlobalTemplates && index < nLen ); ++index ) + { + + if ( !sCreatedFrom.equals( sTemplateNames[ index ] ) ) + { + if ( xPrjNameCache->hasByName( sTemplateNames[ index ] ) ) + { + xPrjNameCache->getByName( sTemplateNames[ index ] ) >>= sPrj; + // Make sure we don't double up with this project + if ( !sPrj.equals( sThisProject ) ) + sSearchList.push_back( sPrj ); + } + } + + } + } + } + std::vector< rtl::OUString >::iterator it_end = sSearchList.end(); + for ( std::vector< rtl::OUString >::iterator it = sSearchList.begin(); it != it_end; ++it ) + { + bool bRes = hasMacro( pShell, *it, sModule, sProcedure ); + if ( bRes ) + { + aRes.SetResolved( true ); + aRes.SetMacroDocContext( pShell ); + sContainer = *it; + break; + } + } + } + aRes.SetResolvedMacro( sProcedure.Insert( '.', 0 ).Insert( sModule, 0).Insert( '.', 0 ).Insert( sContainer, 0 ) ); + + return aRes; +} + +// Treat the args as possible inouts ( convertion at bottom of method ) +sal_Bool executeMacro( SfxObjectShell* pShell, const String& sMacroName, uno::Sequence< uno::Any >& aArgs, uno::Any& /*aRet*/, const uno::Any& aCaller ) +{ + sal_Bool bRes = sal_False; + if ( !pShell ) + return bRes; + rtl::OUString sUrl = makeMacroURL( sMacroName ); + + uno::Sequence< sal_Int16 > aOutArgsIndex; + uno::Sequence< uno::Any > aOutArgs; + + try + { + uno::Reference< script::provider::XScriptProvider > xScriptProvider; + uno::Reference< script::provider::XScriptProviderSupplier > xSPS( pShell->GetModel(), uno::UNO_QUERY_THROW ); + + xScriptProvider.set( xSPS->getScriptProvider(), uno::UNO_QUERY_THROW ); + + uno::Reference< script::provider::XScript > xScript( xScriptProvider->getScript( sUrl ), uno::UNO_QUERY_THROW ); + + if ( aCaller.hasValue() ) + { + uno::Reference< beans::XPropertySet > xProps( xScript, uno::UNO_QUERY ); + if ( xProps.is() ) + { + uno::Sequence< uno::Any > aCallerHack(1); + aCallerHack[ 0 ] = aCaller; + xProps->setPropertyValue( rtl::OUString::createFromAscii( "Caller" ), uno::makeAny( aCallerHack ) ); + } + } + + + xScript->invoke( aArgs, aOutArgsIndex, aOutArgs ); + + sal_Int32 nLen = aOutArgs.getLength(); + // convert any out params to seem like they were inouts + if ( nLen ) + { + for ( sal_Int32 index=0; index < nLen; ++index ) + { + sal_Int32 nOutIndex = aOutArgsIndex[ index ]; + aArgs[ nOutIndex ] = aOutArgs[ index ]; + } + } + + bRes = sal_True; + } + catch ( uno::Exception& e ) + { + bRes = sal_False; + } + return bRes; +} +} } // vba // ooo diff --git a/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx b/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx index bbfe3eaf65ab..ec876ec036ac 100644 --- a/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx +++ b/svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx @@ -75,6 +75,52 @@ #include <boost/shared_ptr.hpp> #include <boost/bind.hpp> +/* + +Form controls (more precise: UNO Controls) in the drawing layer are ... prone to breakage, since they have some +specialities which the drawing layer currently doesn't capture too well. In particular, having a living VCL +window as child of the document window, and coupling this Window to a drawing layer object, makes things +difficult sometimes. + +Below is a list of issues which existed in the past. Whenever you change code here, you're encouraged to +verify those issues are still fixed. (Whenever you have some additional time, you're encouraged to write +an automatic test for one or more of those issues for which this is possible :) + +http://www.openoffice.org/issues/show_bug.cgi?id=105992 +zooming documents containg (alive) form controls improperly positions the controls + +http://www.openoffice.org/issues/show_bug.cgi?id=104362 +crash when copy a control + +http://www.openoffice.org/issues/show_bug.cgi?id=104544 +Gridcontrol duplicated after design view on/off + +http://www.openoffice.org/issues/show_bug.cgi?id=102089 +print preview shows control elements with property printable=false + +http://www.openoffice.org/issues/show_bug.cgi?id=102090 +problem with setVisible on TextControl + +http://www.openoffice.org/issues/show_bug.cgi?id=103138 +loop when insert a control in draw + +http://www.openoffice.org/issues/show_bug.cgi?id=101398 +initially-displaying a document with many controls is very slow + +http://www.openoffice.org/issues/show_bug.cgi?id=72429 +repaint error in form wizard in bugdoc database + +http://www.openoffice.org/issues/show_bug.cgi?id=72694 +form control artifacts when scrolling a text fast + + +issues in the old (Sun-internal) bug tracking system: + +#110592# +form controls being in redlining or in hidden section are visible in alive-mode + +*/ + //........................................................................ namespace sdr { namespace contact { //........................................................................ @@ -841,11 +887,6 @@ namespace sdr { namespace contact { protected: virtual ::drawinglayer::primitive2d::Primitive2DSequence - get2DDecomposition( - const ::drawinglayer::geometry::ViewInformation2D& rViewInformation - ) const; - - virtual ::drawinglayer::primitive2d::Primitive2DSequence createLocalDecomposition( const ::drawinglayer::geometry::ViewInformation2D& rViewInformation ) const; @@ -1056,10 +1097,10 @@ namespace sdr { namespace contact { namespace { - static void lcl_resetFlag( bool& rbFlag )
- {
- rbFlag = false;
- }
+ static void lcl_resetFlag( bool& rbFlag ) + { + rbFlag = false; + } } //-------------------------------------------------------------------- @@ -1082,8 +1123,8 @@ namespace sdr { namespace contact { } m_bCreatingControl = true; - ::comphelper::ScopeGuard aGuard( ::boost::bind( lcl_resetFlag, ::boost::ref( m_bCreatingControl ) ) );
-
+ ::comphelper::ScopeGuard aGuard( ::boost::bind( lcl_resetFlag, ::boost::ref( m_bCreatingControl ) ) ); + if ( m_aControl.is() ) { if ( m_pOutputDeviceForWindow == &_rDevice ) @@ -1588,19 +1629,6 @@ namespace sdr { namespace contact { } //-------------------------------------------------------------------- - ::drawinglayer::primitive2d::Primitive2DSequence LazyControlCreationPrimitive2D::get2DDecomposition( const ::drawinglayer::geometry::ViewInformation2D& _rViewInformation ) const - { - #if OSL_DEBUG_LEVEL > 1 - ::basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - _rViewInformation.getObjectToViewTransformation().decompose( aScale, aTranslate, fRotate, fShearX ); - #endif - if ( m_pVOCImpl->hasControl() ) - impl_positionAndZoomControl( _rViewInformation ); - return BasePrimitive2D::get2DDecomposition( _rViewInformation ); - } - - //-------------------------------------------------------------------- ::drawinglayer::primitive2d::Primitive2DSequence LazyControlCreationPrimitive2D::createLocalDecomposition( const ::drawinglayer::geometry::ViewInformation2D& _rViewInformation ) const { #if OSL_DEBUG_LEVEL > 1 @@ -1737,13 +1765,40 @@ namespace sdr { namespace contact { // our control already died. // TODO: Is it worth re-creating the control? Finally, this is a pathological situation, it means some instance // disposed the control though it doesn't own it. So, /me thinks we should not bother here. - return drawinglayer::primitive2d::Primitive2DSequence();
-
+ return drawinglayer::primitive2d::Primitive2DSequence(); + + // ignore existing controls which are in alive mode and manually switched to "invisible" + // #102090# / 2009-06-05 / frank.schoenheit@sun.com + const ControlHolder& rControl( m_pImpl->getExistentControl() ); + if ( rControl.is() && !rControl.isDesignMode() && !rControl.isVisible() ) + return drawinglayer::primitive2d::Primitive2DSequence(); + ::drawinglayer::primitive2d::Primitive2DReference xPrimitive( new LazyControlCreationPrimitive2D( m_pImpl ) ); return ::drawinglayer::primitive2d::Primitive2DSequence( &xPrimitive, 1 ); } //-------------------------------------------------------------------- + bool ViewObjectContactOfUnoControl::isPrimitiveVisible( const DisplayInfo& _rDisplayInfo ) const + { + VOCGuard aGuard( *m_pImpl ); + + if ( m_pImpl->hasControl() ) + { + const ::drawinglayer::geometry::ViewInformation2D& rViewInformation( GetObjectContact().getViewInformation2D() ); + #if OSL_DEBUG_LEVEL > 1 + ::basegfx::B2DVector aScale, aTranslate; + double fRotate, fShearX; + rViewInformation.getObjectToViewTransformation().decompose( aScale, aTranslate, fRotate, fShearX ); + #endif + + if ( !rViewInformation.getViewport().isEmpty() ) + m_pImpl->positionAndZoomControl( rViewInformation.getObjectToViewTransformation() ); + } + + return ViewObjectContactOfSdrObj::isPrimitiveVisible( _rDisplayInfo ); + } + + //-------------------------------------------------------------------- void ViewObjectContactOfUnoControl::propertyChange() { // graphical invalidate at all views diff --git a/svx/source/sdr/overlay/overlaymanagerbuffered.cxx b/svx/source/sdr/overlay/overlaymanagerbuffered.cxx index 13a83f0fc235..89ba0eb35b5c 100644 --- a/svx/source/sdr/overlay/overlaymanagerbuffered.cxx +++ b/svx/source/sdr/overlay/overlaymanagerbuffered.cxx @@ -370,8 +370,41 @@ namespace sdr OverlayManager::ImpDrawMembers(aBufferRememberedRangeLogic, getOutputDevice()); } - // #i80730# removed: VCL hack for transparent child windows - // No longer needed, checked in DEV300 m54 + // VCL hack for transparent child windows + // Problem is e.g. a radiobuttion form control in life mode. The used window + // is a transparence vcl childwindow. This flag only allows the parent window to + // paint into the child windows area, but there is no mechanism which takes + // care for a repaint of the child window. A transparent child window is NOT + // a window which always keeps it's content consistent over the parent, but it's + // more like just a paint flag for the parent. + // To get the update, the windows in question are updated manulally here. + if(bTargetIsWindow) + { + Window& rWindow = static_cast< Window& >(rmOutputDevice); + + if(rWindow.IsChildTransparentModeEnabled() && rWindow.GetChildCount()) + { + const Rectangle aRegionRectanglePixel( + maBufferRememberedRangePixel.getMinX(), maBufferRememberedRangePixel.getMinY(), + maBufferRememberedRangePixel.getMaxX(), maBufferRememberedRangePixel.getMaxY()); + + for(sal_uInt16 a(0); a < rWindow.GetChildCount(); a++) + { + Window* pCandidate = rWindow.GetChild(a); + + if(pCandidate && pCandidate->IsPaintTransparent()) + { + const Rectangle aCandidatePosSizePixel(pCandidate->GetPosPixel(), pCandidate->GetSizePixel()); + + if(aCandidatePosSizePixel.IsOver(aRegionRectanglePixel)) + { + pCandidate->Invalidate(INVALIDATE_NOTRANSPARENT|INVALIDATE_CHILDREN); + pCandidate->Update(); + } + } + } + } + } // #i80730# restore visibility of VCL cursor if(bCursorWasEnabled) diff --git a/svx/source/svdraw/selectioncontroller.cxx b/svx/source/svdraw/selectioncontroller.cxx index 0c954e4a9e10..ed25ae0e1ffe 100644 --- a/svx/source/svdraw/selectioncontroller.cxx +++ b/svx/source/svdraw/selectioncontroller.cxx @@ -31,6 +31,7 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_svx.hxx" +#include <tools/debug.hxx> #include <svx/selectioncontroller.hxx> namespace sdr @@ -103,4 +104,14 @@ bool SelectionController::PasteObjModel( const SdrModel& /*rModel*/ ) return false; } +bool SelectionController::TakeFormatPaintBrush( boost::shared_ptr< SfxItemSet >& /*rFormatSet*/ ) +{ + return false; +} + +bool SelectionController::ApplyFormatPaintBrush( SfxItemSet& /*rFormatSet*/, bool /*bNoCharacterFormats*/, bool /*bNoParagraphFormats*/ ) +{ + return false; +} + } diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index fb9670a5d4b4..e3d2f3390201 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -30,6 +30,9 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_svx.hxx" + +#include <com/sun/star/i18n/WordType.hpp> + #include <svtools/accessibilityoptions.hxx> #include <svx/svdedxv.hxx> @@ -46,6 +49,7 @@ #include <vcl/cursor.hxx> #include <svx/unotext.hxx> +#include <svx/editeng.hxx> #include <svx/editobj.hxx> #include <svx/outlobj.hxx> #include <svx/scripttypeitem.hxx> @@ -60,7 +64,6 @@ #include "svx/svdetc.hxx" // fuer GetDraftFillColor #include "svx/svdotable.hxx" #include <svx/selectioncontroller.hxx> - #ifdef DBG_UTIL #include <svdibrow.hxx> #endif @@ -69,6 +72,7 @@ #include <svx/svddrgv.hxx> // fuer SetSolidDragging() #include "svdstr.hrc" // Namen aus der Resource #include "svdglob.hxx" // StringCache +#include "globl3d.hxx" #include <svx/outliner.hxx> #include <svx/adjitem.hxx> @@ -1923,3 +1927,223 @@ void SdrObjEditView::OnEndPasteOrDrop( PasteOrDropInfos* ) // applications can derive from these virtual methods to do something before a drop or paste operation } +bool SdrObjEditView::SupportsFormatPaintbrush( UINT32 nObjectInventor, UINT16 nObjectIdentifier ) const +{ + if( nObjectInventor != SdrInventor && nObjectInventor != E3dInventor ) + return false; + switch(nObjectIdentifier) + { + case OBJ_NONE: + case OBJ_GRUP: + return false; + case OBJ_LINE: + case OBJ_RECT: + case OBJ_CIRC: + case OBJ_SECT: + case OBJ_CARC: + case OBJ_CCUT: + case OBJ_POLY: + case OBJ_PLIN: + case OBJ_PATHLINE: + case OBJ_PATHFILL: + case OBJ_FREELINE: + case OBJ_FREEFILL: + case OBJ_SPLNLINE: + case OBJ_SPLNFILL: + case OBJ_TEXT: + case OBJ_TEXTEXT: + case OBJ_TITLETEXT: + case OBJ_OUTLINETEXT: + case OBJ_GRAF: + case OBJ_OLE2: + case OBJ_TABLE: + return true; + case OBJ_EDGE: + case OBJ_CAPTION: + return false; + case OBJ_PATHPOLY: + case OBJ_PATHPLIN: + return true; + case OBJ_PAGE: + case OBJ_MEASURE: + case OBJ_DUMMY: + case OBJ_FRAME: + case OBJ_UNO: + return false; + case OBJ_CUSTOMSHAPE: + return true; + default: + return false; + } +} + +static const USHORT* GetFormatRangeImpl( bool bTextOnly ) +{ + static const USHORT gRanges[] = { + SDRATTR_SHADOW_FIRST, SDRATTR_SHADOW_LAST, + SDRATTR_GRAF_FIRST, SDRATTR_GRAF_LAST, + SDRATTR_TABLE_FIRST, SDRATTR_TABLE_LAST, + XATTR_LINE_FIRST, XATTR_LINE_LAST, + XATTR_FILL_FIRST, XATTRSET_FILL, + EE_PARA_START, EE_PARA_END, + EE_CHAR_START, EE_CHAR_END, + 0,0 + }; + return &gRanges[ bTextOnly ? 10 : 0]; +} + +bool SdrObjEditView::TakeFormatPaintBrush( boost::shared_ptr< SfxItemSet >& rFormatSet ) +{ + if( mxSelectionController.is() && mxSelectionController->TakeFormatPaintBrush(rFormatSet) ) + return true; + + const SdrMarkList& rMarkList = GetMarkedObjectList(); + if( rMarkList.GetMarkCount() >= 1 ) + { + OutlinerView* pOLV = GetTextEditOutlinerView(); + + rFormatSet.reset( new SfxItemSet( GetModel()->GetItemPool(), GetFormatRangeImpl( pOLV != NULL ) ) ); + if( pOLV ) + { + rFormatSet->Put( pOLV->GetAttribs() ); + } + else + { + const BOOL bOnlyHardAttr = FALSE; + rFormatSet->Put( GetAttrFromMarked(bOnlyHardAttr) ); + } + return true; + } + + return false; +} + +static SfxItemSet CreatePaintSet( const USHORT *pRanges, SfxItemPool& rPool, const SfxItemSet& rSourceSet, const SfxItemSet& rTargetSet, bool bNoCharacterFormats, bool bNoParagraphFormats ) +{ + SfxItemSet aPaintSet( rPool, pRanges ); + + while( *pRanges ) + { + USHORT nWhich = *pRanges++; + const USHORT nLastWhich = *pRanges++; + + if( bNoCharacterFormats && (nWhich == EE_CHAR_START) ) + continue; + + if( bNoParagraphFormats && (nWhich == EE_PARA_START ) ) + continue; + + for( ; nWhich < nLastWhich; nWhich++ ) + { + const SfxPoolItem* pSourceItem = rSourceSet.GetItem( nWhich ); + const SfxPoolItem* pTargetItem = rTargetSet.GetItem( nWhich ); + + if( (pSourceItem && !pTargetItem) || (pSourceItem && pTargetItem && !((*pSourceItem) == (*pTargetItem)) ) ) + { + aPaintSet.Put( *pSourceItem ); + } + } + } + return aPaintSet; +} + +void SdrObjEditView::ApplyFormatPaintBrushToText( SfxItemSet& rFormatSet, SdrTextObj& rTextObj, SdrText* pText, bool bNoCharacterFormats, bool bNoParagraphFormats ) +{ + OutlinerParaObject* pParaObj = pText ? pText->GetOutlinerParaObject() : 0; + if(pParaObj) + { + SdrOutliner& rOutliner = rTextObj.ImpGetDrawOutliner(); + rOutliner.SetText(*pParaObj); + + sal_uInt32 nParaCount(rOutliner.GetParagraphCount()); + + if(nParaCount) + { + for(sal_uInt16 nPara = 0; nPara < nParaCount; nPara++) + { + if( !bNoCharacterFormats ) + rOutliner.QuickRemoveCharAttribs( nPara, /* remove all */0 ); + + SfxItemSet aSet(rOutliner.GetParaAttribs(nPara)); + aSet.Put(CreatePaintSet( GetFormatRangeImpl(true), *aSet.GetPool(), rFormatSet, aSet, bNoCharacterFormats, bNoParagraphFormats ) ); + rOutliner.SetParaAttribs(nPara, aSet); + } + + OutlinerParaObject* pTemp = rOutliner.CreateParaObject(0, (sal_uInt16)nParaCount); + rOutliner.Clear(); + + rTextObj.NbcSetOutlinerParaObjectForText(pTemp,pText); + } + } +} + +void SdrObjEditView::ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoCharacterFormats, bool bNoParagraphFormats ) +{ + if( !mxSelectionController.is() || !mxSelectionController->ApplyFormatPaintBrush( rFormatSet, bNoCharacterFormats, bNoParagraphFormats ) ) + { + const SdrMarkList& rMarkList = GetMarkedObjectList(); + SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); + OutlinerView* pOLV = GetTextEditOutlinerView(); + + const SfxItemSet& rShapeSet = pObj->GetMergedItemSet(); + + if( !pOLV ) + { + // if not in text edit mode (aka the user selected text or clicked on a word) + // apply formating attributes to selected shape + // All formating items (see ranges above) that are unequal in selected shape and + // the format paintbrush are hard set on the selected shape. + + const USHORT* pRanges = rFormatSet.GetRanges(); + bool bTextOnly = true; + + while( *pRanges ) + { + if( (*pRanges != EE_PARA_START) && (*pRanges != EE_CHAR_START) ) + { + bTextOnly = false; + break; + } + pRanges += 2; + } + + if( !bTextOnly ) + { + SfxItemSet aPaintSet( CreatePaintSet( GetFormatRangeImpl(false), *rShapeSet.GetPool(), rFormatSet, rShapeSet, bNoCharacterFormats, bNoParagraphFormats ) ); + const BOOL bReplaceAll = FALSE; + SetAttrToMarked(aPaintSet, bReplaceAll); + } + + // now apply character and paragraph formating to text, if the shape has any + SdrTextObj* pTextObj = dynamic_cast<SdrTextObj*>(pObj); + if( pTextObj ) + { + sal_Int32 nText = pTextObj->getTextCount(); + + while( --nText >= 0 ) + { + SdrText* pText = pTextObj->getText( nText ); + ApplyFormatPaintBrushToText( rFormatSet, *pTextObj, pText, bNoCharacterFormats, bNoParagraphFormats ); + } + } + } + else + { + ::Outliner* pOutliner = pOLV->GetOutliner(); + if( pOutliner ) + { + const EditEngine& rEditEngine = pOutliner->GetEditEngine(); + + ESelection aSel( pOLV->GetSelection() ); + if( !aSel.HasRange() ) + pOLV->SetSelection( rEditEngine.GetWord( aSel, com::sun::star::i18n::WordType::DICTIONARY_WORD ) ); + + const BOOL bRemoveParaAttribs = !bNoParagraphFormats; + pOLV->RemoveAttribsKeepLanguages( bRemoveParaAttribs ); + SfxItemSet aSet( pOLV->GetAttribs() ); + SfxItemSet aPaintSet( CreatePaintSet(GetFormatRangeImpl(true), *aSet.GetPool(), rFormatSet, aSet, bNoCharacterFormats, bNoParagraphFormats ) ); + pOLV->SetAttribs( aPaintSet ); + } + } + } +} diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx index cba0d1aaf421..072c40c8a1f3 100644 --- a/svx/source/svdraw/svdotextdecomposition.cxx +++ b/svx/source/svdraw/svdotextdecomposition.cxx @@ -800,32 +800,47 @@ void SdrTextObj::impDecomposeBlockTextPrimitive( const bool bVerticalWritintg(rSdrBlockTextPrimitive.getOutlinerParaObject().IsVertical()); const Size aAnchorTextSize(Size(nAnchorTextWidth, nAnchorTextHeight)); - // check if block text is used (only one of them can be true) - const bool bHorizontalIsBlock(SDRTEXTHORZADJUST_BLOCK == eHAdj && !bVerticalWritintg); - const bool bVerticalIsBlock(SDRTEXTVERTADJUST_BLOCK == eVAdj && bVerticalWritintg); - - // set minimal paper size hor/ver if needed - if(bHorizontalIsBlock) - { - rOutliner.SetMinAutoPaperSize(Size(nAnchorTextWidth, 0)); - } - else if(bVerticalIsBlock) - { - rOutliner.SetMinAutoPaperSize(Size(0, nAnchorTextHeight)); - } - if(bIsCell) { // cell text is formated neither like a text object nor like a object // text, so use a special setup here rOutliner.SetMaxAutoPaperSize(aAnchorTextSize); + + // #i106214# To work with an unchangeable PaperSize (CellSize in + // this case) Set(Min|Max)AutoPaperSize and SetPaperSize have to be used. + // #i106214# This was not completely correct; to still measure the real + // text height to allow vertical adjust (and vice versa for VerticalWritintg) + // only one aspect has to be set, but the other one to zero + if(bVerticalWritintg) + { + // measure the horizontal text size + rOutliner.SetMinAutoPaperSize(Size(0, aAnchorTextSize.Height())); + } + else + { + // measure the vertical text size + rOutliner.SetMinAutoPaperSize(Size(aAnchorTextSize.Width(), 0)); + } + rOutliner.SetPaperSize(aAnchorTextSize); rOutliner.SetUpdateMode(true); rOutliner.SetText(rSdrBlockTextPrimitive.getOutlinerParaObject()); - rOutliner.SetControlWord(nOriginalControlWord); } else { + // check if block text is used (only one of them can be true) + const bool bHorizontalIsBlock(SDRTEXTHORZADJUST_BLOCK == eHAdj && !bVerticalWritintg); + const bool bVerticalIsBlock(SDRTEXTVERTADJUST_BLOCK == eVAdj && bVerticalWritintg); + + // set minimal paper size hor/ver if needed + if(bHorizontalIsBlock) + { + rOutliner.SetMinAutoPaperSize(Size(nAnchorTextWidth, 0)); + } + else if(bVerticalIsBlock) + { + rOutliner.SetMinAutoPaperSize(Size(0, nAnchorTextHeight)); + } if((rSdrBlockTextPrimitive.getWordWrap() || IsTextFrame()) && !rSdrBlockTextPrimitive.getUnlimitedPage()) { @@ -854,9 +869,10 @@ void SdrTextObj::impDecomposeBlockTextPrimitive( rOutliner.SetPaperSize(aNullSize); rOutliner.SetUpdateMode(true); rOutliner.SetText(rSdrBlockTextPrimitive.getOutlinerParaObject()); - rOutliner.SetControlWord(nOriginalControlWord); } + rOutliner.SetControlWord(nOriginalControlWord); + // now get back the layouted text size from outliner const Size aOutlinerTextSiz(rOutliner.GetPaperSize()); const basegfx::B2DVector aOutlinerScale(aOutlinerTextSiz.Width(), aOutlinerTextSiz.Height()); diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx index 05b5b5e5aca6..55e0347e6522 100644 --- a/svx/source/svdraw/svdpage.cxx +++ b/svx/source/svdraw/svdpage.cxx @@ -671,7 +671,13 @@ const Rectangle& SdrObjList::GetAllObjSnapRect() const const Rectangle& SdrObjList::GetAllObjBoundRect() const { - if (bRectsDirty) { + // #i106183# for deep group hierarchies like in chart2, the invalidates + // through the hierarchy are not correct; use a 2nd hint for the needed + // recalculation. Future versions will have no bool flag at all, but + // just aOutRect in empty state to representate an invalid state, thus + // it's a step in the right direction. + if (bRectsDirty || aOutRect.IsEmpty()) + { ((SdrObjList*)this)->RecalcRects(); ((SdrObjList*)this)->bRectsDirty=FALSE; } diff --git a/svx/source/table/tablecontroller.cxx b/svx/source/table/tablecontroller.cxx index 20acc4b4c822..345ce9315156 100644 --- a/svx/source/table/tablecontroller.cxx +++ b/svx/source/table/tablecontroller.cxx @@ -2514,6 +2514,88 @@ bool SvxTableController::PasteObject( SdrTableObj* pPasteTableObj ) return true; } +bool SvxTableController::TakeFormatPaintBrush( boost::shared_ptr< SfxItemSet >& /*rFormatSet*/ ) +{ + // SdrView::TakeFormatPaintBrush() is enough + return false; +} + +bool SvxTableController::ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoCharacterFormats, bool bNoParagraphFormats ) +{ + if( mbCellSelectionMode ) + { + SdrTextObj* pTableObj = dynamic_cast<SdrTextObj*>( mxTableObj.get() ); + if( !pTableObj ) + return false; + + const bool bUndo = mpModel && mpModel->IsUndoEnabled(); + + if( bUndo ) + mpModel->BegUndo( ImpGetResStr(STR_TABLE_NUMFORMAT) ); + + CellPos aStart, aEnd; + getSelectedCells( aStart, aEnd ); + + SfxItemSet aAttr(*rFormatSet.GetPool(), rFormatSet.GetRanges()); + aAttr.Put(rFormatSet, TRUE); + + const bool bFrame = (rFormatSet.GetItemState( SDRATTR_TABLE_BORDER ) == SFX_ITEM_SET) || (rFormatSet.GetItemState( SDRATTR_TABLE_BORDER_INNER ) == SFX_ITEM_SET); + + if( bFrame ) + { + aAttr.ClearItem( SDRATTR_TABLE_BORDER ); + aAttr.ClearItem( SDRATTR_TABLE_BORDER_INNER ); + } + + const USHORT* pRanges = rFormatSet.GetRanges(); + bool bTextOnly = true; + + while( *pRanges ) + { + if( (*pRanges != EE_PARA_START) && (*pRanges != EE_CHAR_START) ) + { + bTextOnly = true; + break; + } + pRanges += 2; + } + + const bool bReplaceAll = false; + for( sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow; nRow++ ) + { + for( sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol; nCol++ ) + { + CellRef xCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nCol, nRow ).get() ) ); + if( xCell.is() ) + { + if( bUndo ) + xCell->AddUndo(); + if( !bTextOnly ) + xCell->SetMergedItemSetAndBroadcast(aAttr, bReplaceAll); + + SdrText* pText = static_cast< SdrText* >( xCell.get() ); + mpView->ApplyFormatPaintBrushToText( rFormatSet, *pTableObj, pText, bNoCharacterFormats, bNoParagraphFormats ); + } + } + } + + if( bFrame ) + { + ApplyBorderAttr( rFormatSet ); + } + + UpdateTableShape(); + + if( bUndo ) + mpModel->EndUndo(); + + return true; + + } + return false; +} + + // -------------------------------------------------------------------- IMPL_LINK( SvxTableController, UpdateHdl, void *, EMPTYARG ) diff --git a/svx/source/table/tablecontroller.hxx b/svx/source/table/tablecontroller.hxx index e13fad84179e..0ad7c157e7f6 100644 --- a/svx/source/table/tablecontroller.hxx +++ b/svx/source/table/tablecontroller.hxx @@ -57,6 +57,7 @@ public: SVX_DLLPRIVATE SvxTableController( SdrObjEditView* pView, const SdrObject* pObj ); SVX_DLLPRIVATE virtual ~SvxTableController(); + // from sdr::SelectionController SVX_DLLPRIVATE virtual bool onKeyInput(const KeyEvent& rKEvt, Window* pWin); SVX_DLLPRIVATE virtual bool onMouseButtonDown(const MouseEvent& rMEvt, Window* pWin); SVX_DLLPRIVATE virtual bool onMouseButtonUp(const MouseEvent& rMEvt, Window* pWin); @@ -72,6 +73,9 @@ public: SVX_DLLPRIVATE virtual bool GetStyleSheet( SfxStyleSheet* &rpStyleSheet ) const; SVX_DLLPRIVATE virtual bool SetStyleSheet( SfxStyleSheet* pStyleSheet, bool bDontRemoveHardAttr ); + SVX_DLLPRIVATE virtual bool TakeFormatPaintBrush( boost::shared_ptr< SfxItemSet >& rFormatSet ); + SVX_DLLPRIVATE virtual bool ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoCharacterFormats, bool bNoParagraphFormats ); + // slots SVX_DLLPRIVATE void onInsert( sal_uInt16 nSId, const SfxItemSet* pArgs = 0 ); SVX_DLLPRIVATE void onDelete( sal_uInt16 nSId ); |