class TreeItemBase //: public QListViewItem { public : TreeItemBase( QListView *parent = 0 ): /* QListViewItem( parent ),*/ mFolder( 0 ) {} void setFolder( KMFolder * folder ) { mFolder = folder; }; const KMFolder * folder() { return mFolder; }; // Set the flag which determines if this is an alternate row void setAlternate ( bool alternate ) { mAlternate = alternate; } private: KMFolder * mFolder; bool mAlternate; }; template class SimpleFolderTreeItem : public T, public TreeItemBase { //, TreeItemBase( listView ) public: SimpleFolderTreeItem( QListView * listView ) : T( listView ){} SimpleFolderTreeItem( QListView * listView, QListViewItem * afterListViewItem ) : T( listView, afterListViewItem ) {} SimpleFolderTreeItem( QListViewItem * listViewItem ) : T( listViewItem ) {} SimpleFolderTreeItem( QListViewItem * listViewItem, QListViewItem * afterListViewItem ) : T( listViewItem, afterListViewItem ) {} void setFolder( KMFolder * folder ) { TreeItemBase::setFolder( folder ); } const KMFolder * folder() { return TreeItemBase::folder(); } // Set the flag which determines if this is an alternate row void setAlternate ( bool alternate ) { TreeItemBase::setAlternate( alternate ); } /* private: KMFolder * mFolder; bool mAlternate; */ }; template <> class SimpleFolderTreeItem : public QCheckListItem, public TreeItemBase { public: SimpleFolderTreeItem( QListView * listView ) : QCheckListItem( listView, QString(), CheckBox ), TreeItemBase( listView ) {} SimpleFolderTreeItem( QListView * listView, QListViewItem * afterListViewItem ) : QCheckListItem( listView, afterListViewItem, QString(), CheckBox ), TreeItemBase( listView ) {} SimpleFolderTreeItem( QListViewItem * listViewItem ) : QCheckListItem( listViewItem, QString(), CheckBox ) {} SimpleFolderTreeItem( QListViewItem * listViewItem, QListViewItem * afterListViewItem ) : QCheckListItem( listViewItem, afterListViewItem, QString(), CheckBox ) {} /* void setFolder( KMFolder * folder ) { mFolder = folder; }; const KMFolder * folder() { return mFolder; }; // Set the flag which determines if this is an alternate row void setAlternate ( bool alternate ) { mAlternate = alternate; } private: KMFolder * mFolder; bool mAlternate; */ }; class TreeBase : public KListView { Q_OBJECT public: TreeBase( QWidget * parent, KMFolderTree *folderTree, const QString &preSelection, bool mustBeReadWrite ); ........ }; void TreeBase::recolorRows() { kdDebug(5006) << k_funcinfo << endl; // Iterate through the list to set the alternate row flags. int alt = 0; QListViewItemIterator it ( this ); while ( it.current() ) { QListViewItem * item = it.current() ; if ( item->isVisible() ) { bool visible = true; QListViewItem * parent = item->parent(); while ( parent ) { if (!parent->isOpen()) { visible = false; break; } parent = parent->parent(); } if ( visible ) { TreeBase * treeItemBase = dynamic_cast( it.current() ); treeItemBase->setAlternate( alt ); alt = !alt; } } ++it; } }