[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