• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdeui
 

tdeui

kiconviewsearchline.cpp

00001 /* This file is part of the KDE libraries
00002    Copyright (c) 2010 Timothy Pearson <kb9vqf@pearsoncomputing.net>
00003    Copyright (c) 2004 Gustavo Sverzut Barbieri <gsbarbieri@users.sourceforge.net>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License version 2 as published by the Free Software Foundation.
00008 
00009    This library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this library; see the file COPYING.LIB.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017    Boston, MA 02110-1301, USA.
00018 */
00019 
00027 #include "kiconviewsearchline.h"
00028 
00029 #include <tqiconview.h>
00030 #include <tdelocale.h>
00031 #include <tqtimer.h>
00032 #include <kdebug.h>
00033 
00034 #define DEFAULT_CASESENSITIVE false
00035 
00036 typedef TQValueList <TQIconViewItem *> QIconViewItemList;
00037 
00038 class TDEIconViewSearchLine::TDEIconViewSearchLinePrivate
00039 {
00040 public:
00041   TDEIconViewSearchLinePrivate() :
00042     iconView( 0 ),
00043     caseSensitive( DEFAULT_CASESENSITIVE ),
00044     activeSearch( false ),
00045     queuedSearches( 0 ) {}
00046 
00047   TQIconView *iconView;
00048   bool caseSensitive;
00049   bool activeSearch;
00050   TQString search;
00051   int queuedSearches;
00052 };
00053 
00054 /******************************************************************************
00055  * Public Methods                                                             *
00056  *****************************************************************************/
00057 TDEIconViewSearchLine::TDEIconViewSearchLine( TQWidget *parent,
00058                       TQIconView *iconView,
00059                       const char *name ) :
00060   KLineEdit( parent, name )
00061 {
00062   d = NULL;
00063   init( iconView );
00064 }
00065 
00066 TDEIconViewSearchLine::TDEIconViewSearchLine( TQWidget *parent, const char *name ) :
00067   KLineEdit( parent, name )
00068 {
00069   d = NULL;
00070   init( NULL );
00071 }
00072 
00073 TDEIconViewSearchLine::~TDEIconViewSearchLine()
00074 {
00075   clear(); // empty hiddenItems, returning items back to iconView
00076   delete d;
00077 }
00078 
00079 bool TDEIconViewSearchLine::caseSensitive() const
00080 {
00081   return d->caseSensitive;
00082 }
00083 
00084 TQIconView *TDEIconViewSearchLine::iconView() const
00085 {
00086   return d->iconView;
00087 }
00088 
00089 /******************************************************************************
00090  * Public Slots                                                               *
00091  *****************************************************************************/
00092 void TDEIconViewSearchLine::updateSearch( const TQString &s )
00093 {
00094     if( ! d->iconView )
00095         return;
00096 
00097     d->search = s.isNull() ? text() : s;
00098     TQIconViewItem *currentItem = d->iconView->currentItem();
00099     TQIconViewItem *item = NULL;
00100 
00101     // Remove Non-Matching items, add them to the hidden list
00102     TQIconViewItem *i = d->iconView->firstItem();
00103     while ( i != NULL ) {
00104         item = i;
00105         i = i->nextItem(); // Point to next, otherwise will loose it.
00106         if ( ! itemMatches( item, d->search ) ) {
00107             hideItem( item );
00108 
00109             if ( item == currentItem )
00110                 currentItem = NULL; // It's not in iconView anymore.
00111         }
00112         else {
00113             showItem( item );
00114         }
00115     }
00116 
00117     d->iconView->sort(); // This also arranges items in grid
00118 
00119     if ( currentItem != NULL )
00120         d->iconView->ensureItemVisible( currentItem );
00121 }
00122 
00123 void TDEIconViewSearchLine::clear()
00124 {
00125     if( ! d->iconView )
00126         return; // disabled
00127 
00128     // Clear hidden list, give items back to TQIconView, if it still exists
00129     TQIconViewItem *item = NULL;
00130 
00131     TQIconViewItem *i = d->iconView->firstItem();
00132     while ( i != NULL ) {
00133         item = i;
00134         i = i->nextItem(); // Point to next, otherwise will loose it.
00135         showItem( item );
00136     }
00137     
00138     d->search = "";
00139     d->queuedSearches = 0;
00140     KLineEdit::clear();
00141 }
00142 
00143 void TDEIconViewSearchLine::iconDeleted(const TQString &filename) {
00144     // Do nothing...
00145 }
00146 
00147 void TDEIconViewSearchLine::setCaseSensitive( bool cs )
00148 {
00149   d->caseSensitive = cs;
00150 }
00151 
00152 void TDEIconViewSearchLine::setIconView( TQIconView *iv )
00153 {
00154   if ( d->iconView != NULL )
00155     disconnect( d->iconView, TQT_SIGNAL( destroyed() ),
00156         this,        TQT_SLOT(   iconViewDeleted() ) );
00157 
00158   d->iconView = iv;
00159 
00160   if ( iv != NULL )
00161     {
00162       connect( d->iconView, TQT_SIGNAL( destroyed() ),
00163            this,        TQT_SLOT(   iconViewDeleted() ) );
00164       setEnabled( true );
00165     }
00166   else
00167     setEnabled( false );
00168 }
00169 
00170 /******************************************************************************
00171  * Protected Methods                                                          *
00172  *****************************************************************************/
00173 bool TDEIconViewSearchLine::itemMatches( const TQIconViewItem *item,
00174                        const TQString &s ) const
00175 {
00176   if ( s.isEmpty() )
00177     return true;
00178 
00179   if ( item == NULL )
00180     return false;
00181 
00182   TQString itemtext = item->text();
00183   return ( itemtext.find( s, 0, caseSensitive() ) >= 0 );
00184 }
00185 
00186 void TDEIconViewSearchLine::init( TQIconView *iconView )
00187 {
00188   delete d;
00189   d = new TDEIconViewSearchLinePrivate;
00190 
00191   d->iconView = iconView;
00192 
00193   connect( this, TQT_SIGNAL( textChanged( const TQString & ) ),
00194        this, TQT_SLOT(   queueSearch( const TQString & ) ) );
00195 
00196   if ( iconView != NULL )
00197     {
00198       connect( iconView, TQT_SIGNAL( destroyed() ),
00199            this,     TQT_SLOT(   iconViewDeleted() ) );
00200       setEnabled( true );
00201     }
00202   else
00203     setEnabled( false );
00204 }
00205 
00206 void TDEIconViewSearchLine::hideItem( TQIconViewItem *item )
00207 {
00208   if ( ( item == NULL ) || ( d->iconView == NULL ) )
00209     return;
00210 
00211   item->setVisible(false);
00212 }
00213 
00214 void TDEIconViewSearchLine::showItem( TQIconViewItem *item )
00215 {
00216   if ( d->iconView == NULL )
00217     {
00218       kdDebug() << __FILE__ << ":" << __LINE__ <<
00219     "showItem() could not be called while there's no iconView set." <<
00220     endl;
00221       return;
00222     }
00223 
00224   item->setVisible(true);
00225 }
00226 
00227 /******************************************************************************
00228  * Protected Slots                                                            *
00229  *****************************************************************************/
00230 void TDEIconViewSearchLine::queueSearch( const TQString &s )
00231 {
00232   d->queuedSearches++;
00233   d->search = s;
00234   TQTimer::singleShot( 200, this, TQT_SLOT( activateSearch() ) );
00235 }
00236 
00237 void TDEIconViewSearchLine::activateSearch()
00238 {
00239   d->queuedSearches--;
00240 
00241   if ( d->queuedSearches <= 0 )
00242   {
00243       updateSearch( d->search );
00244       d->queuedSearches = 0;
00245   }
00246   else {
00247       TQTimer::singleShot( 200, this, TQT_SLOT( activateSearch() ) );
00248   }
00249 }
00250 
00251 /******************************************************************************
00252  * Private Slots                                                              *
00253  *****************************************************************************/
00254 void TDEIconViewSearchLine::iconViewDeleted()
00255 {
00256   d->iconView = NULL;
00257   setEnabled( false );
00258 }
00259 
00260 #include "kiconviewsearchline.moc"

tdeui

Skip menu "tdeui"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdeui

Skip menu "tdeui"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdeui by doxygen 1.6.3
This website is maintained by Timothy Pearson.