diff options
Diffstat (limited to 'kopete/plugins/highlight/highlightpreferences.cpp')
-rw-r--r-- | kopete/plugins/highlight/highlightpreferences.cpp | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/kopete/plugins/highlight/highlightpreferences.cpp b/kopete/plugins/highlight/highlightpreferences.cpp new file mode 100644 index 00000000..9641d034 --- /dev/null +++ b/kopete/plugins/highlight/highlightpreferences.cpp @@ -0,0 +1,269 @@ +/*************************************************************************** + highlightpreferences.cpp - description + ------------------- + begin : mar 14 2003 + copyright : (C) 2003 by Olivier Goffart + email : ogoffart @ 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 <qlayout.h> +#include <qcheckbox.h> + +#include <kcombobox.h> +#include <klineedit.h> +#include <kparts/componentfactory.h> +#include <klocale.h> +#include <klistview.h> +#include <kgenericfactory.h> +#include <kcolorbutton.h> +#include <kinputdialog.h> +#include <kurlrequester.h> +#include <kregexpeditorinterface.h> +#include <kdebug.h> + +#include "filter.h" +#include "highlightplugin.h" +#include "highlightconfig.h" +#include "highlightprefsbase.h" +#include "highlightpreferences.h" + +typedef KGenericFactory<HighlightPreferences> HighlightPreferencesFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_kopete_highlight, HighlightPreferencesFactory( "kcm_kopete_highlight" ) ) + +HighlightPreferences::HighlightPreferences(QWidget *parent, const char* /*name*/, const QStringList &args) + : KCModule(HighlightPreferencesFactory::instance(), parent, args) +{ + donttouch=true; + ( new QVBoxLayout( this ) )->setAutoAdd( true ); + preferencesDialog = new HighlightPrefsUI(this); + m_config = new HighlightConfig; + + connect(preferencesDialog->m_list , SIGNAL(selectionChanged()) , this , SLOT(slotCurrentFilterChanged())); + connect(preferencesDialog->m_list , SIGNAL(doubleClicked ( QListViewItem *, const QPoint &, int )) , this , SLOT(slotRenameFilter())); + connect(preferencesDialog->m_add , SIGNAL(pressed()) , this , SLOT(slotAddFilter())); + connect(preferencesDialog->m_remove , SIGNAL(pressed()) , this , SLOT(slotRemoveFilter())); + connect(preferencesDialog->m_rename , SIGNAL(pressed()) , this , SLOT(slotRenameFilter())); + connect(preferencesDialog->m_editregexp , SIGNAL(pressed()) , this , SLOT(slotEditRegExp())); + + //Maybe here i should use a slot per widget, but i am too lazy + connect(preferencesDialog->m_case , SIGNAL(stateChanged(int)) , this , SLOT(slotSomethingHasChanged())); + connect(preferencesDialog->m_regexp , SIGNAL(stateChanged(int)) , this , SLOT(slotSomethingHasChanged())); + connect(preferencesDialog->m_setImportance , SIGNAL(stateChanged(int)) , this , SLOT(slotSomethingHasChanged())); + connect(preferencesDialog->m_setBG , SIGNAL(stateChanged(int)) , this , SLOT(slotSomethingHasChanged())); + connect(preferencesDialog->m_setFG , SIGNAL(stateChanged(int)) , this , SLOT(slotSomethingHasChanged())); + connect(preferencesDialog->m_search , SIGNAL(textChanged(const QString&)) , this , SLOT(slotSomethingHasChanged())); + connect(preferencesDialog->m_sound , SIGNAL(stateChanged(int)) , this , SLOT(slotSomethingHasChanged())); + connect(preferencesDialog->m_soundFN , SIGNAL(textChanged(const QString&)) , this , SLOT(slotSomethingHasChanged())); + connect(preferencesDialog->m_raise , SIGNAL(stateChanged(int)) , this , SLOT(slotSomethingHasChanged())); + connect(preferencesDialog->m_search , SIGNAL(textChanged(const QString&)) , this , SLOT(slotSomethingHasChanged())); + connect(preferencesDialog->m_importance , SIGNAL(activated(int)) , this , SLOT(slotSomethingHasChanged())); + connect(preferencesDialog->m_FG , SIGNAL(changed(const QColor&)) , this , SLOT(slotSomethingHasChanged())); + connect(preferencesDialog->m_BG , SIGNAL(changed(const QColor&)) , this , SLOT(slotSomethingHasChanged())); + + load(); + donttouch=false; +} + +HighlightPreferences::~HighlightPreferences() +{ + delete m_config; +} + +void HighlightPreferences::load() +{ + m_config->load(); + donttouch=true; + preferencesDialog->m_list->clear(); + m_filterItems.clear(); + + QPtrList<Filter> filters=m_config->filters(); + QPtrListIterator<Filter> it( filters ); + Filter *f; + bool first=true; + while ( (f=it.current()) != 0 ) + { + ++it; + QListViewItem* lvi= new QListViewItem(preferencesDialog->m_list); + lvi->setText(0,f->displayName ); + m_filterItems.insert(lvi,f); + if(first) + preferencesDialog->m_list->setSelected(lvi, true); + first=false; + } + donttouch=false; + emit KCModule::changed(false); +} + +void HighlightPreferences::save() +{ + m_config->save(); + emit KCModule::changed(false); +} + + +void HighlightPreferences::slotCurrentFilterChanged() +{ + donttouch=true; + Filter *current; + if(!preferencesDialog->m_list->selectedItem() || !(current=m_filterItems[preferencesDialog->m_list->selectedItem()])) + { + preferencesDialog->m_search->setEnabled(false); + preferencesDialog->m_case->setEnabled(false); + preferencesDialog->m_regexp->setEnabled(false); + preferencesDialog->m_importance->setEnabled(false); + preferencesDialog->m_setImportance->setEnabled(false); + preferencesDialog->m_BG->setEnabled(false); + preferencesDialog->m_setBG->setEnabled(false); + preferencesDialog->m_FG->setEnabled(false); + preferencesDialog->m_setFG->setEnabled(false); + preferencesDialog->m_soundFN->setEnabled(false); + preferencesDialog->m_sound->setEnabled(false); + preferencesDialog->m_raise->setEnabled(false); + preferencesDialog->m_editregexp->setEnabled(false); + preferencesDialog->m_rename->setEnabled(false); + preferencesDialog->m_remove->setEnabled(false); + donttouch=false; + return; + } + + preferencesDialog->m_rename->setEnabled(true); + preferencesDialog->m_remove->setEnabled(true); + + preferencesDialog->m_search->setEnabled(true); + preferencesDialog->m_case->setEnabled(true); + preferencesDialog->m_regexp->setEnabled(true); + preferencesDialog->m_setImportance->setEnabled(true); + preferencesDialog->m_setBG->setEnabled(true); + preferencesDialog->m_setFG->setEnabled(true); + preferencesDialog->m_sound->setEnabled(true); + preferencesDialog->m_raise->setEnabled(true); + + + preferencesDialog->m_search->setText(current->search); + preferencesDialog->m_case->setChecked(current->caseSensitive); + preferencesDialog->m_regexp->setChecked(current->isRegExp); + preferencesDialog->m_editregexp->setEnabled(current->isRegExp); + preferencesDialog->m_importance->setCurrentItem(current->importance); + preferencesDialog->m_setImportance->setChecked(current->setImportance); + preferencesDialog->m_importance->setEnabled(current->setImportance); + preferencesDialog->m_BG->setColor(current->BG); + preferencesDialog->m_setBG->setChecked(current->setBG); + preferencesDialog->m_BG->setEnabled(current->setBG); + preferencesDialog->m_FG->setColor(current->FG); + preferencesDialog->m_setFG->setChecked(current->setFG); + preferencesDialog->m_FG->setEnabled(current->setFG); + preferencesDialog->m_soundFN->setURL(current->soundFN); + preferencesDialog->m_sound->setChecked(current->playSound); + preferencesDialog->m_raise->setChecked(current->raiseView); + preferencesDialog->m_soundFN->setEnabled(current->playSound); + + donttouch=false; +} + +void HighlightPreferences::slotAddFilter() +{ + Filter *filtre=m_config->newFilter(); + QListViewItem* lvi= new QListViewItem(preferencesDialog->m_list); + lvi->setText(0,filtre->displayName ); + m_filterItems.insert(lvi,filtre); + preferencesDialog->m_list->setSelected(lvi, true); +} + +void HighlightPreferences::slotRemoveFilter() +{ + QListViewItem *lvi=preferencesDialog->m_list->selectedItem(); + if(!lvi) + return; + Filter *current=m_filterItems[lvi]; + if(!current) + return; + + m_filterItems.remove(lvi); + delete lvi; + m_config->removeFilter(current); + emit KCModule::changed(true); +} + +void HighlightPreferences::slotRenameFilter() +{ + QListViewItem *lvi=preferencesDialog->m_list->selectedItem(); + if(!lvi) + return; + Filter *current=m_filterItems[lvi]; + if(!current) + return; + + bool ok; + QString newname = KInputDialog::getText( + i18n( "Rename Filter" ), i18n( "Please enter the new name for the filter:" ), current->displayName, &ok ); + if( !ok ) + return; + current->displayName=newname; + lvi->setText(0,newname); + emit KCModule::changed(true); +} + + +void HighlightPreferences::slotSomethingHasChanged() +{ + Filter *current; + if(donttouch || !preferencesDialog->m_list->selectedItem() || !(current=m_filterItems[preferencesDialog->m_list->selectedItem()])) + return; + + current->search=preferencesDialog->m_search->text(); + current->caseSensitive=preferencesDialog->m_case->isChecked(); + current->isRegExp=preferencesDialog->m_regexp->isChecked(); + preferencesDialog->m_editregexp->setEnabled(current->isRegExp); + current->importance=preferencesDialog->m_importance->currentItem(); + current->setImportance=preferencesDialog->m_setImportance->isChecked(); + preferencesDialog->m_importance->setEnabled(current->setImportance); + current->BG=preferencesDialog->m_BG->color(); + current->setBG=preferencesDialog->m_setBG->isChecked(); + preferencesDialog->m_BG->setEnabled(current->setBG); + current->FG=preferencesDialog->m_FG->color(); + current->setFG=preferencesDialog->m_setFG->isChecked(); + preferencesDialog->m_FG->setEnabled(current->setFG); + current->soundFN=preferencesDialog->m_soundFN->url(); + current->playSound=preferencesDialog->m_sound->isChecked(); + preferencesDialog->m_soundFN->setEnabled(current->playSound); + current->raiseView=preferencesDialog->m_raise->isChecked(); + + emit KCModule::changed(true); +} + +void HighlightPreferences::slotEditRegExp() +{ + QDialog *editorDialog = KParts::ComponentFactory::createInstanceFromQuery<QDialog>( "KRegExpEditor/KRegExpEditor" ); + if ( editorDialog ) + { + // kdeutils was installed, so the dialog was found fetch the editor interface + KRegExpEditorInterface *editor = static_cast<KRegExpEditorInterface *>( editorDialog->qt_cast( "KRegExpEditorInterface" ) ); + Q_ASSERT( editor ); // This should not fail! + // now use the editor. + editor->setRegExp(preferencesDialog->m_search->text()); + + // Finally exec the dialog + if(editorDialog->exec() == QDialog::Accepted ) + { + preferencesDialog->m_search->setText(editor->regExp()); + } + + } + else + { + // Don't offer the dialog. + } +} + +#include "highlightpreferences.moc" + +// vim: set noet ts=4 sts=4 sw=4: |