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

List:       kde-commits
Subject:    extragear/pim/ksig
From:       Pino Toscano <pino () kde ! org>
Date:       2012-09-21 20:51:43
Message-ID: 20120921205143.16763AC7E8 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1317207 by pino:

convert to to itemview, with SigModel

switch from SigListView to a QTreeView + SigModel, with a proxy model for the filtering;
there is not single widget for the filter line edit, so create a new one manually


 M  +50 -20    ksig.cpp  
 M  +4 -3      ksig.h  


--- trunk/extragear/pim/ksig/ksig.cpp #1317206:1317207
@@ -15,7 +15,7 @@
  *                                                                         *
  ***************************************************************************/
 #include "ksig.h"
-#include "siglistviewitem.h"
+#include "sigmodel.h"
 
 #include <kstandardaction.h>
 #include <kactioncollection.h>
@@ -23,14 +23,19 @@
 #include <kconfig.h>
 #include <kglobal.h>
 #include <kglobalsettings.h>
+#include <klineedit.h>
 #include <kmessagebox.h>
 #include <kstatusbar.h>
 #include <ktextedit.h>
-#include <k3listviewsearchline.h>
 #include <klocale.h>
 #include <kinputdialog.h>
 
+#include <qitemselectionmodel.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qsortfilterproxymodel.h>
 #include <qsplitter.h>
+#include <qtreeview.h>
 #include <kconfiggroup.h>
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -95,7 +100,11 @@
 
     setCentralWidget(splitter);
 
-    sigList = SigListView::instance(splitter, "sigList");
+    m_treeView = new QTreeView(splitter);
+    m_treeView->setRootIsDecorated(false);
+    m_treeView->setMouseTracking(true);
+    m_model = new SigModel(m_treeView);
+    m_treeView->setModel(m_model);
 
     sigEdit = new KTextEdit(splitter );
 	sigEdit->setObjectName("sigEdit");
@@ -110,13 +119,31 @@
 
     updateListLock = false;
     connect(sigEdit, SIGNAL(textChanged()), this, SLOT(updateList()));
-    connect(sigList, SIGNAL(selectionChanged()), this, SLOT(updateEdit()));
+    connect(m_treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+            this, SLOT(updateEdit()));
     connect(sigEdit, SIGNAL(cursorPositionChanged()), this, SLOT(updateStatus()));
 }
 
 void KSig::setupSearchLine()
 {
-    K3ListViewSearchLineWidget *searchWidget = new K3ListViewSearchLineWidget(sigList, this);
+    QSortFilterProxyModel *proxy = new QSortFilterProxyModel(m_treeView);
+    proxy->setFilterRole(SigModel::SignatureRole);
+    proxy->setFilterCaseSensitivity(Qt::CaseInsensitive);
+    proxy->setSourceModel(m_model);
+    m_treeView->setModel(proxy);
+    connect(m_treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+            this, SLOT(updateEdit()));
+
+    QWidget *searchWidget = new QWidget();
+    QHBoxLayout *lay = new QHBoxLayout(searchWidget);
+    lay->setMargin(0);
+    QLabel *label = new QLabel(i18n("Search:"), searchWidget);
+    lay->addWidget(label);
+    KLineEdit *lineEdit = new KLineEdit(searchWidget);
+    lineEdit->setClearButtonShown(true);
+    lay->addWidget(lineEdit);
+    connect(lineEdit, SIGNAL(textChanged(QString)), proxy, SLOT(setFilterFixedString(QString)));
+
     KAction *act = actionCollection()->addAction( "search" );
     act->setText( i18n("Search") );
     act->setDefaultWidget(searchWidget);
@@ -125,9 +152,8 @@
 
 void KSig::loadData()
 {
-    if(sigList->childCount() > 0) {
-        sigList->setCurrentItem(sigList->firstChild());
-        sigList->setSelected(sigList->firstChild(), true);
+    if(m_treeView->model()->rowCount() > 0) {
+        m_treeView->setCurrentIndex(m_treeView->model()->index(0, 0));
 
         sigEdit->setEnabled(true);
     }
@@ -201,24 +227,28 @@
 void KSig::add()
 {
     setDataChanged();
-    SigListViewItem *sigItem = sigList->createItem();
-    sigList->setCurrentItem(sigItem);
+    const QModelIndex index = m_treeView->currentIndex();
+    const int baseRow = index.isValid() ? index.row() : 0;
+    m_treeView->model()->insertRow(baseRow);
+    m_treeView->setCurrentIndex(m_treeView->model()->index(baseRow, 0));
 
     sigEdit->setEnabled(true);
     sigEdit->setFocus();
-    sigEdit->clear();
 }
 
 void KSig::remove()
 {
+    const QModelIndex index = m_treeView->currentIndex();
+    if(!index.isValid())
+	return;
+
     setDataChanged();
-    sigEdit->clear();
-    delete(sigList->currentItem());
+    m_treeView->model()->removeRow(index.row());
 }
 
 void KSig::save()
 {
-    sigList->save();
+    m_model->save();
     setDataChanged(false);
 }
 
@@ -252,9 +282,9 @@
 {
     if(!updateListLock) {
 	setDataChanged();
-	SigListViewItem *item = sigList->currentItem();
-	if(item)
-	    item->setText(sigEdit->toPlainText());
+	const QModelIndex index = m_treeView->currentIndex();
+	if(index.isValid())
+	    m_treeView->model()->setData(index, sigEdit->toPlainText());
     }
 }
 
@@ -262,9 +292,9 @@
 {
     updateListLock = true;
 
-    SigListViewItem *item = sigList->currentItem();
-    if(item)
-	sigEdit->setText(item->text());
+    const QModelIndex index = m_treeView->currentIndex();
+    if(index.isValid())
+	sigEdit->setText(index.data(SigModel::SignatureRole).toString());
 
     updateListLock = false;
 }
--- trunk/extragear/pim/ksig/ksig.h #1317206:1317207
@@ -18,12 +18,12 @@
 #ifndef KSIG_H
 #define KSIG_H
 
-#include "siglistview.h"
-
 #include <kxmlguiwindow.h>
 
 class KTextEdit;
 class QSplitter;
+class QTreeView;
+class SigModel;
 
 class KSig : public KXmlGuiWindow
 {
@@ -66,7 +66,8 @@
     QString footer;
 
     QSplitter *splitter;
-    SigListView *sigList;
+    QTreeView *m_treeView;
+    SigModel *m_model;
     KTextEdit *sigEdit;
     bool updateListLock;
     bool changed;
[prev in list] [next in list] [prev in thread] [next in thread] 

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