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.
konversation/konversation/src/ignore_preferences.cpp

220 lines
6.4 KiB

/*
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.
*/
/*
Copyright (C) 2006 Dario Abatianni <eisfuchs@tigress.com>
Copyright (C) 2006 John Tapsell <johnflux@gmail.com>
*/
#include "ignore_preferences.h"
#include "ignorelistviewitem.h"
#include "ignore.h"
#include "preferences.h"
#include <klocale.h>
#include <klistview.h>
#include <tqlistview.h>
#include <tqlineedit.h>
#include <tqheader.h>
#include <kapplication.h>
#include <tdeconfig.h>
#include <kdebug.h>
#include <kpushbutton.h>
#include <tqcheckbox.h>
Ignore_Config::Ignore_Config( TQWidget* parent, const char* name, WFlags fl )
: Ignore_ConfigUI( parent, name, fl )
{
connect(newButton,TQT_SIGNAL(clicked()),
this,TQT_SLOT(newIgnore()));
connect(removeButton,TQT_SIGNAL(clicked()),
this,TQT_SLOT(removeIgnore()));
connect(removeAllButton,TQT_SIGNAL(clicked()),
this,TQT_SLOT(removeAllIgnore()));
connect(ignoreListView,TQT_SIGNAL(selectionChanged(TQListViewItem*)),
this,TQT_SLOT(select(TQListViewItem*)));
connect(chkChannel, TQT_SIGNAL(clicked()), this, TQT_SLOT(flagCheckboxChanged()));
connect(chkQuery, TQT_SIGNAL(clicked()), this, TQT_SLOT(flagCheckboxChanged()));
connect(chkNotice, TQT_SIGNAL(clicked()), this, TQT_SLOT(flagCheckboxChanged()));
connect(chkCTCP, TQT_SIGNAL(clicked()), this, TQT_SLOT(flagCheckboxChanged()));
connect(chkDCC, TQT_SIGNAL(clicked()), this, TQT_SLOT(flagCheckboxChanged()));
connect(txtPattern, TQT_SIGNAL(textChanged(const TQString &)), this, TQT_SLOT(flagCheckboxChanged()));
// connect(chkException, TQT_SIGNAL(clicked()), this, TQT_SLOT(flagCheckboxChanged()));
loadSettings();
ignoreListView->header()->setMovingEnabled(false);
}
Ignore_Config::~Ignore_Config()
{
}
void Ignore_Config::newIgnore()
{
ignoreListView->setSelected(new IgnoreListViewItem(ignoreListView,
"new!new@new.new",
Ignore::Channel |
Ignore::Query |
Ignore::Notice |
Ignore::CTCP |
Ignore::DCC), true);
txtPattern->setFocus();
txtPattern->selectAll();
updateEnabledness();
emit modified();
}
void Ignore_Config::removeAllIgnore()
{
ignoreListView->clear();
updateEnabledness();
emit modified();
}
void Ignore_Config::removeIgnore()
{
delete ignoreListView->selectedItem();
updateEnabledness();
emit modified();
}
TQPtrList<Ignore> Ignore_Config::getIgnoreList()
{
TQPtrList<Ignore> newList;
IgnoreListViewItem* item=static_cast<IgnoreListViewItem*>(ignoreListView->firstChild());
while(item)
{
Ignore* newItem=new Ignore(item->text(0),item->getFlags());
newList.append(newItem);
item=item->itemBelow();
}
return newList;
}
// returns the currently visible ignore list as TQStringList to make comparing easy
TQStringList Ignore_Config::currentIgnoreList()
{
TQStringList newList;
IgnoreListViewItem* item=static_cast<IgnoreListViewItem*>(ignoreListView->firstChild());
while(item)
{
newList.append(item->text(0)+' '+item->getFlags());
item=item->itemBelow();
}
return newList;
}
// checks if the currently visible ignore list differs from the currently saved one
bool Ignore_Config::hasChanged()
{
return(m_oldIgnoreList!=currentIgnoreList());
}
void Ignore_Config::restorePageToDefaults()
{
if(ignoreListView->childCount() != 0) {
ignoreListView->clear();
updateEnabledness();
emit modified();
}
}
void Ignore_Config::saveSettings()
{
Preferences::setIgnoreList(getIgnoreList());
// remember the list for hasChanged()
m_oldIgnoreList=currentIgnoreList();
}
void Ignore_Config::loadSettings()
{
TQPtrList<Ignore> ignoreList=Preferences::ignoreList();
// Insert Ignore items backwards to get them sorted properly
Ignore* item=ignoreList.last();
ignoreListView->clear();
while(item)
{
new IgnoreListViewItem(ignoreListView,item->getName(),item->getFlags());
item=ignoreList.prev();
}
// remember the list for hasChanged()
m_oldIgnoreList=currentIgnoreList();
updateEnabledness();
}
void Ignore_Config::updateEnabledness()
{
IgnoreListViewItem* selectedItem=static_cast<IgnoreListViewItem*>(ignoreListView->selectedItem());
chkChannel->setEnabled(selectedItem != NULL);
chkQuery->setEnabled(selectedItem != NULL);
chkNotice->setEnabled(selectedItem != NULL);
chkCTCP->setEnabled(selectedItem != NULL);
chkDCC->setEnabled(selectedItem != NULL);
// chkExceptions->setEnabled(selectedItem != NULL);
txtPattern->setEnabled(selectedItem != NULL);
removeButton->setEnabled(selectedItem != NULL);
removeAllButton->setEnabled(ignoreListView->childCount() > 0);
}
void Ignore_Config::select(TQListViewItem* item)
{
updateEnabledness();
// FIXME: Cast to IgnoreListViewItem, maybe derive from TDEListView some day
IgnoreListViewItem* selectedItem=static_cast<IgnoreListViewItem*>(item);
if(selectedItem)
{
int flags = selectedItem->getFlags();
chkChannel->setChecked(flags & Ignore::Channel);
chkQuery->setChecked(flags & Ignore::Query);
chkNotice->setChecked(flags & Ignore::Notice);
chkCTCP->setChecked(flags & Ignore::CTCP);
chkDCC->setChecked(flags & Ignore::DCC);
txtPattern->blockSignals(true);
txtPattern->setText(selectedItem->getName());
txtPattern->blockSignals(false);
// chkExceptions->setChecked(flags & Ignore::Exception) ;
}
}
void Ignore_Config::flagCheckboxChanged()
{
int flags = 0;
if(chkChannel->isChecked()) flags |= Ignore::Channel;
if(chkQuery->isChecked()) flags |= Ignore::Query;
if(chkNotice->isChecked()) flags |= Ignore::Notice;
if(chkCTCP->isChecked()) flags |= Ignore::CTCP;
if(chkDCC->isChecked()) flags |= Ignore::DCC;
// if(chkExceptions->isChecked()) flags |= Ignore::Exceptions;
IgnoreListViewItem* selectedItem=static_cast<IgnoreListViewItem*>(ignoreListView->selectedItem());
if(selectedItem) {
selectedItem->setFlags(flags);
selectedItem->setName(txtPattern->text());
}
emit modified();
}
/*
* Sets the strings of the subwidgets using the current
* language.
*/
void Ignore_Config::languageChange()
{
loadSettings();
}
#include "ignore_preferences.moc"