2012-03-21 19:06:35 +00:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
|
|
/*
|
|
|
|
* Version: MPL 1.1 / GPLv3+ / LGPLv3+
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
|
|
* the License or as specified alternatively below. You may obtain a copy of
|
|
|
|
* the License at http://www.mozilla.org/MPL/
|
|
|
|
*
|
|
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
|
|
* for the specific language governing rights and limitations under the
|
|
|
|
* License.
|
|
|
|
*
|
|
|
|
* Major Contributor(s):
|
|
|
|
* Copyright (C) 2012 Michael Meeks <michael.meeks@suse.com> (initial developer)
|
|
|
|
*
|
|
|
|
* All Rights Reserved.
|
|
|
|
*
|
|
|
|
* For minor contributions see the git repository.
|
|
|
|
*
|
|
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
|
|
* either the GNU General Public License Version 3 or later (the "GPLv3+"), or
|
|
|
|
* the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
|
|
|
|
* in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
|
|
|
|
* instead of those above.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "sal/config.h"
|
2012-03-22 12:31:15 +00:00
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
2012-03-21 19:06:35 +00:00
|
|
|
#include "cell.hxx"
|
|
|
|
#include "docsh.hxx"
|
|
|
|
#include "docfunc.hxx"
|
2012-07-30 11:49:10 +02:00
|
|
|
#include "sccollaboration.hxx"
|
2012-06-16 22:39:35 +02:00
|
|
|
#include "sendfunc.hxx"
|
2012-03-23 10:55:09 +01:00
|
|
|
#include <tubes/conference.hxx>
|
2012-07-30 11:49:10 +02:00
|
|
|
#include <tubes/contacts.hxx>
|
|
|
|
#include <tubes/manager.hxx>
|
2012-03-21 19:06:35 +00:00
|
|
|
|
2012-03-23 11:29:48 +00:00
|
|
|
#include <com/sun/star/uno/Sequence.hxx>
|
2012-03-22 19:44:44 +00:00
|
|
|
#include <unotools/tempfile.hxx>
|
|
|
|
#include <unotools/localfilehelper.hxx>
|
|
|
|
#include <comphelper/mediadescriptor.hxx>
|
|
|
|
#include <com/sun/star/document/XDocumentRecovery.hpp>
|
|
|
|
|
|
|
|
namespace css = ::com::sun::star;
|
|
|
|
|
2012-07-20 15:05:33 +02:00
|
|
|
// FIXME: this is only meant for demo I think
|
|
|
|
extern void TeleManager_fileReceived( const OUString& );
|
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
// FIXME: really ScDocFunc should be an abstract base
|
2012-07-01 23:46:44 +02:00
|
|
|
ScDocFuncRecv::ScDocFuncRecv( ScDocFuncDirect *pChain )
|
2012-06-16 22:39:35 +02:00
|
|
|
: mpChain( pChain )
|
2012-03-21 19:06:35 +00:00
|
|
|
{
|
2012-06-16 22:39:35 +02:00
|
|
|
fprintf( stderr, "Receiver created !\n" );
|
|
|
|
}
|
2012-03-22 12:31:15 +00:00
|
|
|
|
2012-07-01 23:46:44 +02:00
|
|
|
ScDocFuncRecv::~ScDocFuncRecv()
|
|
|
|
{
|
|
|
|
fprintf( stderr, "Receiver destroyed !\n" );
|
|
|
|
delete mpChain;
|
|
|
|
}
|
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
void ScDocFuncRecv::RecvMessage( const rtl::OString &rString )
|
2012-03-21 19:06:35 +00:00
|
|
|
{
|
2012-06-16 22:39:35 +02:00
|
|
|
try {
|
|
|
|
ScChangeOpReader aReader( rtl::OUString( rString.getStr(),
|
|
|
|
rString.getLength(),
|
|
|
|
RTL_TEXTENCODING_UTF8 ) );
|
|
|
|
// FIXME: have some hash to enumeration mapping here
|
|
|
|
if ( aReader.getMethod() == "setNormalString" )
|
2012-07-17 11:28:22 +02:00
|
|
|
{
|
|
|
|
bool bNumFmtSet = false;
|
|
|
|
mpChain->SetNormalString( bNumFmtSet, aReader.getAddress( 1 ), aReader.getString( 2 ),
|
2012-03-22 17:06:27 +00:00
|
|
|
aReader.getBool( 3 ) );
|
2012-07-17 11:28:22 +02:00
|
|
|
}
|
2012-06-16 22:39:35 +02:00
|
|
|
else if ( aReader.getMethod() == "putCell" )
|
|
|
|
{
|
|
|
|
ScBaseCell *pNewCell = aReader.getCell( 2 );
|
|
|
|
if ( pNewCell )
|
|
|
|
mpChain->PutCell( aReader.getAddress( 1 ), pNewCell, aReader.getBool( 3 ) );
|
2012-03-22 12:31:15 +00:00
|
|
|
}
|
2012-06-16 22:39:35 +02:00
|
|
|
else if ( aReader.getMethod() == "enterListAction" )
|
|
|
|
mpChain->EnterListAction( aReader.getInt( 1 ) );
|
|
|
|
else if ( aReader.getMethod() == "endListAction" )
|
|
|
|
mpChain->EndListAction();
|
|
|
|
else if ( aReader.getMethod() == "showNote" )
|
|
|
|
mpChain->ShowNote( aReader.getAddress( 1 ), aReader.getBool( 2 ) );
|
|
|
|
else if ( aReader.getMethod() == "setNoteText" )
|
|
|
|
mpChain->SetNoteText( aReader.getAddress( 1 ), aReader.getString( 2 ),
|
|
|
|
aReader.getBool( 3 ) );
|
|
|
|
else if ( aReader.getMethod() == "renameTable" )
|
|
|
|
mpChain->RenameTable( aReader.getInt( 1 ), aReader.getString( 2 ),
|
|
|
|
aReader.getBool( 3 ), aReader.getBool( 4 ) );
|
|
|
|
else
|
|
|
|
fprintf( stderr, "Error: unknown message '%s' (%d)\n",
|
|
|
|
rString.getStr(), (int)aReader.getArgCount() );
|
|
|
|
} catch (const ProtocolError &e) {
|
|
|
|
fprintf( stderr, "Error: protocol twisting '%s'\n", e.message );
|
2012-03-22 12:31:15 +00:00
|
|
|
}
|
2012-06-16 22:39:35 +02:00
|
|
|
}
|
2012-03-22 12:31:15 +00:00
|
|
|
|
2012-07-21 18:50:35 +02:00
|
|
|
void ScDocFuncRecv::packetReceived( const OString &rPacket )
|
2012-03-23 10:55:09 +01:00
|
|
|
{
|
2012-07-21 18:50:35 +02:00
|
|
|
RecvMessage( rPacket );
|
2012-03-23 10:55:09 +01:00
|
|
|
}
|
|
|
|
|
2012-05-22 17:42:59 +01:00
|
|
|
/*
|
|
|
|
* 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
|
2012-07-20 08:34:42 +02:00
|
|
|
= aCopy.begin(); i != aCopy.end(); ++i)
|
2012-05-22 17:42:59 +01:00
|
|
|
(*i)->RecvMessage(rString);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2012-06-08 21:10:59 +02:00
|
|
|
extern "C"
|
|
|
|
{
|
|
|
|
static void file_sent_cb( bool aSuccess, void* /* pUserData */ )
|
|
|
|
{
|
|
|
|
fprintf( stderr, "File send %s\n", aSuccess ? "success" : "failed" );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
void ScDocFuncSend::SendMessage( ScChangeOpWriter &rOp )
|
2012-03-22 12:31:15 +00:00
|
|
|
{
|
2012-06-16 22:39:35 +02:00
|
|
|
fprintf( stderr, "Op: '%s'\n", rOp.toString().getStr() );
|
2012-07-13 22:42:48 +02:00
|
|
|
if (mpConference)
|
2012-03-22 12:31:15 +00:00
|
|
|
{
|
2012-07-21 18:50:35 +02:00
|
|
|
mpConference->sendPacket( rOp.toString() );
|
2012-03-22 12:31:15 +00:00
|
|
|
}
|
2012-06-16 22:39:35 +02:00
|
|
|
else // local demo mode
|
|
|
|
mpDirect->RecvMessage( rOp.toString() );
|
|
|
|
}
|
2012-03-22 12:31:15 +00:00
|
|
|
|
2012-07-26 17:56:12 +02:00
|
|
|
void ScDocFuncSend::SendFile( TpContact* pContact, const rtl::OUString &sUuid )
|
2012-06-16 22:39:35 +02:00
|
|
|
{
|
|
|
|
String aTmpPath = utl::TempFile::CreateTempName();
|
2012-07-20 00:12:19 +02:00
|
|
|
aTmpPath.Append( OUString("_") );
|
|
|
|
aTmpPath.Append( sUuid );
|
|
|
|
aTmpPath.Append( OUString("_") );
|
|
|
|
aTmpPath.Append( OUString(".ods") );
|
2012-03-22 19:44:44 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
rtl::OUString aFileURL;
|
|
|
|
::utl::LocalFileHelper::ConvertPhysicalNameToURL( aTmpPath, aFileURL );
|
2012-03-22 19:44:44 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
::comphelper::MediaDescriptor aDescriptor;
|
|
|
|
// some issue with hyperlinks:
|
|
|
|
aDescriptor[::comphelper::MediaDescriptor::PROP_DOCUMENTBASEURL()] <<= ::rtl::OUString();
|
|
|
|
try {
|
|
|
|
css::uno::Reference< css::document::XDocumentRecovery > xDocRecovery(
|
|
|
|
rDocShell.GetBaseModel(), css::uno::UNO_QUERY_THROW);
|
2012-03-22 19:44:44 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
xDocRecovery->storeToRecoveryFile( aFileURL, aDescriptor.getAsConstPropertyValueList() );
|
|
|
|
} catch (const css::uno::Exception &ex) {
|
|
|
|
fprintf( stderr, "exception foo !\n" );
|
|
|
|
}
|
2012-03-22 19:44:44 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
fprintf( stderr, "Temp file is '%s'\n",
|
|
|
|
rtl::OUStringToOString( aFileURL, RTL_TEXTENCODING_UTF8 ).getStr() );
|
2012-03-23 11:29:48 +00:00
|
|
|
|
2012-07-26 17:56:12 +02:00
|
|
|
if (pContact)
|
|
|
|
mpConference->sendFile( pContact, aFileURL, file_sent_cb, NULL );
|
2012-06-16 22:39:35 +02:00
|
|
|
else
|
2012-07-20 15:05:33 +02:00
|
|
|
TeleManager_fileReceived( aFileURL );
|
2012-05-22 17:42:59 +01:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
// FIXME: unlink the file after send ...
|
|
|
|
}
|
2012-03-22 19:44:44 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
// FIXME: really ScDocFunc should be an abstract base, so
|
|
|
|
// we don't need the rDocSh hack/pointer
|
2012-07-01 23:46:44 +02:00
|
|
|
ScDocFuncSend::ScDocFuncSend( ScDocShell& rDocSh, ScDocFuncRecv *pDirect )
|
2012-06-16 22:39:35 +02:00
|
|
|
: ScDocFunc( rDocSh ),
|
|
|
|
mpDirect( pDirect ),
|
2012-07-13 22:42:48 +02:00
|
|
|
mpConference( NULL )
|
2012-06-16 22:39:35 +02:00
|
|
|
{
|
|
|
|
fprintf( stderr, "Sender created !\n" );
|
|
|
|
}
|
2012-03-22 12:31:15 +00:00
|
|
|
|
2012-07-01 23:46:44 +02:00
|
|
|
ScDocFuncSend::~ScDocFuncSend()
|
|
|
|
{
|
|
|
|
fprintf( stderr, "Sender destroyed !\n" );
|
2012-07-16 16:59:00 +02:00
|
|
|
if (mpConference)
|
|
|
|
mpConference->close();
|
2012-07-24 13:46:17 +02:00
|
|
|
|
|
|
|
if (!dynamic_cast<ScDocFuncDemo*> (mpDirect))
|
|
|
|
delete mpDirect;
|
2012-07-01 23:46:44 +02:00
|
|
|
}
|
|
|
|
|
2012-07-13 22:42:48 +02:00
|
|
|
void ScDocFuncSend::SetCollaboration( TeleConference* pConference )
|
|
|
|
{
|
|
|
|
mpConference = pConference;
|
2012-07-16 16:59:00 +02:00
|
|
|
if (mpConference)
|
|
|
|
mpConference->sigPacketReceived.connect( boost::bind(
|
|
|
|
&ScDocFuncRecv::packetReceived, mpDirect, _1 ) );
|
2012-07-13 22:42:48 +02:00
|
|
|
}
|
|
|
|
|
2012-07-14 10:56:14 +02:00
|
|
|
TeleConference* ScDocFuncSend::GetConference()
|
|
|
|
{
|
|
|
|
return mpConference;
|
|
|
|
}
|
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
void ScDocFuncSend::EnterListAction( sal_uInt16 nNameResId )
|
|
|
|
{
|
|
|
|
// Want to group these operations for the other side ...
|
|
|
|
String aUndo( ScGlobal::GetRscString( nNameResId ) );
|
|
|
|
ScChangeOpWriter aOp( "enterListAction" );
|
|
|
|
aOp.appendInt( nNameResId ); // nasty but translate-able ...
|
|
|
|
SendMessage( aOp );
|
|
|
|
}
|
2012-03-22 12:31:15 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
void ScDocFuncSend::EndListAction()
|
|
|
|
{
|
|
|
|
ScChangeOpWriter aOp( "endListAction" );
|
|
|
|
SendMessage( aOp );
|
|
|
|
}
|
2012-03-22 19:44:44 +00:00
|
|
|
|
2012-07-17 11:28:22 +02:00
|
|
|
sal_Bool ScDocFuncSend::SetNormalString( bool& o_rbNumFmtSet, const ScAddress& rPos, const String& rText, sal_Bool bApi )
|
2012-06-16 22:39:35 +02:00
|
|
|
{
|
|
|
|
ScChangeOpWriter aOp( "setNormalString" );
|
|
|
|
aOp.appendAddress( rPos );
|
|
|
|
aOp.appendString( rText );
|
|
|
|
aOp.appendBool( bApi );
|
|
|
|
SendMessage( aOp );
|
2012-03-22 19:44:44 +00:00
|
|
|
|
2012-07-17 11:28:22 +02:00
|
|
|
o_rbNumFmtSet = false;
|
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
if ( rtl::OUString( rText ) == "saveme" )
|
2012-07-26 17:56:12 +02:00
|
|
|
SendFile( NULL, rText );
|
2012-03-23 16:57:09 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
if ( rtl::OUString( rText ) == "contacts" )
|
2012-08-03 22:53:26 +02:00
|
|
|
tubes::createContacts( rDocShell.GetCollaboration() );
|
2012-03-21 19:06:35 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
return true; // needs some code auditing action
|
|
|
|
}
|
2012-03-21 19:06:35 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
sal_Bool ScDocFuncSend::PutCell( const ScAddress& rPos, ScBaseCell* pNewCell, sal_Bool bApi )
|
|
|
|
{
|
|
|
|
fprintf( stderr, "put cell '%p' type %d %d\n", pNewCell, pNewCell->GetCellType(), bApi );
|
|
|
|
ScChangeOpWriter aOp( "putCell" );
|
|
|
|
aOp.appendAddress( rPos );
|
|
|
|
aOp.appendCell( pNewCell );
|
|
|
|
aOp.appendBool( bApi );
|
|
|
|
SendMessage( aOp );
|
|
|
|
return true; // needs some code auditing action
|
|
|
|
}
|
2012-03-21 19:06:35 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
sal_Bool ScDocFuncSend::PutData( const ScAddress& rPos, ScEditEngineDefaulter& rEngine,
|
|
|
|
sal_Bool bInterpret, sal_Bool bApi )
|
|
|
|
{
|
|
|
|
fprintf( stderr, "put data\n" );
|
|
|
|
return ScDocFunc::PutData( rPos, rEngine, bInterpret, bApi );
|
|
|
|
}
|
2012-03-21 19:06:35 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
sal_Bool ScDocFuncSend::SetCellText( const ScAddress& rPos, const String& rText,
|
|
|
|
sal_Bool bInterpret, sal_Bool bEnglish, sal_Bool bApi,
|
|
|
|
const String& rFormulaNmsp,
|
|
|
|
const formula::FormulaGrammar::Grammar eGrammar )
|
|
|
|
{
|
|
|
|
fprintf( stderr, "set cell text '%s'\n",
|
|
|
|
rtl::OUStringToOString( rText, RTL_TEXTENCODING_UTF8 ).getStr() );
|
|
|
|
return ScDocFunc::SetCellText( rPos, rText, bInterpret, bEnglish, bApi, rFormulaNmsp, eGrammar );
|
|
|
|
}
|
2012-03-22 17:06:27 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
bool ScDocFuncSend::ShowNote( const ScAddress& rPos, bool bShow )
|
|
|
|
{
|
|
|
|
ScChangeOpWriter aOp( "showNote" );
|
|
|
|
aOp.appendAddress( rPos );
|
|
|
|
aOp.appendBool( bShow );
|
|
|
|
SendMessage( aOp );
|
|
|
|
return true; // needs some code auditing action
|
|
|
|
}
|
2012-03-22 17:06:27 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
bool ScDocFuncSend::SetNoteText( const ScAddress& rPos, const String& rNoteText, sal_Bool bApi )
|
|
|
|
{
|
|
|
|
ScChangeOpWriter aOp( "setNoteText" );
|
|
|
|
aOp.appendAddress( rPos );
|
|
|
|
aOp.appendString( rNoteText );
|
|
|
|
aOp.appendBool( bApi );
|
|
|
|
SendMessage( aOp );
|
|
|
|
return true; // needs some code auditing action
|
|
|
|
}
|
2012-03-22 17:06:27 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
sal_Bool ScDocFuncSend::RenameTable( SCTAB nTab, const String& rName,
|
|
|
|
sal_Bool bRecord, sal_Bool bApi )
|
|
|
|
{
|
|
|
|
ScChangeOpWriter aOp( "renameTable" );
|
|
|
|
aOp.appendInt( nTab );
|
|
|
|
aOp.appendString( rName );
|
|
|
|
aOp.appendBool( bRecord );
|
|
|
|
aOp.appendBool( bApi );
|
|
|
|
SendMessage( aOp );
|
|
|
|
return true; // needs some code auditing action
|
|
|
|
}
|
2012-03-22 17:06:27 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
sal_Bool ScDocFuncSend::ApplyAttributes( const ScMarkData& rMark, const ScPatternAttr& rPattern,
|
|
|
|
sal_Bool bRecord, sal_Bool bApi )
|
|
|
|
{
|
|
|
|
fprintf( stderr, "Apply Attributes\n" );
|
|
|
|
return ScDocFunc::ApplyAttributes( rMark, rPattern, bRecord, bApi );
|
|
|
|
}
|
2012-03-22 17:06:27 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
sal_Bool ScDocFuncSend::ApplyStyle( const ScMarkData& rMark, const String& rStyleName,
|
|
|
|
sal_Bool bRecord, sal_Bool bApi )
|
|
|
|
{
|
|
|
|
fprintf( stderr, "Apply Style '%s'\n",
|
|
|
|
rtl::OUStringToOString( rStyleName, RTL_TEXTENCODING_UTF8 ).getStr() );
|
|
|
|
return ScDocFunc::ApplyStyle( rMark, rStyleName, bRecord, bApi );
|
|
|
|
}
|
2012-03-21 19:06:35 +00:00
|
|
|
|
2012-06-16 22:39:35 +02:00
|
|
|
sal_Bool ScDocFuncSend::MergeCells( const ScCellMergeOption& rOption, sal_Bool bContents,
|
|
|
|
sal_Bool bRecord, sal_Bool bApi )
|
|
|
|
{
|
|
|
|
fprintf( stderr, "Merge cells\n" );
|
|
|
|
return ScDocFunc::MergeCells( rOption, bContents, bRecord, bApi );
|
|
|
|
}
|
2012-03-21 19:06:35 +00:00
|
|
|
|
2012-07-20 00:12:19 +02:00
|
|
|
ScDocFunc *ScDocShell::CreateDocFunc()
|
2012-03-21 19:06:35 +00:00
|
|
|
{
|
|
|
|
if (getenv ("INTERCEPT"))
|
2012-03-28 20:24:32 +02:00
|
|
|
{
|
2012-07-20 00:12:19 +02:00
|
|
|
ScDocFuncDirect* pDirect = new ScDocFuncDirect( *this );
|
2012-05-22 17:42:59 +01:00
|
|
|
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.
|
|
|
|
|
2012-07-20 00:12:19 +02:00
|
|
|
return new ScDocFuncSend( *this, aDemoBus.get() );
|
|
|
|
}
|
|
|
|
else if (TeleManager::hasWaitingConference())
|
|
|
|
{
|
|
|
|
ScDocFuncDirect *pDirect = new ScDocFuncDirect( *this );
|
|
|
|
ScDocFuncRecv *pReceiver = new ScDocFuncRecv( pDirect );
|
|
|
|
ScDocFuncSend *pSender = new ScDocFuncSend( *this, pReceiver );
|
2012-08-03 11:44:57 +02:00
|
|
|
pSender->SetCollaboration( TeleManager::getConference() );
|
2012-07-20 00:12:19 +02:00
|
|
|
return pSender;
|
2012-03-28 20:24:32 +02:00
|
|
|
}
|
2012-03-21 19:06:35 +00:00
|
|
|
else
|
|
|
|
return new ScDocFuncDirect( *this );
|
|
|
|
}
|
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|