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.
tdenetwork/kopete/kopete/contactlist/customnotificationprops.cpp

169 lines
6.1 KiB

/*
customnotificationprops.cpp
Kopete Contactlist Custom Notifications GUI for Groups and MetaContacts
Contains UI controller logic for managing custom notifications
Copyright (c) 2004 Will Stephenson <lists@stevello.free-online.co.uk>
Kopete (c) 2002-2003 by the Kopete developers <kopete-devel@kde.org>
*************************************************************************
* *
* This program 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 <tqcheckbox.h>
#include <tqcombobox.h>
#include <tqlineedit.h>
#include <kdebug.h>
#include <tdeconfig.h>
#include <kurlrequester.h>
#include "customnotifications.h"
#include "kopeteeventpresentation.h"
#include "kopetenotifyevent.h"
#include "kopetenotifydataobject.h"
#include "customnotificationprops.h"
CustomNotificationProps::CustomNotificationProps( TQWidget *parent, Kopete::NotifyDataObject* item, const char * name )
: TQObject( parent, name )
{
m_notifyWidget = new CustomNotificationWidget( parent, "notificationWidget" );
m_item = item;
TQString path = "kopete/eventsrc";
TDEConfig eventsfile( path, true, false, "data" );
m_eventList = eventsfile.groupList();
TQStringList contactSpecificEvents; // we are only interested in events that relate to contacts
TQStringList::Iterator it = m_eventList.begin();
TQStringList::Iterator end = m_eventList.end();
for ( ; it != end; ++it )
{
if ( !(*it).startsWith( TQString::fromLatin1( "kopete_contact_" ) ) )
continue;
contactSpecificEvents.append( *it );
TQMap<TQString, TQString> entries = eventsfile.entryMap( *it );
eventsfile.setGroup( *it );
TQString comment = eventsfile.readEntry( "Comment", TQString::fromLatin1( "Found nothing!" ) );
m_notifyWidget->cmbEvents->insertItem( comment );
}
m_eventList = contactSpecificEvents;
slotEventsComboChanged( m_notifyWidget->cmbEvents->currentItem() );
// we have to do this after adding items
connect( m_notifyWidget->cmbEvents, TQT_SIGNAL( activated( int ) ), this, TQT_SLOT( slotEventsComboChanged( int ) ) );
}
void CustomNotificationProps::slotEventsComboChanged( int itemNo )
{
// if the combo has changed, store the previous state of the widgets
// record the selected item so we can save it when the widget changes next
storeCurrentCustoms();
m_event = m_eventList[ itemNo ];
// update the widgets for the selected item
// get the corresponding Kopete::NotifyEvent
Kopete::NotifyEvent *evt = m_item->notifyEvent( m_event );
// set the widgets accordingly
resetEventWidgets();
if ( evt )
{
// sound presentation
Kopete::EventPresentation *pres = evt->presentation( Kopete::EventPresentation::Sound );
if ( pres )
{
m_notifyWidget->chkCustomSound->setChecked( pres->enabled() );
m_notifyWidget->customSound->setURL( pres->content() );
m_notifyWidget->chkSoundSS->setChecked( pres->singleShot() );
}
// message presentation
pres = evt->presentation( Kopete::EventPresentation::Message );
if ( pres )
{
m_notifyWidget->chkCustomMsg->setChecked( pres->enabled() );
m_notifyWidget->customMsg->setText( pres->content() );
m_notifyWidget->chkMsgSS->setChecked( pres->singleShot() );
}
// chat presentation
pres = evt->presentation( Kopete::EventPresentation::Chat );
if ( pres )
{
m_notifyWidget->chkCustomChat->setChecked( pres->enabled() );
m_notifyWidget->chkChatSS->setChecked( pres->singleShot() );
}
m_notifyWidget->chkSuppressCommon->setChecked( evt->suppressCommon() );
}
//dumpData();
}
void CustomNotificationProps::dumpData()
{
Kopete::NotifyEvent *evt = m_item->notifyEvent( m_event );
if ( evt )
kdDebug( 14000 ) << k_funcinfo << evt->toString() << endl;
else
kdDebug( 14000 ) << k_funcinfo << " no event exists." << endl;
}
void CustomNotificationProps::resetEventWidgets()
{
m_notifyWidget->chkCustomSound->setChecked( false );
m_notifyWidget->customSound->clear();
m_notifyWidget->chkSoundSS->setChecked( true );
m_notifyWidget->chkCustomMsg->setChecked( false );
m_notifyWidget->customMsg->clear();
m_notifyWidget->chkMsgSS->setChecked( true );
m_notifyWidget->chkCustomChat->setChecked( false );
m_notifyWidget->chkChatSS->setChecked( true );
m_notifyWidget->chkSuppressCommon->setChecked( false );
}
void CustomNotificationProps::storeCurrentCustoms()
{
if ( !m_event.isNull() )
{
Kopete::NotifyEvent *evt = m_item->notifyEvent( m_event );
if ( !evt )
{
evt = new Kopete::NotifyEvent( );
// store the changed event
m_item->setNotifyEvent( m_event, evt );
}
evt->setSuppressCommon( m_notifyWidget->chkSuppressCommon->isChecked() );
// set different presentations
Kopete::EventPresentation *eventNotify = 0;
eventNotify = new Kopete::EventPresentation( Kopete::EventPresentation::Sound,
m_notifyWidget->customSound->url(),
m_notifyWidget->chkSoundSS->isChecked(),
m_notifyWidget->chkCustomSound->isChecked() );
evt->setPresentation( Kopete::EventPresentation::Sound, eventNotify );
// set message attributes
eventNotify = new Kopete::EventPresentation( Kopete::EventPresentation::Message,
m_notifyWidget->customMsg->text(),
m_notifyWidget->chkMsgSS->isChecked(),
m_notifyWidget->chkCustomMsg->isChecked() );
evt->setPresentation( Kopete::EventPresentation::Message, eventNotify );
// set chat attributes
eventNotify = new Kopete::EventPresentation( Kopete::EventPresentation::Chat,
TQString(),
m_notifyWidget->chkChatSS->isChecked(),
m_notifyWidget->chkCustomChat->isChecked() );
evt->setPresentation( Kopete::EventPresentation::Chat, eventNotify );
evt->setSuppressCommon( m_notifyWidget->chkSuppressCommon->isChecked() );
}
}
CustomNotificationWidget* CustomNotificationProps::widget()
{
return m_notifyWidget;
}
#include "customnotificationprops.moc"