[Libreoffice-commits] core.git: 3 commits - include/svl include/svx sd/source svl/source sw/source
Kohei Yoshida
kohei.yoshida at collabora.com
Sat Dec 6 22:10:16 PST 2014
include/svl/undo.hxx | 78 ++++++++----------------
include/svx/svddrag.hxx | 2
sd/source/ui/inc/sdundogr.hxx | 2
sd/source/ui/view/outlview.cxx | 14 ++--
svl/source/undo/undo.cxx | 113 +++++++++++++++++++++++++++++++-----
sw/source/core/docnode/nodedump.cxx | 2
6 files changed, 136 insertions(+), 75 deletions(-)
New commits:
commit 9dd8413a61301305d1bafacc5d3511cf3c3129e2
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Sun Dec 7 01:07:02 2014 -0500
Forward-declare MarkedUndoAction.
Change-Id: I1c36077cada47bacfb8436cf3fb659e47d02da60
diff --git a/include/svl/undo.hxx b/include/svl/undo.hxx
index d63a69b..24fcbbc 100644
--- a/include/svl/undo.hxx
+++ b/include/svl/undo.hxx
@@ -25,10 +25,9 @@
#include <boost/scoped_ptr.hpp>
-#include <vector>
#include <limits>
-
+struct MarkedUndoAction;
class SVL_DLLPUBLIC SfxRepeatTarget
{
@@ -84,21 +83,7 @@ private:
typedef sal_Int32 UndoStackMark;
#define MARK_INVALID ::std::numeric_limits< UndoStackMark >::max()
-
-
-struct MarkedUndoAction
-{
- SfxUndoAction* pAction;
- ::std::vector< UndoStackMark > aMarks;
-
- MarkedUndoAction( SfxUndoAction* i_action )
- :pAction( i_action )
- ,aMarks()
- {
- }
-};
-
-class SfxUndoActions
+class SVL_DLLPUBLIC SfxUndoActions
{
struct Impl;
Impl* mpImpl;
@@ -114,6 +99,9 @@ public:
const MarkedUndoAction& operator[]( size_t i ) const;
MarkedUndoAction& operator[]( size_t i );
+ const SfxUndoAction* GetUndoAction( size_t i ) const;
+ SfxUndoAction* GetUndoAction( size_t i );
+
void Remove( size_t i_pos );
void Remove( size_t i_pos, size_t i_count );
void Insert( SfxUndoAction* i_action, size_t i_pos );
diff --git a/include/svx/svddrag.hxx b/include/svx/svddrag.hxx
index fd43db2..b622999d 100644
--- a/include/svx/svddrag.hxx
+++ b/include/svx/svddrag.hxx
@@ -25,6 +25,8 @@
#include <tools/fract.hxx>
#include <svx/svxdllapi.h>
+#include <vector>
+
// Status information for specialized object dragging. In order for the model
// to stay status free, the status data is kept on the View
// and handed over to the object at the appropriate time as a parameter.
diff --git a/sd/source/ui/inc/sdundogr.hxx b/sd/source/ui/inc/sdundogr.hxx
index efb4a2a..47ae469 100644
--- a/sd/source/ui/inc/sdundogr.hxx
+++ b/sd/source/ui/inc/sdundogr.hxx
@@ -24,6 +24,8 @@
#include "sdundo.hxx"
#include "sddllapi.h"
+#include <vector>
+
class SD_DLLPUBLIC SdUndoGroup : public SdUndoAction
{
std::vector<SdUndoAction*> aCtn;
diff --git a/sd/source/ui/view/outlview.cxx b/sd/source/ui/view/outlview.cxx
index c901efb..fa50067 100644
--- a/sd/source/ui/view/outlview.cxx
+++ b/sd/source/ui/view/outlview.cxx
@@ -1590,7 +1590,7 @@ void OutlineView::TryToMergeUndoActions()
EditUndo* pEditUndo = 0;
while( !pEditUndo && nAction )
{
- pEditUndo = dynamic_cast< EditUndo* >(pListAction->aUndoActions[--nAction].pAction);
+ pEditUndo = dynamic_cast< EditUndo* >(pListAction->aUndoActions.GetUndoAction(--nAction));
}
sal_uInt16 nEditPos = nAction; // we need this later to remove the merged undo actions
@@ -1598,7 +1598,7 @@ void OutlineView::TryToMergeUndoActions()
// make sure it is the only EditUndo action in the top undo list
while( pEditUndo && nAction )
{
- if( dynamic_cast< EditUndo* >(pListAction->aUndoActions[--nAction].pAction) )
+ if( dynamic_cast< EditUndo* >(pListAction->aUndoActions.GetUndoAction(--nAction)) )
pEditUndo = 0;
}
@@ -1610,7 +1610,7 @@ void OutlineView::TryToMergeUndoActions()
nAction = pPrevListAction->aUndoActions.size();
EditUndo* pPrevEditUndo = 0;
while( !pPrevEditUndo && nAction )
- pPrevEditUndo = dynamic_cast< EditUndo* >(pPrevListAction->aUndoActions[--nAction].pAction);
+ pPrevEditUndo = dynamic_cast< EditUndo* >(pPrevListAction->aUndoActions.GetUndoAction(--nAction));
if( pPrevEditUndo && pPrevEditUndo->Merge( pEditUndo ) )
{
@@ -1627,14 +1627,14 @@ void OutlineView::TryToMergeUndoActions()
::svl::IUndoManager* pDocUndoManager = mpDocSh->GetUndoManager();
if( pDocUndoManager && ( pListAction->aUndoActions.size() == 1 ))
{
- SfxLinkUndoAction* pLinkAction = dynamic_cast< SfxLinkUndoAction* >( pListAction->aUndoActions[0].pAction );
+ SfxLinkUndoAction* pLinkAction = dynamic_cast< SfxLinkUndoAction* >( pListAction->aUndoActions.GetUndoAction(0) );
SfxLinkUndoAction* pPrevLinkAction = 0;
if( pLinkAction )
{
nAction = pPrevListAction->aUndoActions.size();
while( !pPrevLinkAction && nAction )
- pPrevLinkAction = dynamic_cast< SfxLinkUndoAction* >(pPrevListAction->aUndoActions[--nAction].pAction);
+ pPrevLinkAction = dynamic_cast< SfxLinkUndoAction* >(pPrevListAction->aUndoActions.GetUndoAction(--nAction));
}
if( pLinkAction && pPrevLinkAction &&
@@ -1650,7 +1650,7 @@ void OutlineView::TryToMergeUndoActions()
sal_uInt16 nDestAction = pDestinationList->aUndoActions.size();
while( nCount-- )
{
- SfxUndoAction* pTemp = pSourceList->aUndoActions[0].pAction;
+ SfxUndoAction* pTemp = pSourceList->aUndoActions.GetUndoAction(0);
pSourceList->aUndoActions.Remove(0);
pDestinationList->aUndoActions.Insert( pTemp, nDestAction++ );
}
@@ -1673,7 +1673,7 @@ void OutlineView::TryToMergeUndoActions()
size_t nDestAction = pPrevListAction->aUndoActions.size();
while( nCount-- )
{
- SfxUndoAction* pTemp = pListAction->aUndoActions[0].pAction;
+ SfxUndoAction* pTemp = pListAction->aUndoActions.GetUndoAction(0);
pListAction->aUndoActions.Remove(0);
if( pTemp )
pPrevListAction->aUndoActions.Insert( pTemp, nDestAction++ );
diff --git a/svl/source/undo/undo.cxx b/svl/source/undo/undo.cxx
index 011bd17..772dd43 100644
--- a/svl/source/undo/undo.cxx
+++ b/svl/source/undo/undo.cxx
@@ -135,6 +135,18 @@ bool SfxUndoAction::CanRepeat(SfxRepeatTarget&) const
return true;
}
+struct MarkedUndoAction
+{
+ SfxUndoAction* pAction;
+ ::std::vector< UndoStackMark > aMarks;
+
+ MarkedUndoAction( SfxUndoAction* i_action )
+ :pAction( i_action )
+ ,aMarks()
+ {
+ }
+};
+
struct SfxUndoActions::Impl
{
std::vector<MarkedUndoAction> maActions;
@@ -173,6 +185,16 @@ MarkedUndoAction& SfxUndoActions::operator[]( size_t i )
return mpImpl->maActions[i];
}
+const SfxUndoAction* SfxUndoActions::GetUndoAction( size_t i ) const
+{
+ return mpImpl->maActions[i].pAction;
+}
+
+SfxUndoAction* SfxUndoActions::GetUndoAction( size_t i )
+{
+ return mpImpl->maActions[i].pAction;
+}
+
void SfxUndoActions::Remove( size_t i_pos )
{
mpImpl->maActions.erase( mpImpl->maActions.begin() + i_pos );
diff --git a/sw/source/core/docnode/nodedump.cxx b/sw/source/core/docnode/nodedump.cxx
index 6007a3f..f0be0e2 100644
--- a/sw/source/core/docnode/nodedump.cxx
+++ b/sw/source/core/docnode/nodedump.cxx
@@ -1024,7 +1024,7 @@ void lcl_dumpSfxUndoAction(WriterHelper& writer, SfxUndoAction* pAction)
writer.startElement("list");
writer.writeFormatAttribute("size", TMP_FORMAT, pList->aUndoActions.size());
for (size_t i = 0; i < pList->aUndoActions.size(); ++i)
- lcl_dumpSfxUndoAction(writer, pList->aUndoActions[i].pAction);
+ lcl_dumpSfxUndoAction(writer, pList->aUndoActions.GetUndoAction(i));
writer.endElement();
}
commit f28ee9e4004ebf51332a998638aea779e07f6450
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Sat Dec 6 16:36:16 2014 -0500
Pimplize SfxListUndoAction.
Change-Id: Ic82755788df237c455c802a039881a9d056f4df2
diff --git a/include/svl/undo.hxx b/include/svl/undo.hxx
index 5aed21a..d63a69b 100644
--- a/include/svl/undo.hxx
+++ b/include/svl/undo.hxx
@@ -74,7 +74,8 @@ public:
virtual sal_uInt16 GetId() const;
private:
- SfxUndoAction& operator=( const SfxUndoAction& ); // n.i.!!
+ SfxUndoAction( const SfxUndoAction& ); // disabled
+ SfxUndoAction& operator=( const SfxUndoAction& ); // disabled
};
@@ -146,11 +147,16 @@ class SVL_DLLPUBLIC SfxListUndoAction : public SfxUndoAction, public SfxUndoArra
Redo and Undo work element wise on SfxListUndoActions.
*/
{
- public:
+ struct Impl;
+ Impl* mpImpl;
+
+public:
TYPEINFO_OVERRIDE();
- SfxListUndoAction( const OUString &rComment,
- const OUString& rRepeatComment, sal_uInt16 Id, SfxUndoArray *pFather);
+ SfxListUndoAction(
+ const OUString &rComment, const OUString& rRepeatComment, sal_uInt16 nId, SfxUndoArray *pFather );
+ ~SfxListUndoAction();
+
virtual void Undo() SAL_OVERRIDE;
virtual void UndoWithContext( SfxUndoContext& i_context ) SAL_OVERRIDE;
virtual void Redo() SAL_OVERRIDE;
@@ -165,13 +171,6 @@ class SVL_DLLPUBLIC SfxListUndoAction : public SfxUndoAction, public SfxUndoArra
virtual sal_uInt16 GetId() const SAL_OVERRIDE;
void SetComment(const OUString& rComment);
-
- private:
-
- sal_uInt16 nId;
- OUString aComment;
- OUString aRepeatComment;
-
};
diff --git a/svl/source/undo/undo.cxx b/svl/source/undo/undo.cxx
index 514e842..011bd17 100644
--- a/svl/source/undo/undo.cxx
+++ b/svl/source/undo/undo.cxx
@@ -1248,45 +1248,52 @@ void SfxUndoManager::RemoveOldestUndoActions( size_t const i_count )
}
}
+struct SfxListUndoAction::Impl
+{
+ sal_uInt16 mnId;
+
+ OUString maComment;
+ OUString maRepeatComment;
+
+ Impl( sal_uInt16 nId, const OUString& rComment, const OUString& rRepeatComment ) :
+ mnId(nId), maComment(rComment), maRepeatComment(rRepeatComment) {}
+};
sal_uInt16 SfxListUndoAction::GetId() const
{
- return nId;
+ return mpImpl->mnId;
}
-
OUString SfxListUndoAction::GetComment() const
{
- return aComment;
+ return mpImpl->maComment;
}
-
void SfxListUndoAction::SetComment(const OUString& rComment)
{
- aComment = rComment;
+ mpImpl->maComment = rComment;
}
-
OUString SfxListUndoAction::GetRepeatComment(SfxRepeatTarget &) const
{
- return aRepeatComment;
+ return mpImpl->maRepeatComment;
}
-
-
-SfxListUndoAction::SfxListUndoAction
-(
+SfxListUndoAction::SfxListUndoAction(
const OUString &rComment,
const OUString &rRepeatComment,
- sal_uInt16 Id,
- SfxUndoArray *pFather
-)
-: nId(Id), aComment(rComment), aRepeatComment(rRepeatComment)
+ sal_uInt16 nId,
+ SfxUndoArray *pFather ) :
+ mpImpl(new Impl(nId, rComment, rRepeatComment))
{
pFatherUndoArray = pFather;
nMaxUndoActions = USHRT_MAX;
}
+SfxListUndoAction::~SfxListUndoAction()
+{
+ delete mpImpl;
+}
void SfxListUndoAction::Undo()
{
commit 1b6e9f9dfc538841a873774428628124cbdc4fd8
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Sat Dec 6 16:26:01 2014 -0500
Pimplize SfxUndoActions.
Change-Id: I35ef457111f4cf8b811a4ee8bb676421746e1d9d
diff --git a/include/svl/undo.hxx b/include/svl/undo.hxx
index f18ae84..5aed21a 100644
--- a/include/svl/undo.hxx
+++ b/include/svl/undo.hxx
@@ -99,38 +99,25 @@ struct MarkedUndoAction
class SfxUndoActions
{
-private:
- ::std::vector< MarkedUndoAction > m_aActions;
+ struct Impl;
+ Impl* mpImpl;
public:
- SfxUndoActions()
- {
- }
+ SfxUndoActions();
+ SfxUndoActions( const SfxUndoActions& r );
+ ~SfxUndoActions();
- bool empty() const { return m_aActions.empty(); }
- size_t size() const { return m_aActions.size(); }
+ bool empty() const;
+ size_t size() const;
- const MarkedUndoAction& operator[]( size_t i ) const { return m_aActions[i]; }
- MarkedUndoAction& operator[]( size_t i ) { return m_aActions[i]; }
+ const MarkedUndoAction& operator[]( size_t i ) const;
+ MarkedUndoAction& operator[]( size_t i );
- void Remove( size_t i_pos )
- {
- m_aActions.erase( m_aActions.begin() + i_pos );
- }
-
- void Remove( size_t i_pos, size_t i_count )
- {
- m_aActions.erase( m_aActions.begin() + i_pos, m_aActions.begin() + i_pos + i_count );
- }
-
- void Insert( SfxUndoAction* i_action, size_t i_pos )
- {
- m_aActions.insert( m_aActions.begin() + i_pos, MarkedUndoAction( i_action ) );
- }
+ void Remove( size_t i_pos );
+ void Remove( size_t i_pos, size_t i_count );
+ void Insert( SfxUndoAction* i_action, size_t i_pos );
};
-
-
/** do not make use of these implementation details, unless you
really really have to! */
struct SVL_DLLPUBLIC SfxUndoArray
diff --git a/svl/source/undo/undo.cxx b/svl/source/undo/undo.cxx
index f3f855c..514e842 100644
--- a/svl/source/undo/undo.cxx
+++ b/svl/source/undo/undo.cxx
@@ -135,6 +135,60 @@ bool SfxUndoAction::CanRepeat(SfxRepeatTarget&) const
return true;
}
+struct SfxUndoActions::Impl
+{
+ std::vector<MarkedUndoAction> maActions;
+};
+
+SfxUndoActions::SfxUndoActions() : mpImpl(new Impl) {}
+
+SfxUndoActions::SfxUndoActions( const SfxUndoActions& r ) :
+ mpImpl(new Impl)
+{
+ mpImpl->maActions = r.mpImpl->maActions;
+}
+
+SfxUndoActions::~SfxUndoActions()
+{
+ delete mpImpl;
+}
+
+bool SfxUndoActions::empty() const
+{
+ return mpImpl->maActions.empty();
+}
+
+size_t SfxUndoActions::size() const
+{
+ return mpImpl->maActions.size();
+}
+
+const MarkedUndoAction& SfxUndoActions::operator[]( size_t i ) const
+{
+ return mpImpl->maActions[i];
+}
+
+MarkedUndoAction& SfxUndoActions::operator[]( size_t i )
+{
+ return mpImpl->maActions[i];
+}
+
+void SfxUndoActions::Remove( size_t i_pos )
+{
+ mpImpl->maActions.erase( mpImpl->maActions.begin() + i_pos );
+}
+
+void SfxUndoActions::Remove( size_t i_pos, size_t i_count )
+{
+ mpImpl->maActions.erase(
+ mpImpl->maActions.begin() + i_pos, mpImpl->maActions.begin() + i_pos + i_count);
+}
+
+void SfxUndoActions::Insert( SfxUndoAction* i_action, size_t i_pos )
+{
+ mpImpl->maActions.insert(
+ mpImpl->maActions.begin() + i_pos, MarkedUndoAction( i_action ) );
+}
typedef ::std::vector< SfxUndoListener* > UndoListeners;
More information about the Libreoffice-commits
mailing list