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

List:       kde-commits
Subject:    KDE/kdebase/apps/plasma/applets/folderview
From:       Shantanu Tushar Jha <jhahoneyk () gmail ! com>
Date:       2010-04-25 15:03:13
Message-ID: 20100425150313.3838BAC8A3 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1118646 by shantanu:

Add simple Type-and-Select feature.

BUG: 187241



 M  +32 -2     iconview.cpp  
 M  +2 -0      iconview.h  


--- trunk/KDE/kdebase/apps/plasma/applets/folderview/iconview.cpp #1118645:1118646
@@ -1669,6 +1669,30 @@
 
     QModelIndex currentIndex = m_selectionModel->currentIndex();
 
+    bool sameKeyWasPressed = m_searchQuery.endsWith(event->text());
+    m_searchQuery.append(event->text());
+    m_searchQueryTimer.start(2000, this);   //clears search query when the user \
doesn't press any key +
+    // First try to match the exact icon string
+    QModelIndexList matches = m_model->match(currentIndex, Qt::DisplayRole, \
m_searchQuery, +                                                 1, \
Qt::MatchFixedString | Qt::MatchWrap); +
+    if (matches.count()<=0) {
+        // Exact match failed, try matching the beginning of the icon string
+        matches = m_model->match(currentIndex, Qt::DisplayRole, m_searchQuery,
+                                             1, Qt::MatchStartsWith | \
Qt::MatchWrap); +
+        if (matches.count()<=0 && sameKeyWasPressed) {
+            // Didn't even match beginning, try next icon string starting with the \
same letter +            matches = \
m_model->match(currentIndex.sibling(currentIndex.row()+1, currentIndex.column()), +   \
Qt::DisplayRole, event->text(), 1, Qt::MatchStartsWith | Qt::MatchWrap); +        }
+    }
+
+    if (matches.count()>0) {
+            selectIcon(matches.at(0));
+    }
+
     switch (event->key()) {
     case Qt::Key_Home:
         selectFirstIcon();
@@ -2456,6 +2480,9 @@
 
 void IconView::selectIcon(QModelIndex index)
 {
+    if (!index.isValid()) {
+        return;
+    }
     repaintSelectedIcons();
     m_selectionModel->select(index, QItemSelectionModel::ClearAndSelect);
     m_selectionModel->setCurrentIndex(index, QItemSelectionModel::NoUpdate);
@@ -2466,8 +2493,8 @@
 
 void IconView::selectFirstOrLastIcon(bool firstIcon)
 {
-    int minVertical;
-    int minHorizontal;
+    int minVertical=0;
+    int minHorizontal=0;
     int dirn=1;    //Useful in calculations as it stores whether view is LeftToRight \
                or RightToLeft
     int isFirst = firstIcon ? 1 : -1;    //Useful in calculations to decide whether \
to select First or Last icon  QModelIndex toSelect;
@@ -2651,6 +2678,9 @@
             connect(m_popupView, SIGNAL(requestClose()), \
SLOT(popupCloseRequested()));  m_popupIndex = m_hoveredIndex;
         }
+    } else if (event->timerId() == m_searchQueryTimer.timerId()) {
+        m_searchQuery.clear();
+        m_searchQueryTimer.stop();
     }
 }
 
--- trunk/KDE/kdebase/apps/plasma/applets/folderview/iconview.h #1118645:1118646
@@ -252,6 +252,7 @@
     QBasicTimer m_delayedRelayoutTimer;
     QBasicTimer m_delayedCacheClearTimer;
     QBasicTimer m_toolTipShowTimer;
+    QBasicTimer m_searchQueryTimer;
     ToolTipWidget *m_toolTipWidget;
     QPointer<PopupView> m_popupView;
     QPointer<QWidget> m_popupCausedWidget;
@@ -263,6 +264,7 @@
     Animator *m_animator;
     ActionOverlay *m_actionOverlay;
     QStringList m_popupPreviewPlugins;
+    QString m_searchQuery;
 };
 
 #endif


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

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