[prev in list] [next in list] [prev in thread] [next in thread]
List: kmail-devel
Subject: Bug#32745: Refreshable folder-list in "move to" filter action
From: Ronen Tzur <rtzur () shani ! net>
Date: 2001-10-31 22:44:32
[Download RAW message or body]
Hello.
This patch replaces the combo box in the "move to folder" filter action with
a specialized widgets that is refreshed whenever the folder list changes.
This means adding/removing/renaming/moving/whatever a folder automatically
appears in the Configure Filters dialog box without having to close and
re-open it.
The patch adds two files to the source directory that implement the new
widget (KMFolderComboBox), and also includes changes to the
KMFilterActionWithFolder class to use the new widget instead of a plain
QComboBox. Missing in the patch are modifications to Makefile.am to include
the new kmfoldercombobox.cpp file.
I have not tested it extensively, but it does seem to work. I'd appreciate
any feedback.
tzuk
["kmail-filter.patch" (text/x-diff)]
diff -u --new-file Old3/kmfilteraction.cpp New3/kmfilteraction.cpp
--- Old3/kmfilteraction.cpp Thu Nov 1 00:35:32 2001
+++ New3/kmfilteraction.cpp Thu Nov 1 00:35:02 2001
@@ -17,6 +17,7 @@
#include "kmidentity.h"
#include "kfileio.h"
#include "kmfawidgets.h"
+#include "kmfoldercombobox.h"
#include <kregexp3.h>
#include <kstddirs.h>
@@ -203,37 +204,25 @@
QWidget* KMFilterActionWithFolder::createParamWidget( QWidget* parent ) const
{
- QStringList names;
- QValueList<QGuardedPtr<KMFolder> > folders;
- kernel->folderMgr()->createI18nFolderList( &names, &folders );
-
- QComboBox *cb = new QComboBox( FALSE, parent );
- cb->insertStringList( names );
+ KMFolderComboBox *cb = new KMFolderComboBox( FALSE, parent );
setParamWidgetValue( cb );
+ QObject::connect( kernel->folderMgr(), SIGNAL(changed()), cb, SLOT(refreshFolders()) );
return cb;
}
void KMFilterActionWithFolder::applyParamWidgetValue( QWidget* paramWidget )
{
- QStringList names;
- QValueList<QGuardedPtr<KMFolder> > folders;
- kernel->folderMgr()->createFolderList( &names, &folders );
- // let's hope that QValueListIterator::operator*(QValueList::end()) == NULL.
- mFolder = *folders.at( ((QComboBox*)paramWidget)->currentItem() );
+ mFolder = ((KMFolderComboBox *)paramWidget)->getFolder();
}
void KMFilterActionWithFolder::setParamWidgetValue( QWidget* paramWidget ) const
{
- QStringList names;
- QValueList<QGuardedPtr<KMFolder> > folders;
- kernel->folderMgr()->createFolderList( &names, &folders );
- int idx = folders.findIndex( mFolder );
- ((QComboBox*)paramWidget)->setCurrentItem( idx >= 0 ? idx : 0 );
+ ((KMFolderComboBox *)paramWidget)->setFolder( mFolder );
}
void KMFilterActionWithFolder::clearParamWidget( QWidget* paramWidget ) const
{
- ((QComboBox*)paramWidget)->setCurrentItem( 0 );
+ ((KMFolderComboBox *)paramWidget)->setFolder( 0 );
}
void KMFilterActionWithFolder::argsFromString( const QString argsStr )
diff -u --new-file Old3/kmfoldercombobox.cpp New3/kmfoldercombobox.cpp
--- Old3/kmfoldercombobox.cpp Thu Jan 1 02:00:00 1970
+++ New3/kmfoldercombobox.cpp Thu Nov 1 00:35:14 2001
@@ -0,0 +1,65 @@
+/* kmail folder-list combo-box */
+
+#include <qcombobox.h>
+#include <qstringlist.h>
+#include <qguardedptr.h>
+
+#include "kmfoldercombobox.h"
+#include "kmkernel.h"
+#include "kmfoldermgr.h"
+
+//-----------------------------------------------------------------------------
+
+KMFolderComboBox::KMFolderComboBox( QWidget *parent = 0, char *name = 0 )
+ : QComboBox( parent, name )
+{
+ refreshFolders();
+}
+
+KMFolderComboBox::KMFolderComboBox( bool rw, QWidget *parent = 0, char *name = 0 )
+ : QComboBox( rw, parent, name )
+{
+ refreshFolders();
+}
+
+//-----------------------------------------------------------------------------
+
+void KMFolderComboBox::refreshFolders()
+{
+ QStringList names;
+ QValueList<QGuardedPtr<KMFolder> > folders;
+ kernel->folderMgr()->createI18nFolderList( &names, &folders );
+
+ this->clear();
+ insertStringList( names );
+}
+
+//-----------------------------------------------------------------------------
+
+void KMFolderComboBox::setFolder( KMFolder *aFolder )
+{
+ int idx = 0;
+ if (aFolder) {
+ QStringList names;
+ QValueList<QGuardedPtr<KMFolder> > folders;
+ kernel->folderMgr()->createFolderList( &names, &folders );
+ idx = folders.findIndex( aFolder );
+ }
+ setCurrentItem( idx >= 0 ? idx : 0 );
+}
+
+//-----------------------------------------------------------------------------
+
+KMFolder *KMFolderComboBox::getFolder()
+{
+ QStringList names;
+ QValueList<QGuardedPtr<KMFolder> > folders;
+ kernel->folderMgr()->createFolderList( &names, &folders );
+ // let's hope that QValueListIterator::operator*(QValueList::end()) == NULL.
+ KMFolder *folder = *folders.at( currentItem() );
+ return folder;
+}
+
+//-----------------------------------------------------------------------------
+
+#include "kmfoldercombobox.moc"
diff -u --new-file Old3/kmfoldercombobox.h New3/kmfoldercombobox.h
--- Old3/kmfoldercombobox.h Thu Jan 1 02:00:00 1970
+++ New3/kmfoldercombobox.h Thu Nov 1 00:35:16 2001
@@ -0,0 +1,26 @@
+/* kmail folder-list combo-box */
+
+#ifndef __KMFOLDERCOMBOBOX
+#define __KMFOLDERCOMBOBOX
+
+#include <qcombobox.h>
+
+#include "kmfolder.h"
+
+class KMFolderComboBox : public QComboBox
+{
+ Q_OBJECT
+
+public:
+ KMFolderComboBox( QWidget *parent = 0, char *name = 0 );
+ KMFolderComboBox( bool rw, QWidget *parent = 0, char *name = 0 );
+
+ void setFolder( KMFolder *aFolder );
+ KMFolder *getFolder();
+
+public slots:
+ /** Refresh list of folders in the combobox. */
+ void refreshFolders();
+};
+
+#endif /* __KMFOLDERCOMBOBOX */
_______________________________________________
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