[prev in list] [next in list] [prev in thread] [next in thread]
List: kmail-devel
Subject: [PATCH] KMail filters
From: Waldo Bastian <bastian () kde ! org>
Date: 2002-02-25 21:56:37
[Download RAW message or body]
The following patch preserves KMail's filter settings in case the folder
happens to not exists for some reason. Filters involving non-existing folders
are preserved but ignored.
For KDE 3.1 there should probably be a messagebox aded to inform the user
about this. This patch also creates the possibility to enter a non-existing
folder in the combobox. In KDE 3.1 KMail could offer to create such a folder
when that happens.
This would IMO improve the usability of KMail since it would reduce the steps
necassery to create a filter+folder for a mailinglist.
The following patch is for KDE 3.0. Please review.
Cheers,
Waldo
--
Advanced technology only happens when people take a basic idea and add to it.
-- Bob Bemer
["filter.patch" (text/x-diff)]
Index: kmfilter.cpp
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmfilter.cpp,v
retrieving revision 1.43
diff -u -p -r1.43 kmfilter.cpp
--- kmfilter.cpp 2001/12/04 18:43:13 1.43
+++ kmfilter.cpp 2002/02/25 21:49:11
@@ -86,6 +86,9 @@ KMFilter::ReturnCode KMFilter::execActio
QPtrListIterator<KMFilterAction> it( mActions );
for ( it.toFirst() ; it.current() ; ++it ) {
+ if ((*it)->isEmpty())
+ continue;
+
kdDebug(5006) << "####### KMFilter::process: going to apply action "
<< (*it)->label() << " \"" << (*it)->argsAsString()
<< "\"" << endl;
@@ -187,13 +190,8 @@ void KMFilter::readConfig(KConfig* confi
if ( fa ) {
//...load it with it's parameter...
fa->argsFromString( config->readEntry( argsName ) );
- //...check if it's emoty and...
- if ( !fa->isEmpty() )
- //...append it if it's not and...
- mActions.append( fa );
- else
- //...delete is else.
- delete fa;
+ //...append it
+ mActions.append( fa );
}
} else
KMessageBox::information( 0 /* app-global modal dialog box */,
@@ -239,16 +237,6 @@ void KMFilter::writeConfig(KConfig* conf
void KMFilter::purify()
{
mPattern.purify();
-
- if (!bPopFilter) {
- QPtrListIterator<KMFilterAction> it( mActions );
- it.toLast();
- while ( it.current() )
- if ( (*it)->isEmpty() )
- mActions.remove ( (*it) );
- else
- --it;
- }
}
bool KMFilter::isEmpty() const
Index: kmfilteraction.cpp
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmfilteraction.cpp,v
retrieving revision 1.74
diff -u -p -r1.74 kmfilteraction.cpp
--- kmfilteraction.cpp 2002/02/08 11:09:53 1.74
+++ kmfilteraction.cpp 2002/02/25 21:49:12
@@ -201,7 +201,7 @@ KMFilterActionWithFolder::KMFilterAction
QWidget* KMFilterActionWithFolder::createParamWidget( QWidget* parent ) const
{
- KMFolderComboBox *cb = new KMFolderComboBox( parent );
+ KMFolderComboBox *cb = new KMFolderComboBox( true, parent );
cb->showImapFolders( false );
setParamWidgetValue( cb );
return cb;
@@ -210,6 +210,14 @@ QWidget* KMFilterActionWithFolder::creat
void KMFilterActionWithFolder::applyParamWidgetValue( QWidget* paramWidget )
{
mFolder = ((KMFolderComboBox *)paramWidget)->getFolder();
+ if (mFolder)
+ {
+ mFolderName = QString::null;
+ }
+ else
+ {
+ mFolderName = ((KMFolderComboBox *)paramWidget)->currentText();
+ }
}
void KMFilterActionWithFolder::setParamWidgetValue( QWidget* paramWidget ) const
@@ -217,7 +225,7 @@ void KMFilterActionWithFolder::setParamW
if ( mFolder )
((KMFolderComboBox *)paramWidget)->setFolder( mFolder );
else
- clearParamWidget( paramWidget );
+ ((KMFolderComboBox *)paramWidget)->setFolder( mFolderName );
}
void KMFilterActionWithFolder::clearParamWidget( QWidget* paramWidget ) const
@@ -228,6 +236,10 @@ void KMFilterActionWithFolder::clearPara
void KMFilterActionWithFolder::argsFromString( const QString argsStr )
{
mFolder = kernel->folderMgr()->findIdString( argsStr );
+ if (mFolder)
+ mFolderName = QString::null;
+ else
+ mFolderName = argsStr;
}
const QString KMFilterActionWithFolder::argsAsString() const
@@ -236,7 +248,7 @@ const QString KMFilterActionWithFolder::
if ( mFolder )
result = mFolder->idString();
else
- result = "";
+ result = mFolderName;
return result;
}
@@ -244,6 +256,7 @@ bool KMFilterActionWithFolder::folderRem
{
if ( aFolder == mFolder ) {
mFolder = aNewFolder;
+ mFolderName = QString::null;
return TRUE;
} else
return FALSE;
Index: kmfilteraction.h
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmfilteraction.h,v
retrieving revision 1.27
diff -u -p -r1.27 kmfilteraction.h
--- kmfilteraction.h 2001/11/30 10:13:21 1.27
+++ kmfilteraction.h 2002/02/25 21:49:12
@@ -340,7 +340,7 @@ public:
protected:
QGuardedPtr<KMFolder> mFolder;
- QStringList mFolderNames;
+ QString mFolderName;
};
//=========================================================
Index: kmfiltermgr.cpp
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmfiltermgr.cpp,v
retrieving revision 1.40
diff -u -p -r1.40 kmfiltermgr.cpp
--- kmfiltermgr.cpp 2002/01/16 12:43:31 1.40
+++ kmfiltermgr.cpp 2002/02/25 21:49:12
@@ -58,12 +58,7 @@ void KMFilterMgr::readConfig(void)
KConfigGroupSaver saver(config, grpName);
filter = new KMFilter(config, bPopFilter);
filter->purify();
- if ( filter->isEmpty() ) {
- kdDebug(5006) << "KMFilter::readConfig: filter\n" << filter->asString()
- << "is empty!" << endl;
- delete filter;
- } else
- append(filter);
+ append(filter);
}
}
@@ -84,13 +79,11 @@ void KMFilterMgr::writeConfig(bool withS
QPtrListIterator<KMFilter> it(*this);
it.toFirst();
while ( it.current() ) {
- if ( !(*it)->isEmpty() ) {
- grpName.sprintf("%s #%d", group.latin1(), i);
- //grpName.sprintf("Filter #%d", i);
- KConfigGroupSaver saver(config, grpName);
- (*it)->writeConfig(config);
- ++i;
- }
+ grpName.sprintf("%s #%d", group.latin1(), i);
+ //grpName.sprintf("Filter #%d", i);
+ KConfigGroupSaver saver(config, grpName);
+ (*it)->writeConfig(config);
+ ++i;
++it;
}
KConfigGroupSaver saver(config, "General");
Index: kmfoldercombobox.cpp
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmfoldercombobox.cpp,v
retrieving revision 1.8
diff -u -p -r1.8 kmfoldercombobox.cpp
--- kmfoldercombobox.cpp 2002/01/08 02:50:04 1.8
+++ kmfoldercombobox.cpp 2002/02/25 21:49:12
@@ -31,6 +31,7 @@ void KMFolderComboBox::init()
mImapShown = true;
refreshFolders();
connect( this, SIGNAL( activated(int) ), this, SLOT( slotActivated(int) ) );
+ connect( this, SIGNAL( textChanged(const QString &)), this, SLOT( slotTextChanged() ) );
connect( kernel->folderMgr(), SIGNAL(changed()), this, SLOT(refreshFolders()) );
if (mImapShown) connect( kernel->imapFolderMgr(), SIGNAL(changed()), this, SLOT(refreshFolders()) );
}
@@ -94,10 +95,17 @@ void KMFolderComboBox::refreshFolders()
QValueList<QGuardedPtr<KMFolder> > folders;
createFolderList( &names, &folders );
+ QString current;
KMFolder *folder = getFolder();
+ if (!folder)
+ current = currentText();
this->clear();
insertStringList( names );
- setFolder( folder );
+ if (folder)
+ setFolder( folder );
+ else
+ setCurrentText(current);
+
}
//-----------------------------------------------------------------------------
@@ -110,7 +118,9 @@ void KMFolderComboBox::setFolder( KMFold
int idx = folders.findIndex( aFolder );
if (idx == -1)
+ {
idx = folders.findIndex( kernel->draftsFolder() );
+ }
setCurrentItem( idx >= 0 ? idx : 0 );
mFolder = aFolder;
@@ -120,7 +130,15 @@ void KMFolderComboBox::setFolder( const
{
KMFolder *folder = kernel->folderMgr()->findIdString( idString );
if (!folder) folder = kernel->imapFolderMgr()->findIdString( idString );
- setFolder( folder );
+ if (!folder && editable())
+ {
+ mFolder = 0;
+ setCurrentText(idString);
+ }
+ else
+ {
+ setFolder( folder );
+ }
}
//-----------------------------------------------------------------------------
@@ -141,7 +159,9 @@ KMFolder *KMFolderComboBox::getFolder()
return *folders.at( idx );
idx++;
}
-
+ if (editable())
+ return 0;
+
return kernel->draftsFolder();
}
@@ -152,10 +172,16 @@ void KMFolderComboBox::slotActivated(int
QStringList names;
QValueList<QGuardedPtr<KMFolder> > folders;
createFolderList( &names, &folders );
-
- mFolder = *folders.at( index );
- KMFolder *folder = mFolder;
- QString name = folder->name();
+
+ if (index < folders.count())
+ mFolder = *folders.at( index );
+ else
+ mFolder = 0;
+}
+
+void KMFolderComboBox::slotTextChanged()
+{
+ mFolder = 0;
}
//-----------------------------------------------------------------------------
Index: kmfoldercombobox.h
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmfoldercombobox.h,v
retrieving revision 1.5
diff -u -p -r1.5 kmfoldercombobox.h
--- kmfoldercombobox.h 2002/01/08 02:50:04 1.5
+++ kmfoldercombobox.h 2002/02/25 21:49:12
@@ -33,6 +33,7 @@ public slots:
private slots:
void slotActivated(int index);
+ void slotTextChanged();
private:
/** Create folder list using the folder manager. */
_______________________________________________
KMail Developers mailing list
kmail@mail.kde.org
http://mail.kde.org/mailman/listinfo/kmail
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic