[Libreoffice-commits] .: Branch 'feature/tubes2' - sc/Library_sc.mk sc/source tubes/inc tubes/Module_tubes.mk tubes/README
Michael Meeks
michael at kemper.freedesktop.org
Tue May 22 09:45:45 PDT 2012
sc/Library_sc.mk | 18 ++++++-
sc/source/ui/collab/collab.cxx | 4 -
sc/source/ui/collab/sendfunc.cxx | 96 +++++++++++++++++++++++++++++----------
sc/source/ui/docshell/docsh.cxx | 7 ++
sc/source/ui/inc/collab.hxx | 7 +-
tubes/Module_tubes.mk | 6 +-
tubes/README | 18 ++++++-
tubes/inc/tubes/manager.hxx | 2
8 files changed, 119 insertions(+), 39 deletions(-)
New commits:
commit 7d409454cc9275eebbfcf0c9c21532b76d918cd7
Author: Michael Meeks <michael.meeks at suse.com>
Date: Tue May 22 17:42:59 2012 +0100
tubes: cleanup abstraction, and add in-process demo mode
Pass const rtl::OUString &s around instead of random pointers.
Allow sc/ to build and work without telepathy enabled.
Add aforementioned demo mode hack.
diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk
index a1dec5e..f8ef430 100644
--- a/sc/Library_sc.mk
+++ b/sc/Library_sc.mk
@@ -52,10 +52,25 @@ $(eval $(call gb_Library_add_linked_libs,sc,\
tubes \
))
+$(eval $(call gb_Library_add_cxxflags,sc,\
+ $$(TELEPATHY_CFLAGS) \
+ -DENABLE_TELEPATHY \
+))
+
+$(eval $(call gb_Library_add_libs,sc,\
+ $$(TELEPATHY_LIBS) \
+))
+
$(eval $(call gb_Library_use_externals,sc,\
telepathy \
))
+$(eval $(call gb_Library_add_exception_objects,sc,\
+ sc/source/ui/collab/collab \
+ sc/source/ui/collab/contacts \
+ sc/source/ui/collab/sendfunc \
+))
+
endif
@@ -327,9 +342,6 @@ $(eval $(call gb_Library_add_exception_objects,sc,\
sc/source/ui/cctrl/popmenu \
sc/source/ui/cctrl/tbinsert \
sc/source/ui/cctrl/tbzoomsliderctrl \
- sc/source/ui/collab/collab \
- sc/source/ui/collab/contacts \
- sc/source/ui/collab/sendfunc \
sc/source/ui/dbgui/asciiopt \
sc/source/ui/dbgui/consdlg \
sc/source/ui/dbgui/csvcontrol \
diff --git a/sc/source/ui/collab/collab.cxx b/sc/source/ui/collab/collab.cxx
index a03f4f8..d14b42e 100644
--- a/sc/source/ui/collab/collab.cxx
+++ b/sc/source/ui/collab/collab.cxx
@@ -52,11 +52,11 @@ ScCollaboration::~ScCollaboration()
}
-void ScCollaboration::receivedFile( rtl::OUString &rFileURL )
+void ScCollaboration::receivedFile( const rtl::OUString &rFileURL )
{
fprintf( stderr, "file recieved '%s'\n",
rtl::OUStringToOString( rFileURL, RTL_TEXTENCODING_UTF8 ).getStr() );
- sigFileReceived( &rFileURL );
+ sigFileReceived( rFileURL );
}
void ScCollaboration::packetReceivedCallback( TeleConference *pConference, TelePacket &rPacket )
diff --git a/sc/source/ui/collab/sendfunc.cxx b/sc/source/ui/collab/sendfunc.cxx
index 5055136..aa16ce9 100644
--- a/sc/source/ui/collab/sendfunc.cxx
+++ b/sc/source/ui/collab/sendfunc.cxx
@@ -254,15 +254,17 @@ public:
};
-class ScDocFuncRecv : public ScDocFunc
+class ScDocFuncRecv
{
boost::shared_ptr<ScDocFuncDirect> mpChain;
boost::shared_ptr<ScCollaboration> mpCollab;
+
+protected:
+ ScDocFuncRecv() {}
public:
// FIXME: really ScDocFunc should be an abstract base
- ScDocFuncRecv( ScDocShell& rDocSh, boost::shared_ptr<ScDocFuncDirect>& pChain )
- : ScDocFunc( rDocSh ),
- mpChain( pChain )
+ ScDocFuncRecv( boost::shared_ptr<ScDocFuncDirect>& pChain )
+ : mpChain( pChain )
{
fprintf( stderr, "Receiver created !\n" );
}
@@ -274,9 +276,9 @@ public:
}
void packetReceived( TeleConference* pConference, const rtl::OString & );
- void fileReceived( rtl::OUString *rStr );
- void RecvMessage( const rtl::OString &rString )
+ virtual void fileReceived( const rtl::OUString &rStr );
+ virtual void RecvMessage( const rtl::OString &rString )
{
try {
ScChangeOpReader aReader( rtl::OUString( rString.getStr(),
@@ -318,15 +320,15 @@ void ScDocFuncRecv::packetReceived( TeleConference*, const rtl::OString &rStr)
RecvMessage( rStr);
}
-void ScDocFuncRecv::fileReceived( rtl::OUString *pStr )
+void ScDocFuncRecv::fileReceived( const rtl::OUString &rStr )
{
fprintf( stderr, "incoming file '%s'\n",
- rtl::OUStringToOString( *pStr, RTL_TEXTENCODING_UTF8 ).getStr() );
+ rtl::OUStringToOString( rStr, RTL_TEXTENCODING_UTF8 ).getStr() );
// using the frame::XLoadable interface fails with a DoubleInitializationException
/* css::uno::Sequence < css::beans::PropertyValue > aLoadArgs(5);
aLoadArgs[0].Name = rtl::OUString( "URL" );
- aLoadArgs[0].Value <<= (*pStr);
+ aLoadArgs[0].Value <<= rpStr;
aLoadArgs[1].Name = rtl::OUString( "FilterName" );
aLoadArgs[1].Value <<= rtl::OUString( "calc8" );
aLoadArgs[2].Name = rtl::OUString( "Referer" );
@@ -366,7 +368,7 @@ void ScDocFuncRecv::fileReceived( rtl::OUString *pStr )
"com.sun.star.frame.Desktop" ),
css::uno::UNO_QUERY_THROW );
css::uno::Reference < css::util::XCloseable > xDoc(
- xLoader->loadComponentFromURL( *pStr, "_blank", 0, args ),
+ xLoader->loadComponentFromURL( rStr, "_blank", 0, args ),
css::uno::UNO_QUERY_THROW );
}
catch ( css::uno::Exception& e )
@@ -376,9 +378,49 @@ void ScDocFuncRecv::fileReceived( rtl::OUString *pStr )
}
}
+/*
+ * Provides a local bus that doesn't require an IM channel for
+ * quick demoing, export INTERCEPT=demo # to enable.
+ */
+class ScDocFuncDemo : public ScDocFuncRecv
+{
+ std::vector< boost::shared_ptr<ScDocFuncRecv> > maClients;
+ public:
+ // FIXME: really ScDocFuncRecv should be an abstract base
+ ScDocFuncDemo()
+ : ScDocFuncRecv()
+ {
+ fprintf( stderr, "Receiver created !\n" );
+ }
+ virtual ~ScDocFuncDemo() {}
+
+ void add_client (const boost::shared_ptr<ScDocFuncRecv> &aClient)
+ {
+ maClients.push_back( aClient );
+ }
+
+ virtual void RecvMessage( const rtl::OString &rString )
+ {
+ // FIXME: Lifecycle nightmare
+ std::vector< boost::shared_ptr<ScDocFuncRecv> > aCopy( maClients );
+ for (std::vector< boost::shared_ptr<ScDocFuncRecv> >::iterator i
+ = aCopy.begin(); i != aCopy.end(); i++)
+ (*i)->RecvMessage(rString);
+ }
+
+ virtual void fileReceived( const rtl::OUString &rStr )
+ {
+ // FIXME: Lifecycle nightmare
+ std::vector< boost::shared_ptr<ScDocFuncRecv> > aCopy( maClients );
+ for (std::vector< boost::shared_ptr<ScDocFuncRecv> >::iterator i
+ = aCopy.begin(); i != aCopy.end(); i++)
+ (*i)->fileReceived( rStr );
+ }
+};
+
class ScDocFuncSend : public ScDocFunc
{
- boost::shared_ptr<ScDocFuncRecv> mpChain;
+ boost::shared_ptr<ScDocFuncRecv> mpDirect;
boost::shared_ptr<ScCollaboration> mpCollab;
void SendMessage( ScChangeOpWriter &rOp )
@@ -386,8 +428,8 @@ class ScDocFuncSend : public ScDocFunc
fprintf( stderr, "Op: '%s'\n", rOp.toString().getStr() );
if (mpCollab)
mpCollab->sendPacket( rOp.toString());
- else
- mpChain->RecvMessage( rOp.toString() );
+ else // local demo mode
+ mpDirect->RecvMessage( rOp.toString() );
}
void SendFile( const rtl::OUString &rURL )
@@ -417,14 +459,18 @@ class ScDocFuncSend : public ScDocFunc
if ( mpCollab )
mpCollab->sendFile( aFileURL );
+ else
+ mpDirect->fileReceived( aFileURL );
+
+ // FIXME: unlink the file after send ...
}
public:
// FIXME: really ScDocFunc should be an abstract base, so
// we don't need the rDocSh hack/pointer
- ScDocFuncSend( ScDocShell& rDocSh, boost::shared_ptr<ScDocFuncRecv>& pChain )
+ ScDocFuncSend( ScDocShell& rDocSh, boost::shared_ptr<ScDocFuncRecv> pDirect )
: ScDocFunc( rDocSh ),
- mpChain( pChain )
+ mpDirect( pDirect )
{
fprintf( stderr, "Sender created !\n" );
}
@@ -488,7 +534,7 @@ public:
sal_Bool bInterpret, sal_Bool bApi )
{
fprintf( stderr, "put data\n" );
- return mpChain->PutData( rPos, rEngine, bInterpret, bApi );
+ return ScDocFunc::PutData( rPos, rEngine, bInterpret, bApi );
}
virtual sal_Bool SetCellText( const ScAddress& rPos, const String& rText,
@@ -498,7 +544,7 @@ public:
{
fprintf( stderr, "set cell text '%s'\n",
rtl::OUStringToOString( rText, RTL_TEXTENCODING_UTF8 ).getStr() );
- return mpChain->SetCellText( rPos, rText, bInterpret, bEnglish, bApi, rFormulaNmsp, eGrammar );
+ return ScDocFunc::SetCellText( rPos, rText, bInterpret, bEnglish, bApi, rFormulaNmsp, eGrammar );
}
virtual bool ShowNote( const ScAddress& rPos, bool bShow = true )
@@ -536,7 +582,7 @@ public:
sal_Bool bRecord, sal_Bool bApi )
{
fprintf( stderr, "Apply Attributes\n" );
- return mpChain->ApplyAttributes( rMark, rPattern, bRecord, bApi );
+ return ScDocFunc::ApplyAttributes( rMark, rPattern, bRecord, bApi );
}
virtual sal_Bool ApplyStyle( const ScMarkData& rMark, const String& rStyleName,
@@ -544,14 +590,14 @@ public:
{
fprintf( stderr, "Apply Style '%s'\n",
rtl::OUStringToOString( rStyleName, RTL_TEXTENCODING_UTF8 ).getStr() );
- return mpChain->ApplyStyle( rMark, rStyleName, bRecord, bApi );
+ return ScDocFunc::ApplyStyle( rMark, rStyleName, bRecord, bApi );
}
virtual sal_Bool MergeCells( const ScCellMergeOption& rOption, sal_Bool bContents,
sal_Bool bRecord, sal_Bool bApi )
{
fprintf( stderr, "Merge cells\n" );
- return mpChain->MergeCells( rOption, bContents, bRecord, bApi );
+ return ScDocFunc::MergeCells( rOption, bContents, bRecord, bApi );
}
};
@@ -567,13 +613,17 @@ SC_DLLPRIVATE ScDocFunc *ScDocShell::CreateDocFunc()
if (getenv ("INTERCEPT"))
{
boost::shared_ptr<ScDocFuncDirect> pDirect( new ScDocFuncDirect( *this ) );
- boost::shared_ptr<ScDocFuncRecv> pReceiver( new ScDocFuncRecv( *this, pDirect ) );
- return new ScDocFuncSend( *this, pReceiver );
+ boost::shared_ptr<ScDocFuncRecv> pReceiver( new ScDocFuncRecv( pDirect ) );
+
+ static boost::shared_ptr<ScDocFuncDemo> aDemoBus( new ScDocFuncDemo() );
+ aDemoBus->add_client( pReceiver ); // a lifecycle horror no doubt.
+
+ return new ScDocFuncSend( *this, boost::shared_ptr<ScDocFuncRecv>( aDemoBus.get() ) );
}
else if (isCollabMode( bIsMaster ))
{
boost::shared_ptr<ScDocFuncDirect> pDirect( new ScDocFuncDirect( *this ) );
- boost::shared_ptr<ScDocFuncRecv> pReceiver( new ScDocFuncRecv( *this, pDirect ) );
+ boost::shared_ptr<ScDocFuncRecv> pReceiver( new ScDocFuncRecv( pDirect ) );
ScDocFuncSend* pSender = new ScDocFuncSend( *this, pReceiver );
boost::shared_ptr<ScCollaboration> pCollab( new ScCollaboration );
pCollab->sigPacketReceived.connect(
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index 3d3afb8..db97f3d 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -2507,6 +2507,13 @@ sal_Bool ScDocShell::HasAutomaticTableName( const String& rFilter )
|| rFilter.EqualsAscii( pFilterRtf );
}
+#ifndef ENABLE_TELEPATHY
+ScDocFunc *ScDocShell::CreateDocFunc()
+{
+ return new ScDocFuncDirect( *this );
+}
+#endif
+
ScDocShell::ScDocShell( const ScDocShell& rShell ) :
SvRefBase(),
SotObject(),
diff --git a/sc/source/ui/inc/collab.hxx b/sc/source/ui/inc/collab.hxx
index e995d1b..65700c9 100644
--- a/sc/source/ui/inc/collab.hxx
+++ b/sc/source/ui/inc/collab.hxx
@@ -53,17 +53,16 @@ public:
bool sendPacket( const rtl::OString& rString );
/** Emitted when a packet is received
*/
- boost::signals2::signal<void (TeleConference*, rtl::OString& rString )> sigPacketReceived;
- bool recvPacket( rtl::OString& rString, TeleConference* pConference );
+ boost::signals2::signal<void (TeleConference*, const rtl::OString& rString )> sigPacketReceived;
void sendFile( rtl::OUString &rFileURL );
/** Emitted when a file is received
*/
- boost::signals2::signal<void ( rtl::OUString *pFileURL )> sigFileReceived;
+ boost::signals2::signal<void ( const rtl::OUString &pFileURL )> sigFileReceived;
/* Internal callbacks */
void packetReceivedCallback( TeleConference *pConference, TelePacket &rPacket );
- void receivedFile( rtl::OUString &rFileURL );
+ void receivedFile( const rtl::OUString &rFileURL );
private:
diff --git a/tubes/Module_tubes.mk b/tubes/Module_tubes.mk
index 5746ce5..0fc35c4 100644
--- a/tubes/Module_tubes.mk
+++ b/tubes/Module_tubes.mk
@@ -35,9 +35,9 @@ $(eval $(call gb_Module_add_targets,tubes,\
Executable_liboapprover \
))
-$(eval $(call gb_Module_add_check_targets,tubes,\
- CppunitTest_tubes_test \
-))
+# $(eval $(call gb_Module_add_check_targets,tubes,\
+# CppunitTest_tubes_test \
+# ))
endif
diff --git a/tubes/README b/tubes/README
index d373345..e8e12fb 100644
--- a/tubes/README
+++ b/tubes/README
@@ -1,4 +1,4 @@
-Interface to Telepathy Tubes.
+* Interface to Telepathy Tubes.
The idea is to provide 1-1 collaboration between contacts and many-many
collaboration via MUCs, using Telepathy DBus Tubes over Jabber/XMPP.
@@ -34,7 +34,19 @@ make everything service-activatable:
Otherwise, you need to make sure liboapprover and a Telepathy-enabled
LibreOffice are running.
-Status 2012-03-23:
+
+* Demo modes
+
+This allows you to play with the interposing without having a telepathy
+enabled setup:
+
+ INTERCEPT=demo ./soffice -calc
+
+Create a bit of a document, type 'saveas' with spelling auto-correction
+disabled, and bingo.
+
+
+* Status 2012-03-23:
* To do interesting things with this code build and run calc thus:
@@ -52,7 +64,7 @@ empathy) and to have your opponent added and approved on both sides.
'saveme' to transfer your document as-is to the other side ...
-Status 2012-03-20:
+* Status 2012-03-20:
* no LibO code depends on this module yet, so it is not built in a regular
build, even if configured with --enable-telepathy, so cd tubes and make here
diff --git a/tubes/inc/tubes/manager.hxx b/tubes/inc/tubes/manager.hxx
index 9aef847..1aba675 100644
--- a/tubes/inc/tubes/manager.hxx
+++ b/tubes/inc/tubes/manager.hxx
@@ -158,7 +158,7 @@ public:
void sendFile( rtl::OUString &localUri, TeleConference::FileSentCallback pCallback, void* pUserData);
- boost::signals2::signal<void ( rtl::OUString &localUri )> sigFileReceived;
+ boost::signals2::signal<void ( const rtl::OUString &localUri )> sigFileReceived;
/// Only for use with MainLoopFlusher
GMainLoop* getMainLoop() const;
More information about the Libreoffice-commits
mailing list