diff options
-rw-r--r-- | sc/source/ui/collab/sccollaboration.cxx | 9 | ||||
-rw-r--r-- | sc/source/ui/inc/sccollaboration.hxx | 5 | ||||
-rw-r--r-- | tubes/inc/tubes/collaboration.hxx | 3 | ||||
-rw-r--r-- | tubes/source/contacts.cxx | 16 |
4 files changed, 26 insertions, 7 deletions
diff --git a/sc/source/ui/collab/sccollaboration.cxx b/sc/source/ui/collab/sccollaboration.cxx index 758db8918f4e..fbdbe0a0938d 100644 --- a/sc/source/ui/collab/sccollaboration.cxx +++ b/sc/source/ui/collab/sccollaboration.cxx @@ -20,7 +20,7 @@ ScCollaboration::~ScCollaboration() { } -TeleConference* ScCollaboration::GetConference() const +TeleConference* ScCollaboration::GetConference() { ScDocFuncSend* pSender = GetScDocFuncSend(); if (pSender) @@ -29,6 +29,11 @@ TeleConference* ScCollaboration::GetConference() const return NULL; } +sal_uInt64 ScCollaboration::GetId() +{ + return reinterpret_cast<sal_uInt64> (SfxObjectShell::Current()); +} + void ScCollaboration::SetCollaboration( TeleConference* pConference ) { ScDocShell* pScDocShell = dynamic_cast<ScDocShell*> (SfxObjectShell::Current()); @@ -52,7 +57,7 @@ void ScCollaboration::SendFile( TpContact* pContact, const OUString& rURL ) pSender->SendFile( pContact, rURL ); } -ScDocFuncSend* ScCollaboration::GetScDocFuncSend() const +ScDocFuncSend* ScCollaboration::GetScDocFuncSend() { ScDocShell *pScDocShell = dynamic_cast<ScDocShell*> (SfxObjectShell::Current()); ScDocFunc *pDocFunc = pScDocShell ? &pScDocShell->GetDocFunc() : NULL; diff --git a/sc/source/ui/inc/sccollaboration.hxx b/sc/source/ui/inc/sccollaboration.hxx index 545db920686e..41b2c5866a57 100644 --- a/sc/source/ui/inc/sccollaboration.hxx +++ b/sc/source/ui/inc/sccollaboration.hxx @@ -19,11 +19,12 @@ public: ScCollaboration(); virtual ~ScCollaboration(); - virtual TeleConference* GetConference() const; + virtual TeleConference* GetConference(); + virtual sal_uInt64 GetId(); virtual void SetCollaboration( TeleConference* pConference ); virtual void SendFile( TpContact* pContact, const OUString& rURL ); private: - ScDocFuncSend* GetScDocFuncSend() const; + ScDocFuncSend* GetScDocFuncSend(); }; #endif // INCLUDED_SC_COLLABORATION_HXX diff --git a/tubes/inc/tubes/collaboration.hxx b/tubes/inc/tubes/collaboration.hxx index 5a3dddc89987..31eff7a4b937 100644 --- a/tubes/inc/tubes/collaboration.hxx +++ b/tubes/inc/tubes/collaboration.hxx @@ -23,7 +23,8 @@ public: Collaboration() {} virtual ~Collaboration() {} - virtual TeleConference* GetConference() const = 0; + virtual TeleConference* GetConference() = 0; + virtual sal_uInt64 GetId() = 0; virtual void SetCollaboration( TeleConference* pConference ) = 0; // TODO: I think this could be moved to TeleManager later. virtual void SendFile( TpContact* pContact, const OUString& rURL ) = 0; diff --git a/tubes/source/contacts.cxx b/tubes/source/contacts.cxx index 540e8a6f4725..9245b55284b4 100644 --- a/tubes/source/contacts.cxx +++ b/tubes/source/contacts.cxx @@ -42,10 +42,13 @@ #include <vcl/dialog.hxx> #include <vcl/unohelp.hxx> +#include <map> #include <vector> #include <boost/ptr_container/ptr_vector.hpp> #include <telepathy-glib/telepathy-glib.h> +namespace { + ResId TubesResId( sal_uInt32 nId ) { static ResMgr* pResMgr = NULL; @@ -56,7 +59,6 @@ ResId TubesResId( sal_uInt32 nId ) return ResId( nId, *pResMgr ); } -namespace { class TubeContacts : public ModelessDialog { FixedLine maLabel; @@ -261,12 +263,22 @@ IMPL_LINK_NOARG( TubeContacts, BtnListenHdl ) return 0; } +TubeContacts* ContactsFactory( Collaboration* pCollaboration ) +{ + // Mapping contacts dialog instance for each document + static std::map< sal_uInt64, TubeContacts* > aDialogsMap; + sal_uInt64 Id = pCollaboration->GetId(); + if (aDialogsMap.find( Id ) == aDialogsMap.end()) + aDialogsMap[ Id ] = new TubeContacts( pCollaboration ); + return aDialogsMap[ Id ]; +} + } // anonymous namespace namespace tubes { void createContacts( Collaboration* pCollaboration ) { - static TubeContacts *pContacts = new TubeContacts( pCollaboration ); + TubeContacts* pContacts = ContactsFactory( pCollaboration ); pContacts->Populate(); } } |