sd/inc/stlpool.hxx | 3 + sd/source/core/drawdoc3.cxx | 51 +++++++++++++++++++-- sd/source/core/stlpool.cxx | 18 +++++++ sd/source/core/stlsheet.cxx | 13 +---- solenv/bin/linkoo | 2 svl/Package_inc.mk | 1 svl/inc/svl/style.hxx | 6 ++ svl/inc/svl/stylesheetuser.hxx | 38 +++++++++++++++ svl/source/items/style.cxx | 5 ++ svx/inc/svx/sdr/properties/attributeproperties.hxx | 5 +- svx/inc/svx/svdpage.hxx | 5 +- svx/source/sdr/properties/attributeproperties.cxx | 12 ++++ svx/source/svdraw/svdpage.cxx | 7 ++ 13 files changed, 150 insertions(+), 16 deletions(-)
New commits: commit f8409911be702c988557903e44783e22a8029769 Author: David Tardon <dtar...@redhat.com> Date: Tue Jan 22 10:32:32 2013 +0100 do not second-guess which classes use a stylesheet Change-Id: I76b23bcdca2e7394fd5ab67e8341f4cdb46f8a64 diff --git a/sd/source/core/stlsheet.cxx b/sd/source/core/stlsheet.cxx index f013739..0756e6b 100644 --- a/sd/source/core/stlsheet.cxx +++ b/sd/source/core/stlsheet.cxx @@ -349,18 +349,9 @@ bool SdStyleSheet::IsUsed() const if( pListener == this ) continue; - // NULL-Pointer ist im Listener-Array erlaubt - if (pListener) - { - if (pListener->ISA(sdr::properties::AttributeProperties)) - { - bResult = true; - } - else if (pListener->ISA(SfxStyleSheet)) - { - bResult = ((SfxStyleSheet*)pListener)->IsUsed(); - } - } + const svl::StyleSheetUser* const pUser(dynamic_cast<svl::StyleSheetUser*>(pListener)); + if (pUser) + bResult = pUser->isUsedByModel(); if (bResult) break; } diff --git a/svl/Package_inc.mk b/svl/Package_inc.mk index e518219..5ac424d 100644 --- a/svl/Package_inc.mk +++ b/svl/Package_inc.mk @@ -97,6 +97,7 @@ $(eval $(call gb_Package_add_file,svl_inc,inc/svl/strmadpt.hxx,svl/strmadpt.hxx) $(eval $(call gb_Package_add_file,svl_inc,inc/svl/style.hrc,svl/style.hrc)) $(eval $(call gb_Package_add_file,svl_inc,inc/svl/style.hxx,svl/style.hxx)) $(eval $(call gb_Package_add_file,svl_inc,inc/svl/stylepool.hxx,svl/stylepool.hxx)) +$(eval $(call gb_Package_add_file,svl_inc,inc/svl/stylesheetuser.hxx,svl/stylesheetuser.hxx)) $(eval $(call gb_Package_add_file,svl_inc,inc/svl/svdde.hxx,svl/svdde.hxx)) $(eval $(call gb_Package_add_file,svl_inc,inc/svl/svl.hrc,svl/svl.hrc)) $(eval $(call gb_Package_add_file,svl_inc,inc/svl/svldllapi.h,svl/svldllapi.h)) diff --git a/svl/inc/svl/style.hxx b/svl/inc/svl/style.hxx index 48557c5..18c0ceb 100644 --- a/svl/inc/svl/style.hxx +++ b/svl/inc/svl/style.hxx @@ -34,6 +34,7 @@ #include <svl/lstner.hxx> #include <svl/brdcst.hxx> #include <svl/poolitem.hxx> +#include <svl/stylesheetuser.hxx> #include <svl/style.hrc> @@ -267,7 +268,7 @@ public: //========================================================================= class SVL_DLLPUBLIC SfxStyleSheet: public SfxStyleSheetBase, - public SfxListener, public SfxBroadcaster + public SfxListener, public SfxBroadcaster, public svl::StyleSheetUser { public: TYPEINFO(); @@ -276,6 +277,9 @@ public: SfxStyleSheet( const SfxStyleSheet& ); virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + virtual bool isUsedByModel() const; + virtual bool SetParent( const UniString& ); protected: diff --git a/svl/inc/svl/stylesheetuser.hxx b/svl/inc/svl/stylesheetuser.hxx new file mode 100644 index 0000000..787263f --- /dev/null +++ b/svl/inc/svl/stylesheetuser.hxx @@ -0,0 +1,38 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef SVL_STYLESHEETUSER_HXX_INCLUDED +#define SVL_STYLESHEETUSER_HXX_INCLUDED + +namespace svl +{ + +/** Test whether object that uses a stylesheet is used itself. + + This interface should be implemented by all classes that use + a SfxStyleSheet (and listen on it). It can be queried by the stylesheet + to determine if it is really used. + */ +class StyleSheetUser +{ +public: + /** Test whether this object is used. + + @return true, if the object is used, false otherwise + */ + virtual bool isUsedByModel() const = 0; +protected: + ~StyleSheetUser() {} +}; + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svl/source/items/style.cxx b/svl/source/items/style.cxx index 6df5bfa..812567c 100644 --- a/svl/source/items/style.cxx +++ b/svl/source/items/style.cxx @@ -913,6 +913,11 @@ void SfxStyleSheet::Notify(SfxBroadcaster& rBC, const SfxHint& rHint ) Forward(rBC, rHint); } +bool SfxStyleSheet::isUsedByModel() const +{ + return IsUsed(); +} + //////////////////////// SfxStyleSheetPool /////////////////////////////// SfxStyleSheetPool::SfxStyleSheetPool( SfxItemPool const& rSet) diff --git a/svx/inc/svx/sdr/properties/attributeproperties.hxx b/svx/inc/svx/sdr/properties/attributeproperties.hxx index 12d8e20..9f3e4d9 100644 --- a/svx/inc/svx/sdr/properties/attributeproperties.hxx +++ b/svx/inc/svx/sdr/properties/attributeproperties.hxx @@ -21,6 +21,7 @@ #define _SDR_PROPERTIES_ATTRIBUTEPROPERTIES_HXX #include <svl/lstner.hxx> +#include <svl/stylesheetuser.hxx> #include <svx/sdr/properties/defaultproperties.hxx> #include "svx/svxdllapi.h" @@ -30,7 +31,7 @@ namespace sdr { namespace properties { - class SVX_DLLPUBLIC AttributeProperties : public DefaultProperties, public SfxListener + class SVX_DLLPUBLIC AttributeProperties : public DefaultProperties, public SfxListener, public svl::StyleSheetUser { // add style sheet, do all the necessary handling void ImpAddStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); @@ -82,6 +83,8 @@ namespace sdr // This is the Notify(...) from 2nd base class SfxListener virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + + virtual bool isUsedByModel() const; }; } // end of namespace properties } // end of namespace sdr diff --git a/svx/inc/svx/svdpage.hxx b/svx/inc/svx/svdpage.hxx index 8cd9eec..9d9e3f2 100644 --- a/svx/inc/svx/svdpage.hxx +++ b/svx/inc/svx/svdpage.hxx @@ -20,6 +20,7 @@ #ifndef _SVDPAGE_HXX #define _SVDPAGE_HXX +#include <svl/stylesheetuser.hxx> #include <vcl/bitmap.hxx> #include <vcl/print.hxx> #include <vcl/gdimtf.hxx> @@ -368,7 +369,7 @@ public: //////////////////////////////////////////////////////////////////////////////////////////////////// // class SdrPageProperties -class SVX_DLLPUBLIC SdrPageProperties : public SfxListener +class SVX_DLLPUBLIC SdrPageProperties : public SfxListener, public svl::StyleSheetUser { private: // data @@ -391,6 +392,8 @@ public: // Notify(...) from baseclass SfxListener virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + virtual bool isUsedByModel() const; + // data read/write const SfxItemSet& GetItemSet() const; void PutItemSet(const SfxItemSet& rSet); diff --git a/svx/source/sdr/properties/attributeproperties.cxx b/svx/source/sdr/properties/attributeproperties.cxx index 538e4f0..54386de 100644 --- a/svx/source/sdr/properties/attributeproperties.cxx +++ b/svx/source/sdr/properties/attributeproperties.cxx @@ -608,6 +608,18 @@ namespace sdr GetSdrObject().Notify(rBC, rHint); } } + + bool AttributeProperties::isUsedByModel() const + { + const SdrObject& rObj(GetSdrObject()); + if (rObj.IsInserted()) + { + const SdrPage* const pPage(rObj.GetPage()); + if (pPage && pPage->IsInserted()) + return true; + } + return false; + } } // end of namespace properties } // end of namespace sdr diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx index 5ed24f5..50e4e3b 100644 --- a/svx/source/svdraw/svdpage.cxx +++ b/svx/source/svdraw/svdpage.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <cassert> #include <svx/svdpage.hxx> @@ -1196,6 +1197,12 @@ void SdrPageProperties::Notify(SfxBroadcaster& /*rBC*/, const SfxHint& rHint) } } +bool SdrPageProperties::isUsedByModel() const +{ + assert(mpSdrPage); + return mpSdrPage->IsInserted(); +} + const SfxItemSet& SdrPageProperties::GetItemSet() const { return *mpProperties; commit 24578b804007d8c3201e5ed32b8485e1725c33c1 Author: David Tardon <dtar...@redhat.com> Date: Thu Jan 17 15:01:32 2013 +0100 rhbz#760765 copy custom styles on copy & paste Change-Id: Icaacf3bc1a02a017692432aec36aba06d3f5dde5 diff --git a/sd/inc/stlpool.hxx b/sd/inc/stlpool.hxx index 9e76c2a..4833dd8 100644 --- a/sd/inc/stlpool.hxx +++ b/sd/inc/stlpool.hxx @@ -80,6 +80,8 @@ public: void CopyGraphicSheets(SdStyleSheetPool& rSourcePool); void CopyCellSheets(SdStyleSheetPool& rSourcePool); void CopyTableStyles(SdStyleSheetPool& rSourcePool); + void CopyGraphicSheets(SdStyleSheetPool& rSourcePool, SdStyleSheetVector& rCreatedSheets); + void CopyCellSheets(SdStyleSheetPool& rSourcePool, SdStyleSheetVector& rCreatedSheets); void CreatePseudosIfNecessary(); void UpdateStdNames(); @@ -121,6 +123,7 @@ public: virtual void SAL_CALL release (void) throw (); protected: void CopySheets(SdStyleSheetPool& rSourcePool, SfxStyleFamily eFamily ); + void CopySheets(SdStyleSheetPool& rSourcePool, SfxStyleFamily eFamily, SdStyleSheetVector& rCreatedSheets ); virtual SfxStyleSheetBase* Create(const String& rName, SfxStyleFamily eFamily, sal_uInt16 nMask); virtual SfxStyleSheetBase* Create(const SdStyleSheet& rStyle); diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx index e7ac380..b18c254 100644 --- a/sd/source/core/drawdoc3.cxx +++ b/sd/source/core/drawdoc3.cxx @@ -357,6 +357,26 @@ sal_Bool SdDrawDocument::InsertBookmark( return bOK; } +namespace +{ + +void +lcl_removeUnusedStyles(SfxStyleSheetBasePool* const pStyleSheetPool, SdStyleSheetVector& rStyles) +{ + SdStyleSheetVector aUsedStyles; + aUsedStyles.reserve(rStyles.size()); + for (SdStyleSheetVector::const_iterator aIt(rStyles.begin()), aLast(rStyles.end()); aIt != aLast; ++aIt) + { + if ((*aIt)->IsUsed()) + aUsedStyles.push_back(*aIt); + else + pStyleSheetPool->Remove((*aIt).get()); + } + rStyles = aUsedStyles; +} + +} + sal_Bool SdDrawDocument::InsertBookmarkAsPage( const std::vector<rtl::OUString> &rBookmarkList, std::vector<rtl::OUString> *pExchangeList, // Liste der zu verwendenen Namen @@ -484,8 +504,8 @@ sal_Bool SdDrawDocument::InsertBookmarkAsPage( /************************************************************************** * Die tatsaechlich benoetigten Vorlagen kopieren **************************************************************************/ - SdStyleSheetPool* pBookmarkStyleSheetPool = - (SdStyleSheetPool*) pBookmarkDoc->GetStyleSheetPool(); + SdStyleSheetPool* pBookmarkStyleSheetPool = dynamic_cast<SdStyleSheetPool*>(pBookmarkDoc->GetStyleSheetPool()); + SdStyleSheetPool* pStyleSheetPool = dynamic_cast<SdStyleSheetPool*>(GetStyleSheetPool()); // Wenn Vorlagen kopiert werden muessen, dann muessen auch die // MasterPages kopiert werden! @@ -498,7 +518,7 @@ sal_Bool SdDrawDocument::InsertBookmarkAsPage( SdStyleSheetVector aCreatedStyles; String layoutName = *pIter; - ((SdStyleSheetPool*)GetStyleSheetPool())->CopyLayoutSheets(layoutName, *pBookmarkStyleSheetPool,aCreatedStyles); + pStyleSheetPool->CopyLayoutSheets(layoutName, *pBookmarkStyleSheetPool,aCreatedStyles); if(!aCreatedStyles.empty()) { @@ -510,6 +530,18 @@ sal_Bool SdDrawDocument::InsertBookmarkAsPage( } } + // Copy styles. This unconditionally copies all styles, even those + // that are not used in any of the inserted pages. The unused styles + // are then removed at the end of the function, where we also create + // undo records for the inserted styles. + SdStyleSheetVector aNewGraphicStyles; + pStyleSheetPool->CopyGraphicSheets(*pBookmarkStyleSheetPool, aNewGraphicStyles); + SdStyleSheetVector aNewCellStyles; + pStyleSheetPool->CopyCellSheets(*pBookmarkStyleSheetPool, aNewCellStyles); + + // TODO handle undo of table styles too + pStyleSheetPool->CopyTableStyles(*pBookmarkStyleSheetPool); + /************************************************************************** * Dokument einfuegen **************************************************************************/ @@ -910,6 +942,17 @@ sal_Bool SdDrawDocument::InsertBookmarkAsPage( // Make absolutely sure no double masterpages are there RemoveUnnecessaryMasterPages(NULL, sal_True, sal_True); + // remove copied styles not used on any inserted page and create + // undo records + // WARNING: SdMoveStyleSheetsUndoAction clears the passed list of + // styles, so it cannot be used after this point + lcl_removeUnusedStyles(GetStyleSheetPool(), aNewGraphicStyles); + if (!aNewGraphicStyles.empty() && pUndoMgr) + pUndoMgr->AddUndoAction(new SdMoveStyleSheetsUndoAction(this, aNewGraphicStyles, sal_True)); + lcl_removeUnusedStyles(GetStyleSheetPool(), aNewCellStyles); + if (!aNewCellStyles.empty() && pUndoMgr) + pUndoMgr->AddUndoAction(new SdMoveStyleSheetsUndoAction(this, aNewCellStyles, sal_True)); + if( bUndo ) EndUndo(); pUndoMgr->LeaveListAction(); diff --git a/sd/source/core/stlpool.cxx b/sd/source/core/stlpool.cxx index 078a64d..cfe6c82 100644 --- a/sd/source/core/stlpool.cxx +++ b/sd/source/core/stlpool.cxx @@ -582,8 +582,24 @@ void SdStyleSheetPool::CopyTableStyles(SdStyleSheetPool& rSourcePool) } } +void SdStyleSheetPool::CopyGraphicSheets(SdStyleSheetPool& rSourcePool, SdStyleSheetVector& rCreatedSheets) +{ + CopySheets( rSourcePool, SD_STYLE_FAMILY_GRAPHICS, rCreatedSheets ); +} + +void SdStyleSheetPool::CopyCellSheets(SdStyleSheetPool& rSourcePool, SdStyleSheetVector& rCreatedSheets) +{ + CopySheets( rSourcePool, SD_STYLE_FAMILY_CELL, rCreatedSheets ); +} + void SdStyleSheetPool::CopySheets(SdStyleSheetPool& rSourcePool, SfxStyleFamily eFamily ) { + SdStyleSheetVector aTmpSheets; + CopySheets(rSourcePool, eFamily, aTmpSheets); +} + +void SdStyleSheetPool::CopySheets(SdStyleSheetPool& rSourcePool, SfxStyleFamily eFamily, SdStyleSheetVector& rCreatedSheets) +{ String aHelpFile; sal_uInt32 nCount = rSourcePool.aStyles.size(); @@ -610,6 +626,8 @@ void SdStyleSheetPool::CopySheets(SdStyleSheetPool& rSourcePool, SfxStyleFamily xNewSheet->SetHelpId( aHelpFile, xSheet->GetHelpId( aHelpFile ) ); xNewSheet->GetItemSet().Put( xSheet->GetItemSet() ); + + rCreatedSheets.push_back( SdStyleSheetRef( static_cast< SdStyleSheet* >( xNewSheet.get() ) ) ); } } } diff --git a/sd/source/core/stlsheet.cxx b/sd/source/core/stlsheet.cxx index ecd84d7..f013739 100644 --- a/sd/source/core/stlsheet.cxx +++ b/sd/source/core/stlsheet.cxx @@ -35,6 +35,7 @@ #include <svl/smplhint.hxx> #include <svl/itemset.hxx> +#include <svx/sdr/properties/attributeproperties.hxx> #include <svx/xflbmtit.hxx> #include <svx/xflbstit.hxx> #include <editeng/bulitem.hxx> @@ -349,13 +350,16 @@ bool SdStyleSheet::IsUsed() const continue; // NULL-Pointer ist im Listener-Array erlaubt - if (pListener && pListener->ISA(SdrAttrObj)) + if (pListener) { - bResult = ((SdrAttrObj*)pListener)->IsInserted(); - } - else if (pListener && pListener->ISA(SfxStyleSheet)) - { - bResult = ((SfxStyleSheet*)pListener)->IsUsed(); + if (pListener->ISA(sdr::properties::AttributeProperties)) + { + bResult = true; + } + else if (pListener->ISA(SfxStyleSheet)) + { + bResult = ((SfxStyleSheet*)pListener)->IsUsed(); + } } if (bResult) break; commit 34add900d03aa1ac194152f9f96d5b8b852a1175 Author: David Tardon <dtar...@redhat.com> Date: Wed Jan 16 14:06:21 2013 +0100 use already defined variable Change-Id: Ibadc8327cef327625d6b4663c1487b126e2e6920 diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx index a3ff2ec..e7ac380 100644 --- a/sd/source/core/drawdoc3.cxx +++ b/sd/source/core/drawdoc3.cxx @@ -419,7 +419,7 @@ sal_Bool SdDrawDocument::InsertBookmarkAsPage( Orientation eOrient = pRefPage->GetOrientation(); SdPage* pNPage = GetSdPage(0, PK_NOTES); - Size aNSize(GetSdPage(0, PK_NOTES)->GetSize()); + Size aNSize(pNPage->GetSize()); sal_Int32 nNLeft = pNPage->GetLftBorder(); sal_Int32 nNRight = pNPage->GetRgtBorder(); sal_Int32 nNUpper = pNPage->GetUppBorder(); commit c6a5e93b79e01e13185a909106d9dd6a68be63f6 Author: David Tardon <dtar...@redhat.com> Date: Tue Jan 8 10:30:45 2013 +0100 clean linkoo output Change-Id: I5345a062206a065f01bb19ca808c467d94da5259 diff --git a/solenv/bin/linkoo b/solenv/bin/linkoo index 7b9ee4a..6f6e096 100755 --- a/solenv/bin/linkoo +++ b/solenv/bin/linkoo @@ -455,6 +455,7 @@ sub link_ui_files() my @modules = get_modules( $OOO_BUILD, $TARGET ); + print "ui case:"; # Search the files in the source tree for my $dest ( @files ) { @@ -500,6 +501,7 @@ sub link_ui_files() do_link ( $src_dir, $dest_dir, $name, $name ); } } + print "\n"; } evilness ('undo'); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits