[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kmail-devel
Subject:    [Patch] Updated threading patch
From:       Matt Newell <newellm () proaxis ! com>
Date:       2001-01-31 2:29:26
[Download RAW message or body]

This patch fixes the two issues that you described earlier.

Matt Newell

["thread2.diff" (text/x-diff)]

Common subdirectories: kmail/.deps and threadkmail/.deps
Common subdirectories: kmail/CVS and threadkmail/CVS
diff -u kmail/configuredialog.cpp threadkmail/configuredialog.cpp
--- kmail/configuredialog.cpp	Mon Jan 29 19:25:08 2001
+++ threadkmail/configuredialog.cpp	Tue Jan 30 16:47:09 2001
@@ -849,10 +849,23 @@
     new QCheckBox( i18n("Display message sizes"), page3 );
   vlay->addWidget( mAppearance.messageSizeCheck );
 
-  mAppearance.nestedMessagesCheck =
+   mAppearance.nestedMessagesCheck =
     new QCheckBox( i18n("Thread list of message headers"), page3 );
   vlay->addWidget( mAppearance.nestedMessagesCheck );
 
+  QButtonGroup *threadGroup = new QButtonGroup( i18n("Message header threading \
options"), page3 ); +  vlay->addWidget( threadGroup );
+  QVBoxLayout * vthread = new QVBoxLayout( threadGroup, spacingHint() );
+  vthread->addSpacing( fontMetrics().lineSpacing() );
+  mAppearance.rdAlwaysOpen = new QRadioButton( i18n("Always keep threads open"), \
threadGroup ); +  vthread->addWidget( mAppearance.rdAlwaysOpen );
+  mAppearance.rdDefaultOpen = new QRadioButton( i18n("Threads default to open"), \
threadGroup ); +  vthread->addWidget( mAppearance.rdDefaultOpen );
+  mAppearance.rdDefaultClosed = new QRadioButton( i18n("Threads default to closed"), \
threadGroup ); +  vthread->addWidget( mAppearance.rdDefaultClosed );
+  mAppearance.rdUnreadOpen = new QRadioButton( i18n("Open threads that contain new \
or unread messages"), threadGroup ); +  vthread->addWidget( mAppearance.rdUnreadOpen \
); +
   QButtonGroup *group = new QButtonGroup( i18n("HTML"), page3 );
   vlay->addWidget( group );
   QVBoxLayout *vlay2 = new QVBoxLayout( group, spacingHint() );
@@ -1499,6 +1512,24 @@
   state = config.readBoolEntry( "nestedMessages", false );
   mAppearance.nestedMessagesCheck->setChecked( state );
 
+  switch( config.readNumEntry( "nestingPolicy", 3 ) )
+  {
+  case 0:
+     mAppearance.rdAlwaysOpen->setChecked( true );
+     break;
+  case 1:
+     mAppearance.rdDefaultOpen->setChecked( true );
+     break;
+  case 2:
+     mAppearance.rdDefaultClosed->setChecked( true );
+     break;
+  case 3:
+     mAppearance.rdUnreadOpen->setChecked( true );
+     break;
+  default:
+     mAppearance.rdUnreadOpen->setChecked( true );
+     break;
+  }
   config.setGroup("Reader");
   state = config.readBoolEntry( "htmlMail", false );
   mAppearance.htmlMailCheck->setChecked( !state );
@@ -1955,6 +1986,16 @@
 
     bool nestedMessages = mAppearance.nestedMessagesCheck->isChecked();
     config.writeEntry( "nestedMessages", nestedMessages );
+
+    int threadPolicy = 3;
+    if( mAppearance.rdAlwaysOpen->isChecked() )
+       threadPolicy = 0;
+    else if( mAppearance.rdDefaultOpen->isChecked() )
+       threadPolicy = 1;
+    else if( mAppearance.rdDefaultClosed->isChecked() )
+       threadPolicy = 2;
+
+    config.writeEntry( "nestingPolicy", threadPolicy );
 
     config.setGroup("Reader");
     bool htmlMail = mAppearance.htmlMailCheck->isChecked();
diff -u kmail/configuredialog.h threadkmail/configuredialog.h
--- kmail/configuredialog.h	Mon Jan 29 19:25:08 2001
+++ threadkmail/configuredialog.h	Tue Jan 30 16:47:09 2001
@@ -293,6 +293,10 @@
       QCheckBox     *longFolderCheck;
       QCheckBox     *messageSizeCheck;
       QCheckBox     *nestedMessagesCheck;
+      QRadioButton  *rdAlwaysOpen;
+      QRadioButton  *rdDefaultOpen;
+      QRadioButton  *rdDefaultClosed;
+      QRadioButton  *rdUnreadOpen;
       QCheckBox     *htmlMailCheck;
       int           activeFontIndex;
       QFont         font[6];
diff -u kmail/kmfolder.cpp threadkmail/kmfolder.cpp
--- kmail/kmfolder.cpp	Mon Jan 29 19:25:08 2001
+++ threadkmail/kmfolder.cpp	Tue Jan 30 16:47:10 2001
@@ -1520,7 +1520,6 @@
     relativePath = relativePath.right( relativePath.length() - 1 ) + "/";
   return relativePath + QString(name());
 }
-
 //-----------------------------------------------------------------------------
 void KMFolder::readConfig()
 {
diff -u kmail/kmheaders.cpp threadkmail/kmheaders.cpp
--- kmail/kmheaders.cpp	Mon Jan 29 19:25:08 2001
+++ threadkmail/kmheaders.cpp	Tue Jan 30 18:26:46 2001
@@ -120,6 +120,11 @@
     KMMsgStatus flag;
     QString fromStr, subjStr;
     KMMsgBase *mMsgBase = mFolder->getMsgBase( mMsgId );
+    KMHeaderItem * topOfThread = this;
+    int threadingPolicy = ((KMHeaders*)listView())->getNestingPolicy();
+    while(topOfThread->parent())
+    	topOfThread = (KMHeaderItem*)topOfThread->parent();
+
     if(mMsgBase==NULL)
        return;
 
@@ -147,15 +152,20 @@
       setText( mPaintInfo->sizeCol, QString( "%1" ).arg( mMsgBase->msgSize()));
 
     mColor = &mPaintInfo->colFore;
+
     switch (flag)
     {
     case KMMsgStatusNew:
       setPixmap( 0, *KMHeaders::pixNew );
       mColor = &mPaintInfo->colNew;
+      if(threadingPolicy==3)
+         threadingPolicy=1;
       break;
     case KMMsgStatusUnread:
       setPixmap( 0, *KMHeaders::pixUns );
       mColor = &mPaintInfo->colUnread;
+      if(threadingPolicy==3)
+         threadingPolicy=1;
       break;
     case KMMsgStatusDeleted:
       setPixmap( 0, *KMHeaders::pixDel );
@@ -177,6 +187,9 @@
       break;
     };
 
+    if(threadingPolicy < 2)
+       topOfThread->setOpen( true );
+
     mSortArrival = QString( "%1" ).arg( mMsgId, 8, 36 );
 
     const int dateLength = 30;
@@ -205,6 +218,21 @@
     mColor = c;
     repaint();
   }
+  //Opens all children in the thread
+  void setOpen( bool open )
+  {
+  	if(open){
+		QListViewItem * lvchild;
+        lvchild = firstChild();
+        while(lvchild){
+        	lvchild->setOpen( true );
+            lvchild = lvchild->nextSibling();
+		}
+		QListViewItem::setOpen( true );
+	}else
+		QListViewItem::setOpen( false );
+  }
+
 
   void paintCell( QPainter * p, const QColorGroup & cg,
 				int column, int width, int align )
@@ -276,6 +304,7 @@
   setMultiSelection( TRUE );
   setAllColumnsShowFocus( TRUE );
   mNested = false;
+  nestingPolicy = 3;
   mNestedOverride = false;
   mousePressed = FALSE;
 
@@ -441,11 +470,22 @@
 void KMHeaders::refreshNestedState(void)
 {
   bool oldState = mNested;
+  int oldNestPolicy = nestingPolicy;
   KConfig* config = kapp->config();
   config->setGroup("Geometry");
   mNested = config->readBoolEntry( "nestedMessages", FALSE );
-  if (oldState != mNested)
+
+  nestingPolicy = config->readNumEntry( "nestingPolicy", 3 );
+  if ((nestingPolicy!=oldNestPolicy)||(oldState != mNested))
+  {
+    if( (nestingPolicy == 0)||(!mNested) )
+      setRootIsDecorated( false );
+    else
+      setRootIsDecorated( mNestedOverride||mNested );
+
     reset();
+  }
+
 }
 
 //-----------------------------------------------------------------------------
@@ -480,6 +520,13 @@
 
   config->setGroup("Geometry");
   mNested = config->readBoolEntry( "nestedMessages", FALSE );
+  nestingPolicy = config->readNumEntry( "nestingPolicy", 3 );
+
+  if( (nestingPolicy == 0)||(!mNested) )
+     setRootIsDecorated( false );
+  else
+     setRootIsDecorated( mNestedOverride||mNested );
+
 }
 
 
@@ -705,10 +752,10 @@
     if (replyToId.isEmpty() || !mIdTree[replyToId])
       hi = new KMHeaderItem( this, mFolder, id, &mPaintInfo );
     else {
+
       KMHeaderItem *parent = mIdTree[replyToId];
       assert(parent);
       hi = new KMHeaderItem( parent, mFolder, id, &mPaintInfo );
-      parent->setOpen( true );
     }
     if (!mIdTree[msgId])
       mIdTree.replace( msgId, hi );
@@ -1711,7 +1758,6 @@
     recursivelyAddChildren( *it, hi );
   }
 
-  parent->setOpen( true );
 }
 
 
@@ -1964,8 +2010,8 @@
     mousePressed = TRUE;
     if (!(lvi->isSelected())) {
       clearSelection();
-      KMHeadersInherited::contentsMousePressEvent(e);
     }
+    KMHeadersInherited::contentsMousePressEvent(e);
   }
   else if ((e->button() == LeftButton) && (e->state() & ShiftButton)) {
     if (!shiftSelection( beginSelection, lvi ))
@@ -2179,8 +2225,8 @@
 //-----------------------------------------------------------------------------
 void KMHeaders::setOpen( QListViewItem *item, bool open )
 {
-  if (open)
-    KMHeadersInherited::setOpen( item, open );
+	if( (nestingPolicy) || open )
+   	KMHeadersInherited::setOpen( item, open );
 }
 
 //-----------------------------------------------------------------------------
diff -u kmail/kmheaders.h threadkmail/kmheaders.h
--- kmail/kmheaders.h	Mon Jan 29 19:25:08 2001
+++ threadkmail/kmheaders.h	Tue Jan 30 16:47:10 2001
@@ -142,6 +142,7 @@
   // Double force items to always be open
   virtual void setOpen ( QListViewItem *, bool );
 
+  int getNestingPolicy(){ return nestingPolicy; }
 signals:
   // emitted when the list view item corresponding to this message
   // has been selected
@@ -256,6 +257,7 @@
   QDict< bool > mTreeSeen;
   QDict< bool > mTreeToplevel;
   bool mNested, mNestedOverride;
+  int nestingPolicy;
 
   static bool mTrue, mFalse;    // These must replaced by something better!
 
Common subdirectories: kmail/pics and threadkmail/pics


_______________________________________________
Kmail Developers mailing list
Kmail@master.kde.org
http://master.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