diff options
Diffstat (limited to 'kopete/plugins/highlight/highlightconfig.cpp')
-rw-r--r-- | kopete/plugins/highlight/highlightconfig.cpp | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/kopete/plugins/highlight/highlightconfig.cpp b/kopete/plugins/highlight/highlightconfig.cpp new file mode 100644 index 00000000..ba97e6a8 --- /dev/null +++ b/kopete/plugins/highlight/highlightconfig.cpp @@ -0,0 +1,206 @@ +/* + highlightconfig.cpp + + Copyright (c) 2003 by Olivier Goffart <ogoffart @ kde.org> + Copyright (c) 2003 by Matt Rogers <[email protected]> + + Kopete (c) 2002-2003 by the Kopete developers <[email protected]> + + ************************************************************************* + * * + * 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: |