summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/examples/opieui/olistviewdemo/olistviewdemo.cpp26
-rw-r--r--libopie2/opienet/onetwork.h5
-rw-r--r--libopie2/opieui/olistview.cpp93
-rw-r--r--libopie2/opieui/olistview.h35
4 files changed, 148 insertions, 11 deletions
diff --git a/libopie2/examples/opieui/olistviewdemo/olistviewdemo.cpp b/libopie2/examples/opieui/olistviewdemo/olistviewdemo.cpp
index 31bda9d..5ba7b69 100644
--- a/libopie2/examples/opieui/olistviewdemo/olistviewdemo.cpp
+++ b/libopie2/examples/opieui/olistviewdemo/olistviewdemo.cpp
@@ -42,4 +42,5 @@ OListViewDemo::OListViewDemo( QWidget* parent, const char* name, WFlags f )
{
lv = new ONamedListView( this );
+ lv->setRootIsDecorated( true );
lv->addColumns( QStringList::split( ' ', "Column1 Column2 Column3 Column4" ) );
@@ -47,4 +48,29 @@ OListViewDemo::OListViewDemo( QWidget* parent, const char* name, WFlags f )
item->setText( "Column2", "ModifiedText" );
item->setText( "Column5", "ThisColumnDoesNotExits" );
+
+ new ONamedListViewItem( lv, QStringList::split( ' ', "Text1 Text2 Text3 Text4" ) );
+ new ONamedListViewItem( lv, QStringList::split( ' ', "Text1 Text2 Text3 Text4" ) );
+ new ONamedListViewItem( lv, QStringList::split( ' ', "Text1 Text2 Text3 Minni" ) );
+ item = new ONamedListViewItem( lv, QStringList::split( ' ', "XXX YYY ZZZ ***" ) );
+ new ONamedListViewItem( lv, QStringList::split( ' ', "Text1 Text2 Text3 Text4" ) );
+ new ONamedListViewItem( lv, QStringList::split( ' ', "Text1 Text2 Text3 Text4" ) );
+
+ new ONamedListViewItem( item, QStringList::split( ' ', "SubText1 Text2 Text3 Text4" ) );
+ new ONamedListViewItem( item, QStringList::split( ' ', "SubText1 Text2 Text3 Text4" ) );
+ new ONamedListViewItem( item, QStringList::split( ' ', "SubText1 Text2 Text3 Text4" ) );
+ item = new ONamedListViewItem( item, QStringList::split( ' ', "Text1 Text2 Text3 HereItComes" ) );
+ item = new ONamedListViewItem( item, QStringList::split( ' ', "Text1 Text2 Text3 HereItComesSoon" ) );
+ item = new ONamedListViewItem( item, QStringList::split( ' ', "Text1 Text2 Text3 Mickey" ) );
+
+ if ( lv->find( 3, "Mickey", 3 ) )
+ qDebug( "found Mickey :-)" );
+ else
+ qDebug( "did not found Mickey :-(" );
+
+ if ( lv->find( 3, "Minni", 0 ) )
+ qDebug( "found Minni :-)" );
+ else
+ qDebug( "did not found Minni :-(" );
+
}
diff --git a/libopie2/opienet/onetwork.h b/libopie2/opienet/onetwork.h
index a29b29d..1b38d02 100644
--- a/libopie2/opienet/onetwork.h
+++ b/libopie2/opienet/onetwork.h
@@ -77,4 +77,5 @@ class OMonitoringInterface;
*
* This class provides access to all available network interfaces of your computer.
+ *
* @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
*/
@@ -138,4 +139,5 @@ class ONetwork : public QObject
* @warning Most of the setting methods contained in this class require the appropriate
* process permissions to work.
+ *
* @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
*/
@@ -247,4 +249,5 @@ class ONetworkInterface : public QObject
* This is necessary when in monitoring mode and scanning for other devices, because
* the radio frequency hardware can only detect packets sent on the same frequency.
+ *
* @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
*/
@@ -306,4 +309,6 @@ class OChannelHopper : public QObject
*
* This class provides a high-level encapsulation of the Linux wireless extension API.
+ *
+ * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
*/
class OWirelessNetworkInterface : public ONetworkInterface
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
@@ -467,4 +467,66 @@ 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
@@ -521,12 +583,25 @@ void ONamedListViewItem::setText( const QString& column, const QString& text )
//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
@@ -242,8 +242,10 @@ QDataStream& operator>>( QDataStream& stream, OListViewItem& item );
*======================================================================================*/
+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 <mickey@tm.informatik.uni-frankfurt.de>
@@ -267,4 +269,22 @@ class ONamedListView: public OListView
*/
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.<ul>
+ * <li>set it to 0 to search only among direct childs,
+ * <li>set it to 1 to search direct childs and all 1st order subchilds
+ * <li>set it to -1 for maximum recursion.
+ * </ul>
+ * @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;
};
@@ -276,5 +296,5 @@ 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 <mickey@tm.informatik.uni-frankfurt.de>
@@ -305,4 +325,15 @@ class ONamedListViewItem: public OListViewItem
*/
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.<ul>
+ * <li>set it to 0 to search only among direct childs,
+ * <li>set it to 1 to search direct childs and all 1st order subchilds
+ * <li>set it to -1 for maximum recursion.
+ * </ul>
+ * @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;
};