From 49dfb55bd22f5027fcbcbc55648efd4bce6c8fd6 Mon Sep 17 00:00:00 2001 From: mickeyl Date: Thu, 01 May 2003 23:06:29 +0000 Subject: more work on a higher level listview interface --- (limited to 'libopie2/opieui') diff --git a/libopie2/opieui/olistview.cpp b/libopie2/opieui/olistview.cpp index 8f97cc6..8f290d3 100644 --- a/libopie2/opieui/olistview.cpp +++ b/libopie2/opieui/olistview.cpp @@ -466,6 +466,68 @@ void ONamedListView::addColumns( const QStringList& columns ) } +int ONamedListView::findColumn( const QString& text ) const +{ + //FIXME: If used excessively, this will slow down performance of updates + //FIXME: because of the linear search over all column texts. + //FIXME: I will optimize later by using a hash map. + for ( int i = 0; i < columns(); ++i ) + if ( columnText( i ) == text ) + return i; + return -1; +} + + +ONamedListViewItem* ONamedListView::find( int column, const QString& text, int recurse ) const +{ + return find( (ONamedListViewItem*) firstChild(), column, text, recurse ); +} + + +ONamedListViewItem* ONamedListView::find( ONamedListViewItem* item, int column, const QString& text, int recurse ) const +{ + ONamedListViewItem* result; + while ( item && item->text( column ) != text ) + { + qDebug( "checked %s", (const char*) item->text( column ) ); + + if ( recurse < 0 || recurse > 0 ) + { + qDebug( "recursion is %d - recursing into...", recurse ); + result = find( (ONamedListViewItem*) item->firstChild(), column, text, recurse-1 ); + if ( result ) return result; + } + + + item = (ONamedListViewItem*) item->itemBelow(); + } + if ( item && item->text( column ) == text ) + return item; + else + return 0; +} + + +ONamedListViewItem* ONamedListView::find( const QString& column, const QString& text, int recurse ) const +{ + int col = findColumn( column ); + if ( col != -1 ) + return find( (ONamedListViewItem*) firstChild(), col, text, recurse ); + else + return 0; +} + + +ONamedListViewItem* ONamedListView::find( ONamedListViewItem* item, const QString& column, const QString& text, int recurse ) const +{ + int col = findColumn( column ); + if ( col != -1 ) + return find( item, col, text, recurse ); + else + return 0; +} + + /*====================================================================================== * ONamedListViewItem *======================================================================================*/ @@ -520,13 +582,26 @@ void ONamedListViewItem::setText( const QString& column, const QString& text ) //FIXME: If used excessively, this will slow down performance of updates //FIXME: because of the linear search over all column texts. //FIXME: I will optimize later by using a hash map. - for ( int i = 0; i < listView()->columns(); ++i ) - { - if ( listView()->columnText( i ) == column ) - { - OListViewItem::setText( i, text ); - return; - } - } - qWarning( "ONamedListViewItem::setText(): Warning! Columntext '%s' not found.", (const char*) column ); + int col = ( (ONamedListView*) listView() )->findColumn( column ); + if ( col != -1 ) + OListViewItem::setText( col, text ); + else + qWarning( "ONamedListViewItem::setText(): Warning! Columntext '%s' not found.", (const char*) column ); +} + + +ONamedListViewItem* ONamedListViewItem::find( int column, const QString& text, int recurse ) const +{ + return ( (ONamedListView*) listView() )->find( (ONamedListViewItem*) firstChild(), column, text, recurse ); } + + +ONamedListViewItem* ONamedListViewItem::find( const QString& column, const QString& text, int recurse ) const +{ + int col = ( (ONamedListView*) listView() )->findColumn( column ); + if ( col != -1 ) + return ( (ONamedListView*) listView() )->find( (ONamedListViewItem*) firstChild(), col, text, recurse ); + else + return 0; +} + diff --git a/libopie2/opieui/olistview.h b/libopie2/opieui/olistview.h index 99770bf..1bbdd5b 100644 --- a/libopie2/opieui/olistview.h +++ b/libopie2/opieui/olistview.h @@ -241,10 +241,12 @@ QDataStream& operator>>( QDataStream& stream, OListViewItem& item ); * ONamedListView *======================================================================================*/ +class ONamedListViewItem; + /** * @brief An OListView variant with named columns. * - * This class provides a higher-level interface to the columns in an OListView. + * This class provides a higher-level interface to an OListView. * * @author Michael 'Mickey' Lauer */ @@ -266,6 +268,24 @@ class ONamedListView: public OListView * Add a number of @a columns to the listview. */ virtual void addColumns( const QStringList& columns ); + /** + * @returns the column index matching to @a text or -1 if not found. + */ + virtual int findColumn( const QString& text ) const; + /** + * @returns the first item which has a @a text in column @a column. + * Set @a recurse to indicate how much subchild levels to search, e.g. + * @sa ONamedListViewItem::find() + */ + virtual ONamedListViewItem* find( ONamedListViewItem* start, int column, const QString& text, int recurse = -1 ) const; + virtual ONamedListViewItem* find( int column, const QString& text, int recurse = -1 ) const; + + virtual ONamedListViewItem* find( ONamedListViewItem* start, const QString& column, const QString& text, int recurse = -1 ) const; + virtual ONamedListViewItem* find( const QString& column, const QString& text, int recurse = -1 ) const; }; /*====================================================================================== @@ -275,7 +295,7 @@ class ONamedListView: public OListView /** * @brief An OListView variant with named columns. * - * This class provides a higher-level interface to the columns in an OListViewItem. + * This class provides a higher-level interface to an OListViewItem. * * @author Michael 'Mickey' Lauer */ @@ -304,6 +324,17 @@ class ONamedListViewItem: public OListViewItem * Sets a number of @a texts for this item. */ virtual void setText( const QStringList& texts ); + /** + * @returns the first child which has a @a text in column @a column. + * Set @a recurse to indicate how much subchild levels to search, e.g.
    + *
  • set it to 0 to search only among direct childs, + *
  • set it to 1 to search direct childs and all 1st order subchilds + *
  • set it to -1 for maximum recursion. + *
+ * @sa ONamedListView::find() + */ + virtual ONamedListViewItem* find( int column, const QString& text, int recurse = -1 ) const; + virtual ONamedListViewItem* find( const QString& column, const QString& text, int recurse = -1 ) const; }; -- cgit v0.9.0.2