<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en_US" xml:lang="en_US"> <head> <title>kaddressbook: incsearchwidget.cpp Source File (kaddressbook)</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="pics-label" content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline DE v2.0" l gen true for "http://www.kde.org" r (nz 1 vz 1 lz 1 oz 1 cb 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://www.kde.org" r (n 0 s 0 v 0 l 0))' /> <meta name="trademark" content="KDE e.V." /> <meta name="description" content="K Desktop Environment Homepage, KDE.org" /> <meta name="MSSmartTagsPreventParsing" content="true" /> <meta name="robots" content="all" /> <link rel="shortcut icon" href="../../favicon.ico" /> <link rel="stylesheet" media="screen" type="text/css" title="APIDOX" href="doxygen.css" /> <style type="text/css"> <!-- hr { display: none; } #content h2 { margin-left: 0px; } table.mdTable { background-color: #f8f8f8; border: .2em solid #d7d7d7; } td.mdRow { padding: 8px 20px; } td.md { font-weight: bold; } td.mdname1 { font-weight: bold; color: #602020; } td.mdname { font-weight: bold; color: #602020; } --> </style> </head> <body> <div id="nav_header_top" align="right"> <a href="#content" class="doNotDisplay" accesskey="2">Skip to main content ::</a> <a href="../.."><img id="nav_header_logo" alt="Home" align="left" src="../../kde_gear_64.png" border="0" /></a> <span class="doNotDisplay">::</span> <img id="nav_header_logo_right" alt="" align="right" src="../../pimlogo.png" border="0" /> <div id="nav_header_title" align="left">KDE PIM API Reference</div> </div> <div id="nav_header_bottom" align="right"> <span class="doNotDisplay">:: <a href="#navigation" accesskey="5">Skip to Link Menu</a><br/></span> <div id="nav_header_bottom_left" style="text-align: left;"> / <a href="../../">API Reference</a> / <a href=".">kaddressbook</a> </div> </div> <table id="main" border="0" cellpadding="0" cellspacing="0" width="100%"> <tr> <td valign="top" class="menuheader" height="0"></td> <td id="contentcolumn" valign="top" rowspan="2" > <div id="content" style="padding-top: 0px;"><div style="width:100%; margin: 0px; padding: 0px;"> <h2><a name="content"></a>kaddressbook</h2> <!-- Generated by Doxygen 1.5.5 --> <h1>incsearchwidget.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span> <a name="l00002"></a>00002 <span class="comment"> This file is part of KAddressBook.</span> <a name="l00003"></a>00003 <span class="comment"> Copyright (c) 2002 Tobias Koenig <tokoe@kde.org></span> <a name="l00004"></a>00004 <span class="comment"></span> <a name="l00005"></a>00005 <span class="comment"> This program is free software; you can redistribute it and/or modify</span> <a name="l00006"></a>00006 <span class="comment"> it under the terms of the GNU General Public License as published by</span> <a name="l00007"></a>00007 <span class="comment"> the Free Software Foundation; either version 2 of the License, or</span> <a name="l00008"></a>00008 <span class="comment"> (at your option) any later version.</span> <a name="l00009"></a>00009 <span class="comment"></span> <a name="l00010"></a>00010 <span class="comment"> This program is distributed in the hope that it will be useful,</span> <a name="l00011"></a>00011 <span class="comment"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <a name="l00012"></a>00012 <span class="comment"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> <a name="l00013"></a>00013 <span class="comment"> GNU General Public License for more details.</span> <a name="l00014"></a>00014 <span class="comment"></span> <a name="l00015"></a>00015 <span class="comment"> You should have received a copy of the GNU General Public License</span> <a name="l00016"></a>00016 <span class="comment"> along with this program; if not, write to the Free Software</span> <a name="l00017"></a>00017 <span class="comment"> Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span> <a name="l00018"></a>00018 <span class="comment"></span> <a name="l00019"></a>00019 <span class="comment"> As a special exception, permission is given to link this program</span> <a name="l00020"></a>00020 <span class="comment"> with any edition of Qt, and distribute the resulting executable,</span> <a name="l00021"></a>00021 <span class="comment"> without including the source code for Qt in the source distribution.</span> <a name="l00022"></a>00022 <span class="comment">*/</span> <a name="l00023"></a>00023 <a name="l00024"></a>00024 <span class="preprocessor">#include <qapplication.h></span> <a name="l00025"></a>00025 <span class="preprocessor">#include <qcombobox.h></span> <a name="l00026"></a>00026 <span class="preprocessor">#include <qlabel.h></span> <a name="l00027"></a>00027 <span class="preprocessor">#include <qlayout.h></span> <a name="l00028"></a>00028 <span class="preprocessor">#include <qtimer.h></span> <a name="l00029"></a>00029 <span class="preprocessor">#include <qtoolbutton.h></span> <a name="l00030"></a>00030 <span class="preprocessor">#include <qtooltip.h></span> <a name="l00031"></a>00031 <span class="preprocessor">#include <qwhatsthis.h></span> <a name="l00032"></a>00032 <a name="l00033"></a>00033 <span class="preprocessor">#include <kdialog.h></span> <a name="l00034"></a>00034 <span class="preprocessor">#include <kiconloader.h></span> <a name="l00035"></a>00035 <span class="preprocessor">#include <klineedit.h></span> <a name="l00036"></a>00036 <span class="preprocessor">#include <klocale.h></span> <a name="l00037"></a>00037 <a name="l00038"></a>00038 <span class="preprocessor">#include "incsearchwidget.h"</span> <a name="l00039"></a>00039 <a name="l00040"></a>00040 IncSearchWidget::IncSearchWidget( QWidget *parent, <span class="keyword">const</span> <span class="keywordtype">char</span> *name ) <a name="l00041"></a>00041 : QWidget( parent, name ) <a name="l00042"></a>00042 { <a name="l00043"></a>00043 QHBoxLayout *layout = <span class="keyword">new</span> QHBoxLayout( <span class="keyword">this</span>, 2, KDialog::spacingHint() ); <a name="l00044"></a>00044 <a name="l00045"></a>00045 QToolButton *button = <span class="keyword">new</span> QToolButton( <span class="keyword">this</span> ); <a name="l00046"></a>00046 button->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); <a name="l00047"></a>00047 button->setPixmap( SmallIcon( QApplication::reverseLayout() ? <span class="stringliteral">"clear_left"</span> : <span class="stringliteral">"locationbar_erase"</span> ) ); <a name="l00048"></a>00048 button->setAccel( QKeySequence( CTRL+ALT+Key_S ) ); <a name="l00049"></a>00049 button->setAutoRaise( <span class="keyword">true</span> ); <a name="l00050"></a>00050 QToolTip::add( button, i18n( <span class="stringliteral">"Reset"</span> ) ); <a name="l00051"></a>00051 layout->addWidget( button ); <a name="l00052"></a>00052 <a name="l00053"></a>00053 QLabel *label = <span class="keyword">new</span> QLabel( i18n( <span class="stringliteral">"Search:"</span> ), <span class="keyword">this</span>, <span class="stringliteral">"kde toolbar widget"</span> ); <a name="l00054"></a>00054 label->setAlignment( QLabel::AlignVCenter | QLabel::AlignRight ); <a name="l00055"></a>00055 layout->addWidget( label ); <a name="l00056"></a>00056 <a name="l00057"></a>00057 mSearchText = <span class="keyword">new</span> KLineEdit( <span class="keyword">this</span> ); <a name="l00058"></a>00058 mSearchText->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred ); <a name="l00059"></a>00059 QWhatsThis::add( mSearchText, i18n( <span class="stringliteral">"The incremental search<p>Enter some text here will start the search for the contact, which matches the search pattern best. The part of the contact, which will be used for matching, depends on the field selection."</span> ) ); <a name="l00060"></a>00060 label->setBuddy( mSearchText ); <a name="l00061"></a>00061 layout->addWidget( mSearchText ); <a name="l00062"></a>00062 <a name="l00063"></a>00063 label = <span class="keyword">new</span> QLabel( i18n( <span class="stringliteral">"as in 'Search in:'"</span>, <span class="stringliteral">"&in:"</span> ), <span class="keyword">this</span>, <span class="stringliteral">"kde toolbar widget"</span> ); <a name="l00064"></a>00064 label->setAlignment( QLabel::AlignVCenter | QLabel::AlignRight ); <a name="l00065"></a>00065 layout->addWidget( label ); <a name="l00066"></a>00066 <a name="l00067"></a>00067 mFieldCombo = <span class="keyword">new</span> QComboBox( <span class="keyword">false</span>, <span class="keyword">this</span> ); <a name="l00068"></a>00068 layout->addWidget( mFieldCombo ); <a name="l00069"></a>00069 label->setBuddy(mFieldCombo); <a name="l00070"></a>00070 <a name="l00071"></a>00071 QToolTip::add( mFieldCombo, i18n( <span class="stringliteral">"Select incremental search field"</span> ) ); <a name="l00072"></a>00072 QWhatsThis::add( mFieldCombo, i18n( <span class="stringliteral">"Here you can choose the field, which shall be used for incremental search."</span> ) ); <a name="l00073"></a>00073 <a name="l00074"></a>00074 mInputTimer = <span class="keyword">new</span> QTimer( <span class="keyword">this</span> ); <a name="l00075"></a>00075 <a name="l00076"></a>00076 connect( mInputTimer, SIGNAL( timeout() ), <a name="l00077"></a>00077 SLOT( timeout() ) ); <a name="l00078"></a>00078 connect( mSearchText, SIGNAL( textChanged( <span class="keyword">const</span> QString& ) ), <a name="l00079"></a>00079 SLOT( announceDoSearch() ) ); <a name="l00080"></a>00080 connect( mSearchText, SIGNAL( returnPressed() ), <a name="l00081"></a>00081 SLOT( announceDoSearch() ) ); <a name="l00082"></a>00082 connect( mFieldCombo, SIGNAL( activated( <span class="keyword">const</span> QString& ) ), <a name="l00083"></a>00083 SLOT( announceDoSearch() ) ); <a name="l00084"></a>00084 connect( button, SIGNAL( clicked() ), <a name="l00085"></a>00085 mSearchText, SLOT( clear() ) ); <a name="l00086"></a>00086 connect( button, SIGNAL( clicked() ), <a name="l00087"></a>00087 SLOT( announceDoSearch() ) ); <a name="l00088"></a>00088 <a name="l00089"></a>00089 initFields(); <a name="l00090"></a>00090 <a name="l00091"></a>00091 mSearchText->installEventFilter( <span class="keyword">this</span> ); <a name="l00092"></a>00092 <a name="l00093"></a>00093 setFocusProxy( mSearchText ); <a name="l00094"></a>00094 } <a name="l00095"></a>00095 <a name="l00096"></a>00096 IncSearchWidget::~IncSearchWidget() <a name="l00097"></a>00097 { <a name="l00098"></a>00098 } <a name="l00099"></a>00099 <a name="l00100"></a>00100 <span class="keywordtype">void</span> IncSearchWidget::announceDoSearch() <a name="l00101"></a>00101 { <a name="l00102"></a>00102 <span class="keywordflow">if</span> ( mInputTimer->isActive() ) <a name="l00103"></a>00103 mInputTimer->stop(); <a name="l00104"></a>00104 <a name="l00105"></a>00105 mInputTimer->start( 0, <span class="keyword">true</span> ); <a name="l00106"></a>00106 } <a name="l00107"></a>00107 <a name="l00108"></a>00108 <span class="keywordtype">void</span> IncSearchWidget::timeout() <a name="l00109"></a>00109 { <a name="l00110"></a>00110 emit doSearch( mSearchText->text() ); <a name="l00111"></a>00111 } <a name="l00112"></a>00112 <a name="l00113"></a>00113 <span class="keywordtype">void</span> IncSearchWidget::initFields() <a name="l00114"></a>00114 { <a name="l00115"></a>00115 mFieldList = KABC::Field::allFields(); <a name="l00116"></a>00116 <a name="l00117"></a>00117 mFieldCombo->clear(); <a name="l00118"></a>00118 mFieldCombo->insertItem( i18n( <span class="stringliteral">"Visible Fields"</span> ) ); <a name="l00119"></a>00119 mFieldCombo->insertItem( i18n( <span class="stringliteral">"All Fields"</span> ) ); <a name="l00120"></a>00120 <a name="l00121"></a>00121 KABC::Field::List::ConstIterator it; <a name="l00122"></a>00122 <span class="keywordflow">for</span> ( it = mFieldList.begin(); it != mFieldList.end(); ++it ) <a name="l00123"></a>00123 mFieldCombo->insertItem( (*it)->label() ); <a name="l00124"></a>00124 <a name="l00125"></a>00125 announceDoSearch(); <a name="l00126"></a>00126 } <a name="l00127"></a>00127 <a name="l00128"></a>00128 KABC::Field::List IncSearchWidget::currentFields()<span class="keyword"> const</span> <a name="l00129"></a>00129 <span class="keyword"></span>{ <a name="l00130"></a>00130 KABC::Field::List fieldList; <a name="l00131"></a>00131 <a name="l00132"></a>00132 <span class="keywordflow">if</span> ( mFieldCombo->currentItem() == 0 ) <a name="l00133"></a>00133 fieldList = mViewFields; <a name="l00134"></a>00134 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( mFieldCombo->currentItem() > 1 ) <a name="l00135"></a>00135 fieldList.append( mFieldList[ mFieldCombo->currentItem() - 2 ] ); <a name="l00136"></a>00136 <a name="l00137"></a>00137 <span class="keywordflow">return</span> fieldList; <a name="l00138"></a>00138 } <a name="l00139"></a>00139 <a name="l00140"></a>00140 <span class="keywordtype">void</span> IncSearchWidget::setCurrentItem( <span class="keywordtype">int</span> pos ) <a name="l00141"></a>00141 { <a name="l00142"></a>00142 mFieldCombo->setCurrentItem( pos ); <a name="l00143"></a>00143 } <a name="l00144"></a>00144 <a name="l00145"></a>00145 <span class="keywordtype">int</span> IncSearchWidget::currentItem()<span class="keyword"> const</span> <a name="l00146"></a>00146 <span class="keyword"></span>{ <a name="l00147"></a>00147 <span class="keywordflow">return</span> mFieldCombo->currentItem(); <a name="l00148"></a>00148 } <a name="l00149"></a>00149 <a name="l00150"></a>00150 <span class="keywordtype">void</span> IncSearchWidget::setViewFields( <span class="keyword">const</span> KABC::Field::List &fields ) <a name="l00151"></a>00151 { <a name="l00152"></a>00152 mViewFields = fields; <a name="l00153"></a>00153 } <a name="l00154"></a>00154 <a name="l00155"></a>00155 <span class="keywordtype">void</span> IncSearchWidget::clear() <a name="l00156"></a>00156 { <a name="l00157"></a>00157 mSearchText->clear(); <a name="l00158"></a>00158 } <a name="l00159"></a>00159 <a name="l00160"></a>00160 <span class="keywordtype">void</span> IncSearchWidget::keyPressEvent( QKeyEvent *event ) <a name="l00161"></a>00161 { <a name="l00162"></a>00162 <span class="keywordflow">if</span> ( event->key() == Qt::Key_Up ) { <a name="l00163"></a>00163 <span class="keyword">event</span>->accept(); <a name="l00164"></a>00164 emit scrollUp(); <a name="l00165"></a>00165 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( event->key() == Qt::Key_Down ) { <a name="l00166"></a>00166 <span class="keyword">event</span>->accept(); <a name="l00167"></a>00167 emit scrollDown(); <a name="l00168"></a>00168 } <a name="l00169"></a>00169 } <a name="l00170"></a>00170 <a name="l00171"></a>00171 <span class="preprocessor">#include "incsearchwidget.moc"</span> </pre></div></div> </div></div> </td> </tr> <tr> <td valign="top" id="leftmenu" width="25%"> <a name="navigation"></a> <div class="menu_box"><h2>kaddressbook</h2> <div class="nav_list"> <ul><li><a href="index.html">Main Page</a></li><li><a href="hierarchy.html">Class Hierarchy</a></li><li><a href="classes.html">Alphabetical List</a></li><li><a href="annotated.html">Class List</a></li><li><a href="files.html">File List</a></li><li><a href="functions.html">Class Members</a></li><li><a href="pages.html">Related Pages</a></li></ul> <!-- <h2>Class Picker</h2> <div style="text-align: center;"> <form name="guideform"> <select name="guidelinks" style="width:100%;" onChange="window.location=document.guideform.guidelinks.options[document.guideform.guidelinks.selectedIndex].value"> <option value="annotated.html">-- Choose --</option> <option value="classAddressEditDialog.html">addresseditdialog</option>, <option value="classAddressEditWidget.html">addresseditwidget</option>, <option value="classAddresseeUtil.html">addresseeutil</option>, <option value="classAddressTypeDialog.html">addresstypedialog</option>, <option value="classAddViewDialog.html">addviewdialog</option>, <option value="classCardView.html">cardview</option>, <option value="classCardViewItem.html">cardviewitem</option>, <option value="classCardViewLookNFeelPage.html">cardviewlooknfeelpage</option>, <option value="classConfigureCardViewWidget.html">configurecardviewwidget</option>, <option value="classConfigureTableViewWidget.html">configuretableviewwidget</option>, <option value="classDateParser.html">dateparser</option>, <option value="classDistributionListView.html">distributionlistview</option>, <option value="classDynamicTip.html">dynamictip</option>, <option value="classEmailEditWidget.html">emaileditwidget</option>, <option value="classEmailSelector.html">emailselector</option>, <option value="classFilter.html">filter</option>, <option value="classFilterSelectionWidget.html">filterselectionwidget</option>, <option value="classIMAddressLVI.html">imaddresslvi</option>, <option value="classIMAddressWidget.html">imaddresswidget</option>, <option value="classImageButton.html">imagebutton</option>, <option value="classImageLoader.html">imageloader</option>, <option value="classIMEditorWidget.html">imeditorwidget</option>, <option value="classIMEditWidget.html">imeditwidget</option>, <option value="classJumpButtonBar.html">jumpbuttonbar</option>, <option value="classKABPrinting_1_1PrintingWizard.html">kabprinting::printingwizard</option>, <option value="classKABPrinting_1_1PrintProgress.html">kabprinting::printprogress</option>, <option value="classKABPrinting_1_1PrintStyle.html">kabprinting::printstyle</option>, <option value="classKABPrinting_1_1PrintStyleFactory.html">kabprinting::printstylefactory</option>, <option value="classKAddressBookCardView.html">kaddressbookcardview</option>, <option value="classKAddressBookIconView.html">kaddressbookiconview</option>, <option value="classKAddressBookMain.html">kaddressbookmain</option>, <option value="classKAddressBookTableView.html">kaddressbooktableview</option>, <option value="classKAddressBookView.html">kaddressbookview</option>, <option value="classLookAndFeelPage.html">lookandfeelpage</option>, <option value="classNameEditDialog.html">nameeditdialog</option>, <option value="classPhoneEditWidget.html">phoneeditwidget</option>, <option value="classPhoneTypeDialog.html">phonetypedialog</option>, <option value="classTypeCombo.html">typecombo</option>, <option value="classViewConfigureWidget.html">viewconfigurewidget</option>, <option value="classViewManager.html">viewmanager</option>, </select> </form> </div> --> </div></div> <div class="menu_box"><h2>API Dox</h2> <div class="nav_list"> <ul> <li><a href="../../akregator/html/index.html">akregator</a></li><li> <a href="../../akregator/src/html/index.html">src</a></li><li> <a href="../../akregator/src/librss/html/index.html">librss</a></li><li><a href="../../certmanager/html/index.html">certmanager</a></li><li> <a href="../../certmanager/lib/html/index.html">lib</a></li><li><a href="../../kaddressbook/html/index.html">kaddressbook</a></li><li><a href="../../kalarm/html/index.html">kalarm</a></li><li> <a href="../../kalarm/lib/html/index.html">lib</a></li><li><a href="../../kandy/html/index.html">kandy</a></li><li><a href="../../karm/html/index.html">karm</a></li><li><a href="../../kdgantt/html/index.html">kdgantt</a></li><li><a href="../../kgantt/html/index.html">kgantt</a></li><li><a href="../../kioslaves/html/index.html">kioslaves</a></li><li> <a href="../../kioslaves/imap4/html/index.html">imap4</a></li><li> <a href="../../kioslaves/mbox/html/index.html">mbox</a></li><li><a href="../../kitchensync/html/index.html">kitchensync</a></li><li><a href="../../kmail/html/index.html">kmail</a></li><li><a href="../../knotes/html/index.html">knotes</a></li><li><a href="../../konsolekalendar/html/index.html">konsolekalendar</a></li><li><a href="../../kontact/html/index.html">kontact</a></li><li><a href="../../korganizer/html/index.html">korganizer</a></li><li><a href="../../kpilot/html/index.html">kpilot</a></li><li> <a href="../../kpilot/kpilot/html/index.html">kpilot</a></li><li> <a href="../../kpilot/lib/html/index.html">lib</a></li><li><a href="../../libemailfunctions/html/index.html">libemailfunctions</a></li><li><a href="../../libkcal/html/index.html">libkcal</a></li><li><a href="../../libkdepim/html/index.html">libkdepim</a></li><li><a href="../../libkholidays/html/index.html">libkholidays</a></li><li><a href="../../libkmime/html/index.html">libkmime</a></li><li><a href="../../libkpgp/html/index.html">libkpgp</a></li><li><a href="../../libkpimidentities/html/index.html">libkpimidentities</a></li> </ul></div></div> </td> </tr> </table> <span class="doNotDisplay"> <a href="http://www.kde.org/" accesskey="8">KDE Home</a> | <a href="http://accessibility.kde.org/" accesskey="9">KDE Accessibility Home</a> | <a href="http://www.kde.org/media/accesskeys.php" accesskey="0">Description of Access Keys</a> </span> <div style="height: 8px"></div> <div id="footer"> <div id="footer_left"> Maintained by <a href="mailto:groot@kde.org">Adriaan de Groot</a> and <a href="mailto:winter@kde.org">Allen Winter</a>. <br/> KDE and K Desktop Environment are trademarks of <a href="http://www.kde.org/areas/kde-ev/" title="Homepage of the KDE non-profit Organization">KDE e.V.</a> | <a href="http://www.kde.org/contact/impressum.php">Legal</a> </div> <div id="footer_right"><img src="/media/images/footer_right.png" style="margin: 0px" alt="" /></div> </div> <!-- WARNING: DO NOT SEND MAIL TO THE FOLLOWING EMAIL ADDRESS! YOU WILL BE BLOCKED INSTANTLY AND PERMANENTLY! <a href="mailto:aaaatrap-425acc3b5374943f@kde.org">Block me</a> WARNING END --> </body> </html>