svx/inc/svx/svdundo.hxx | 9 +++++ svx/source/svdraw/svdundo.cxx | 62 ++++++++++++++++++++++++++++++++++++++- sysui/desktop/share/translate.pl | 25 ++++++++------- 3 files changed, 84 insertions(+), 12 deletions(-)
New commits: commit 4a6f1853a2a15b938575406feada108443257536 Author: David Tardon <[email protected]> Date: Fri Feb 15 07:28:39 2013 +0100 fdo#58283 produce all translations for desktop files Change-Id: Ie97e1ae7b2cc059630cba682a051eefff3ca044b diff --git a/sysui/desktop/share/translate.pl b/sysui/desktop/share/translate.pl index f6255df..200f6a8 100644 --- a/sysui/desktop/share/translate.pl +++ b/sysui/desktop/share/translate.pl @@ -76,6 +76,8 @@ while (<SOURCE>) { # For every section in the specified ulf file there should exist # a template file in $workdir .. $entry{'outfile'} = "$workdir/$prefix$template.$ext"; + my %translations; + $entry{'translations'} = \%translations; $templates{$template} = \%entry; } else { # split locale = "value" into 2 strings @@ -93,8 +95,7 @@ while (<SOURCE>) { $locale=~s/-/_/; - $templates{$template}->{'locale'} = $locale; - $templates{$template}->{'value'} = $value; + $templates{$template}->{'translations'}->{$locale} = $value; } } } @@ -125,15 +126,17 @@ foreach $template (keys %templates) { $keyline =~ s/^$key/$outkey/; print OUTFILE $keyline; if (/$key/) { - my $locale = $templates{$template}->{'locale'}; - my $value = $templates{$template}->{'value'}; - print "locale is $locale\n"; - print "value is $value\n"; - if ($value) { - if ($ext eq "desktop") { - print OUTFILE "$outkey\[$locale\]=$value\n"; - } else { - print OUTFILE "\t\[$locale\]$outkey=$value\n"; + my $translations = $templates{$template}->{'translations'}; + foreach my $locale (keys %{$translations}) { + my $value = $translations->{$locale}; + print "locale is $locale\n"; + print "value is $value\n"; + if ($value) { + if ($ext eq "desktop") { + print OUTFILE "$outkey\[$locale\]=$value\n"; + } else { + print OUTFILE "\t\[$locale\]$outkey=$value\n"; + } } } } commit 115054fef08998c56cba8f14472df1d15007f635 Author: David Tardon <[email protected]> Date: Wed Feb 13 08:52:52 2013 +0100 fdo#34548 don't crash on undoing text frame removal Change-Id: I48b95c6c0cbfb2f4c4b09cc90b254b96de40b3e9 diff --git a/svx/inc/svx/svdundo.hxx b/svx/inc/svx/svdundo.hxx index 0d3713e..2221164 100644 --- a/svx/inc/svx/svdundo.hxx +++ b/svx/inc/svx/svdundo.hxx @@ -253,6 +253,10 @@ public: //************************************************************ class SVX_DLLPUBLIC SdrUndoObjList : public SdrUndoObj { + class ObjListListener; + friend class ObjListListener; + +private: bool bOwner; protected: @@ -262,6 +266,7 @@ protected: sal_uInt32 nOrdNum; // Bei einem Undo/Redo findet moeglicherweise Uebereignung des Objektes // statt. Im Dtor wird das Obj deleted, wenn bOwner==TRUE + ObjListListener* m_pListener; protected: SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect = false); @@ -270,6 +275,10 @@ protected: void SetView(SdrView* pView1, SdrPageView* pPageView1) { pView=pView1; pPageView=pPageView1; } bool IsOwner() { return bOwner; } void SetOwner(bool bNew); + +private: + sal_uInt32 GetOrdNum() const; + void SetOrdNum(sal_uInt32 nOrdNum_); }; //************************************************************ diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx index 452761d..c1e4b4d 100644 --- a/svx/source/svdraw/svdundo.cxx +++ b/svx/source/svdraw/svdundo.cxx @@ -18,6 +18,8 @@ */ +#include <svl/lstner.hxx> + #include <svx/svdundo.hxx> #include "svx/svditext.hxx" #include <svx/svdotext.hxx> @@ -655,11 +657,55 @@ OUString SdrUndoGeoObj::GetComment() const //////////////////////////////////////////////////////////////////////////////////////////////////// +class SdrUndoObjList::ObjListListener : public SfxListener +{ +public: + ObjListListener(SdrUndoObjList& rThat, SdrObject& rObject, SfxBroadcaster& rBroadcaster); + ~ObjListListener(); + +private: + virtual void Notify(SfxBroadcaster& rBroadcaster, const SfxHint& rHint); + +private: + SdrUndoObjList& m_rThat; + SdrObject& m_rObject; + SfxBroadcaster* m_pBroadcaster; +}; + +SdrUndoObjList::ObjListListener::ObjListListener(SdrUndoObjList& rThat, SdrObject& rObject, SfxBroadcaster& rBroadcaster) + : m_rThat(rThat) + , m_rObject(rObject) + , m_pBroadcaster(&rBroadcaster) +{ + StartListening(*m_pBroadcaster); +} + +SdrUndoObjList::ObjListListener::~ObjListListener() +{ + if (m_pBroadcaster) + EndListening(*m_pBroadcaster); +} + +void SdrUndoObjList::ObjListListener::Notify(SfxBroadcaster&, const SfxHint& rHint) +{ + const SdrHint* const pSdrHint(dynamic_cast<const SdrHint*>(&rHint)); + if (pSdrHint) + { + if ((pSdrHint->GetObject() == &m_rObject) && (pSdrHint->GetKind() == HINT_OBJCHG)) + { + const sal_uInt32 nNewOrdNum(m_rObject.GetOrdNum()); + if (nNewOrdNum != m_rThat.GetOrdNum()) + m_rThat.SetOrdNum(nNewOrdNum); + } + } +} + SdrUndoObjList::SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect) : SdrUndoObj(rNewObj), bOwner(sal_False), pView(NULL), - pPageView(NULL) + pPageView(NULL), + m_pListener(NULL) { pObjList=pObj->GetObjList(); if (bOrdNumDirect) { @@ -667,10 +713,14 @@ SdrUndoObjList::SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect) } else { nOrdNum=pObj->GetOrdNum(); } + + m_pListener = new ObjListListener(*this, *pObj, *pObjList->GetModel()); } SdrUndoObjList::~SdrUndoObjList() { + delete m_pListener; + if (pObj!=NULL && IsOwner()) { // Attribute have to go back to the regular Pool @@ -686,6 +736,16 @@ void SdrUndoObjList::SetOwner(bool bNew) bOwner = bNew; } +sal_uInt32 SdrUndoObjList::GetOrdNum() const +{ + return nOrdNum; +} + +void SdrUndoObjList::SetOrdNum(sal_uInt32 nOrdNum_) +{ + nOrdNum = nOrdNum_; +} + //////////////////////////////////////////////////////////////////////////////////////////////////// void SdrUndoRemoveObj::Undo() _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
