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/plugins/highlight/highlightconfig.cpp

207 lines
7.0 KiB

/*
highlightconfig.cpp
Copyright (c) 2003 by Olivier Goffart <ogoffart @ kde.org>
Copyright (c) 2003 by Matt Rogers <matt@matt.rogers.name>
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 <qfile.h>
#include <qstylesheet.h>
#include <qregexp.h>
#include <qdir.h>
#include <qdom.h>
#include <ksavefile.h>
#include <kstandarddirs.h>
#include <klocale.h>
#include "filter.h"
#include "highlightconfig.h"
HighlightConfig::HighlightConfig()
{
load();
m_filters.setAutoDelete(true);
}
HighlightConfig::~HighlightConfig()
{
m_filters.clear();
}
void HighlightConfig::removeFilter(Filter *f)
{
//m_filters is "autodelete (true) so when we use remove(...) it deleted f
//so don't use (delete (f) after otherwise ot crash
m_filters.remove(f);
}
void HighlightConfig::appendFilter(Filter *f)
{
m_filters.append(f);
}
QPtrList<Filter> HighlightConfig::filters() const
{
return m_filters;
}
Filter* HighlightConfig::newFilter()
{
Filter *filtre=new Filter();
filtre->caseSensitive=false;
filtre->isRegExp=false;
filtre->setImportance=false;
filtre->importance=1;
filtre->setBG=false;
filtre->setFG=false;
filtre->playSound=false;
filtre->raiseView=false;
filtre->displayName=i18n("-New filter-");
m_filters.append(filtre);
return filtre;
}
void HighlightConfig::load()
{
m_filters.clear(); //clear filters
QString filename = locateLocal( "appdata", QString::fromLatin1( "highlight.xml" ) );
if( filename.isEmpty() )
return ;
QDomDocument filterList( QString::fromLatin1( "highlight-plugin" ) );
QFile filterListFile( filename );
filterListFile.open( IO_ReadOnly );
filterList.setContent( &filterListFile );
QDomElement list = filterList.documentElement();
QDomNode node = list.firstChild();
while( !node.isNull() )
{
QDomElement element = node.toElement();
if( !element.isNull() )
{
// if( element.tagName() == QString::fromLatin1("filter")
// {
Filter *filtre=newFilter();
QDomNode filterNode = node.firstChild();
while( !filterNode.isNull() )
{
QDomElement filterElement = filterNode.toElement();
if( !filterElement.isNull() )
{
if( filterElement.tagName() == QString::fromLatin1( "display-name" ) )
{
filtre->displayName = filterElement.text();
}
else if( filterElement.tagName() == QString::fromLatin1( "search" ) )
{
filtre->search = filterElement.text();
filtre->caseSensitive= ( filterElement.attribute( QString::fromLatin1( "caseSensitive" ), QString::fromLatin1( "1" ) ) == QString::fromLatin1( "1" ) );
filtre->isRegExp= ( filterElement.attribute( QString::fromLatin1( "regExp" ), QString::fromLatin1( "0" ) ) == QString::fromLatin1( "1" ) );
}
else if( filterElement.tagName() == QString::fromLatin1( "FG" ) )
{
filtre->FG = filterElement.text();
filtre->setFG= ( filterElement.attribute( QString::fromLatin1( "set" ), QString::fromLatin1( "0" ) ) == QString::fromLatin1( "1" ) );
}
else if( filterElement.tagName() == QString::fromLatin1( "BG" ) )
{
filtre->BG = filterElement.text();
filtre->setBG= ( filterElement.attribute( QString::fromLatin1( "set" ), QString::fromLatin1( "0" ) ) == QString::fromLatin1( "1" ) );
}
else if( filterElement.tagName() == QString::fromLatin1( "importance" ) )
{
filtre->importance = filterElement.text().toUInt();
filtre->setImportance= ( filterElement.attribute( QString::fromLatin1( "set" ), QString::fromLatin1( "0" ) ) == QString::fromLatin1( "1" ) );
}
else if( filterElement.tagName() == QString::fromLatin1( "sound" ) )
{
filtre->soundFN = filterElement.text();
filtre->playSound = ( filterElement.attribute( QString::fromLatin1( "set" ), QString::fromLatin1( "0" ) ) == QString::fromLatin1( "1" ) );
}
else if( filterElement.tagName() == QString::fromLatin1( "raise" ) )
{
filtre->raiseView = ( filterElement.attribute( QString::fromLatin1( "set" ), QString::fromLatin1( "0" ) ) == QString::fromLatin1( "1" ) );
}
}
filterNode = filterNode.nextSibling();
}
// }
}
node = node.nextSibling();
}
filterListFile.close();
}
void HighlightConfig::save()
{
QString fileName = locateLocal( "appdata", QString::fromLatin1( "highlight.xml" ) );
KSaveFile file( fileName );
if( file.status() == 0 )
{
QTextStream *stream = file.textStream();
stream->setEncoding( QTextStream::UnicodeUTF8 );
QString xml = QString::fromLatin1(
"<?xml version=\"1.0\"?>\n"
"<!DOCTYPE kopete-highlight-plugin>\n"
"<highlight-plugin>\n" );
// Save metafilter information.
QPtrListIterator<Filter> filtreIt( m_filters );
for( ; filtreIt.current(); ++filtreIt )
{
Filter *filtre = *filtreIt;
xml += QString::fromLatin1( " <filter>\n <display-name>" )
+ QStyleSheet::escape(filtre->displayName)
+ QString::fromLatin1( "</display-name>\n" );
xml += QString::fromLatin1(" <search caseSensitive=\"") + QString::number( static_cast<int>( filtre->caseSensitive ) ) +
QString::fromLatin1("\" regExp=\"") + QString::number( static_cast<int>( filtre->isRegExp ) ) +
QString::fromLatin1( "\">" ) + QStyleSheet::escape( filtre->search ) + QString::fromLatin1( "</search>\n" );
xml += QString::fromLatin1(" <BG set=\"") + QString::number( static_cast<int>( filtre->setBG ) ) +
QString::fromLatin1( "\">" ) + QStyleSheet::escape( filtre->BG.name() ) + QString::fromLatin1( "</BG>\n" );
xml += QString::fromLatin1(" <FG set=\"") + QString::number( static_cast<int>( filtre->setFG ) ) +
QString::fromLatin1( "\">" ) + QStyleSheet::escape( filtre->FG.name() ) + QString::fromLatin1( "</FG>\n" );
xml += QString::fromLatin1(" <importance set=\"") + QString::number( static_cast<int>( filtre->setImportance ) ) +
QString::fromLatin1( "\">" ) + QString::number( filtre->importance ) + QString::fromLatin1( "</importance>\n" );
xml += QString::fromLatin1(" <sound set=\"") + QString::number( static_cast<int>( filtre->playSound ) ) +
QString::fromLatin1( "\">" ) + QStyleSheet::escape( filtre->soundFN ) + QString::fromLatin1( "</sound>\n" );
xml += QString::fromLatin1(" <raise set=\"") + QString::number( static_cast<int>( filtre->raiseView ) ) +
QString::fromLatin1( "\"></raise>\n" );
xml += QString::fromLatin1( " </filter>\n" );
}
xml += QString::fromLatin1( "</highlight-plugin>\n" );
*stream << xml;
}
}
// vim: set noet ts=4 sts=4 sw=4: