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

List:       kde-commits
Subject:    branches/kdepim/enterprise/kdepim/libkdepim
From:       Allen Winter <winter () kde ! org>
Date:       2010-04-28 16:59:14
Message-ID: 20100428165914.249CDAC8A5 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1120219 by winterz:

hide/show the distribution lists depending on the filtering result.

also, always keep the tree as open as possible.. i'm sorry, but I can't
see the reason for closing the tree nodes all the time.
let's see if anyone screams about this behaviour.

kolab/issue4256
MERGE: trunk (btw: tokoe removed addressesdialog today in trunk)



 M  +61 -16    addressesdialog.cpp  


--- branches/kdepim/enterprise/kdepim/libkdepim/addressesdialog.cpp #1120218:1120219
@@ -77,6 +77,8 @@
 
   AddresseeViewItem           *personal;
   AddresseeViewItem           *recent;
+  AddresseeViewItem           *topdist;
+  QPtrList<AddresseeViewItem> dists;
 
   AddresseeViewItem           *toItem;
   AddresseeViewItem           *ccItem;
@@ -334,6 +336,7 @@
     addAddresseeToAvailable( *it, d->recent );
 
   if ( d->recent->childCount() > 0 ) {
+    d->recent->setOpen( true );
     d->recent->setVisible( true );
   }
 }
@@ -475,8 +478,10 @@
   d->recent = 0;
   updateRecentAddresses();
 
+  d->topdist = 0;
   addDistributionLists();
   if ( d->personal->childCount() > 0 ) {
+    d->personal->setOpen( true );
     d->personal->setVisible( true );
   }
 
@@ -727,10 +732,9 @@
   addAddresseesToSelected( d->toItem, selectedAvailableAddresses );
   selectedAvailableAddresses.clear();
 
-  if ( d->toItem->childCount() > 0 )
+  if ( d->toItem->childCount() > 0 ) {
     d->toItem->setVisible( true );
-  else
-  {
+  } else {
     delete d->toItem;
     d->toItem = 0;
   }
@@ -749,10 +753,9 @@
   addAddresseesToSelected( d->ccItem, selectedAvailableAddresses );
   selectedAvailableAddresses.clear();
 
-  if ( d->ccItem->childCount() > 0 )
+  if ( d->ccItem->childCount() > 0 ) {
     d->ccItem->setVisible( true );
-  else
-  {
+  } else {
     delete d->ccItem;
     d->ccItem = 0;
   }
@@ -771,10 +774,9 @@
   addAddresseesToSelected( d->bccItem, selectedAvailableAddresses );
   selectedAvailableAddresses.clear();
 
-  if ( d->bccItem->childCount() > 0 )
+  if ( d->bccItem->childCount() > 0 ) {
     d->bccItem->setVisible( true );
-  else
-  {
+  } else {
     delete d->bccItem;
     d->bccItem = 0;
   }
@@ -984,13 +986,16 @@
 
   int personalVisible = 0;
   int recentVisible = 0;
+  int distlistVisible = 0;
   while ( it.current() ) {
     AddresseeViewItem* item = static_cast<AddresseeViewItem*>( it.current() );
     ++it;
     if ( showAll ) {
+      item->setOpen( true );
       item->setVisible( true );
-      if ( item->category() == AddresseeViewItem::Group )
-        item->setOpen( false );//close to not have too many entries
+      // allen: I do not like the following behavior. comment out and see if anyone screams
+      //if ( item->category() == AddresseeViewItem::Group )
+      //  item->setOpen( false );//close to not have too many entries
       continue;
     }
     if ( item->category() == AddresseeViewItem::Entry ) {
@@ -1001,8 +1006,10 @@
         parent->setOpen( true );//open the parents with found entries
         if ( parent == d->personal ) {
           personalVisible++;
-        } else {
+        } else if ( parent == d->recent ) {
           recentVisible++;
+        } else { // distlist
+          distlistVisible++;
         }
       }
     }
@@ -1014,7 +1021,32 @@
   if ( !showAll && recentVisible == 0 ) {
     d->recent->setVisible( false );
   }
+  if ( !showAll ) {
+    if ( distlistVisible == 0 ) {
+      d->topdist->setVisible( false );
+    } else {
+      QPtrListIterator<AddresseeViewItem> it( d->dists );
+      for ( ; it.current(); ++it ) {
+        QListViewItem *p = *it;
+        p->setVisible( true );
+        AddresseeViewItem *p2 = static_cast<AddresseeViewItem*>( p->firstChild() );
+        int pcount = 0;
+        while ( p2 ) {
+          if ( p2->matches( txt ) ) {
+            p2->setVisible( true );
+            pcount++;
+          } else {
+            p2->setVisible( false );
 }
+          p2 = static_cast<AddresseeViewItem*>( p2->nextSibling() );
+        }
+        if ( !pcount ) {
+          p->setVisible( false );
+        }
+      }
+    }
+  }
+}
 
 KABC::Addressee::List
 AddressesDialog::allAddressee( KListView* view, bool onlySelected ) const
@@ -1102,14 +1134,16 @@
   if ( distLists.isEmpty() )
     return;
 
-  AddresseeViewItem *topItem = new AddresseeViewItem( d->ui->mAvailableView,
-                                                      i18n( "Distribution Lists" ) );
+  if ( !d->topdist ) {
+    d->topdist = new AddresseeViewItem( d->ui->mAvailableView, i18n( "Distribution Lists" ) );
+  }
 
 #ifdef KDEPIM_NEW_DISTRLISTS
   QValueList<KPIM::DistributionList>::ConstIterator listIt;
 #else
   QStringList::Iterator listIt;
 #endif
+  int total = 0;
   for ( listIt = distLists.begin(); listIt != distLists.end(); ++listIt ) {
 #ifdef KDEPIM_NEW_DISTRLISTS
     KPIM::DistributionList dlist = *listIt;
@@ -1119,7 +1153,8 @@
     KABC::DistributionList::Entry::List entries = dlist.entries();
 #endif
 
-    AddresseeViewItem *item = new AddresseeViewItem( topItem, dlist.name() );
+    AddresseeViewItem *item = new AddresseeViewItem( d->topdist, dlist.name() );
+    d->dists.append( item );
     connect( item, SIGNAL( addressSelected( AddresseeViewItem*, bool ) ),
              this, SLOT( availableAddressSelected( AddresseeViewItem*, bool ) ) );
 
@@ -1128,10 +1163,20 @@
 #else
     KABC::DistributionList::Entry::List::Iterator itemIt;
 #endif
-    for ( itemIt = entries.begin(); itemIt != entries.end(); ++itemIt )
+    for ( itemIt = entries.begin(); itemIt != entries.end(); ++itemIt ) {
       addAddresseeToAvailable( (*itemIt).addressee, item, false );
   }
+    if ( item->childCount() > 0 ) {
+      item->setOpen( true );
+      item->setVisible( true );
 }
+    total += item->childCount();
+  }
+  if ( total > 0 ) {
+    d->topdist->setOpen( true );
+    d->topdist->setVisible( true );
+  }
+}
 
 } // namespace
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic