diff options
Diffstat (limited to 'tubes/source/contacts.cxx')
-rw-r--r-- | tubes/source/contacts.cxx | 276 |
1 files changed, 122 insertions, 154 deletions
diff --git a/tubes/source/contacts.cxx b/tubes/source/contacts.cxx index b86bf9f18287..fd7855407146 100644 --- a/tubes/source/contacts.cxx +++ b/tubes/source/contacts.cxx @@ -12,212 +12,180 @@ #include <vcl/graphicfilter.hxx> #include <tubes/conference.hxx> #include <tubes/collaboration.hxx> -#include <tubes/manager.hxx> -#include <vcl/button.hxx> -#include <vcl/dialog.hxx> -#include <vcl/lstbox.hxx> #include <telepathy-glib/telepathy-glib.h> -namespace { +#include <contacts.hxx> -class TubeContacts : public ModelessDialog +void tubes::TubeContacts::Invite() { - VclPtr<PushButton> mpBtnDemo; - VclPtr<PushButton> mpBtnBuddy; - VclPtr<PushButton> mpBtnGroup; - VclPtr<PushButton> mpBtnInvite; - VclPtr<PushButton> mpBtnListen; - VclPtr<ListBox> mpList; - Collaboration* mpCollaboration; - - DECL_LINK( BtnDemoHdl, Button*, void ); - DECL_LINK( BtnConnectHdl, Button*, void ); - DECL_LINK( BtnGroupHdl, Button*, void ); - DECL_LINK( BtnInviteHdl, Button*, void ); - DECL_LINK( BtnListenHdl, Button*, void ); - - AccountContactPairV maACs; - - void Invite() + if (mpList->GetSelectEntryCount()) { - if (mpList->GetSelectEntryCount()) - { - sal_uInt16 i = mpList->GetSelectEntryPos(); - TpContact* pContact = maACs[i].second; - mpCollaboration->Invite( pContact ); - } + sal_uInt16 i = mpList->GetSelectEntryPos(); + TpContact* pContact = maACs[i].second; + mpCollaboration->Invite( pContact ); } +} - void Listen() +void tubes::TubeContacts::StartDemoSession() +{ + TeleConference* pConference = TeleManager::startDemoSession(); + if (!pConference) + SAL_WARN( "tubes", "Could not start demo session!" ); + else { - if (!TeleManager::registerClients()) - SAL_INFO( "tubes", "Could not register client handlers." ); + mpCollaboration->StartCollaboration( pConference ); + mpCollaboration->SaveAndSendFile( nullptr ); } +} - void StartDemoSession() +void tubes::TubeContacts::StartBuddySession() +{ + if (mpList->GetSelectEntryCount()) { - TeleConference* pConference = TeleManager::startDemoSession(); + sal_uInt16 i = mpList->GetSelectEntryPos(); + TpAccount* pAccount = maACs[i].first; + TpContact* pContact = maACs[i].second; + SAL_INFO( "tubes", "picked " << tp_contact_get_identifier( pContact ) ); + TeleConference* pConference = TeleManager::startBuddySession( pAccount, pContact ); if (!pConference) - SAL_WARN( "tubes", "Could not start demo session!" ); + SAL_WARN( "tubes", "Could not start session with " << + tp_contact_get_identifier( pContact ) ); else { mpCollaboration->StartCollaboration( pConference ); - mpCollaboration->SaveAndSendFile( NULL ); + mpCollaboration->SaveAndSendFile( pContact ); } } +} - void StartBuddySession() +void tubes::TubeContacts::StartGroupSession() +{ + if (mpList->GetSelectEntryCount()) { - if (mpList->GetSelectEntryCount()) + sal_uInt16 i = mpList->GetSelectEntryPos(); + TpAccount* pAccount = maACs[i].first; + SAL_INFO( "tubes", "picked " << tp_account_get_display_name( pAccount ) ); + TeleConference* pConference = TeleManager::startGroupSession( pAccount, + "liboroom", "conference.jabber.org" ); + if (!pConference) + SAL_WARN( "tubes", "Could not start group session." ); + else { - sal_uInt16 i = mpList->GetSelectEntryPos(); - TpAccount* pAccount = maACs[i].first; - TpContact* pContact = maACs[i].second; - SAL_INFO( "tubes", "picked " << tp_contact_get_identifier( pContact ) ); - TeleConference* pConference = TeleManager::startBuddySession( pAccount, pContact ); - if (!pConference) - SAL_WARN( "tubes", "Could not start session with " << - tp_contact_get_identifier( pContact ) ); - else - { - mpCollaboration->StartCollaboration( pConference ); - mpCollaboration->SaveAndSendFile( pContact ); - } + mpCollaboration->StartCollaboration( pConference ); } } +} - void StartGroupSession() - { - if (mpList->GetSelectEntryCount()) - { - sal_uInt16 i = mpList->GetSelectEntryPos(); - TpAccount* pAccount = maACs[i].first; - SAL_INFO( "tubes", "picked " << tp_account_get_display_name( pAccount ) ); - TeleConference* pConference = TeleManager::startGroupSession( pAccount, - OUString("liboroom"), OUString("conference.jabber.org") ); - if (!pConference) - SAL_WARN( "tubes", "Could not start group session." ); - else - { - mpCollaboration->StartCollaboration( pConference ); - } - } - } +tubes::TubeContacts::TubeContacts( Collaboration* pCollaboration ) : + ModelessDialog( nullptr, "ContactsDialog", "tubes/ui/contacts.ui" ), + mpCollaboration( pCollaboration ) +{ + get( mpBtnListen, "listen"); + get( mpBtnInvite, "invite"); + get( mpBtnDemo, "demo"); + get( mpBtnBuddy, "buddy"); + get( mpBtnGroup, "group"); + get( mpList, "contacts"); + mpBtnListen->SetClickHdl( LINK( this, TubeContacts, BtnListenHdl ) ); + mpBtnInvite->SetClickHdl( LINK( this, TubeContacts, BtnInviteHdl ) ); + mpBtnDemo->SetClickHdl( LINK( this, TubeContacts, BtnDemoHdl ) ); + mpBtnBuddy->SetClickHdl( LINK( this, TubeContacts, BtnConnectHdl ) ); + mpBtnGroup->SetClickHdl( LINK( this, TubeContacts, BtnGroupHdl ) ); +} -public: - explicit TubeContacts( Collaboration* pCollaboration ) : - ModelessDialog( NULL, "ContactsDialog", "tubes/ui/contacts.ui" ), - mpCollaboration( pCollaboration ) - { - get( mpBtnListen, "listen"); - get( mpBtnInvite, "invite"); - get( mpBtnDemo, "demo"); - get( mpBtnBuddy, "buddy"); - get( mpBtnGroup, "group"); - get( mpList, "contacts"); - mpBtnListen->SetClickHdl( LINK( this, TubeContacts, BtnListenHdl ) ); - mpBtnInvite->SetClickHdl( LINK( this, TubeContacts, BtnInviteHdl ) ); - mpBtnDemo->SetClickHdl( LINK( this, TubeContacts, BtnDemoHdl ) ); - mpBtnBuddy->SetClickHdl( LINK( this, TubeContacts, BtnConnectHdl ) ); - mpBtnGroup->SetClickHdl( LINK( this, TubeContacts, BtnGroupHdl ) ); - } - virtual ~TubeContacts() - { - dispose(); - } +tubes::TubeContacts::~TubeContacts() +{ + disposeOnce(); +} - virtual void dispose() override - { - mpBtnListen.clear(); - mpBtnGroup.clear(); - mpBtnDemo.clear(); - mpBtnBuddy.clear(); - mpBtnGroup.clear(); - mpList.clear(); - } +void tubes::TubeContacts::dispose() +{ + mpBtnListen.disposeAndClear(); + mpBtnInvite.disposeAndClear(); + mpBtnDemo.disposeAndClear(); + mpBtnBuddy.disposeAndClear(); + mpBtnGroup.disposeAndClear(); + mpList.disposeAndClear(); + ModelessDialog::dispose(); +} - static OUString fromUTF8( const char *pStr ) - { - return OStringToOUString( OString( pStr, strlen( pStr ) ), - RTL_TEXTENCODING_UTF8 ); - } +namespace { - void Populate() +OUString fromUTF8( const char *pStr ) +{ + return OStringToOUString( OString( pStr, strlen( pStr ) ), + RTL_TEXTENCODING_UTF8 ); +} + +} + +void tubes::TubeContacts::Populate() +{ + SAL_INFO( "tubes", "Populating contact list dialog" ); + mpList->Clear(); + maACs.clear(); + + AccountContactPairV aPairs = TeleManager::getContacts(); + AccountContactPairV::iterator it; + // make sure we have enough memory to not need re-allocation + // which would invalidate pointers stored in mpList entries + maACs.reserve( aPairs.size() ); + for( it = aPairs.begin(); it != aPairs.end(); ++it ) { - SAL_INFO( "tubes", "Populating contact list dialog" ); - mpList->Clear(); - maACs.clear(); - - AccountContactPairV aPairs = TeleManager::getContacts(); - AccountContactPairV::iterator it; - // make sure we have enough memory to not need re-allocation - // which would invalidate pointers stored in mpList entries - maACs.reserve( aPairs.size() ); - for( it = aPairs.begin(); it != aPairs.end(); ++it ) + Image aImage; + GFile *pAvatarFile = tp_contact_get_avatar_file( it->second ); + if( pAvatarFile ) { - Image aImage; - GFile *pAvatarFile = tp_contact_get_avatar_file( it->second ); - if( pAvatarFile ) + const OUString sAvatarFileUrl = fromUTF8( g_file_get_path ( pAvatarFile ) ); + Graphic aGraphic; + if( GRFILTER_OK == GraphicFilter::LoadGraphic( sAvatarFileUrl, "", aGraphic ) ) { - const OUString sAvatarFileUrl = fromUTF8( g_file_get_path ( pAvatarFile ) ); - Graphic aGraphic; - if( GRFILTER_OK == GraphicFilter::LoadGraphic( sAvatarFileUrl, OUString(""), aGraphic ) ) - { - BitmapEx aBitmap = aGraphic.GetBitmapEx(); - double fScale = 30.0 / aBitmap.GetSizePixel().Height(); - aBitmap.Scale( fScale, fScale ); - aImage = Image( aBitmap ); - } + BitmapEx aBitmap = aGraphic.GetBitmapEx(); + double fScale = 30.0 / aBitmap.GetSizePixel().Height(); + aBitmap.Scale( fScale, fScale ); + aImage = Image( aBitmap ); } - OUStringBuffer aEntry( 128 ); - aEntry.append( " " ); - aEntry.append( fromUTF8 ( tp_contact_get_alias( it->second ) ) ); - aEntry.append( " - " ); - aEntry.append( fromUTF8 ( tp_contact_get_identifier( it->second ) ) ); - mpList->InsertEntry( aEntry.makeStringAndClear(), aImage); - // FIXME: ref the TpAccount, TpContact ... - maACs.push_back( AccountContactPair( it->first, it->second ) ); - - g_object_unref (it->first); - g_object_unref (it->second); } - Show(); + OUStringBuffer aEntry( 128 ); + aEntry.append( " " ); + aEntry.append( fromUTF8 ( tp_contact_get_alias( it->second ) ) ); + aEntry.append( " - " ); + aEntry.append( fromUTF8 ( tp_contact_get_identifier( it->second ) ) ); + mpList->InsertEntry( aEntry.makeStringAndClear(), aImage); + // FIXME: ref the TpAccount, TpContact ... + maACs.push_back( AccountContactPair( it->first, it->second ) ); + + g_object_unref (it->first); + g_object_unref (it->second); } -}; + Show(); +} -IMPL_LINK_NOARG( TubeContacts, BtnDemoHdl, Button*, void ) +IMPL_LINK_NOARG( tubes::TubeContacts, BtnDemoHdl, Button*, void ) { StartDemoSession(); } -IMPL_LINK_NOARG( TubeContacts, BtnConnectHdl, Button*, void ) +IMPL_LINK_NOARG( tubes::TubeContacts, BtnConnectHdl, Button*, void ) { StartBuddySession(); } -IMPL_LINK_NOARG( TubeContacts, BtnGroupHdl, Button*, void ) +IMPL_LINK_NOARG( tubes::TubeContacts, BtnGroupHdl, Button*, void ) { StartGroupSession(); } -IMPL_LINK_NOARG( TubeContacts, BtnInviteHdl, Button*, void ) +IMPL_LINK_NOARG( tubes::TubeContacts, BtnInviteHdl, Button*, void ) { Invite(); } -IMPL_LINK_NOARG( TubeContacts, BtnListenHdl, Button*, void ) -{ - Listen(); -} - -} // anonymous namespace - -void Collaboration::DisplayContacts() +IMPL_STATIC_LINK_NOARG( tubes::TubeContacts, BtnListenHdl, Button*, void ) { - if (!mpContacts) - mpContacts = new TubeContacts( this ); - reinterpret_cast<TubeContacts*> (mpContacts)->Populate(); + if (!TeleManager::registerClients()) + SAL_INFO( "tubes", "Could not register client handlers." ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |