You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
350 lines
11 KiB
350 lines
11 KiB
/*
|
|
Kopete Groupwise Protocol
|
|
gwprivacydialog.cpp - dialog summarising, and editing, the user's privacy settings
|
|
|
|
Copyright (c) 2004 SUSE Linux AG http://www.suse.com
|
|
|
|
Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
|
|
|
|
*************************************************************************
|
|
* *
|
|
* This library is free software; you can redistribute it and/or *
|
|
* modify it under the terms of the GNU General Public *
|
|
* License as published by the Free Software Foundation; either *
|
|
* version 2 of the License, or (at your option) any later version. *
|
|
* *
|
|
*************************************************************************
|
|
*/
|
|
|
|
#include <tqlabel.h>
|
|
#include <tqlistbox.h>
|
|
#include <tqpushbutton.h>
|
|
#include <tqstringlist.h>
|
|
#include <tqlistview.h>
|
|
|
|
#include <kdebug.h>
|
|
#include <kiconloader.h>
|
|
#include <klocale.h>
|
|
#include <kmessagebox.h>
|
|
|
|
#include "client.h"
|
|
#include "gwaccount.h"
|
|
#include "gwprivacy.h"
|
|
#include "gwprotocol.h"
|
|
#include "gwsearch.h"
|
|
#include "privacymanager.h"
|
|
#include "userdetailsmanager.h"
|
|
#include "gwprivacydialog.h"
|
|
|
|
class PrivacyLBI : public TQListBoxPixmap
|
|
{
|
|
public:
|
|
PrivacyLBI( TQListBox * listBox, const TQPixmap & pixmap, const TQString & text, const TQString & dn )
|
|
: TQListBoxPixmap( listBox, pixmap, text ), m_dn( dn )
|
|
{
|
|
}
|
|
TQString dn() { return m_dn; }
|
|
private:
|
|
TQString m_dn;
|
|
};
|
|
|
|
GroupWisePrivacyDialog::GroupWisePrivacyDialog( GroupWiseAccount * account, TQWidget *parent, const char *name )
|
|
: KDialogBase( parent, name, false, i18n( "Account specific privacy settings", "Manage Privacy for %1" ).arg( account->accountId() ),
|
|
KDialogBase::Ok|KDialogBase::Apply|KDialogBase::Cancel, Ok, true ), m_account( account ), m_dirty( false ), m_searchDlg(0)
|
|
{
|
|
m_privacy = new GroupWisePrivacyWidget( this );
|
|
setMainWidget( m_privacy );
|
|
PrivacyManager * mgr = m_account->client()->privacyManager();
|
|
// populate the widget;
|
|
// admin lock
|
|
if ( mgr->isPrivacyLocked() )
|
|
{
|
|
m_privacy->m_status->setText( i18n( "Privacy settings have been administratively locked" ) );
|
|
disableWidgets();
|
|
}
|
|
|
|
populateWidgets();
|
|
|
|
m_privacy->m_allowList->setSelectionMode( TQListBox::Extended );
|
|
m_privacy->m_denyList->setSelectionMode( TQListBox::Extended );
|
|
|
|
connect( m_privacy->m_btnAllow, TQT_SIGNAL( clicked() ), TQT_SLOT( slotAllowClicked() ) );
|
|
connect( m_privacy->m_btnBlock, TQT_SIGNAL( clicked() ), TQT_SLOT( slotBlockClicked() ) );
|
|
connect( m_privacy->m_btnAdd, TQT_SIGNAL( clicked() ), TQT_SLOT( slotAddClicked() ) );
|
|
connect( m_privacy->m_btnRemove, TQT_SIGNAL( clicked() ), TQT_SLOT( slotRemoveClicked() ) );
|
|
connect( m_privacy->m_allowList, TQT_SIGNAL( selectionChanged() ), TQT_SLOT( slotAllowListClicked() ) );
|
|
connect( m_privacy->m_denyList, TQT_SIGNAL( selectionChanged() ), TQT_SLOT( slotDenyListClicked() ) );
|
|
connect( mgr, TQT_SIGNAL( privacyChanged( const TQString &, bool ) ), TQT_SLOT( slotPrivacyChanged() ) );
|
|
m_privacy->m_btnAdd->setEnabled( true );
|
|
m_privacy->m_btnAllow->setEnabled( false );
|
|
m_privacy->m_btnBlock->setEnabled( false );
|
|
m_privacy->m_btnRemove->setEnabled( false );
|
|
|
|
/* showButtonOK( true );
|
|
showButtonApply( true );
|
|
showButtonCancel( true );
|
|
*/
|
|
show();
|
|
}
|
|
|
|
GroupWisePrivacyDialog::~GroupWisePrivacyDialog()
|
|
{
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::populateWidgets()
|
|
{
|
|
m_dirty = false;
|
|
PrivacyManager * mgr = m_account->client()->privacyManager();
|
|
|
|
// default policy
|
|
TQString defaultPolicyText = i18n( "<Everyone Else>" );
|
|
if ( mgr->defaultAllow() )
|
|
m_defaultPolicy = new TQListBoxText( m_privacy->m_allowList, defaultPolicyText );
|
|
else
|
|
m_defaultPolicy = new TQListBoxText( m_privacy->m_denyList, defaultPolicyText );
|
|
|
|
TQPixmap icon = m_account->protocol()->groupwiseAvailable.iconFor( m_account );
|
|
|
|
// allow list
|
|
TQStringList allowList = mgr->allowList();
|
|
TQStringList::Iterator end = allowList.end();
|
|
for ( TQStringList::Iterator it = allowList.begin(); it != end; ++it )
|
|
{
|
|
GroupWise::ContactDetails cd = m_account->client()->userDetailsManager()->details( *it );
|
|
if ( cd.fullName.isEmpty() )
|
|
cd.fullName = cd.givenName + " " + cd.surname;
|
|
new PrivacyLBI( m_privacy->m_allowList, icon, cd.fullName, *it );
|
|
}
|
|
// deny list
|
|
TQStringList denyList = mgr->denyList();
|
|
end = denyList.end();
|
|
for ( TQStringList::Iterator it = denyList.begin(); it != end; ++it )
|
|
{
|
|
GroupWise::ContactDetails cd = m_account->client()->userDetailsManager()->details( *it );
|
|
if ( cd.fullName.isEmpty() )
|
|
cd.fullName = cd.givenName + " " + cd.surname;
|
|
new PrivacyLBI( m_privacy->m_denyList, icon, cd.fullName, *it );
|
|
}
|
|
updateButtonState();
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::disableWidgets()
|
|
{
|
|
if ( m_privacy )
|
|
{
|
|
m_privacy->m_btnAllow->setEnabled( false );
|
|
m_privacy->m_btnBlock->setEnabled( false );
|
|
m_privacy->m_btnAdd->setEnabled( false );
|
|
m_privacy->m_btnRemove->setEnabled( false );
|
|
}
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::slotBlockClicked()
|
|
{
|
|
// take each selected item from the allow list and add it to the deny list
|
|
// start at the bottom, as we are changing the contents of the list as we go
|
|
for( int i = m_privacy->m_allowList->count() - 1; i >= 0 ; --i )
|
|
{
|
|
if ( m_privacy->m_allowList->isSelected( i ) )
|
|
{
|
|
m_dirty = true;
|
|
TQListBoxItem * lbi = m_privacy->m_allowList->item( i );
|
|
m_privacy->m_allowList->takeItem( lbi );
|
|
m_privacy->m_denyList->insertItem( lbi );
|
|
}
|
|
}
|
|
updateButtonState();
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::slotAllowClicked()
|
|
{
|
|
// take each selected item from the deny list and add it to the allow list
|
|
for( int i = m_privacy->m_denyList->count() - 1; i >= 0 ; --i )
|
|
{
|
|
if ( m_privacy->m_denyList->isSelected( i ) )
|
|
{
|
|
m_dirty = true;
|
|
TQListBoxItem * lbi = m_privacy->m_denyList->item( i );
|
|
m_privacy->m_denyList->takeItem( lbi );
|
|
m_privacy->m_allowList->insertItem( lbi );
|
|
}
|
|
}
|
|
updateButtonState();
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::slotAddClicked()
|
|
{
|
|
if ( !m_searchDlg )
|
|
{
|
|
m_searchDlg = new KDialogBase( this, "privacysearchdialog", false,
|
|
i18n( "Search for Contact to Block" ),
|
|
KDialogBase::Ok|KDialogBase::Cancel );
|
|
m_search = new GroupWiseContactSearch( m_account, TQListView::Multi, false, m_searchDlg, "privacysearchwidget" );
|
|
m_searchDlg->setMainWidget( m_search );
|
|
connect( m_searchDlg, TQT_SIGNAL( okClicked() ), TQT_SLOT( slotSearchedForUsers() ) );
|
|
connect( m_search, TQT_SIGNAL( selectionValidates( bool ) ), m_searchDlg, TQT_SLOT( enableButtonOK( bool ) ) );
|
|
m_searchDlg->enableButtonOK( false );
|
|
}
|
|
m_searchDlg->show();
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::slotSearchedForUsers()
|
|
{
|
|
// create an item for each result, in the block list
|
|
TQValueList< ContactDetails > selected = m_search->selectedResults();
|
|
TQValueList< ContactDetails >::Iterator it = selected.begin();
|
|
const TQValueList< ContactDetails >::Iterator end = selected.end();
|
|
TQPixmap icon = m_account->protocol()->groupwiseAvailable.iconFor( m_account );
|
|
for ( ; it != end; ++it )
|
|
{
|
|
m_dirty = true;
|
|
m_account->client()->userDetailsManager()->addDetails( *it );
|
|
if ( (*it).fullName.isEmpty() )
|
|
(*it).fullName = (*it).givenName + " " + (*it).surname;
|
|
new PrivacyLBI( m_privacy->m_denyList, icon, (*it).fullName, (*it).dn );
|
|
}
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::slotRemoveClicked()
|
|
{
|
|
// remove any selected items from either list, except the default policy
|
|
for( int i = m_privacy->m_denyList->count() - 1; i >= 0 ; --i )
|
|
{
|
|
if ( m_privacy->m_denyList->isSelected( i ) )
|
|
{
|
|
m_dirty = true;
|
|
TQListBoxItem * lbi = m_privacy->m_denyList->item( i );
|
|
// can't remove the default policy
|
|
if ( lbi == m_defaultPolicy )
|
|
continue;
|
|
m_privacy->m_denyList->removeItem( i );
|
|
}
|
|
}
|
|
for( int i = m_privacy->m_allowList->count() - 1; i >= 0 ; --i )
|
|
{
|
|
if ( m_privacy->m_allowList->isSelected( i ) )
|
|
{
|
|
m_dirty = true;
|
|
TQListBoxItem * lbi = m_privacy->m_allowList->item( i );
|
|
// can't remove the default policy
|
|
if ( lbi == m_defaultPolicy )
|
|
continue;
|
|
m_privacy->m_allowList->removeItem( i );
|
|
}
|
|
}
|
|
updateButtonState();
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::slotAllowListClicked()
|
|
{
|
|
// don't get into feedback
|
|
disconnect( m_privacy->m_denyList, TQT_SIGNAL( selectionChanged() ), this, TQT_SLOT( slotDenyListClicked() ) );
|
|
m_privacy->m_denyList->clearSelection();
|
|
connect( m_privacy->m_denyList, TQT_SIGNAL( selectionChanged() ), TQT_SLOT( slotDenyListClicked() ) );
|
|
bool selected = false;
|
|
for( int i = m_privacy->m_allowList->count() - 1; i >= 0 ; --i )
|
|
{
|
|
if ( m_privacy->m_allowList->isSelected( i ) )
|
|
{
|
|
selected = true;
|
|
break;
|
|
}
|
|
}
|
|
m_privacy->m_btnAllow->setEnabled( false );
|
|
m_privacy->m_btnBlock->setEnabled( selected );
|
|
m_privacy->m_btnRemove->setEnabled( selected );
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::slotDenyListClicked()
|
|
{
|
|
// don't get into feedback
|
|
disconnect( m_privacy->m_allowList, TQT_SIGNAL( selectionChanged() ), this, TQT_SLOT( slotAllowListClicked() ) );
|
|
m_privacy->m_allowList->clearSelection();
|
|
connect( m_privacy->m_allowList, TQT_SIGNAL( selectionChanged() ), TQT_SLOT( slotAllowListClicked() ) );
|
|
bool selected = false;
|
|
for( int i = m_privacy->m_denyList->count() - 1; i >= 0 ; --i )
|
|
{
|
|
if ( m_privacy->m_denyList->isSelected( i ) )
|
|
{
|
|
selected = true;
|
|
break;
|
|
}
|
|
}
|
|
m_privacy->m_btnAllow->setEnabled( selected );
|
|
m_privacy->m_btnBlock->setEnabled( false );
|
|
m_privacy->m_btnRemove->setEnabled( selected );
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::slotPrivacyChanged()
|
|
{
|
|
m_privacy->m_denyList->clear();
|
|
m_privacy->m_allowList->clear();
|
|
populateWidgets();
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::updateButtonState()
|
|
{
|
|
enableButtonApply( m_dirty );
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::slotOk()
|
|
{
|
|
if ( m_dirty )
|
|
commitChanges();
|
|
KDialogBase::slotOk();
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::slotApply()
|
|
{
|
|
if ( m_dirty )
|
|
{
|
|
commitChanges();
|
|
m_dirty = false;
|
|
updateButtonState();
|
|
}
|
|
KDialogBase::slotApply();
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::commitChanges()
|
|
{
|
|
if ( m_account->isConnected() )
|
|
{
|
|
bool defaultDeny = false;
|
|
TQStringList denyList;
|
|
TQStringList allowList;
|
|
// pass on our current allow, deny and default policy to the PrivacyManager
|
|
for( int i = 0; i < (int)m_privacy->m_denyList->count(); ++i )
|
|
{
|
|
if ( m_privacy->m_denyList->item( i ) == m_defaultPolicy )
|
|
defaultDeny = true;
|
|
else
|
|
{
|
|
PrivacyLBI * lbi = static_cast<PrivacyLBI *>( m_privacy->m_denyList->item( i ) );
|
|
denyList.append( lbi->dn() );
|
|
}
|
|
}
|
|
for( int i = 0; i < (int)m_privacy->m_allowList->count(); ++i )
|
|
{
|
|
if ( m_privacy->m_allowList->item( i ) == m_defaultPolicy )
|
|
defaultDeny = false;
|
|
else
|
|
{
|
|
PrivacyLBI * lbi = static_cast<PrivacyLBI *>( m_privacy->m_allowList->item( i ) );
|
|
allowList.append( lbi->dn() );
|
|
}
|
|
}
|
|
PrivacyManager * mgr = m_account->client()->privacyManager();
|
|
mgr->setPrivacy( defaultDeny, allowList, denyList );
|
|
}
|
|
else
|
|
errorNotConnected();
|
|
}
|
|
|
|
void GroupWisePrivacyDialog::errorNotConnected()
|
|
{
|
|
KMessageBox::queuedMessageBox( this, KMessageBox::Information,
|
|
i18n( "You can only change privacy settings while you are logged in to the GroupWise Messenger server." ) , i18n("'%1' Not Logged In").arg( m_account->accountId() ) );
|
|
}
|
|
|
|
#include "gwprivacydialog.moc"
|