--- src/search.ui~	2007-04-08 12:44:28 +0400
+++ src/search.ui	2008-02-29 21:45:03 +0300
@@ -130,12 +130,30 @@
                 <number>0</number>
               </property>
               <item>
-                <widget class="Q3ListView" name="lv_results" >
+    		<widget class="QTreeWidget" name="lv_results" >
+                  <property name="alternatingRowColors" >
+			<bool>true</bool>
+                  </property>
+                  <property name="selectionMode" >
+        		<enum>QAbstractItemView::ExtendedSelection</enum>
+                  </property>
+                  <property name="selectionBehavior" >
+        		<enum>QAbstractItemView::SelectRows</enum>
+                  </property>
+                  <property name="indentation" >
+        		<number>0</number>
+                  </property>
+                  <property name="uniformRowHeights" >
+                	<bool>true</bool>
+                  </property>
+                  <property name="itemsExpandable" >
+        		<bool>false</bool>
+                  </property>
                   <property name="allColumnsShowFocus" >
-                    <bool>true</bool>
+        		<bool>true</bool>
                   </property>
-                  <property name="resizeMode" >
-                    <enum>Q3ListView::AllColumns</enum>
+                  <property name="sortingEnabled" >
+        		<bool>true</bool>
                   </property>
                   <column>
                     <property name="text" >
--- src/searchdlg.cpp~	2007-05-07 02:10:06 +0400
+++ src/searchdlg.cpp	2008-02-29 21:46:09 +0300
@@ -138,15 +138,12 @@ public:
 			}
 		}
 
-		Q3ListViewItem* i = dlg->lv_results->firstChild();
-		while (i) {
-			if (i->isSelected()) {
+		foreach(QTreeWidgetItem *i, dlg->lv_results->selectedItems())
+		{
 				NickAndJid nickJid;
 				nickJid.jid  = XMPP::Jid(i->text(jid));
 				nickJid.nick = i->text(nick);
 				result << nickJid;
-			}
-			i = i->nextSibling();
 		}
 
 		return result;
@@ -194,9 +191,7 @@ SearchDlg::SearchDlg(const Jid &jid, Psi
 	pb_stop->setEnabled(false);
 	pb_search->setEnabled(false);
 
-	lv_results->setMultiSelection(true);
-	lv_results->setSelectionMode( Q3ListView::Extended );
-	connect(lv_results, SIGNAL(selectionChanged()), SLOT(selectionChanged()));
+	connect(lv_results, SIGNAL(itemSelectionChanged()), SLOT(selectionChanged()));
 	connect(pb_close, SIGNAL(clicked()), SLOT(close()));
 	connect(pb_search, SIGNAL(clicked()), SLOT(doSearchSet()));
 	connect(pb_stop, SIGNAL(clicked()), SLOT(doStop()));
@@ -240,7 +235,7 @@ SearchDlg::~SearchDlg()
 
 void SearchDlg::addEntry(const QString &jid, const QString &nick, const QString &first, const QString &last, const QString &email)
 {
-	Q3ListViewItem *lvi = new Q3ListViewItem(lv_results);
+	QTreeWidgetItem *lvi = new QTreeWidgetItem(lv_results);
 	lvi->setText(0, nick);
 	lvi->setText(1, first);
 	lvi->setText(2, last);
@@ -403,28 +398,35 @@ void SearchDlg::jt_finished()
 					}
 				}
 
-				while ( lv_results->columns() )
-					lv_results->removeColumn( 0 );
+				lv_results->clear();
+				lv_results->setHeaderItem(new QTreeWidgetItem(0));
 
-				QList<XData::ReportField>::ConstIterator it = form.report().begin();
-				for ( ; it != form.report().end(); ++it ) {
-					lv_results->addColumn( ( *it ).label );
+				QStringList header_labels;
+				foreach(XData::ReportField report, form.report())
+				{
+				    header_labels << report.label;
 				}
+				lv_results->setHeaderLabels(header_labels);
 
-				QList<XData::ReportItem>::ConstIterator iit = form.reportItems().begin();
-				for ( ; iit != form.reportItems().end(); ++iit ) {
-					Q3ListViewItem *lvi = new Q3ListViewItem(lv_results);
-
+				foreach(XData::ReportItem ri, form.reportItems())
+				{
 					int i = 0;
-					it = form.report().begin();
-					for ( ; it != form.report().end(); ++it ) {
-						QString name = ( *it ).name;
-						lvi->setText( i++, ( *iit )[name] );
+					QTreeWidgetItem *lvi = new QTreeWidgetItem(lv_results);
+					foreach(XData::ReportField report, form.report())
+					{
+						lvi->setText( i++, ri[report.name] );
 					}
 				}
 
 				d->xdata_form = form;
 			}
+
+			// resize columns width to contents
+			int n = lv_results->columnCount();
+			for(int c=0; c < n; c++)
+			    lv_results->resizeColumnToContents(c);
+			// sort by first column
+			lv_results->sortByColumn(0, Qt::AscendingOrder);
 		}
 	}
 	else {
@@ -461,30 +463,21 @@ void SearchDlg::doStop()
 
 void SearchDlg::selectionChanged()
 {
-	int d = 0;
-	Q3ListViewItem *lastChild = lv_results->firstChild();
-
-	if(!lastChild) {
-		pb_add->setEnabled(false);
-		pb_info->setEnabled(false);
-		return;
-	}
-
-	if( lastChild->isSelected() ) {
+	QList<QTreeWidgetItem*> selected_items = lv_results->selectedItems();
+	if( selected_items.size() > 0 )
+	{
 		pb_add->setEnabled(true);
 		pb_info->setEnabled(true);
-	}
-	d++;
-
-	if ( lastChild ) {
-		while ( lastChild->nextSibling() ) {
-			lastChild = lastChild->nextSibling();
-			if( lastChild->isSelected() ) {
-				pb_add->setEnabled(true);
-				pb_info->setEnabled(true);
-			}
- 			d++;
+#if 0
+		foreach(QTreeWidgetItem* item, selected_items)
+		{
 		}
+#endif
+	}
+	else
+	{
+		pb_add->setEnabled(false);
+		pb_info->setEnabled(false);
 	}
 }
 
