summaryrefslogtreecommitdiff
path: root/svx/source
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source')
-rw-r--r--svx/source/cui/cuicharmap.cxx5
-rw-r--r--svx/source/cui/numpages.cxx111
-rw-r--r--svx/source/dialog/hyperdlg.cxx6
-rw-r--r--svx/source/editeng/editdoc.cxx11
-rw-r--r--svx/source/fmcomp/gridcell.cxx4
-rw-r--r--svx/source/intro/intro_tmpl.hrc210
-rw-r--r--svx/source/items/numitem.cxx504
-rw-r--r--svx/source/msfilter/makefile.mk6
-rw-r--r--svx/source/msfilter/msvbahelper.cxx384
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx107
-rw-r--r--svx/source/sdr/overlay/overlaymanagerbuffered.cxx37
-rw-r--r--svx/source/svdraw/selectioncontroller.cxx11
-rw-r--r--svx/source/svdraw/svdedxv.cxx226
-rw-r--r--svx/source/svdraw/svdotextdecomposition.cxx48
-rw-r--r--svx/source/svdraw/svdpage.cxx8
-rw-r--r--svx/source/table/tablecontroller.cxx82
-rw-r--r--svx/source/table/tablecontroller.hxx4
17 files changed, 1344 insertions, 420 deletions
diff --git a/svx/source/cui/cuicharmap.cxx b/svx/source/cui/cuicharmap.cxx
index a66c7b3c10a8..4de8df0e7d7d 100644
--- a/svx/source/cui/cuicharmap.cxx
+++ b/svx/source/cui/cuicharmap.cxx
@@ -71,11 +71,12 @@ SvxCharacterMap::SvxCharacterMap( Window* pParent, BOOL bOne, const SfxItemSet*
if ( pItem )
bOne = pItem->GetValue();
+ mpCharMapData = new SvxCharMapData( this, bOne, &DIALOG_MGR() );
+
SFX_ITEMSET_ARG( pSet, pCharItem, SfxInt32Item, SID_ATTR_CHAR, FALSE );
if ( pCharItem )
- SetChar( pItem->GetValue() );
+ SetChar( pCharItem->GetValue() );
- mpCharMapData = new SvxCharMapData( this, bOne, &DIALOG_MGR() );
SFX_ITEMSET_ARG( pSet, pDisableItem, SfxBoolItem, FN_PARAM_2, FALSE );
if ( pDisableItem && pDisableItem->GetValue() )
diff --git a/svx/source/cui/numpages.cxx b/svx/source/cui/numpages.cxx
index 6454b3dd7c2a..92b5934baed7 100644
--- a/svx/source/cui/numpages.cxx
+++ b/svx/source/cui/numpages.cxx
@@ -378,12 +378,24 @@ int SvxSingleNumPickTabPage::DeactivatePage(SfxItemSet *_pSet)
void SvxSingleNumPickTabPage::Reset( const SfxItemSet& rSet )
{
- nNumItemId = rSet.GetPool() ? rSet.GetPool()->GetWhich( SID_ATTR_NUMBERING_RULE ) : SID_ATTR_NUMBERING_RULE;
-
- const SvxNumBulletItem& rItem = static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, TRUE ) );
+ const SfxPoolItem* pItem;
+// nActNumLvl = ((SwNumBulletTabDialog*)GetTabDialog())->GetActNumLevel();
+ //im Draw gibt es das Item als WhichId, im Writer nur als SlotId
+ SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, FALSE, &pItem);
+ if(eState != SFX_ITEM_SET)
+ {
+ nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
+ eState = rSet.GetItemState(nNumItemId, FALSE, &pItem);
+ if( eState != SFX_ITEM_SET )
+ {
+ pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, TRUE ) );
+ eState = SFX_ITEM_SET;
+ }
+ }
+ DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!");
delete pSaveNum;
- pSaveNum = new SvxNumRule(*rItem.GetNumRule());
+ pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
if(!pActNum)
pActNum = new SvxNumRule(*pSaveNum);
@@ -564,12 +576,24 @@ int SvxBulletPickTabPage::DeactivatePage(SfxItemSet *_pSet)
void SvxBulletPickTabPage::Reset( const SfxItemSet& rSet )
{
- nNumItemId = rSet.GetPool() ? rSet.GetPool()->GetWhich( SID_ATTR_NUMBERING_RULE ) : SID_ATTR_NUMBERING_RULE;
+ const SfxPoolItem* pItem;
+ //im Draw gibt es das Item als WhichId, im Writer nur als SlotId
+ SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, FALSE, &pItem);
+ if(eState != SFX_ITEM_SET)
+ {
+ nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
+ eState = rSet.GetItemState(nNumItemId, FALSE, &pItem);
- const SvxNumBulletItem& rItem = static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, TRUE ) );
+ if( eState != SFX_ITEM_SET )
+ {
+ pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, TRUE ) );
+ eState = SFX_ITEM_SET;
+ }
+ }
+ DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!");
delete pSaveNum;
- pSaveNum = new SvxNumRule(*rItem.GetNumRule());
+ pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
// nActNumLvl = ((SwNumBulletTabDialog*)GetTabDialog())->GetActNumLevel();
@@ -789,12 +813,24 @@ int SvxNumPickTabPage::DeactivatePage(SfxItemSet *_pSet)
void SvxNumPickTabPage::Reset( const SfxItemSet& rSet )
{
- nNumItemId = rSet.GetPool() ? rSet.GetPool()->GetWhich( SID_ATTR_NUMBERING_RULE ) : SID_ATTR_NUMBERING_RULE;
+ const SfxPoolItem* pItem;
+ //im Draw gibt es das Item als WhichId, im Writer nur als SlotId
+ SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, FALSE, &pItem);
+ if(eState != SFX_ITEM_SET)
+ {
+ nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
+ eState = rSet.GetItemState(nNumItemId, FALSE, &pItem);
- const SvxNumBulletItem& rItem = static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, TRUE ) );
+ if( eState != SFX_ITEM_SET )
+ {
+ pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, TRUE ) );
+ eState = SFX_ITEM_SET;
+ }
+ }
+ DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!");
delete pSaveNum;
- pSaveNum = new SvxNumRule(*rItem.GetNumRule());
+ pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
// nActNumLvl = ((SwNumBulletTabDialog*)GetTabDialog())->GetActNumLevel();
if(!pActNum)
@@ -1089,12 +1125,24 @@ BOOL SvxBitmapPickTabPage::FillItemSet( SfxItemSet& rSet )
void SvxBitmapPickTabPage::Reset( const SfxItemSet& rSet )
{
- nNumItemId = rSet.GetPool() ? rSet.GetPool()->GetWhich( SID_ATTR_NUMBERING_RULE ) : SID_ATTR_NUMBERING_RULE;
+ const SfxPoolItem* pItem;
+ //im Draw gibt es das Item als WhichId, im Writer nur als SlotId
+ SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, FALSE, &pItem);
+ if(eState != SFX_ITEM_SET)
+ {
+ nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
+ eState = rSet.GetItemState(nNumItemId, FALSE, &pItem);
- const SvxNumBulletItem& rItem = static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, TRUE ) );
+ if( eState != SFX_ITEM_SET )
+ {
+ pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, TRUE ) );
+ eState = SFX_ITEM_SET;
+ }
+ }
+ DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!");
delete pSaveNum;
- pSaveNum = new SvxNumRule(*rItem.GetNumRule());
+ pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
if(!pActNum)
pActNum = new SvxNumRule(*pSaveNum);
@@ -1516,12 +1564,24 @@ BOOL SvxNumOptionsTabPage::FillItemSet( SfxItemSet& rSet )
--------------------------------------------------*/
void SvxNumOptionsTabPage::Reset( const SfxItemSet& rSet )
{
- nNumItemId = rSet.GetPool() ? rSet.GetPool()->GetWhich( SID_ATTR_NUMBERING_RULE ) : SID_ATTR_NUMBERING_RULE;
+ const SfxPoolItem* pItem;
+ //im Draw gibt es das Item als WhichId, im Writer nur als SlotId
+ SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, FALSE, &pItem);
+ if(eState != SFX_ITEM_SET)
+ {
+ nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
+ eState = rSet.GetItemState(nNumItemId, FALSE, &pItem);
- const SvxNumBulletItem& rItem = static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, TRUE ) );
+ if( eState != SFX_ITEM_SET )
+ {
+ pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, TRUE ) );
+ eState = SFX_ITEM_SET;
+ }
+ }
+ DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!");
delete pSaveNum;
- pSaveNum = new SvxNumRule(*rItem.GetNumRule());
+ pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
// Ebenen einfuegen
if(!aLevelLB.GetEntryCount())
@@ -1565,7 +1625,6 @@ void SvxNumOptionsTabPage::Reset( const SfxItemSet& rSet )
pPreviewWIN->SetNumRule(pActNum);
aSameLevelCB.Check(pActNum->IsContinuousNumbering());
- const SfxPoolItem* pItem = 0;
//ColorListBox bei Bedarf fuellen
if ( pActNum->IsFeatureSupported( NUM_BULLET_COLOR ) )
{
@@ -3409,12 +3468,24 @@ BOOL SvxNumPositionTabPage::FillItemSet( SfxItemSet& rSet )
--------------------------------------------------*/
void SvxNumPositionTabPage::Reset( const SfxItemSet& rSet )
{
- nNumItemId = rSet.GetPool() ? rSet.GetPool()->GetWhich( SID_ATTR_NUMBERING_RULE ) : SID_ATTR_NUMBERING_RULE;
+ const SfxPoolItem* pItem;
+ //im Draw gibt es das Item als WhichId, im Writer nur als SlotId
+ SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, FALSE, &pItem);
+ if(eState != SFX_ITEM_SET)
+ {
+ nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
+ eState = rSet.GetItemState(nNumItemId, FALSE, &pItem);
- const SvxNumBulletItem& rItem = static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, TRUE ) );
+ if( eState != SFX_ITEM_SET )
+ {
+ pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, TRUE ) );
+ eState = SFX_ITEM_SET;
+ }
+ }
+ DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!");
delete pSaveNum;
- pSaveNum = new SvxNumRule(*rItem.GetNumRule());
+ pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
// Ebenen einfuegen
if(!aLevelLB.GetEntryCount())
diff --git a/svx/source/dialog/hyperdlg.cxx b/svx/source/dialog/hyperdlg.cxx
index d17a24a37e22..adc1317cdece 100644
--- a/svx/source/dialog/hyperdlg.cxx
+++ b/svx/source/dialog/hyperdlg.cxx
@@ -78,9 +78,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 ff7cfd422eb8..b70ba93a00e1 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/makefile.mk b/svx/source/msfilter/makefile.mk
index adbe8b104860..53eab95a5be8 100644
--- a/svx/source/msfilter/makefile.mk
+++ b/svx/source/msfilter/makefile.mk
@@ -54,7 +54,8 @@ LIB1OBJFILES= \
$(SLO)$/svxmsbas.obj \
$(SLO)$/msocximex.obj \
$(SLO)$/mscodec.obj \
- $(SLO)$/msfiltertracer.obj
+ $(SLO)$/msfiltertracer.obj \
+ $(SLO)$/msvbahelper.obj\
LIB2TARGET= $(SLB)$/$(TARGET)-core.lib
LIB2OBJFILES= \
@@ -70,7 +71,8 @@ EXCEPTIONSFILES= \
$(SLO)$/msocximex.obj \
$(SLO)$/msoleexp.obj \
$(SLO)$/svxmsbas.obj \
- $(SLO)$/msfiltertracer.obj
+ $(SLO)$/msfiltertracer.obj \
+ $(SLO)$/msvbahelper.obj\
.INCLUDE : target.mk
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 901bc0e7e5b6..08dd4b33781a 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 e72b606f3b53..03e43a5eb57c 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 d7f64c852fc6..b1d4171c459a 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 );