Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 98d6b53e11e983e268c3e19f14e091a0 > files > 883

kdepim-devel-doc-3.5.9-9mdv2008.1.x86_64.rpm

<?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: kabcore.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>kabcore.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) 2003 - 2004 Tobias Koenig &lt;tokoe@kde.org&gt;</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="comment">// Needed for ugly hack, to be removed in 4.0</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;unistd.h&gt;</span> <span class="comment">// for usleep</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;qeventloop.h&gt;</span>
<a name="l00027"></a>00027 
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;qclipboard.h&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;qdir.h&gt;</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include &lt;qfile.h&gt;</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;qlabel.h&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;qlayout.h&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;qptrlist.h&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;qwidgetstack.h&gt;</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;qregexp.h&gt;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;qvbox.h&gt;</span>
<a name="l00037"></a>00037 
<a name="l00038"></a>00038 <span class="preprocessor">#include &lt;kabc/addresseelist.h&gt;</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include &lt;kabc/errorhandler.h&gt;</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;kabc/resource.h&gt;</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include &lt;kabc/stdaddressbook.h&gt;</span>
<a name="l00042"></a>00042 <span class="preprocessor">#include &lt;kabc/vcardconverter.h&gt;</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include &lt;kabc/resourcefile.h&gt;</span>
<a name="l00044"></a>00044 <span class="preprocessor">#include &lt;kaboutdata.h&gt;</span>
<a name="l00045"></a>00045 <span class="preprocessor">#include &lt;kaccelmanager.h&gt;</span>
<a name="l00046"></a>00046 <span class="preprocessor">#include &lt;kapplication.h&gt;</span>
<a name="l00047"></a>00047 <span class="preprocessor">#include &lt;dcopclient.h&gt;</span>
<a name="l00048"></a>00048 <span class="preprocessor">#include &lt;kactionclasses.h&gt;</span>
<a name="l00049"></a>00049 <span class="preprocessor">#include &lt;kcmdlineargs.h&gt;</span>
<a name="l00050"></a>00050 <span class="preprocessor">#include &lt;kcmultidialog.h&gt;</span>
<a name="l00051"></a>00051 <span class="preprocessor">#include &lt;kdebug.h&gt;</span>
<a name="l00052"></a>00052 <span class="preprocessor">#include &lt;kdeversion.h&gt;</span>
<a name="l00053"></a>00053 <span class="preprocessor">#include &lt;kimproxy.h&gt;</span>
<a name="l00054"></a>00054 <span class="preprocessor">#include &lt;klocale.h&gt;</span>
<a name="l00055"></a>00055 <span class="preprocessor">#include &lt;kmessagebox.h&gt;</span>
<a name="l00056"></a>00056 <span class="preprocessor">#include &lt;kprinter.h&gt;</span>
<a name="l00057"></a>00057 <span class="preprocessor">#include &lt;kprotocolinfo.h&gt;</span>
<a name="l00058"></a>00058 <span class="preprocessor">#include &lt;kpushbutton.h&gt;</span>
<a name="l00059"></a>00059 <span class="preprocessor">#include &lt;kresources/selectdialog.h&gt;</span>
<a name="l00060"></a>00060 <span class="preprocessor">#include &lt;kstandarddirs.h&gt;</span>
<a name="l00061"></a>00061 <span class="preprocessor">#include &lt;kstatusbar.h&gt;</span>
<a name="l00062"></a>00062 <span class="preprocessor">#include &lt;kstdguiitem.h&gt;</span>
<a name="l00063"></a>00063 <span class="preprocessor">#include &lt;kxmlguiclient.h&gt;</span>
<a name="l00064"></a>00064 <span class="preprocessor">#include &lt;ktoolbar.h&gt;</span>
<a name="l00065"></a>00065 <span class="preprocessor">#include &lt;libkdepim/addresseeview.h&gt;</span>
<a name="l00066"></a>00066 <span class="preprocessor">#include &lt;libkdepim/categoryeditdialog.h&gt;</span>
<a name="l00067"></a>00067 <span class="preprocessor">#include &lt;libkdepim/categoryselectdialog.h&gt;</span>
<a name="l00068"></a>00068 <span class="preprocessor">#include "distributionlisteditor.h"</span>
<a name="l00069"></a>00069 
<a name="l00070"></a>00070 <span class="preprocessor">#include "addresseeutil.h"</span>
<a name="l00071"></a>00071 <span class="preprocessor">#include "addresseeeditordialog.h"</span>
<a name="l00072"></a>00072 <span class="preprocessor">#include "distributionlistentryview.h"</span>
<a name="l00073"></a>00073 <span class="preprocessor">#include "extensionmanager.h"</span>
<a name="l00074"></a>00074 <span class="preprocessor">#include "filterselectionwidget.h"</span>
<a name="l00075"></a>00075 <span class="preprocessor">#include "incsearchwidget.h"</span>
<a name="l00076"></a>00076 <span class="preprocessor">#include "jumpbuttonbar.h"</span>
<a name="l00077"></a>00077 <span class="preprocessor">#include "kablock.h"</span>
<a name="l00078"></a>00078 <span class="preprocessor">#include "kabprefs.h"</span>
<a name="l00079"></a>00079 <span class="preprocessor">#include "kabtools.h"</span>
<a name="l00080"></a>00080 <span class="preprocessor">#include "kaddressbookservice.h"</span>
<a name="l00081"></a>00081 <span class="preprocessor">#include "kaddressbookiface.h"</span>
<a name="l00082"></a>00082 <span class="preprocessor">#include "ldapsearchdialog.h"</span>
<a name="l00083"></a>00083 <span class="preprocessor">#include "locationmap.h"</span>
<a name="l00084"></a>00084 <span class="preprocessor">#include "printing/printingwizard.h"</span>
<a name="l00085"></a>00085 <span class="preprocessor">#include "searchmanager.h"</span>
<a name="l00086"></a>00086 <span class="preprocessor">#include "undocmds.h"</span>
<a name="l00087"></a>00087 <span class="preprocessor">#include "viewmanager.h"</span>
<a name="l00088"></a>00088 <span class="preprocessor">#include "xxportmanager.h"</span>
<a name="l00089"></a>00089 
<a name="l00090"></a>00090 <span class="preprocessor">#include "kabcore.h"</span>
<a name="l00091"></a>00091 
<a name="l00092"></a>00092 KABCore::KABCore( KXMLGUIClient *client, <span class="keywordtype">bool</span> readWrite, QWidget *parent,
<a name="l00093"></a>00093                   <span class="keyword">const</span> QString &amp;file, <span class="keyword">const</span> <span class="keywordtype">char</span> *name )
<a name="l00094"></a>00094   : KAB::Core( client, parent, name ), mStatusBar( 0 ), mViewManager( 0 ),
<a name="l00095"></a>00095     mExtensionManager( 0 ), mJumpButtonBar( 0 ), mCategorySelectDialog( 0 ),
<a name="l00096"></a>00096     mCategoryEditDialog( 0 ), mLdapSearchDialog( 0 ), mReadWrite( readWrite ),
<a name="l00097"></a>00097     mModified( false )
<a name="l00098"></a>00098 {
<a name="l00099"></a>00099   mWidget = <span class="keyword">new</span> QWidget( parent, name );
<a name="l00100"></a>00100 
<a name="l00101"></a>00101   mIsPart = !parent-&gt;isA( <span class="stringliteral">"KAddressBookMain"</span> );
<a name="l00102"></a>00102 
<a name="l00103"></a>00103   mAddressBookChangedTimer = <span class="keyword">new</span> QTimer( <span class="keyword">this</span> );
<a name="l00104"></a>00104   connect( mAddressBookChangedTimer, SIGNAL( timeout() ),
<a name="l00105"></a>00105            <span class="keyword">this</span>, SLOT( addressBookChanged() ) );
<a name="l00106"></a>00106 
<a name="l00107"></a>00107   <span class="keywordflow">if</span> ( file.isEmpty() ) {
<a name="l00108"></a>00108     mAddressBook = KABC::StdAddressBook::self( <span class="keyword">true</span> );
<a name="l00109"></a>00109   } <span class="keywordflow">else</span> {
<a name="l00110"></a>00110     kdDebug(5720) &lt;&lt; <span class="stringliteral">"KABCore(): document '"</span> &lt;&lt; file &lt;&lt; <span class="stringliteral">"'"</span> &lt;&lt; endl;
<a name="l00111"></a>00111     mAddressBook = <span class="keyword">new</span> KABC::AddressBook;
<a name="l00112"></a>00112     mAddressBook-&gt;addResource( <span class="keyword">new</span> KABC::ResourceFile( file ) );
<a name="l00113"></a>00113     <span class="keywordflow">if</span> ( !mAddressBook-&gt;load() ) {
<a name="l00114"></a>00114       KMessageBox::error( parent, i18n(<span class="stringliteral">"Unable to load '%1'."</span>).arg( file ) );
<a name="l00115"></a>00115     }
<a name="l00116"></a>00116   }
<a name="l00117"></a>00117   mAddressBook-&gt;setErrorHandler( <span class="keyword">new</span> KABC::GuiErrorHandler( mWidget ) );
<a name="l00118"></a>00118 
<a name="l00119"></a>00119 <span class="preprocessor">#if ! KDE_IS_VERSION(3,5,8)</span>
<a name="l00120"></a>00120 <span class="preprocessor"></span>  mAddressBook-&gt;addCustomField( i18n( <span class="stringliteral">"Department"</span> ), KABC::Field::Organization,
<a name="l00121"></a>00121                                 <span class="stringliteral">"X-Department"</span>, <span class="stringliteral">"KADDRESSBOOK"</span> );
<a name="l00122"></a>00122 <span class="preprocessor">#endif</span>
<a name="l00123"></a>00123 <span class="preprocessor"></span>  mAddressBook-&gt;addCustomField( i18n( <span class="stringliteral">"Profession"</span> ), KABC::Field::Organization,
<a name="l00124"></a>00124                                 <span class="stringliteral">"X-Profession"</span>, <span class="stringliteral">"KADDRESSBOOK"</span> );
<a name="l00125"></a>00125   mAddressBook-&gt;addCustomField( i18n( <span class="stringliteral">"Assistant's Name"</span> ), KABC::Field::Organization,
<a name="l00126"></a>00126                                 <span class="stringliteral">"X-AssistantsName"</span>, <span class="stringliteral">"KADDRESSBOOK"</span> );
<a name="l00127"></a>00127   mAddressBook-&gt;addCustomField( i18n( <span class="stringliteral">"Manager's Name"</span> ), KABC::Field::Organization,
<a name="l00128"></a>00128                                 <span class="stringliteral">"X-ManagersName"</span>, <span class="stringliteral">"KADDRESSBOOK"</span> );
<a name="l00129"></a>00129   mAddressBook-&gt;addCustomField( i18n( <span class="stringliteral">"Partner's Name"</span> ), KABC::Field::Personal,
<a name="l00130"></a>00130                                 <span class="stringliteral">"X-SpousesName"</span>, <span class="stringliteral">"KADDRESSBOOK"</span> );
<a name="l00131"></a>00131   mAddressBook-&gt;addCustomField( i18n( <span class="stringliteral">"Office"</span> ), KABC::Field::Personal,
<a name="l00132"></a>00132                                 <span class="stringliteral">"X-Office"</span>, <span class="stringliteral">"KADDRESSBOOK"</span> );
<a name="l00133"></a>00133   mAddressBook-&gt;addCustomField( i18n( <span class="stringliteral">"IM Address"</span> ), KABC::Field::Personal,
<a name="l00134"></a>00134                                 <span class="stringliteral">"X-IMAddress"</span>, <span class="stringliteral">"KADDRESSBOOK"</span> );
<a name="l00135"></a>00135   mAddressBook-&gt;addCustomField( i18n( <span class="stringliteral">"Anniversary"</span> ), KABC::Field::Personal,
<a name="l00136"></a>00136                                 <span class="stringliteral">"X-Anniversary"</span>, <span class="stringliteral">"KADDRESSBOOK"</span> );
<a name="l00137"></a>00137   mAddressBook-&gt;addCustomField( i18n( <span class="stringliteral">"Blog"</span> ), KABC::Field::Personal,
<a name="l00138"></a>00138                                 <span class="stringliteral">"BlogFeed"</span>, <span class="stringliteral">"KADDRESSBOOK"</span> );
<a name="l00139"></a>00139 
<a name="l00140"></a>00140   mSearchManager = <span class="keyword">new</span> KAB::SearchManager( mAddressBook, parent );
<a name="l00141"></a>00141 
<a name="l00142"></a>00142   connect( mSearchManager, SIGNAL( contactsUpdated() ),
<a name="l00143"></a>00143            <span class="keyword">this</span>, SLOT( slotContactsUpdated() ) );
<a name="l00144"></a>00144 
<a name="l00145"></a>00145   initGUI();
<a name="l00146"></a>00146 
<a name="l00147"></a>00147   connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook* ) ),
<a name="l00148"></a>00148            SLOT( delayedAddressBookChanged() ) );
<a name="l00149"></a>00149   connect( mAddressBook, SIGNAL( loadingFinished( Resource* ) ),
<a name="l00150"></a>00150            SLOT( delayedAddressBookChanged() ) );
<a name="l00151"></a>00151 
<a name="l00152"></a>00152   mIncSearchWidget-&gt;setFocus();
<a name="l00153"></a>00153 
<a name="l00154"></a>00154   connect( mViewManager, SIGNAL( selected( <span class="keyword">const</span> QString&amp; ) ),
<a name="l00155"></a>00155            SLOT( setContactSelected( <span class="keyword">const</span> QString&amp; ) ) );
<a name="l00156"></a>00156   connect( mViewManager, SIGNAL( executed( <span class="keyword">const</span> QString&amp; ) ),
<a name="l00157"></a>00157            SLOT( editContact( <span class="keyword">const</span> QString&amp; ) ) );
<a name="l00158"></a>00158   connect( mViewManager, SIGNAL( modified() ),
<a name="l00159"></a>00159            SLOT( setModified() ) );
<a name="l00160"></a>00160   connect( mViewManager, SIGNAL( urlDropped( <span class="keyword">const</span> KURL&amp; ) ),
<a name="l00161"></a>00161            mXXPortManager, SLOT( importVCard( <span class="keyword">const</span> KURL&amp; ) ) );
<a name="l00162"></a>00162   connect( mViewManager, SIGNAL( viewFieldsChanged() ),
<a name="l00163"></a>00163            SLOT( updateIncSearchWidget() ) );
<a name="l00164"></a>00164   connect( mExtensionManager, SIGNAL( modified( <span class="keyword">const</span> KABC::Addressee::List&amp; ) ),
<a name="l00165"></a>00165            <span class="keyword">this</span>, SLOT( extensionModified( <span class="keyword">const</span> KABC::Addressee::List&amp; ) ) );
<a name="l00166"></a>00166   connect( mExtensionManager, SIGNAL( deleted( <span class="keyword">const</span> QStringList&amp; ) ),
<a name="l00167"></a>00167            <span class="keyword">this</span>, SLOT( extensionDeleted( <span class="keyword">const</span> QStringList&amp; ) ) );
<a name="l00168"></a>00168 
<a name="l00169"></a>00169   connect( mXXPortManager, SIGNAL( modified() ),
<a name="l00170"></a>00170            SLOT( setModified() ) );
<a name="l00171"></a>00171 
<a name="l00172"></a>00172   connect( mDetailsViewer, SIGNAL( highlightedMessage( <span class="keyword">const</span> QString&amp; ) ),
<a name="l00173"></a>00173            SLOT( detailsHighlighted( <span class="keyword">const</span> QString&amp; ) ) );
<a name="l00174"></a>00174 
<a name="l00175"></a>00175   connect( mIncSearchWidget, SIGNAL( scrollUp() ),
<a name="l00176"></a>00176            mViewManager, SLOT( scrollUp() ) );
<a name="l00177"></a>00177   connect( mIncSearchWidget, SIGNAL( scrollDown() ),
<a name="l00178"></a>00178            mViewManager, SLOT( scrollDown() ) );
<a name="l00179"></a>00179 
<a name="l00180"></a>00180   mAddressBookService = <span class="keyword">new</span> KAddressBookService( <span class="keyword">this</span> );
<a name="l00181"></a>00181 
<a name="l00182"></a>00182   mCommandHistory = <span class="keyword">new</span> KCommandHistory( actionCollection(), <span class="keyword">true</span> );
<a name="l00183"></a>00183   connect( mCommandHistory, SIGNAL( commandExecuted() ),
<a name="l00184"></a>00184            mSearchManager, SLOT( reload() ) );
<a name="l00185"></a>00185 
<a name="l00186"></a>00186   mSearchManager-&gt;reload();
<a name="l00187"></a>00187 
<a name="l00188"></a>00188   setModified( <span class="keyword">false</span> );
<a name="l00189"></a>00189 
<a name="l00190"></a>00190   KAcceleratorManager::manage( mWidget );
<a name="l00191"></a>00191 
<a name="l00192"></a>00192   mKIMProxy = ::KIMProxy::instance( kapp-&gt;dcopClient() );
<a name="l00193"></a>00193 }
<a name="l00194"></a>00194 
<a name="l00195"></a>00195 KABCore::~KABCore()
<a name="l00196"></a>00196 {
<a name="l00197"></a>00197   mAddressBook-&gt;disconnect();
<a name="l00198"></a>00198 
<a name="l00199"></a>00199   mAddressBook = 0;
<a name="l00200"></a>00200   KABC::StdAddressBook::close();
<a name="l00201"></a>00201   mKIMProxy = 0;
<a name="l00202"></a>00202 }
<a name="l00203"></a>00203 
<a name="l00204"></a>00204 <span class="keywordtype">void</span> KABCore::restoreSettings()
<a name="l00205"></a>00205 {
<a name="l00206"></a>00206   <span class="keywordtype">bool</span> state = KABPrefs::instance()-&gt;jumpButtonBarVisible();
<a name="l00207"></a>00207   mActionJumpBar-&gt;setChecked( state );
<a name="l00208"></a>00208   setJumpButtonBarVisible( state );
<a name="l00209"></a>00209 
<a name="l00210"></a>00210   state = KABPrefs::instance()-&gt;detailsPageVisible();
<a name="l00211"></a>00211   mActionDetails-&gt;setChecked( state );
<a name="l00212"></a>00212   setDetailsVisible( state );
<a name="l00213"></a>00213 
<a name="l00214"></a>00214   mViewManager-&gt;restoreSettings();
<a name="l00215"></a>00215   mExtensionManager-&gt;restoreSettings();
<a name="l00216"></a>00216 
<a name="l00217"></a>00217   updateIncSearchWidget();
<a name="l00218"></a>00218   mIncSearchWidget-&gt;setCurrentItem( KABPrefs::instance()-&gt;currentIncSearchField() );
<a name="l00219"></a>00219 
<a name="l00220"></a>00220   QValueList&lt;int&gt; splitterSize = KABPrefs::instance()-&gt;detailsSplitter();
<a name="l00221"></a>00221   <span class="keywordflow">if</span> ( splitterSize.count() == 0 ) {
<a name="l00222"></a>00222     splitterSize.append( 360 );
<a name="l00223"></a>00223     splitterSize.append( 260 );
<a name="l00224"></a>00224   }
<a name="l00225"></a>00225   mDetailsSplitter-&gt;setSizes( splitterSize );
<a name="l00226"></a>00226 
<a name="l00227"></a>00227   <span class="keyword">const</span> QValueList&lt;int&gt; leftSplitterSizes = KABPrefs::instance()-&gt;leftSplitter();
<a name="l00228"></a>00228   <span class="keywordflow">if</span> ( !leftSplitterSizes.isEmpty() )    
<a name="l00229"></a>00229       mLeftSplitter-&gt;setSizes( leftSplitterSizes );
<a name="l00230"></a>00230 }
<a name="l00231"></a>00231 
<a name="l00232"></a>00232 <span class="keywordtype">void</span> KABCore::saveSettings()
<a name="l00233"></a>00233 {
<a name="l00234"></a>00234   KABPrefs::instance()-&gt;setJumpButtonBarVisible( mActionJumpBar-&gt;isChecked() );
<a name="l00235"></a>00235   KABPrefs::instance()-&gt;setDetailsPageVisible( mActionDetails-&gt;isChecked() );
<a name="l00236"></a>00236   KABPrefs::instance()-&gt;setDetailsSplitter( mDetailsSplitter-&gt;sizes() );
<a name="l00237"></a>00237   KABPrefs::instance()-&gt;setLeftSplitter( mLeftSplitter-&gt;sizes() );
<a name="l00238"></a>00238   
<a name="l00239"></a>00239   mExtensionManager-&gt;saveSettings();
<a name="l00240"></a>00240   mViewManager-&gt;saveSettings();
<a name="l00241"></a>00241 
<a name="l00242"></a>00242   KABPrefs::instance()-&gt;setCurrentIncSearchField( mIncSearchWidget-&gt;currentItem() );
<a name="l00243"></a>00243 }
<a name="l00244"></a>00244 
<a name="l00245"></a>00245 KABC::AddressBook *KABCore::addressBook()<span class="keyword"> const</span>
<a name="l00246"></a>00246 <span class="keyword"></span>{
<a name="l00247"></a>00247   <span class="keywordflow">return</span> mAddressBook;
<a name="l00248"></a>00248 }
<a name="l00249"></a>00249 
<a name="l00250"></a>00250 KConfig *KABCore::config()<span class="keyword"> const</span>
<a name="l00251"></a>00251 <span class="keyword"></span>{
<a name="l00252"></a>00252   <span class="keywordflow">return</span> KABPrefs::instance()-&gt;config();
<a name="l00253"></a>00253 }
<a name="l00254"></a>00254 
<a name="l00255"></a>00255 KActionCollection *KABCore::actionCollection()<span class="keyword"> const</span>
<a name="l00256"></a>00256 <span class="keyword"></span>{
<a name="l00257"></a>00257   <span class="keywordflow">return</span> guiClient()-&gt;actionCollection();
<a name="l00258"></a>00258 }
<a name="l00259"></a>00259 
<a name="l00260"></a>00260 KABC::Field *KABCore::currentSortField()<span class="keyword"> const</span>
<a name="l00261"></a>00261 <span class="keyword"></span>{
<a name="l00262"></a>00262   <span class="keywordflow">return</span> mViewManager-&gt;currentSortField();
<a name="l00263"></a>00263 }
<a name="l00264"></a>00264 
<a name="l00265"></a>00265 QStringList KABCore::selectedUIDs()<span class="keyword"> const</span>
<a name="l00266"></a>00266 <span class="keyword"></span>{
<a name="l00267"></a>00267   <span class="keywordflow">return</span> mViewManager-&gt;selectedUids();
<a name="l00268"></a>00268 }
<a name="l00269"></a>00269 
<a name="l00270"></a>00270 KABC::Resource *KABCore::requestResource( QWidget *parent )
<a name="l00271"></a>00271 {
<a name="l00272"></a>00272   QPtrList&lt;KABC::Resource&gt; kabcResources = addressBook()-&gt;resources();
<a name="l00273"></a>00273 
<a name="l00274"></a>00274   QPtrList&lt;KRES::Resource&gt; kresResources;
<a name="l00275"></a>00275   QPtrListIterator&lt;KABC::Resource&gt; resIt( kabcResources );
<a name="l00276"></a>00276   KABC::Resource *resource;
<a name="l00277"></a>00277   <span class="keywordflow">while</span> ( ( resource = resIt.current() ) != 0 ) {
<a name="l00278"></a>00278     ++resIt;
<a name="l00279"></a>00279     <span class="keywordflow">if</span> ( !resource-&gt;readOnly() ) {
<a name="l00280"></a>00280       KRES::Resource *res = <span class="keyword">static_cast&lt;</span>KRES::Resource*<span class="keyword">&gt;</span>( resource );
<a name="l00281"></a>00281       <span class="keywordflow">if</span> ( res )
<a name="l00282"></a>00282         kresResources.append( res );
<a name="l00283"></a>00283     }
<a name="l00284"></a>00284   }
<a name="l00285"></a>00285 
<a name="l00286"></a>00286   KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent );
<a name="l00287"></a>00287   <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>KABC::Resource*<span class="keyword">&gt;</span>( res );
<a name="l00288"></a>00288 }
<a name="l00289"></a>00289 
<a name="l00290"></a>00290 QWidget *KABCore::widget()<span class="keyword"> const</span>
<a name="l00291"></a>00291 <span class="keyword"></span>{
<a name="l00292"></a>00292   <span class="keywordflow">return</span> mWidget;
<a name="l00293"></a>00293 }
<a name="l00294"></a>00294 
<a name="l00295"></a>00295 KAboutData *KABCore::createAboutData()
<a name="l00296"></a>00296 {
<a name="l00297"></a>00297   KAboutData *about = <span class="keyword">new</span> KAboutData( <span class="stringliteral">"kaddressbook"</span>, I18N_NOOP( <span class="stringliteral">"KAddressBook"</span> ),
<a name="l00298"></a>00298                                       <span class="stringliteral">"3.5.9"</span>, I18N_NOOP( <span class="stringliteral">"The KDE Address Book"</span> ),
<a name="l00299"></a>00299                                       KAboutData::License_GPL_V2,
<a name="l00300"></a>00300                                       I18N_NOOP( <span class="stringliteral">"(c) 1997-2005, The KDE PIM Team"</span> ) );
<a name="l00301"></a>00301   about-&gt;addAuthor( <span class="stringliteral">"Tobias Koenig"</span>, I18N_NOOP( <span class="stringliteral">"Current maintainer"</span> ), <span class="stringliteral">"tokoe@kde.org"</span> );
<a name="l00302"></a>00302   about-&gt;addAuthor( <span class="stringliteral">"Don Sanders"</span>, I18N_NOOP( <span class="stringliteral">"Original author"</span> ) );
<a name="l00303"></a>00303   about-&gt;addAuthor( <span class="stringliteral">"Cornelius Schumacher"</span>,
<a name="l00304"></a>00304                     I18N_NOOP( <span class="stringliteral">"Co-maintainer, libkabc port, CSV import/export"</span> ),
<a name="l00305"></a>00305                     <span class="stringliteral">"schumacher@kde.org"</span> );
<a name="l00306"></a>00306   about-&gt;addAuthor( <span class="stringliteral">"Mike Pilone"</span>, I18N_NOOP( <span class="stringliteral">"GUI and framework redesign"</span> ),
<a name="l00307"></a>00307                     <span class="stringliteral">"mpilone@slac.com"</span> );
<a name="l00308"></a>00308   about-&gt;addAuthor( <span class="stringliteral">"Greg Stern"</span>, I18N_NOOP( <span class="stringliteral">"DCOP interface"</span> ) );
<a name="l00309"></a>00309   about-&gt;addAuthor( <span class="stringliteral">"Mark Westcott"</span>, I18N_NOOP( <span class="stringliteral">"Contact pinning"</span> ) );
<a name="l00310"></a>00310   about-&gt;addAuthor( <span class="stringliteral">"Mischel Boyer de la Giroday"</span>, I18N_NOOP( <span class="stringliteral">"LDAP Lookup"</span> ),
<a name="l00311"></a>00311                     <span class="stringliteral">"michel@klaralvdalens-datakonsult.se"</span> );
<a name="l00312"></a>00312   about-&gt;addAuthor( <span class="stringliteral">"Steffen Hansen"</span>, I18N_NOOP( <span class="stringliteral">"LDAP Lookup"</span> ),
<a name="l00313"></a>00313                     <span class="stringliteral">"hansen@kde.org"</span> );
<a name="l00314"></a>00314 
<a name="l00315"></a>00315   <span class="keywordflow">return</span> about;
<a name="l00316"></a>00316 }
<a name="l00317"></a>00317 
<a name="l00318"></a>00318 <span class="keywordtype">void</span> KABCore::setStatusBar( KStatusBar *statusBar )
<a name="l00319"></a>00319 {
<a name="l00320"></a>00320   mStatusBar = statusBar;
<a name="l00321"></a>00321 }
<a name="l00322"></a>00322 
<a name="l00323"></a>00323 KStatusBar *KABCore::statusBar()<span class="keyword"> const</span>
<a name="l00324"></a>00324 <span class="keyword"></span>{
<a name="l00325"></a>00325   <span class="keywordflow">return</span> mStatusBar;
<a name="l00326"></a>00326 }
<a name="l00327"></a>00327 
<a name="l00328"></a>00328 <span class="keywordtype">void</span> KABCore::setContactSelected( <span class="keyword">const</span> QString &amp;uid )
<a name="l00329"></a>00329 {
<a name="l00330"></a>00330   KABC::Addressee addr = mAddressBook-&gt;findByUid( uid );
<a name="l00331"></a>00331   <span class="keywordflow">if</span> ( !mDetailsViewer-&gt;isHidden() )
<a name="l00332"></a>00332     mDetailsViewer-&gt;setAddressee( addr );
<a name="l00333"></a>00333 <span class="preprocessor">#ifdef KDEPIM_NEW_DISTRLISTS </span>
<a name="l00334"></a>00334 <span class="preprocessor"></span>  <span class="keywordflow">if</span> ( !mSelectedDistributionList.isNull() &amp;&amp; mDistListEntryView-&gt;isShown() ) {
<a name="l00335"></a>00335       showDistributionListEntry( uid );
<a name="l00336"></a>00336   }
<a name="l00337"></a>00337 <span class="preprocessor">#endif</span>
<a name="l00338"></a>00338 <span class="preprocessor"></span>  mExtensionManager-&gt;setSelectionChanged();
<a name="l00339"></a>00339 
<a name="l00340"></a>00340   <span class="comment">// update the actions</span>
<a name="l00341"></a>00341   <span class="keywordtype">bool</span> selected = !uid.isEmpty();
<a name="l00342"></a>00342 
<a name="l00343"></a>00343   <span class="keywordflow">if</span> ( mReadWrite ) {
<a name="l00344"></a>00344     mActionCut-&gt;setEnabled( selected );
<a name="l00345"></a>00345 
<a name="l00346"></a>00346     QClipboard *cb = QApplication::clipboard();
<a name="l00347"></a>00347     KABC::Addressee::List list = <a class="code" href="classAddresseeUtil.html#91fff4cd37a2f421105a61a661975ec9" title="Convert a string from the clipboard into a list of addressee objects.">AddresseeUtil::clipboardToAddressees</a>( cb-&gt;text() );
<a name="l00348"></a>00348     mActionPaste-&gt;setEnabled( !list.isEmpty() );
<a name="l00349"></a>00349   }
<a name="l00350"></a>00350 
<a name="l00351"></a>00351   mActionCopy-&gt;setEnabled( selected );
<a name="l00352"></a>00352   mActionDelete-&gt;setEnabled( selected );
<a name="l00353"></a>00353   mActionEditAddressee-&gt;setEnabled( selected );
<a name="l00354"></a>00354   mActionCopyAddresseeTo-&gt;setEnabled( selected );
<a name="l00355"></a>00355   mActionMoveAddresseeTo-&gt;setEnabled( selected );
<a name="l00356"></a>00356   mActionMail-&gt;setEnabled( selected );
<a name="l00357"></a>00357   mActionMailVCard-&gt;setEnabled( selected );
<a name="l00358"></a>00358   mActionChat-&gt;setEnabled( selected &amp;&amp; mKIMProxy &amp;&amp; mKIMProxy-&gt;initialize() );
<a name="l00359"></a>00359   mActionWhoAmI-&gt;setEnabled( selected );
<a name="l00360"></a>00360   mActionCategories-&gt;setEnabled( selected );
<a name="l00361"></a>00361   mActionMerge-&gt;setEnabled( selected );
<a name="l00362"></a>00362 }
<a name="l00363"></a>00363 
<a name="l00364"></a>00364 <span class="keywordtype">void</span> KABCore::sendMail()
<a name="l00365"></a>00365 {
<a name="l00366"></a>00366   sendMail( mViewManager-&gt;selectedEmails().join( <span class="stringliteral">", "</span> ) );
<a name="l00367"></a>00367 }
<a name="l00368"></a>00368 
<a name="l00369"></a>00369 <span class="keywordtype">void</span> KABCore::sendMail( <span class="keyword">const</span> QString&amp; email )
<a name="l00370"></a>00370 {
<a name="l00371"></a>00371   kapp-&gt;invokeMailer( email, <span class="stringliteral">""</span> );
<a name="l00372"></a>00372 }
<a name="l00373"></a>00373 
<a name="l00374"></a>00374 <span class="keywordtype">void</span> KABCore::mailVCard()
<a name="l00375"></a>00375 {
<a name="l00376"></a>00376   QStringList uids = mViewManager-&gt;selectedUids();
<a name="l00377"></a>00377   <span class="keywordflow">if</span> ( !uids.isEmpty() )
<a name="l00378"></a>00378     mailVCard( uids );
<a name="l00379"></a>00379 }
<a name="l00380"></a>00380 
<a name="l00381"></a>00381 <span class="keywordtype">void</span> KABCore::mailVCard( <span class="keyword">const</span> QStringList &amp;uids )
<a name="l00382"></a>00382 {
<a name="l00383"></a>00383   KABTools::mailVCards( uids, mAddressBook );
<a name="l00384"></a>00384 }
<a name="l00385"></a>00385 
<a name="l00386"></a>00386 <span class="keywordtype">void</span> KABCore::startChat()
<a name="l00387"></a>00387 {
<a name="l00388"></a>00388   QStringList uids = mViewManager-&gt;selectedUids();
<a name="l00389"></a>00389   <span class="keywordflow">if</span> ( !uids.isEmpty() )
<a name="l00390"></a>00390     mKIMProxy-&gt;chatWithContact( uids.first() );
<a name="l00391"></a>00391 }
<a name="l00392"></a>00392 
<a name="l00393"></a>00393 <span class="keywordtype">void</span> KABCore::browse( <span class="keyword">const</span> QString&amp; url )
<a name="l00394"></a>00394 {
<a name="l00395"></a>00395   kapp-&gt;invokeBrowser( url );
<a name="l00396"></a>00396 }
<a name="l00397"></a>00397 
<a name="l00398"></a>00398 <span class="keywordtype">void</span> KABCore::selectAllContacts()
<a name="l00399"></a>00399 {
<a name="l00400"></a>00400   mViewManager-&gt;setSelected( QString::null, <span class="keyword">true</span> );
<a name="l00401"></a>00401 }
<a name="l00402"></a>00402 
<a name="l00403"></a>00403 <span class="keywordtype">void</span> KABCore::deleteContacts()
<a name="l00404"></a>00404 {
<a name="l00405"></a>00405   QStringList uidList = mViewManager-&gt;selectedUids();
<a name="l00406"></a>00406 
<a name="l00407"></a>00407   deleteContacts( uidList );
<a name="l00408"></a>00408 }
<a name="l00409"></a>00409 
<a name="l00410"></a>00410 <span class="keywordtype">void</span> KABCore::deleteDistributionLists( <span class="keyword">const</span> QStringList &amp; names )
<a name="l00411"></a>00411 {
<a name="l00412"></a>00412   <span class="keywordflow">if</span> ( names.isEmpty() )
<a name="l00413"></a>00413       <span class="keywordflow">return</span>;
<a name="l00414"></a>00414   <span class="keywordflow">if</span> ( KMessageBox::warningContinueCancelList( mWidget, i18n( <span class="stringliteral">"Do you really want to delete this distribution list?"</span>,
<a name="l00415"></a>00415                                                  <span class="stringliteral">"Do you really want to delete these %n distribution lists?"</span>, names.count() ),
<a name="l00416"></a>00416                                                  names, QString::null, KStdGuiItem::del() ) == KMessageBox::Cancel )
<a name="l00417"></a>00417    <span class="keywordflow">return</span>;
<a name="l00418"></a>00418 
<a name="l00419"></a>00419   QStringList uids;
<a name="l00420"></a>00420   <span class="keywordflow">for</span> ( QStringList::ConstIterator it = names.begin(); it != names.end(); ++it ) {
<a name="l00421"></a>00421       uids.append( KPIM::DistributionList::findByName( mAddressBook, *it ).uid() ); 
<a name="l00422"></a>00422   }
<a name="l00423"></a>00423   DeleteCommand *command = <span class="keyword">new</span> DeleteCommand( mAddressBook, uids );
<a name="l00424"></a>00424   mCommandHistory-&gt;addCommand( command );  
<a name="l00425"></a>00425   setModified( <span class="keyword">true</span> );
<a name="l00426"></a>00426 }
<a name="l00427"></a>00427 
<a name="l00428"></a>00428 <span class="keywordtype">void</span> KABCore::deleteContacts( <span class="keyword">const</span> QStringList &amp;uids )
<a name="l00429"></a>00429 {
<a name="l00430"></a>00430   <span class="keywordflow">if</span> ( uids.count() &gt; 0 ) {
<a name="l00431"></a>00431     QStringList names;
<a name="l00432"></a>00432     QStringList::ConstIterator it = uids.begin();
<a name="l00433"></a>00433     <span class="keyword">const</span> QStringList::ConstIterator endIt( uids.end() );
<a name="l00434"></a>00434     <span class="keywordflow">while</span> ( it != endIt ) {
<a name="l00435"></a>00435       KABC::Addressee addr = mAddressBook-&gt;findByUid( *it );
<a name="l00436"></a>00436       names.append( addr.realName().isEmpty() ? addr.preferredEmail() : addr.realName() );
<a name="l00437"></a>00437       ++it;
<a name="l00438"></a>00438     }
<a name="l00439"></a>00439 
<a name="l00440"></a>00440     <span class="keywordflow">if</span> ( KMessageBox::warningContinueCancelList( mWidget, i18n( <span class="stringliteral">"Do you really want to delete this contact?"</span>,
<a name="l00441"></a>00441                                                  <span class="stringliteral">"Do you really want to delete these %n contacts?"</span>, uids.count() ),
<a name="l00442"></a>00442                                                  names, QString::null, KStdGuiItem::del() ) == KMessageBox::Cancel )
<a name="l00443"></a>00443       <span class="keywordflow">return</span>;
<a name="l00444"></a>00444 
<a name="l00445"></a>00445     DeleteCommand *command = <span class="keyword">new</span> DeleteCommand( mAddressBook, uids );
<a name="l00446"></a>00446     mCommandHistory-&gt;addCommand( command );
<a name="l00447"></a>00447 
<a name="l00448"></a>00448     <span class="comment">// now if we deleted anything, refresh</span>
<a name="l00449"></a>00449     setContactSelected( QString::null );
<a name="l00450"></a>00450     setModified( <span class="keyword">true</span> );
<a name="l00451"></a>00451   }
<a name="l00452"></a>00452 }
<a name="l00453"></a>00453 
<a name="l00454"></a>00454 <span class="keywordtype">void</span> KABCore::copyContacts()
<a name="l00455"></a>00455 {
<a name="l00456"></a>00456   KABC::Addressee::List addrList = mViewManager-&gt;selectedAddressees();
<a name="l00457"></a>00457 
<a name="l00458"></a>00458   QString clipText = <a class="code" href="classAddresseeUtil.html#5c6f304e6073417fe57faeb5bb857bd5" title="Same as above function, except that an entire list of KABC::Addressee objects will...">AddresseeUtil::addresseesToClipboard</a>( addrList );
<a name="l00459"></a>00459 
<a name="l00460"></a>00460   kdDebug(5720) &lt;&lt; <span class="stringliteral">"KABCore::copyContacts: "</span> &lt;&lt; clipText &lt;&lt; endl;
<a name="l00461"></a>00461 
<a name="l00462"></a>00462   QClipboard *cb = QApplication::clipboard();
<a name="l00463"></a>00463   cb-&gt;setText( clipText );
<a name="l00464"></a>00464 }
<a name="l00465"></a>00465 
<a name="l00466"></a>00466 <span class="keywordtype">void</span> KABCore::cutContacts()
<a name="l00467"></a>00467 {
<a name="l00468"></a>00468   QStringList uidList = mViewManager-&gt;selectedUids();
<a name="l00469"></a>00469 
<a name="l00470"></a>00470   <span class="keywordflow">if</span> ( uidList.size() &gt; 0 ) {
<a name="l00471"></a>00471     CutCommand *command = <span class="keyword">new</span> CutCommand( mAddressBook, uidList );
<a name="l00472"></a>00472     mCommandHistory-&gt;addCommand( command );
<a name="l00473"></a>00473 
<a name="l00474"></a>00474     setModified( <span class="keyword">true</span> );
<a name="l00475"></a>00475   }
<a name="l00476"></a>00476 }
<a name="l00477"></a>00477 
<a name="l00478"></a>00478 <span class="keywordtype">void</span> KABCore::pasteContacts()
<a name="l00479"></a>00479 {
<a name="l00480"></a>00480   QClipboard *cb = QApplication::clipboard();
<a name="l00481"></a>00481 
<a name="l00482"></a>00482   KABC::Addressee::List list = <a class="code" href="classAddresseeUtil.html#91fff4cd37a2f421105a61a661975ec9" title="Convert a string from the clipboard into a list of addressee objects.">AddresseeUtil::clipboardToAddressees</a>( cb-&gt;text() );
<a name="l00483"></a>00483 
<a name="l00484"></a>00484   pasteContacts( list );
<a name="l00485"></a>00485 }
<a name="l00486"></a>00486 
<a name="l00487"></a>00487 <span class="keywordtype">void</span> KABCore::pasteContacts( KABC::Addressee::List &amp;list )
<a name="l00488"></a>00488 {
<a name="l00489"></a>00489   KABC::Resource *resource = requestResource( mWidget );
<a name="l00490"></a>00490   <span class="keywordflow">if</span> ( !resource )
<a name="l00491"></a>00491     <span class="keywordflow">return</span>;
<a name="l00492"></a>00492 
<a name="l00493"></a>00493   KABC::Addressee::List::Iterator it;
<a name="l00494"></a>00494   <span class="keyword">const</span> KABC::Addressee::List::Iterator endIt( list.end() );
<a name="l00495"></a>00495   <span class="keywordflow">for</span> ( it = list.begin(); it != endIt; ++it )
<a name="l00496"></a>00496     (*it).setResource( resource );
<a name="l00497"></a>00497 
<a name="l00498"></a>00498   PasteCommand *command = <span class="keyword">new</span> PasteCommand( <span class="keyword">this</span>, list );
<a name="l00499"></a>00499   mCommandHistory-&gt;addCommand( command );
<a name="l00500"></a>00500 
<a name="l00501"></a>00501   setModified( <span class="keyword">true</span> );
<a name="l00502"></a>00502 }
<a name="l00503"></a>00503 
<a name="l00504"></a>00504 <span class="keywordtype">void</span> KABCore::mergeContacts()
<a name="l00505"></a>00505 {
<a name="l00506"></a>00506   KABC::Addressee::List list = mViewManager-&gt;selectedAddressees();
<a name="l00507"></a>00507   <span class="keywordflow">if</span> ( list.count() &lt; 2 )
<a name="l00508"></a>00508     <span class="keywordflow">return</span>;
<a name="l00509"></a>00509 
<a name="l00510"></a>00510   KABC::Addressee addr = KABTools::mergeContacts( list );
<a name="l00511"></a>00511 
<a name="l00512"></a>00512   KABC::Addressee::List::Iterator it = list.begin();
<a name="l00513"></a>00513   <span class="keyword">const</span> KABC::Addressee::List::Iterator endIt( list.end() );
<a name="l00514"></a>00514   KABC::Addressee origAddr = *it;
<a name="l00515"></a>00515   QStringList uids;
<a name="l00516"></a>00516   ++it;
<a name="l00517"></a>00517   <span class="keywordflow">while</span> ( it != endIt ) {
<a name="l00518"></a>00518     uids.append( (*it).uid() );
<a name="l00519"></a>00519     ++it;
<a name="l00520"></a>00520   }
<a name="l00521"></a>00521 
<a name="l00522"></a>00522   DeleteCommand *command = <span class="keyword">new</span> DeleteCommand( mAddressBook, uids );
<a name="l00523"></a>00523   mCommandHistory-&gt;addCommand( command );
<a name="l00524"></a>00524 
<a name="l00525"></a>00525   EditCommand *editCommand = <span class="keyword">new</span> EditCommand( mAddressBook, origAddr, addr );
<a name="l00526"></a>00526   mCommandHistory-&gt;addCommand( editCommand );
<a name="l00527"></a>00527 
<a name="l00528"></a>00528   mSearchManager-&gt;reload();
<a name="l00529"></a>00529 }
<a name="l00530"></a>00530 
<a name="l00531"></a>00531 <span class="keywordtype">void</span> KABCore::setWhoAmI()
<a name="l00532"></a>00532 {
<a name="l00533"></a>00533   KABC::Addressee::List addrList = mViewManager-&gt;selectedAddressees();
<a name="l00534"></a>00534 
<a name="l00535"></a>00535   <span class="keywordflow">if</span> ( addrList.count() &gt; 1 ) {
<a name="l00536"></a>00536     KMessageBox::sorry( mWidget, i18n( <span class="stringliteral">"Please select only one contact."</span> ) );
<a name="l00537"></a>00537     <span class="keywordflow">return</span>;
<a name="l00538"></a>00538   }
<a name="l00539"></a>00539 
<a name="l00540"></a>00540   QString text( i18n( <span class="stringliteral">"&lt;qt&gt;Do you really want to use &lt;b&gt;%1&lt;/b&gt; as your new personal contact?&lt;/qt&gt;"</span> ) );
<a name="l00541"></a>00541   <span class="keywordflow">if</span> ( KMessageBox::questionYesNo( mWidget, text.arg( addrList[ 0 ].assembledName() ), QString::null, i18n(<span class="stringliteral">"Use"</span>), i18n(<span class="stringliteral">"Do Not Use"</span>) ) == KMessageBox::Yes )
<a name="l00542"></a>00542     <span class="keyword">static_cast&lt;</span>KABC::StdAddressBook*<span class="keyword">&gt;</span>( KABC::StdAddressBook::self( <span class="keyword">true</span> ) )-&gt;setWhoAmI( addrList[ 0 ] );
<a name="l00543"></a>00543 }
<a name="l00544"></a>00544 
<a name="l00545"></a>00545 <span class="keywordtype">void</span> KABCore::incrementalTextSearch( <span class="keyword">const</span> QString&amp; text )
<a name="l00546"></a>00546 {
<a name="l00547"></a>00547   setContactSelected( QString::null );
<a name="l00548"></a>00548   mSearchManager-&gt;search( text, mIncSearchWidget-&gt;currentFields() );
<a name="l00549"></a>00549 }
<a name="l00550"></a>00550 
<a name="l00551"></a>00551 <span class="keywordtype">void</span> KABCore::incrementalJumpButtonSearch( <span class="keyword">const</span> QString&amp; character )
<a name="l00552"></a>00552 {
<a name="l00553"></a>00553   mViewManager-&gt;setSelected( QString::null, <span class="keyword">false</span> );
<a name="l00554"></a>00554 
<a name="l00555"></a>00555   KABC::AddresseeList list = mSearchManager-&gt;contacts();
<a name="l00556"></a>00556   KABC::Field *field = mViewManager-&gt;currentSortField();
<a name="l00557"></a>00557   <span class="keywordflow">if</span> ( field ) {
<a name="l00558"></a>00558     list.sortByField( field );
<a name="l00559"></a>00559     KABC::AddresseeList::ConstIterator it;
<a name="l00560"></a>00560     <span class="keyword">const</span> KABC::AddresseeList::ConstIterator endIt( list.end() );
<a name="l00561"></a>00561     <span class="keywordflow">for</span> ( it = list.begin(); it != endIt; ++it ) {
<a name="l00562"></a>00562       <span class="keywordflow">if</span> ( field-&gt;value( *it ).startsWith( character, <span class="keyword">false</span> ) ) {
<a name="l00563"></a>00563         mViewManager-&gt;setSelected( (*it).uid(), true );
<a name="l00564"></a>00564         <span class="keywordflow">return</span>;
<a name="l00565"></a>00565       }
<a name="l00566"></a>00566     }
<a name="l00567"></a>00567   }
<a name="l00568"></a>00568 }
<a name="l00569"></a>00569 
<a name="l00570"></a>00570 <span class="keywordtype">void</span> KABCore::setModified()
<a name="l00571"></a>00571 {
<a name="l00572"></a>00572   setModified( <span class="keyword">true</span> );
<a name="l00573"></a>00573 }
<a name="l00574"></a>00574 
<a name="l00575"></a>00575 <span class="keywordtype">void</span> KABCore::setModified( <span class="keywordtype">bool</span> modified )
<a name="l00576"></a>00576 {
<a name="l00577"></a>00577   mModified = modified;
<a name="l00578"></a>00578   mActionSave-&gt;setEnabled( mModified );
<a name="l00579"></a>00579 
<a name="l00580"></a>00580   mSearchManager-&gt;reload();
<a name="l00581"></a>00581 }
<a name="l00582"></a>00582 
<a name="l00583"></a>00583 <span class="keywordtype">bool</span> KABCore::modified()<span class="keyword"> const</span>
<a name="l00584"></a>00584 <span class="keyword"></span>{
<a name="l00585"></a>00585   <span class="keywordflow">return</span> mModified;
<a name="l00586"></a>00586 }
<a name="l00587"></a>00587 
<a name="l00588"></a>00588 <span class="keywordtype">void</span> KABCore::contactModified( <span class="keyword">const</span> KABC::Addressee &amp;addr )
<a name="l00589"></a>00589 {
<a name="l00590"></a>00590   Command *command = 0;
<a name="l00591"></a>00591 
<a name="l00592"></a>00592   <span class="comment">// check if it exists already</span>
<a name="l00593"></a>00593   KABC::Addressee origAddr = mAddressBook-&gt;findByUid( addr.uid() );
<a name="l00594"></a>00594   <span class="keywordflow">if</span> ( origAddr.isEmpty() ) {
<a name="l00595"></a>00595     KABC::Addressee::List addressees;
<a name="l00596"></a>00596     addressees.append( addr );
<a name="l00597"></a>00597     command = <span class="keyword">new</span> NewCommand( mAddressBook, addressees );
<a name="l00598"></a>00598   } <span class="keywordflow">else</span> {
<a name="l00599"></a>00599     command = <span class="keyword">new</span> EditCommand( mAddressBook, origAddr, addr );
<a name="l00600"></a>00600   }
<a name="l00601"></a>00601 
<a name="l00602"></a>00602   mCommandHistory-&gt;addCommand( command );
<a name="l00603"></a>00603 
<a name="l00604"></a>00604   setContactSelected( addr.uid() );
<a name="l00605"></a>00605   setModified( <span class="keyword">true</span> );
<a name="l00606"></a>00606 }
<a name="l00607"></a>00607 
<a name="l00608"></a>00608 <span class="keywordtype">void</span> KABCore::newDistributionList()
<a name="l00609"></a>00609 {
<a name="l00610"></a>00610 <span class="preprocessor">#ifdef KDEPIM_NEW_DISTRLISTS</span>
<a name="l00611"></a>00611 <span class="preprocessor"></span>  QString name = i18n( <span class="stringliteral">"New Distribution List"</span> );
<a name="l00612"></a>00612   <span class="keyword">const</span> KPIM::DistributionList distList = KPIM::DistributionList::findByName( addressBook(), name );
<a name="l00613"></a>00613   <span class="keywordflow">if</span> ( !distList.isEmpty() ) {
<a name="l00614"></a>00614     <span class="keywordtype">bool</span> foundUnused = <span class="keyword">false</span>;
<a name="l00615"></a>00615     <span class="keywordtype">int</span> i = 1;
<a name="l00616"></a>00616     <span class="keywordflow">while</span> ( !foundUnused ) {
<a name="l00617"></a>00617       name = i18n( <span class="stringliteral">"New Distribution List (%1)"</span> ).arg( i++ );  
<a name="l00618"></a>00618       foundUnused = KPIM::DistributionList::findByName( addressBook(), name ).isEmpty();
<a name="l00619"></a>00619     }
<a name="l00620"></a>00620   }
<a name="l00621"></a>00621   KPIM::DistributionList list;
<a name="l00622"></a>00622   list.setUid( KApplication::randomString( 10 ) );
<a name="l00623"></a>00623   list.setName( name );
<a name="l00624"></a>00624   editDistributionList( list );
<a name="l00625"></a>00625 <span class="preprocessor">#endif</span>
<a name="l00626"></a>00626 <span class="preprocessor"></span>}
<a name="l00627"></a>00627 
<a name="l00628"></a>00628 <span class="keywordtype">void</span> KABCore::newContact()
<a name="l00629"></a>00629 {
<a name="l00630"></a>00630   AddresseeEditorDialog *dialog = 0;
<a name="l00631"></a>00631 
<a name="l00632"></a>00632   KABC::Resource* resource = requestResource( mWidget );
<a name="l00633"></a>00633 
<a name="l00634"></a>00634   <span class="keywordflow">if</span> ( resource ) {
<a name="l00635"></a>00635     KABC::Addressee addr;
<a name="l00636"></a>00636     addr.setResource( resource );
<a name="l00637"></a>00637 
<a name="l00638"></a>00638     <span class="keywordflow">if</span> ( !KABLock::self( mAddressBook )-&gt;lock( addr.resource() ) )
<a name="l00639"></a>00639       <span class="keywordflow">return</span>;
<a name="l00640"></a>00640 
<a name="l00641"></a>00641     dialog = createAddresseeEditorDialog( mWidget );
<a name="l00642"></a>00642     dialog-&gt;setAddressee( addr );
<a name="l00643"></a>00643   } <span class="keywordflow">else</span>
<a name="l00644"></a>00644     <span class="keywordflow">return</span>;
<a name="l00645"></a>00645 
<a name="l00646"></a>00646   mEditorDict.insert( dialog-&gt;addressee().uid(), dialog );
<a name="l00647"></a>00647 
<a name="l00648"></a>00648   dialog-&gt;show();
<a name="l00649"></a>00649 }
<a name="l00650"></a>00650 
<a name="l00651"></a>00651 <span class="keywordtype">void</span> KABCore::addEmail( <span class="keyword">const</span> QString &amp;aStr )
<a name="l00652"></a>00652 {
<a name="l00653"></a>00653   QString fullName, email;
<a name="l00654"></a>00654 
<a name="l00655"></a>00655   KABC::Addressee::parseEmailAddress( aStr, fullName, email );
<a name="l00656"></a>00656 
<a name="l00657"></a>00657 <span class="preprocessor">#if KDE_IS_VERSION(3,4,89)</span>
<a name="l00658"></a>00658 <span class="preprocessor"></span>  <span class="comment">// This ugly hack will be removed in 4.0</span>
<a name="l00659"></a>00659   <span class="comment">// addressbook may not be reloaded yet, as done asynchronously sometimes, so wait</span>
<a name="l00660"></a>00660   <span class="keywordflow">while</span> ( !mAddressBook-&gt;loadingHasFinished() ) {
<a name="l00661"></a>00661     QApplication::eventLoop()-&gt;processEvents( QEventLoop::ExcludeUserInput );
<a name="l00662"></a>00662     <span class="comment">// use sleep here to reduce cpu usage</span>
<a name="l00663"></a>00663     usleep( 100 );
<a name="l00664"></a>00664   }
<a name="l00665"></a>00665 <span class="preprocessor">#endif</span>
<a name="l00666"></a>00666 <span class="preprocessor"></span>
<a name="l00667"></a>00667   <span class="comment">// Try to lookup the addressee matching the email address</span>
<a name="l00668"></a>00668   <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;
<a name="l00669"></a>00669   QStringList emailList;
<a name="l00670"></a>00670   KABC::AddressBook::Iterator it;
<a name="l00671"></a>00671   <span class="keyword">const</span> KABC::AddressBook::Iterator endIt( mAddressBook-&gt;end() );
<a name="l00672"></a>00672   <span class="keywordflow">for</span> ( it = mAddressBook-&gt;begin(); !found &amp;&amp; (it != endIt); ++it ) {
<a name="l00673"></a>00673     emailList = (*it).emails();
<a name="l00674"></a>00674     <span class="keywordflow">if</span> ( emailList.contains( email ) &gt; 0 ) {
<a name="l00675"></a>00675       found = <span class="keyword">true</span>;
<a name="l00676"></a>00676       (*it).setNameFromString( fullName );
<a name="l00677"></a>00677       editContact( (*it).uid() );
<a name="l00678"></a>00678     }
<a name="l00679"></a>00679   }
<a name="l00680"></a>00680 
<a name="l00681"></a>00681   <span class="keywordflow">if</span> ( !found ) {
<a name="l00682"></a>00682     KABC::Addressee addr;
<a name="l00683"></a>00683     addr.setNameFromString( fullName );
<a name="l00684"></a>00684     addr.insertEmail( email, <span class="keyword">true</span> );
<a name="l00685"></a>00685 
<a name="l00686"></a>00686     mAddressBook-&gt;insertAddressee( addr );
<a name="l00687"></a>00687     mViewManager-&gt;refreshView( addr.uid() );
<a name="l00688"></a>00688     editContact( addr.uid() );
<a name="l00689"></a>00689   }
<a name="l00690"></a>00690 }
<a name="l00691"></a>00691 
<a name="l00692"></a>00692 <span class="keywordtype">void</span> KABCore::importVCard( <span class="keyword">const</span> KURL &amp;url )
<a name="l00693"></a>00693 {
<a name="l00694"></a>00694   mXXPortManager-&gt;importVCard( url );
<a name="l00695"></a>00695 }
<a name="l00696"></a>00696 
<a name="l00697"></a>00697 <span class="keywordtype">void</span> KABCore::importVCardFromData( <span class="keyword">const</span> QString &amp;vCard )
<a name="l00698"></a>00698 {
<a name="l00699"></a>00699   mXXPortManager-&gt;importVCardFromData( vCard );
<a name="l00700"></a>00700 }
<a name="l00701"></a>00701 
<a name="l00702"></a>00702 <span class="keywordtype">void</span> KABCore::editContact( <span class="keyword">const</span> QString &amp;uid )
<a name="l00703"></a>00703 {
<a name="l00704"></a>00704   <span class="keywordflow">if</span> ( mExtensionManager-&gt;isQuickEditVisible() )
<a name="l00705"></a>00705     <span class="keywordflow">return</span>;
<a name="l00706"></a>00706 
<a name="l00707"></a>00707   <span class="comment">// First, locate the contact entry</span>
<a name="l00708"></a>00708   QString localUID = uid;
<a name="l00709"></a>00709   <span class="keywordflow">if</span> ( localUID.isNull() ) {
<a name="l00710"></a>00710     QStringList uidList = mViewManager-&gt;selectedUids();
<a name="l00711"></a>00711     <span class="keywordflow">if</span> ( uidList.count() &gt; 0 )
<a name="l00712"></a>00712       localUID = *( uidList.at( 0 ) );
<a name="l00713"></a>00713   }
<a name="l00714"></a>00714 <span class="preprocessor">#if KDE_IS_VERSION(3,4,89)</span>
<a name="l00715"></a>00715 <span class="preprocessor"></span>  <span class="comment">// This ugly hack will be removed in 4.0</span>
<a name="l00716"></a>00716   <span class="comment">// for calls with given uid, as done from commandline and DCOP</span>
<a name="l00717"></a>00717   <span class="comment">// addressbook may not be reloaded yet, as done asynchronously, so wait</span>
<a name="l00718"></a>00718   <span class="keywordflow">else</span> <span class="keywordflow">while</span> ( !mAddressBook-&gt;loadingHasFinished() ) {
<a name="l00719"></a>00719     QApplication::eventLoop()-&gt;processEvents( QEventLoop::ExcludeUserInput );
<a name="l00720"></a>00720     <span class="comment">// use sleep here to reduce cpu usage</span>
<a name="l00721"></a>00721     usleep( 100 );
<a name="l00722"></a>00722   }
<a name="l00723"></a>00723 <span class="preprocessor">#endif</span>
<a name="l00724"></a>00724 <span class="preprocessor"></span>
<a name="l00725"></a>00725   KABC::Addressee addr = mAddressBook-&gt;findByUid( localUID );
<a name="l00726"></a>00726   <span class="keywordflow">if</span> ( !addr.isEmpty() ) {
<a name="l00727"></a>00727     AddresseeEditorDialog *dialog = mEditorDict.find( addr.uid() );
<a name="l00728"></a>00728     <span class="keywordflow">if</span> ( !dialog ) {
<a name="l00729"></a>00729 
<a name="l00730"></a>00730       <span class="keywordflow">if</span> ( !addr.resource()-&gt;readOnly() )
<a name="l00731"></a>00731         <span class="keywordflow">if</span> ( !KABLock::self( mAddressBook )-&gt;lock( addr.resource() ) ) {
<a name="l00732"></a>00732           <span class="keywordflow">return</span>;
<a name="l00733"></a>00733         }
<a name="l00734"></a>00734 
<a name="l00735"></a>00735       dialog = createAddresseeEditorDialog( mWidget );
<a name="l00736"></a>00736 
<a name="l00737"></a>00737       mEditorDict.insert( addr.uid(), dialog );
<a name="l00738"></a>00738 
<a name="l00739"></a>00739       dialog-&gt;setAddressee( addr );
<a name="l00740"></a>00740     }
<a name="l00741"></a>00741 
<a name="l00742"></a>00742     dialog-&gt;raise();
<a name="l00743"></a>00743     dialog-&gt;show();
<a name="l00744"></a>00744   }
<a name="l00745"></a>00745 }
<a name="l00746"></a>00746 
<a name="l00747"></a>00747 
<a name="l00748"></a>00748 <span class="keywordtype">void</span> KABCore::copySelectedContactToResource()
<a name="l00749"></a>00749 {
<a name="l00750"></a>00750     storeContactIn( QString(), <span class="keyword">true</span> <span class="comment">/*copy*/</span>);
<a name="l00751"></a>00751 }
<a name="l00752"></a>00752 
<a name="l00753"></a>00753 <span class="keywordtype">void</span> KABCore::moveSelectedContactToResource()
<a name="l00754"></a>00754 {
<a name="l00755"></a>00755     storeContactIn( QString(), <span class="keyword">false</span> <span class="comment">/*copy*/</span>);
<a name="l00756"></a>00756 }
<a name="l00757"></a>00757 
<a name="l00758"></a>00758 <span class="keywordtype">void</span> KABCore::storeContactIn( <span class="keyword">const</span> QString &amp;uid, <span class="keywordtype">bool</span> copy <span class="comment">/*false*/</span> )
<a name="l00759"></a>00759 {
<a name="l00760"></a>00760   <span class="comment">// First, locate the contact entry</span>
<a name="l00761"></a>00761   QStringList uidList;
<a name="l00762"></a>00762   <span class="keywordflow">if</span> ( uid.isNull() ) {
<a name="l00763"></a>00763     uidList = mViewManager-&gt;selectedUids();
<a name="l00764"></a>00764   } <span class="keywordflow">else</span> {
<a name="l00765"></a>00765     uidList &lt;&lt; uid;
<a name="l00766"></a>00766   }
<a name="l00767"></a>00767   KABC::Resource *resource = requestResource( mWidget );
<a name="l00768"></a>00768   <span class="keywordflow">if</span> ( !resource )
<a name="l00769"></a>00769     <span class="keywordflow">return</span>;
<a name="l00770"></a>00770 
<a name="l00771"></a>00771   KABLock::self( mAddressBook )-&gt;lock( resource );
<a name="l00772"></a>00772   QStringList::Iterator it( uidList.begin() );
<a name="l00773"></a>00773   <span class="keyword">const</span> QStringList::Iterator endIt( uidList.end() );
<a name="l00774"></a>00774   <span class="keywordflow">while</span> ( it != endIt ) {
<a name="l00775"></a>00775     KABC::Addressee addr = mAddressBook-&gt;findByUid( *it++ );
<a name="l00776"></a>00776     <span class="keywordflow">if</span> ( !addr.isEmpty() ) {
<a name="l00777"></a>00777       KABC::Addressee newAddr( addr );
<a name="l00778"></a>00778       <span class="comment">// We need to set a new uid, otherwise the insert below is</span>
<a name="l00779"></a>00779       <span class="comment">// ignored. This is bad for syncing, but unavoidable, afaiks</span>
<a name="l00780"></a>00780       newAddr.setUid( KApplication::randomString( 10 ) );
<a name="l00781"></a>00781       newAddr.setResource( resource );
<a name="l00782"></a>00782       addressBook()-&gt;insertAddressee( newAddr );
<a name="l00783"></a>00783       <span class="keywordflow">if</span> ( !copy ) {
<a name="l00784"></a>00784           KABLock::self( mAddressBook )-&gt;lock( addr.resource() );
<a name="l00785"></a>00785           addressBook()-&gt;removeAddressee( addr );
<a name="l00786"></a>00786           KABLock::self( mAddressBook )-&gt;unlock( addr.resource() );
<a name="l00787"></a>00787       }
<a name="l00788"></a>00788     }
<a name="l00789"></a>00789   }
<a name="l00790"></a>00790   KABLock::self( mAddressBook )-&gt;unlock( resource );
<a name="l00791"></a>00791 
<a name="l00792"></a>00792   addressBookChanged();
<a name="l00793"></a>00793   setModified( <span class="keyword">true</span> );
<a name="l00794"></a>00794 }
<a name="l00795"></a>00795 
<a name="l00796"></a>00796 <span class="keywordtype">void</span> KABCore::save()
<a name="l00797"></a>00797 {
<a name="l00798"></a>00798   QPtrList&lt;KABC::Resource&gt; resources = mAddressBook-&gt;resources();
<a name="l00799"></a>00799   QPtrListIterator&lt;KABC::Resource&gt; it( resources );
<a name="l00800"></a>00800   <span class="keywordflow">while</span> ( it.current() &amp;&amp; !it.current()-&gt;readOnly() ) {
<a name="l00801"></a>00801     KABC::Ticket *ticket = mAddressBook-&gt;requestSaveTicket( it.current() );
<a name="l00802"></a>00802     <span class="keywordflow">if</span> ( ticket ) {
<a name="l00803"></a>00803       <span class="keywordflow">if</span> ( !mAddressBook-&gt;save( ticket ) ) {
<a name="l00804"></a>00804         KMessageBox::error( mWidget,
<a name="l00805"></a>00805                             i18n( <span class="stringliteral">"&lt;qt&gt;Unable to save address book &lt;b&gt;%1&lt;/b&gt;.&lt;/qt&gt;"</span> ).arg( it.current()-&gt;resourceName() ) );
<a name="l00806"></a>00806         mAddressBook-&gt;releaseSaveTicket( ticket );
<a name="l00807"></a>00807       } <span class="keywordflow">else</span> {
<a name="l00808"></a>00808         setModified( <span class="keyword">false</span> );
<a name="l00809"></a>00809       }
<a name="l00810"></a>00810     } <span class="keywordflow">else</span> {
<a name="l00811"></a>00811       KMessageBox::error( mWidget,
<a name="l00812"></a>00812                           i18n( <span class="stringliteral">"&lt;qt&gt;Unable to get access for saving the address book &lt;b&gt;%1&lt;/b&gt;.&lt;/qt&gt;"</span> )
<a name="l00813"></a>00813                           .arg( it.current()-&gt;resourceName() ) );
<a name="l00814"></a>00814     }
<a name="l00815"></a>00815 
<a name="l00816"></a>00816     ++it;
<a name="l00817"></a>00817   }
<a name="l00818"></a>00818 }
<a name="l00819"></a>00819 
<a name="l00820"></a>00820 <span class="keywordtype">void</span> KABCore::setJumpButtonBarVisible( <span class="keywordtype">bool</span> visible )
<a name="l00821"></a>00821 {
<a name="l00822"></a>00822   <span class="keywordflow">if</span> ( visible ) {
<a name="l00823"></a>00823     <span class="keywordflow">if</span> ( !mJumpButtonBar )
<a name="l00824"></a>00824       createJumpButtonBar();
<a name="l00825"></a>00825     mJumpButtonBar-&gt;show();
<a name="l00826"></a>00826   } <span class="keywordflow">else</span>
<a name="l00827"></a>00827     <span class="keywordflow">if</span> ( mJumpButtonBar )
<a name="l00828"></a>00828       mJumpButtonBar-&gt;hide();
<a name="l00829"></a>00829 }
<a name="l00830"></a>00830 
<a name="l00831"></a>00831 <span class="keywordtype">void</span> KABCore::setDetailsVisible( <span class="keywordtype">bool</span> visible )
<a name="l00832"></a>00832 {
<a name="l00833"></a>00833   <span class="keywordflow">if</span> ( visible )
<a name="l00834"></a>00834     mDetailsPage-&gt;show();
<a name="l00835"></a>00835   <span class="keywordflow">else</span>
<a name="l00836"></a>00836     mDetailsPage-&gt;hide();
<a name="l00837"></a>00837 }
<a name="l00838"></a>00838 
<a name="l00839"></a>00839 <span class="keywordtype">void</span> KABCore::extensionModified( <span class="keyword">const</span> KABC::Addressee::List &amp;list )
<a name="l00840"></a>00840 {
<a name="l00841"></a>00841   <span class="keywordflow">if</span> ( list.count() != 0 ) {
<a name="l00842"></a>00842     KABC::Addressee::List::ConstIterator it;
<a name="l00843"></a>00843     <span class="keyword">const</span> KABC::Addressee::List::ConstIterator endIt( list.end() );
<a name="l00844"></a>00844     <span class="keywordflow">for</span> ( it = list.begin(); it != endIt; ++it ) {
<a name="l00845"></a>00845       Command *command = 0;
<a name="l00846"></a>00846 
<a name="l00847"></a>00847       <span class="comment">// check if it exists already</span>
<a name="l00848"></a>00848       KABC::Addressee origAddr = mAddressBook-&gt;findByUid( (*it).uid() );
<a name="l00849"></a>00849       <span class="keywordflow">if</span> ( origAddr.isEmpty() ) {
<a name="l00850"></a>00850         KABC::Addressee::List addressees;
<a name="l00851"></a>00851         addressees.append( *it );
<a name="l00852"></a>00852         command = <span class="keyword">new</span> NewCommand( mAddressBook, addressees );
<a name="l00853"></a>00853       } <span class="keywordflow">else</span>
<a name="l00854"></a>00854         command = <span class="keyword">new</span> EditCommand( mAddressBook, origAddr, *it );
<a name="l00855"></a>00855 
<a name="l00856"></a>00856       mCommandHistory-&gt;blockSignals( <span class="keyword">true</span> );
<a name="l00857"></a>00857       mCommandHistory-&gt;addCommand( command );
<a name="l00858"></a>00858       mCommandHistory-&gt;blockSignals( <span class="keyword">false</span> );
<a name="l00859"></a>00859     }
<a name="l00860"></a>00860 
<a name="l00861"></a>00861     setModified(<span class="keyword">true</span>);
<a name="l00862"></a>00862   }
<a name="l00863"></a>00863 }
<a name="l00864"></a>00864 
<a name="l00865"></a>00865 <span class="keywordtype">void</span> KABCore::extensionDeleted( <span class="keyword">const</span> QStringList &amp;uidList )
<a name="l00866"></a>00866 {
<a name="l00867"></a>00867   DeleteCommand *command = <span class="keyword">new</span> DeleteCommand( mAddressBook, uidList );
<a name="l00868"></a>00868   mCommandHistory-&gt;addCommand( command );
<a name="l00869"></a>00869 
<a name="l00870"></a>00870   <span class="comment">// now if we deleted anything, refresh</span>
<a name="l00871"></a>00871   setContactSelected( QString::null );
<a name="l00872"></a>00872   setModified( <span class="keyword">true</span> );
<a name="l00873"></a>00873 }
<a name="l00874"></a>00874 
<a name="l00875"></a>00875 QString KABCore::getNameByPhone( <span class="keyword">const</span> QString &amp;phone )
<a name="l00876"></a>00876 {
<a name="l00877"></a>00877 <span class="preprocessor">#if KDE_IS_VERSION(3,4,89)</span>
<a name="l00878"></a>00878 <span class="preprocessor"></span>  <span class="comment">// This ugly hack will be removed in 4.0</span>
<a name="l00879"></a>00879   <span class="comment">// addressbook may not be reloaded yet, as done asynchronously, so wait</span>
<a name="l00880"></a>00880   <span class="keywordflow">while</span> ( !mAddressBook-&gt;loadingHasFinished() ) {
<a name="l00881"></a>00881     QApplication::eventLoop()-&gt;processEvents( QEventLoop::ExcludeUserInput );
<a name="l00882"></a>00882     <span class="comment">// use sleep here to reduce cpu usage</span>
<a name="l00883"></a>00883     usleep( 100 );
<a name="l00884"></a>00884   }
<a name="l00885"></a>00885 <span class="preprocessor">#endif</span>
<a name="l00886"></a>00886 <span class="preprocessor"></span>
<a name="l00887"></a>00887   QRegExp r( <span class="stringliteral">"[/*/-/ ]"</span> );
<a name="l00888"></a>00888   QString localPhone( phone );
<a name="l00889"></a>00889 
<a name="l00890"></a>00890   <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;
<a name="l00891"></a>00891   QString ownerName = <span class="stringliteral">""</span>;
<a name="l00892"></a>00892   KABC::PhoneNumber::List phoneList;
<a name="l00893"></a>00893 
<a name="l00894"></a>00894   KABC::AddressBook::ConstIterator iter;
<a name="l00895"></a>00895   <span class="keyword">const</span> KABC::AddressBook::ConstIterator endIter( mAddressBook-&gt;end() );
<a name="l00896"></a>00896 
<a name="l00897"></a>00897   <span class="keywordflow">for</span> ( iter = mAddressBook-&gt;begin(); !found &amp;&amp; ( iter != endIter ); ++iter ) {
<a name="l00898"></a>00898     phoneList = (*iter).phoneNumbers();
<a name="l00899"></a>00899     KABC::PhoneNumber::List::Iterator phoneIter( phoneList.begin() );
<a name="l00900"></a>00900     <span class="keyword">const</span> KABC::PhoneNumber::List::Iterator phoneEndIter( phoneList.end() );
<a name="l00901"></a>00901     <span class="keywordflow">for</span> ( ; !found &amp;&amp; ( phoneIter != phoneEndIter ); ++phoneIter) {
<a name="l00902"></a>00902       <span class="comment">// Get rid of separator chars so just the numbers are compared.</span>
<a name="l00903"></a>00903       <span class="keywordflow">if</span> ( (*phoneIter).number().replace( r, <span class="stringliteral">""</span> ) == localPhone.replace( r, <span class="stringliteral">""</span> ) ) {
<a name="l00904"></a>00904         ownerName = (*iter).realName();
<a name="l00905"></a>00905         found = <span class="keyword">true</span>;
<a name="l00906"></a>00906       }
<a name="l00907"></a>00907     }
<a name="l00908"></a>00908   }
<a name="l00909"></a>00909 
<a name="l00910"></a>00910   <span class="keywordflow">return</span> ownerName;
<a name="l00911"></a>00911 }
<a name="l00912"></a>00912 
<a name="l00913"></a>00913 <span class="keywordtype">void</span> KABCore::openLDAPDialog()
<a name="l00914"></a>00914 {
<a name="l00915"></a>00915   <span class="keywordflow">if</span> ( !KProtocolInfo::isKnownProtocol( KURL( <span class="stringliteral">"ldap://localhost"</span> ) ) ) {
<a name="l00916"></a>00916     KMessageBox::error( mWidget, i18n( <span class="stringliteral">"Your KDE installation is missing LDAP "</span>
<a name="l00917"></a>00917                                        <span class="stringliteral">"support, please ask your administrator or distributor for more information."</span> ),
<a name="l00918"></a>00918                         i18n( <span class="stringliteral">"No LDAP IO Slave Available"</span> ) );
<a name="l00919"></a>00919     <span class="keywordflow">return</span>;
<a name="l00920"></a>00920   }
<a name="l00921"></a>00921 
<a name="l00922"></a>00922   <span class="keywordflow">if</span> ( !mLdapSearchDialog ) {
<a name="l00923"></a>00923     mLdapSearchDialog = <span class="keyword">new</span> LDAPSearchDialog( mAddressBook, <span class="keyword">this</span>, mWidget );
<a name="l00924"></a>00924     connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ),
<a name="l00925"></a>00925             SLOT( addressBookChanged() ) );
<a name="l00926"></a>00926     connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ),
<a name="l00927"></a>00927             SLOT( setModified() ) );
<a name="l00928"></a>00928   } <span class="keywordflow">else</span>
<a name="l00929"></a>00929     mLdapSearchDialog-&gt;restoreSettings();
<a name="l00930"></a>00930 
<a name="l00931"></a>00931   <span class="keywordflow">if</span> ( mLdapSearchDialog-&gt;isOK() )
<a name="l00932"></a>00932     mLdapSearchDialog-&gt;exec();
<a name="l00933"></a>00933 }
<a name="l00934"></a>00934 
<a name="l00935"></a>00935 <span class="keywordtype">void</span> KABCore::configure()
<a name="l00936"></a>00936 {
<a name="l00937"></a>00937   <span class="comment">// Save the current config so we do not loose anything if the user accepts</span>
<a name="l00938"></a>00938   saveSettings();
<a name="l00939"></a>00939 
<a name="l00940"></a>00940   KCMultiDialog dlg( mWidget, <span class="stringliteral">""</span>, <span class="keyword">true</span> );
<a name="l00941"></a>00941   connect( &amp;dlg, SIGNAL( configCommitted() ),
<a name="l00942"></a>00942            <span class="keyword">this</span>, SLOT( configurationChanged() ) );
<a name="l00943"></a>00943 
<a name="l00944"></a>00944   dlg.addModule( <span class="stringliteral">"kabconfig.desktop"</span> );
<a name="l00945"></a>00945   dlg.addModule( <span class="stringliteral">"kabldapconfig.desktop"</span> );
<a name="l00946"></a>00946   dlg.addModule( <span class="stringliteral">"kabcustomfields.desktop"</span> );
<a name="l00947"></a>00947 
<a name="l00948"></a>00948   dlg.exec();
<a name="l00949"></a>00949 }
<a name="l00950"></a>00950 
<a name="l00951"></a>00951 <span class="keywordtype">void</span> KABCore::print()
<a name="l00952"></a>00952 {
<a name="l00953"></a>00953   KPrinter printer;
<a name="l00954"></a>00954   printer.setDocName( i18n( <span class="stringliteral">"Address Book"</span> ) );
<a name="l00955"></a>00955   printer.setDocFileName( <span class="stringliteral">"addressbook"</span> );
<a name="l00956"></a>00956 
<a name="l00957"></a>00957   <span class="keywordflow">if</span> ( !printer.setup( mWidget, i18n(<span class="stringliteral">"Print Addresses"</span>) ) )
<a name="l00958"></a>00958     <span class="keywordflow">return</span>;
<a name="l00959"></a>00959 
<a name="l00960"></a>00960   <a class="code" href="classKABPrinting_1_1PrintingWizard.html" title="The PrintingWizard combines pages common for all print styles and those provided...">KABPrinting::PrintingWizard</a> wizard( &amp;printer, mAddressBook,
<a name="l00961"></a>00961                                       mViewManager-&gt;selectedUids(), mWidget );
<a name="l00962"></a>00962 
<a name="l00963"></a>00963   wizard.exec();
<a name="l00964"></a>00964 }
<a name="l00965"></a>00965 
<a name="l00966"></a>00966 <span class="keywordtype">void</span> KABCore::detailsHighlighted( <span class="keyword">const</span> QString &amp;msg )
<a name="l00967"></a>00967 {
<a name="l00968"></a>00968   <span class="keywordflow">if</span> ( mStatusBar ) {
<a name="l00969"></a>00969     <span class="keywordflow">if</span> ( !mStatusBar-&gt;hasItem( 2 ) )
<a name="l00970"></a>00970       mStatusBar-&gt;insertItem( msg, 2 );
<a name="l00971"></a>00971     <span class="keywordflow">else</span>
<a name="l00972"></a>00972       mStatusBar-&gt;changeItem( msg, 2 );
<a name="l00973"></a>00973   }
<a name="l00974"></a>00974 }
<a name="l00975"></a>00975 
<a name="l00976"></a>00976 <span class="keywordtype">void</span> KABCore::showContactsAddress( <span class="keyword">const</span> QString &amp;addrUid )
<a name="l00977"></a>00977 {
<a name="l00978"></a>00978   QStringList uidList = mViewManager-&gt;selectedUids();
<a name="l00979"></a>00979   <span class="keywordflow">if</span> ( uidList.isEmpty() )
<a name="l00980"></a>00980     <span class="keywordflow">return</span>;
<a name="l00981"></a>00981 
<a name="l00982"></a>00982   KABC::Addressee addr = mAddressBook-&gt;findByUid( uidList.first() );
<a name="l00983"></a>00983   <span class="keywordflow">if</span> ( addr.isEmpty() )
<a name="l00984"></a>00984     <span class="keywordflow">return</span>;
<a name="l00985"></a>00985 
<a name="l00986"></a>00986   <span class="keyword">const</span> KABC::Address::List list = addr.addresses();
<a name="l00987"></a>00987   KABC::Address::List::ConstIterator it;
<a name="l00988"></a>00988   <span class="keyword">const</span> KABC::Address::List::ConstIterator endIt( list.end() );
<a name="l00989"></a>00989   <span class="keywordflow">for</span> ( it = list.begin(); it != endIt; ++it )
<a name="l00990"></a>00990     <span class="keywordflow">if</span> ( (*it).id() == addrUid ) {
<a name="l00991"></a>00991       LocationMap::instance()-&gt;showAddress( *it );
<a name="l00992"></a>00992       <span class="keywordflow">break</span>;
<a name="l00993"></a>00993     }
<a name="l00994"></a>00994 }
<a name="l00995"></a>00995 
<a name="l00996"></a>00996 <span class="keywordtype">void</span> KABCore::configurationChanged()
<a name="l00997"></a>00997 {
<a name="l00998"></a>00998   mExtensionManager-&gt;reconfigure();
<a name="l00999"></a>00999   mViewManager-&gt;refreshView();
<a name="l01000"></a>01000 }
<a name="l01001"></a>01001 
<a name="l01002"></a>01002 <span class="keywordtype">bool</span> KABCore::queryClose()
<a name="l01003"></a>01003 {
<a name="l01004"></a>01004   saveSettings();
<a name="l01005"></a>01005   KABPrefs::instance()-&gt;writeConfig();
<a name="l01006"></a>01006 
<a name="l01007"></a>01007   QPtrList&lt;KABC::Resource&gt; resources = mAddressBook-&gt;resources();
<a name="l01008"></a>01008   QPtrListIterator&lt;KABC::Resource&gt; it( resources );
<a name="l01009"></a>01009   <span class="keywordflow">while</span> ( it.current() ) {
<a name="l01010"></a>01010     it.current()-&gt;close();
<a name="l01011"></a>01011     ++it;
<a name="l01012"></a>01012   }
<a name="l01013"></a>01013 
<a name="l01014"></a>01014   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01015"></a>01015 }
<a name="l01016"></a>01016 
<a name="l01017"></a>01017 <span class="keywordtype">void</span> KABCore::reinitXMLGUI()
<a name="l01018"></a>01018 {
<a name="l01019"></a>01019   mExtensionManager-&gt;createActions();
<a name="l01020"></a>01020 }
<a name="l01021"></a>01021 <span class="keywordtype">void</span> KABCore::delayedAddressBookChanged()
<a name="l01022"></a>01022 {
<a name="l01023"></a>01023   mAddressBookChangedTimer-&gt;start( 1000 );
<a name="l01024"></a>01024 }
<a name="l01025"></a>01025 
<a name="l01026"></a>01026 <span class="keywordtype">void</span> KABCore::addressBookChanged()
<a name="l01027"></a>01027 {
<a name="l01028"></a>01028   <span class="keyword">const</span> QStringList selectedUids = mViewManager-&gt;selectedUids();
<a name="l01029"></a>01029 
<a name="l01030"></a>01030   mAddressBookChangedTimer-&gt;stop();
<a name="l01031"></a>01031 
<a name="l01032"></a>01032   <span class="keywordflow">if</span> ( mJumpButtonBar )
<a name="l01033"></a>01033     mJumpButtonBar-&gt;updateButtons();
<a name="l01034"></a>01034 
<a name="l01035"></a>01035   mSearchManager-&gt;reload();
<a name="l01036"></a>01036 
<a name="l01037"></a>01037   mViewManager-&gt;setSelected( QString::null, <span class="keyword">false</span> );
<a name="l01038"></a>01038 
<a name="l01039"></a>01039   QString uid = QString::null;
<a name="l01040"></a>01040   <span class="keywordflow">if</span> ( !selectedUids.isEmpty() ) {
<a name="l01041"></a>01041     uid = selectedUids.first();
<a name="l01042"></a>01042     mViewManager-&gt;setSelected( uid, <span class="keyword">true</span> );
<a name="l01043"></a>01043   }
<a name="l01044"></a>01044 
<a name="l01045"></a>01045   setContactSelected( uid );
<a name="l01046"></a>01046 
<a name="l01047"></a>01047   updateCategories();
<a name="l01048"></a>01048 }
<a name="l01049"></a>01049 
<a name="l01050"></a>01050 AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent,
<a name="l01051"></a>01051                                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *name )
<a name="l01052"></a>01052 {
<a name="l01053"></a>01053   AddresseeEditorDialog *dialog = <span class="keyword">new</span> AddresseeEditorDialog( <span class="keyword">this</span>, parent,
<a name="l01054"></a>01054                                                  name ? name : <span class="stringliteral">"editorDialog"</span> );
<a name="l01055"></a>01055   connect( dialog, SIGNAL( contactModified( <span class="keyword">const</span> KABC::Addressee&amp; ) ),
<a name="l01056"></a>01056            SLOT( contactModified( <span class="keyword">const</span> KABC::Addressee&amp; ) ) );
<a name="l01057"></a>01057   connect( dialog, SIGNAL( editorDestroyed( <span class="keyword">const</span> QString&amp; ) ),
<a name="l01058"></a>01058            SLOT( slotEditorDestroyed( <span class="keyword">const</span> QString&amp; ) ) );
<a name="l01059"></a>01059 
<a name="l01060"></a>01060   <span class="keywordflow">return</span> dialog;
<a name="l01061"></a>01061 }
<a name="l01062"></a>01062 
<a name="l01063"></a>01063 <span class="keywordtype">void</span> KABCore::activateDetailsWidget( QWidget *widget )
<a name="l01064"></a>01064 {
<a name="l01065"></a>01065   <span class="keywordflow">if</span> ( mDetailsStack-&gt;visibleWidget() == widget )
<a name="l01066"></a>01066     <span class="keywordflow">return</span>;
<a name="l01067"></a>01067   mDetailsStack-&gt;raiseWidget( widget );
<a name="l01068"></a>01068 }
<a name="l01069"></a>01069 
<a name="l01070"></a>01070 <span class="keywordtype">void</span> KABCore::deactivateDetailsWidget( QWidget *widget )
<a name="l01071"></a>01071 {
<a name="l01072"></a>01072   <span class="keywordflow">if</span> ( mDetailsStack-&gt;visibleWidget() != widget )
<a name="l01073"></a>01073     <span class="keywordflow">return</span>;
<a name="l01074"></a>01074   mDetailsStack-&gt;raiseWidget( mDetailsWidget );
<a name="l01075"></a>01075 }
<a name="l01076"></a>01076 
<a name="l01077"></a>01077 <span class="keywordtype">void</span> KABCore::slotEditorDestroyed( <span class="keyword">const</span> QString &amp;uid )
<a name="l01078"></a>01078 {
<a name="l01079"></a>01079   AddresseeEditorDialog *dialog = mEditorDict.take( uid );
<a name="l01080"></a>01080 
<a name="l01081"></a>01081   KABC::Addressee addr = dialog-&gt;addressee();
<a name="l01082"></a>01082 
<a name="l01083"></a>01083   <span class="keywordflow">if</span> ( !addr.resource()-&gt;readOnly() ) {
<a name="l01084"></a>01084     QApplication::setOverrideCursor( Qt::waitCursor );
<a name="l01085"></a>01085     KABLock::self( mAddressBook )-&gt;unlock( addr.resource() );
<a name="l01086"></a>01086     QApplication::restoreOverrideCursor();
<a name="l01087"></a>01087   }
<a name="l01088"></a>01088 }
<a name="l01089"></a>01089 
<a name="l01090"></a>01090 <span class="keywordtype">void</span> KABCore::initGUI()
<a name="l01091"></a>01091 {
<a name="l01092"></a>01092   QVBoxLayout *topLayout = <span class="keyword">new</span> QVBoxLayout( mWidget, 0, 0 );
<a name="l01093"></a>01093   KToolBar* searchTB = <span class="keyword">new</span> KToolBar( mWidget, <span class="stringliteral">"search toolbar"</span>);
<a name="l01094"></a>01094   searchTB-&gt;boxLayout()-&gt;setSpacing( KDialog::spacingHint() );
<a name="l01095"></a>01095   mIncSearchWidget = <span class="keyword">new</span> IncSearchWidget( searchTB, <span class="stringliteral">"kde toolbar widget"</span>);
<a name="l01096"></a>01096   searchTB-&gt;setStretchableWidget( mIncSearchWidget );
<a name="l01097"></a>01097   connect( mIncSearchWidget, SIGNAL( doSearch( <span class="keyword">const</span> QString&amp; ) ),
<a name="l01098"></a>01098            SLOT( incrementalTextSearch( <span class="keyword">const</span> QString&amp; ) ) );
<a name="l01099"></a>01099 
<a name="l01100"></a>01100   mDetailsSplitter = <span class="keyword">new</span> QSplitter( mWidget );
<a name="l01101"></a>01101 
<a name="l01102"></a>01102   mLeftSplitter = <span class="keyword">new</span> QSplitter( mDetailsSplitter );
<a name="l01103"></a>01103   mLeftSplitter-&gt;setOrientation( KABPrefs::instance()-&gt;contactListAboveExtensions() ? Qt::Vertical : Qt::Horizontal );
<a name="l01104"></a>01104 
<a name="l01105"></a>01105   topLayout-&gt;addWidget( searchTB );
<a name="l01106"></a>01106   topLayout-&gt;addWidget( mDetailsSplitter );
<a name="l01107"></a>01107   
<a name="l01108"></a>01108   mDetailsStack = <span class="keyword">new</span> QWidgetStack( mDetailsSplitter );
<a name="l01109"></a>01109   mExtensionManager = <span class="keyword">new</span> ExtensionManager( <span class="keyword">new</span> QWidget( mLeftSplitter ), mDetailsStack, <span class="keyword">this</span>, <span class="keyword">this</span> );
<a name="l01110"></a>01110   connect( mExtensionManager, SIGNAL( detailsWidgetDeactivated( QWidget* ) ), 
<a name="l01111"></a>01111            <span class="keyword">this</span>, SLOT( deactivateDetailsWidget( QWidget* ) ) );
<a name="l01112"></a>01112   connect( mExtensionManager, SIGNAL( detailsWidgetActivated( QWidget* ) ), 
<a name="l01113"></a>01113            <span class="keyword">this</span>, SLOT( activateDetailsWidget( QWidget* ) ) );
<a name="l01114"></a>01114   
<a name="l01115"></a>01115   QWidget *viewWidget = <span class="keyword">new</span> QWidget( mLeftSplitter );
<a name="l01116"></a>01116   mLeftSplitter-&gt;moveToFirst( viewWidget );
<a name="l01117"></a>01117   QVBoxLayout *viewLayout = <span class="keyword">new</span> QVBoxLayout( viewWidget );
<a name="l01118"></a>01118   viewLayout-&gt;setSpacing( KDialog::spacingHint() );
<a name="l01119"></a>01119 
<a name="l01120"></a>01120   mViewHeaderLabel = <span class="keyword">new</span> QLabel( viewWidget );
<a name="l01121"></a>01121 <span class="comment">//  mViewHeaderLabel-&gt;setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed );</span>
<a name="l01122"></a>01122   mViewHeaderLabel-&gt;setText( i18n( <span class="stringliteral">"Contacts"</span> ) );
<a name="l01123"></a>01123   viewLayout-&gt;addWidget( mViewHeaderLabel );
<a name="l01124"></a>01124   mViewManager = <span class="keyword">new</span> <a class="code" href="classViewManager.html" title="The view manager manages the views and everything related to them.">ViewManager</a>( <span class="keyword">this</span>, viewWidget );
<a name="l01125"></a>01125   viewLayout-&gt;addWidget( mViewManager, 1 );
<a name="l01126"></a>01126 
<a name="l01127"></a>01127 <span class="preprocessor">#ifdef KDEPIM_NEW_DISTRLISTS</span>
<a name="l01128"></a>01128 <span class="preprocessor"></span>  mDistListButtonWidget = <span class="keyword">new</span> QWidget( viewWidget );
<a name="l01129"></a>01129   QHBoxLayout *buttonLayout = <span class="keyword">new</span> QHBoxLayout( mDistListButtonWidget );
<a name="l01130"></a>01130   buttonLayout-&gt;setSpacing( KDialog::spacingHint() );
<a name="l01131"></a>01131   buttonLayout-&gt;addStretch( 1 );
<a name="l01132"></a>01132 
<a name="l01133"></a>01133   KPushButton *addDistListButton = <span class="keyword">new</span> KPushButton( mDistListButtonWidget );
<a name="l01134"></a>01134   addDistListButton-&gt;setText( i18n( <span class="stringliteral">"Add"</span> ) );
<a name="l01135"></a>01135   connect( addDistListButton, SIGNAL( clicked() ), 
<a name="l01136"></a>01136            <span class="keyword">this</span>, SLOT( editSelectedDistributionList() ) );
<a name="l01137"></a>01137   buttonLayout-&gt;addWidget( addDistListButton );
<a name="l01138"></a>01138   mDistListButtonWidget-&gt;setShown( <span class="keyword">false</span> );
<a name="l01139"></a>01139   viewLayout-&gt;addWidget( mDistListButtonWidget );
<a name="l01140"></a>01140 
<a name="l01141"></a>01141   KPushButton *removeDistListButton = <span class="keyword">new</span> KPushButton( mDistListButtonWidget );
<a name="l01142"></a>01142   removeDistListButton-&gt;setText( i18n( <span class="stringliteral">"Remove"</span> ) );
<a name="l01143"></a>01143   connect( removeDistListButton, SIGNAL( clicked() ), 
<a name="l01144"></a>01144            <span class="keyword">this</span>, SLOT( removeSelectedContactsFromDistList() ) );
<a name="l01145"></a>01145   buttonLayout-&gt;addWidget( removeDistListButton );
<a name="l01146"></a>01146 <span class="preprocessor">#endif</span>
<a name="l01147"></a>01147 <span class="preprocessor"></span>
<a name="l01148"></a>01148   mFilterSelectionWidget = <span class="keyword">new</span> <a class="code" href="classFilterSelectionWidget.html" title="A simple widget which consists of a label and a combo box in a horizontal line.">FilterSelectionWidget</a>( searchTB , <span class="stringliteral">"kde toolbar widget"</span> );
<a name="l01149"></a>01149   mViewManager-&gt;setFilterSelectionWidget( mFilterSelectionWidget );
<a name="l01150"></a>01150 
<a name="l01151"></a>01151   connect( mFilterSelectionWidget, SIGNAL( filterActivated( <span class="keywordtype">int</span> ) ),
<a name="l01152"></a>01152            mViewManager, SLOT( setActiveFilter( <span class="keywordtype">int</span> ) ) );
<a name="l01153"></a>01153 
<a name="l01154"></a>01154   mDetailsWidget = <span class="keyword">new</span> QWidget( mDetailsSplitter );
<a name="l01155"></a>01155   mDetailsLayout = <span class="keyword">new</span> QHBoxLayout( mDetailsWidget );
<a name="l01156"></a>01156 
<a name="l01157"></a>01157   mDetailsPage = <span class="keyword">new</span> QWidget( mDetailsWidget );
<a name="l01158"></a>01158   mDetailsLayout-&gt;addWidget( mDetailsPage );
<a name="l01159"></a>01159 
<a name="l01160"></a>01160   QHBoxLayout *detailsPageLayout = <span class="keyword">new</span> QHBoxLayout( mDetailsPage, 0, 0 );
<a name="l01161"></a>01161   mDetailsViewer = <span class="keyword">new</span> KPIM::AddresseeView( mDetailsPage );
<a name="l01162"></a>01162   mDetailsViewer-&gt;setVScrollBarMode( QScrollView::Auto );
<a name="l01163"></a>01163   detailsPageLayout-&gt;addWidget( mDetailsViewer );
<a name="l01164"></a>01164 
<a name="l01165"></a>01165   mDistListEntryView = <span class="keyword">new</span> KAB::DistributionListEntryView( <span class="keyword">this</span>, mWidget );
<a name="l01166"></a>01166   connect( mDistListEntryView, SIGNAL( distributionListClicked( <span class="keyword">const</span> QString&amp; ) ),
<a name="l01167"></a>01167            <span class="keyword">this</span>, SLOT( sendMailToDistributionList( <span class="keyword">const</span> QString&amp; ) ) );
<a name="l01168"></a>01168   mDetailsStack-&gt;addWidget( mDistListEntryView );
<a name="l01169"></a>01169   mDetailsStack-&gt;addWidget( mDetailsWidget );
<a name="l01170"></a>01170   mDetailsStack-&gt;raiseWidget( mDetailsWidget );
<a name="l01171"></a>01171   mDetailsSplitter-&gt;moveToLast( mDetailsStack );
<a name="l01172"></a>01172 
<a name="l01173"></a>01173   connect( mDetailsViewer, SIGNAL( addressClicked( <span class="keyword">const</span> QString&amp;) ),
<a name="l01174"></a>01174            <span class="keyword">this</span>, SLOT( showContactsAddress( <span class="keyword">const</span> QString&amp; ) ) );
<a name="l01175"></a>01175 
<a name="l01176"></a>01176   topLayout-&gt;setStretchFactor( mDetailsSplitter, 1 );
<a name="l01177"></a>01177 
<a name="l01178"></a>01178   mXXPortManager = <span class="keyword">new</span> XXPortManager( <span class="keyword">this</span>, mWidget );
<a name="l01179"></a>01179 
<a name="l01180"></a>01180   initActions();
<a name="l01181"></a>01181 }
<a name="l01182"></a>01182 
<a name="l01183"></a>01183 <span class="keywordtype">void</span> KABCore::createJumpButtonBar()
<a name="l01184"></a>01184 {
<a name="l01185"></a>01185   mJumpButtonBar = <span class="keyword">new</span> <a class="code" href="classJumpButtonBar.html" title="Used to draw the jump button bar on the right of the view.">JumpButtonBar</a>( <span class="keyword">this</span>, mDetailsWidget );
<a name="l01186"></a>01186   mDetailsLayout-&gt;addWidget( mJumpButtonBar );
<a name="l01187"></a>01187   mDetailsLayout-&gt;setStretchFactor( mJumpButtonBar, 1 );
<a name="l01188"></a>01188 
<a name="l01189"></a>01189   connect( mJumpButtonBar, SIGNAL( <a class="code" href="classJumpButtonBar.html#745f5c6914d8214243e2adde881dda94" title="Emitted whenever a letter is selected by the user.">jumpToLetter</a>( <span class="keyword">const</span> QString&amp; ) ),
<a name="l01190"></a>01190            SLOT( incrementalJumpButtonSearch( <span class="keyword">const</span> QString&amp; ) ) );
<a name="l01191"></a>01191   connect( mViewManager, SIGNAL( sortFieldChanged() ),
<a name="l01192"></a>01192            mJumpButtonBar, SLOT( updateButtons() ) );
<a name="l01193"></a>01193 }
<a name="l01194"></a>01194 
<a name="l01195"></a>01195 <span class="keywordtype">void</span> KABCore::initActions()
<a name="l01196"></a>01196 {
<a name="l01197"></a>01197   connect( QApplication::clipboard(), SIGNAL( dataChanged() ),
<a name="l01198"></a>01198            SLOT( clipboardDataChanged() ) );
<a name="l01199"></a>01199 
<a name="l01200"></a>01200   KAction *action;
<a name="l01201"></a>01201 
<a name="l01202"></a>01202   <span class="comment">// file menu</span>
<a name="l01203"></a>01203   mActionMail = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"&amp;Send Email to Contact..."</span> ), <span class="stringliteral">"mail_send"</span>, 0,
<a name="l01204"></a>01204                              <span class="keyword">this</span>, SLOT( sendMail() ), actionCollection(), <span class="stringliteral">"file_mail"</span> );
<a name="l01205"></a>01205   action = KStdAction::print( <span class="keyword">this</span>, SLOT( print() ), actionCollection() );
<a name="l01206"></a>01206   mActionMail-&gt;setWhatsThis( i18n( <span class="stringliteral">"Send a mail to all selected contacts."</span> ) );
<a name="l01207"></a>01207   action-&gt;setWhatsThis( i18n( <span class="stringliteral">"Print a special number of contacts."</span> ) );
<a name="l01208"></a>01208 
<a name="l01209"></a>01209   mActionSave = KStdAction::save( <span class="keyword">this</span>,
<a name="l01210"></a>01210                              SLOT( save() ), actionCollection(), <span class="stringliteral">"file_sync"</span> );
<a name="l01211"></a>01211   mActionSave-&gt;setWhatsThis( i18n( <span class="stringliteral">"Save all changes of the address book to the storage backend."</span> ) );
<a name="l01212"></a>01212 
<a name="l01213"></a>01213   action = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"&amp;New Contact..."</span> ), <span class="stringliteral">"identity"</span>, CTRL+Key_N, <span class="keyword">this</span>,
<a name="l01214"></a>01214                SLOT( newContact() ), actionCollection(), <span class="stringliteral">"file_new_contact"</span> );
<a name="l01215"></a>01215   action-&gt;setWhatsThis( i18n( <span class="stringliteral">"Create a new contact&lt;p&gt;You will be presented with a dialog where you can add all data about a person, including addresses and phone numbers."</span> ) );
<a name="l01216"></a>01216 
<a name="l01217"></a>01217   action = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"&amp;New Distribution List..."</span> ), <span class="stringliteral">"kontact_contacts"</span>, 0, <span class="keyword">this</span>,
<a name="l01218"></a>01218                SLOT( newDistributionList() ), actionCollection(), <span class="stringliteral">"file_new_distributionlist"</span> );
<a name="l01219"></a>01219   action-&gt;setWhatsThis( i18n( <span class="stringliteral">"Create a new distribution list&lt;p&gt;You will be presented with a dialog where you can create a new distribution list."</span> ) );
<a name="l01220"></a>01220 
<a name="l01221"></a>01221   mActionMailVCard = <span class="keyword">new</span> KAction( i18n(<span class="stringliteral">"Send &amp;Contact..."</span>), <span class="stringliteral">"mail_post_to"</span>, 0,
<a name="l01222"></a>01222                                   <span class="keyword">this</span>, SLOT( mailVCard() ),
<a name="l01223"></a>01223                                   actionCollection(), <span class="stringliteral">"file_mail_vcard"</span> );
<a name="l01224"></a>01224   mActionMailVCard-&gt;setWhatsThis( i18n( <span class="stringliteral">"Send a mail with the selected contact as attachment."</span> ) );
<a name="l01225"></a>01225 
<a name="l01226"></a>01226   mActionChat = <span class="keyword">new</span> KAction( i18n(<span class="stringliteral">"Chat &amp;With..."</span>), 0,
<a name="l01227"></a>01227                                   <span class="keyword">this</span>, SLOT( startChat() ),
<a name="l01228"></a>01228                                   actionCollection(), <span class="stringliteral">"file_chat"</span> );
<a name="l01229"></a>01229   mActionChat-&gt;setWhatsThis( i18n( <span class="stringliteral">"Start a chat with the selected contact."</span> ) );
<a name="l01230"></a>01230 
<a name="l01231"></a>01231   mActionEditAddressee = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"&amp;Edit Contact..."</span> ), <span class="stringliteral">"edit"</span>, 0,
<a name="l01232"></a>01232                                       <span class="keyword">this</span>, SLOT( editContact() ),
<a name="l01233"></a>01233                                       actionCollection(), <span class="stringliteral">"file_properties"</span> );
<a name="l01234"></a>01234   mActionEditAddressee-&gt;setWhatsThis( i18n( <span class="stringliteral">"Edit a contact&lt;p&gt;You will be presented with a dialog where you can change all data about a person, including addresses and phone numbers."</span> ) );
<a name="l01235"></a>01235 
<a name="l01236"></a>01236   mActionMerge = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"&amp;Merge Contacts"</span> ), <span class="stringliteral">""</span>, 0,
<a name="l01237"></a>01237                               <span class="keyword">this</span>, SLOT( mergeContacts() ),
<a name="l01238"></a>01238                               actionCollection(), <span class="stringliteral">"edit_merge"</span> );
<a name="l01239"></a>01239 
<a name="l01240"></a>01240   <span class="comment">// edit menu</span>
<a name="l01241"></a>01241   mActionCopy = KStdAction::copy( <span class="keyword">this</span>, SLOT( copyContacts() ), actionCollection() );
<a name="l01242"></a>01242   mActionCut = KStdAction::cut( <span class="keyword">this</span>, SLOT( cutContacts() ), actionCollection() );
<a name="l01243"></a>01243   mActionPaste = KStdAction::paste( <span class="keyword">this</span>, SLOT( pasteContacts() ), actionCollection() );
<a name="l01244"></a>01244   action = KStdAction::selectAll( <span class="keyword">this</span>, SLOT( selectAllContacts() ), actionCollection() );
<a name="l01245"></a>01245   mActionCopy-&gt;setWhatsThis( i18n( <span class="stringliteral">"Copy the currently selected contact(s) to system clipboard in vCard format."</span> ) );
<a name="l01246"></a>01246   mActionCut-&gt;setWhatsThis( i18n( <span class="stringliteral">"Cuts the currently selected contact(s) to system clipboard in vCard format."</span> ) );
<a name="l01247"></a>01247   mActionPaste-&gt;setWhatsThis( i18n( <span class="stringliteral">"Paste the previously cut or copied contacts from clipboard."</span> ) );
<a name="l01248"></a>01248   action-&gt;setWhatsThis( i18n( <span class="stringliteral">"Selects all visible contacts from current view."</span> ) );
<a name="l01249"></a>01249 <span class="comment">//  mActionUndo-&gt;setWhatsThis( i18n( "Undoes the last &lt;b&gt;Cut&lt;/b&gt;, &lt;b&gt;Copy&lt;/b&gt; or &lt;b&gt;Paste&lt;/b&gt;." ) );</span>
<a name="l01250"></a>01250 <span class="comment">//  mActionRedo-&gt;setWhatsThis( i18n( "Redoes the last &lt;b&gt;Cut&lt;/b&gt;, &lt;b&gt;Copy&lt;/b&gt; or &lt;b&gt;Paste&lt;/b&gt;." ) );</span>
<a name="l01251"></a>01251 
<a name="l01252"></a>01252   mActionDelete = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"&amp;Delete Contact"</span> ), <span class="stringliteral">"editdelete"</span>,
<a name="l01253"></a>01253                                Key_Delete, <span class="keyword">this</span>, SLOT( deleteContacts() ),
<a name="l01254"></a>01254                                actionCollection(), <span class="stringliteral">"edit_delete"</span> );
<a name="l01255"></a>01255   mActionDelete-&gt;setWhatsThis( i18n( <span class="stringliteral">"Delete all selected contacts."</span> ) );
<a name="l01256"></a>01256 
<a name="l01257"></a>01257 
<a name="l01258"></a>01258   mActionCopyAddresseeTo = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"&amp;Copy Contact To..."</span> ), <span class="stringliteral">""</span>, 0,
<a name="l01259"></a>01259                                       <span class="keyword">this</span>, SLOT( copySelectedContactToResource() ),
<a name="l01260"></a>01260                                       actionCollection(), <span class="stringliteral">"copy_contact_to"</span> );
<a name="l01261"></a>01261   <span class="keyword">const</span> QString copyMoveWhatsThis = i18n( <span class="stringliteral">"Store a contact in a different Addressbook&lt;p&gt;You will be presented with a dialog where you can select a new storage place for this contact."</span> );
<a name="l01262"></a>01262   mActionCopyAddresseeTo-&gt;setWhatsThis( copyMoveWhatsThis );
<a name="l01263"></a>01263 
<a name="l01264"></a>01264   mActionMoveAddresseeTo = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"M&amp;ove Contact To..."</span> ), <span class="stringliteral">""</span>, 0,
<a name="l01265"></a>01265                                       <span class="keyword">this</span>, SLOT( moveSelectedContactToResource() ),
<a name="l01266"></a>01266                                       actionCollection(), <span class="stringliteral">"move_contact_to"</span> );
<a name="l01267"></a>01267   mActionMoveAddresseeTo-&gt;setWhatsThis( copyMoveWhatsThis );
<a name="l01268"></a>01268 
<a name="l01269"></a>01269   <span class="comment">// settings menu</span>
<a name="l01270"></a>01270   mActionJumpBar = <span class="keyword">new</span> KToggleAction( i18n( <span class="stringliteral">"Show Jump Bar"</span> ), <span class="stringliteral">"next"</span>, 0,
<a name="l01271"></a>01271                                       actionCollection(), <span class="stringliteral">"options_show_jump_bar"</span> );
<a name="l01272"></a>01272   mActionJumpBar-&gt;setWhatsThis( i18n( <span class="stringliteral">"Toggle whether the jump button bar shall be visible."</span> ) );
<a name="l01273"></a>01273   mActionJumpBar-&gt;setCheckedState( i18n( <span class="stringliteral">"Hide Jump Bar"</span>) );
<a name="l01274"></a>01274   connect( mActionJumpBar, SIGNAL( toggled( <span class="keywordtype">bool</span> ) ), SLOT( setJumpButtonBarVisible( <span class="keywordtype">bool</span> ) ) );
<a name="l01275"></a>01275 
<a name="l01276"></a>01276   mActionDetails = <span class="keyword">new</span> KToggleAction( i18n( <span class="stringliteral">"Show Details"</span> ), 0, 0,
<a name="l01277"></a>01277                                       actionCollection(), <span class="stringliteral">"options_show_details"</span> );
<a name="l01278"></a>01278   mActionDetails-&gt;setWhatsThis( i18n( <span class="stringliteral">"Toggle whether the details page shall be visible."</span> ) );
<a name="l01279"></a>01279   mActionDetails-&gt;setCheckedState( i18n( <span class="stringliteral">"Hide Details"</span>) );
<a name="l01280"></a>01280   connect( mActionDetails, SIGNAL( toggled( <span class="keywordtype">bool</span> ) ), SLOT( setDetailsVisible( <span class="keywordtype">bool</span> ) ) );
<a name="l01281"></a>01281 
<a name="l01282"></a>01282   <span class="keywordflow">if</span> ( mIsPart )
<a name="l01283"></a>01283     action = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"&amp;Configure Address Book..."</span> ), <span class="stringliteral">"configure"</span>, 0,
<a name="l01284"></a>01284                           <span class="keyword">this</span>, SLOT( configure() ), actionCollection(),
<a name="l01285"></a>01285                           <span class="stringliteral">"kaddressbook_configure"</span> );
<a name="l01286"></a>01286   <span class="keywordflow">else</span>
<a name="l01287"></a>01287     action = KStdAction::preferences( <span class="keyword">this</span>, SLOT( configure() ), actionCollection() );
<a name="l01288"></a>01288 
<a name="l01289"></a>01289   action-&gt;setWhatsThis( i18n( <span class="stringliteral">"You will be presented with a dialog, that offers you all possibilities to configure KAddressBook."</span> ) );
<a name="l01290"></a>01290 
<a name="l01291"></a>01291   <span class="comment">// misc</span>
<a name="l01292"></a>01292   action = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"&amp;Lookup Addresses in LDAP Directory..."</span> ), <span class="stringliteral">"find"</span>, 0,
<a name="l01293"></a>01293                         <span class="keyword">this</span>, SLOT( openLDAPDialog() ), actionCollection(), <span class="stringliteral">"ldap_lookup"</span> );
<a name="l01294"></a>01294   action-&gt;setWhatsThis( i18n( <span class="stringliteral">"Search for contacts on a LDAP server&lt;p&gt;You will be presented with a dialog, where you can search for contacts and select the ones you want to add to your local address book."</span> ) );
<a name="l01295"></a>01295 
<a name="l01296"></a>01296   mActionWhoAmI = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"Set as Personal Contact Data"</span> ), <span class="stringliteral">"personal"</span>, 0, <span class="keyword">this</span>,
<a name="l01297"></a>01297                                SLOT( setWhoAmI() ), actionCollection(),
<a name="l01298"></a>01298                                <span class="stringliteral">"edit_set_personal"</span> );
<a name="l01299"></a>01299   mActionWhoAmI-&gt;setWhatsThis( i18n( <span class="stringliteral">"Set the personal contact&lt;p&gt;The data of this contact will be used in many other KDE applications, so you do not have to input your personal data several times."</span> ) );
<a name="l01300"></a>01300 
<a name="l01301"></a>01301   mActionCategories = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"Select Categories..."</span> ), 0, <span class="keyword">this</span>,
<a name="l01302"></a>01302                                    SLOT( setCategories() ), actionCollection(),
<a name="l01303"></a>01303                                    <span class="stringliteral">"edit_set_categories"</span> );
<a name="l01304"></a>01304   mActionCategories-&gt;setWhatsThis( i18n( <span class="stringliteral">"Set the categories for all selected contacts."</span> ) );
<a name="l01305"></a>01305 
<a name="l01306"></a>01306   KAction *clearLocation = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"Clear Search Bar"</span> ),
<a name="l01307"></a>01307                     QApplication::reverseLayout() ? <span class="stringliteral">"clear_left"</span> : <span class="stringliteral">"locationbar_erase"</span>,
<a name="l01308"></a>01308                     CTRL+Key_L, <span class="keyword">this</span>, SLOT( slotClearSearchBar() ), actionCollection(), <span class="stringliteral">"clear_search"</span> );
<a name="l01309"></a>01309   clearLocation-&gt;setWhatsThis( i18n( <span class="stringliteral">"Clear Search Bar&lt;p&gt;"</span>
<a name="l01310"></a>01310                      <span class="stringliteral">"Clears the content of the quick search bar."</span> ) );
<a name="l01311"></a>01311 
<a name="l01312"></a>01312   clipboardDataChanged();
<a name="l01313"></a>01313 }
<a name="l01314"></a>01314 
<a name="l01315"></a>01315 <span class="keywordtype">void</span> KABCore::clipboardDataChanged()
<a name="l01316"></a>01316 {
<a name="l01317"></a>01317   <span class="keywordflow">if</span> ( mReadWrite )
<a name="l01318"></a>01318     mActionPaste-&gt;setEnabled( !QApplication::clipboard()-&gt;text().isEmpty() );
<a name="l01319"></a>01319 }
<a name="l01320"></a>01320 
<a name="l01321"></a>01321 <span class="keywordtype">void</span> KABCore::updateIncSearchWidget()
<a name="l01322"></a>01322 {
<a name="l01323"></a>01323   mIncSearchWidget-&gt;setViewFields( mViewManager-&gt;viewFields() );
<a name="l01324"></a>01324 }
<a name="l01325"></a>01325 
<a name="l01326"></a>01326 <span class="keywordtype">void</span> KABCore::updateCategories()
<a name="l01327"></a>01327 {
<a name="l01328"></a>01328   QStringList categories( allCategories() );
<a name="l01329"></a>01329   categories.sort();
<a name="l01330"></a>01330 
<a name="l01331"></a>01331   <span class="keyword">const</span> QStringList customCategories( KABPrefs::instance()-&gt;customCategories() );
<a name="l01332"></a>01332   QStringList::ConstIterator it;
<a name="l01333"></a>01333   <span class="keyword">const</span> QStringList::ConstIterator endIt( customCategories.end() );
<a name="l01334"></a>01334   <span class="keywordflow">for</span> ( it = customCategories.begin(); it != endIt; ++it ) {
<a name="l01335"></a>01335     <span class="keywordflow">if</span> ( categories.find( *it ) == categories.end() ) {
<a name="l01336"></a>01336       categories.append( *it );
<a name="l01337"></a>01337     }
<a name="l01338"></a>01338   }
<a name="l01339"></a>01339 
<a name="l01340"></a>01340   KABPrefs::instance()-&gt;mCustomCategories = categories;
<a name="l01341"></a>01341   KABPrefs::instance()-&gt;writeConfig();
<a name="l01342"></a>01342 
<a name="l01343"></a>01343   <span class="keywordflow">if</span> ( mCategoryEditDialog )
<a name="l01344"></a>01344     mCategoryEditDialog-&gt;reload();
<a name="l01345"></a>01345 }
<a name="l01346"></a>01346 
<a name="l01347"></a>01347 QStringList KABCore::allCategories()<span class="keyword"> const</span>
<a name="l01348"></a>01348 <span class="keyword"></span>{
<a name="l01349"></a>01349   QStringList categories, allCategories;
<a name="l01350"></a>01350   QStringList::ConstIterator catIt;
<a name="l01351"></a>01351 
<a name="l01352"></a>01352   KABC::AddressBook::ConstIterator it;
<a name="l01353"></a>01353   <span class="keyword">const</span> KABC::AddressBook::ConstIterator endIt( mAddressBook-&gt;end() );
<a name="l01354"></a>01354   <span class="keywordflow">for</span> ( it = mAddressBook-&gt;begin(); it != endIt; ++it ) {
<a name="l01355"></a>01355     categories = (*it).categories();
<a name="l01356"></a>01356     <span class="keyword">const</span> QStringList::ConstIterator catEndIt( categories.end() );
<a name="l01357"></a>01357     <span class="keywordflow">for</span> ( catIt = categories.begin(); catIt != catEndIt; ++catIt ) {
<a name="l01358"></a>01358       <span class="keywordflow">if</span> ( !allCategories.contains( *catIt ) )
<a name="l01359"></a>01359         allCategories.append( *catIt );
<a name="l01360"></a>01360     }
<a name="l01361"></a>01361   }
<a name="l01362"></a>01362 
<a name="l01363"></a>01363   <span class="keywordflow">return</span> allCategories;
<a name="l01364"></a>01364 }
<a name="l01365"></a>01365 
<a name="l01366"></a>01366 <span class="keywordtype">void</span> KABCore::setCategories()
<a name="l01367"></a>01367 {
<a name="l01368"></a>01368   <span class="comment">// Show the category dialog</span>
<a name="l01369"></a>01369   <span class="keywordflow">if</span> ( mCategorySelectDialog == 0 ) {
<a name="l01370"></a>01370     mCategorySelectDialog = <span class="keyword">new</span> KPIM::CategorySelectDialog( KABPrefs::instance(), mWidget );
<a name="l01371"></a>01371     connect( mCategorySelectDialog, SIGNAL( categoriesSelected( <span class="keyword">const</span> QStringList&amp; ) ),
<a name="l01372"></a>01372              SLOT( categoriesSelected( <span class="keyword">const</span> QStringList&amp; ) ) );
<a name="l01373"></a>01373     connect( mCategorySelectDialog, SIGNAL( editCategories() ), SLOT( editCategories() ) );
<a name="l01374"></a>01374   }
<a name="l01375"></a>01375 
<a name="l01376"></a>01376   mCategorySelectDialog-&gt;show();
<a name="l01377"></a>01377   mCategorySelectDialog-&gt;raise();
<a name="l01378"></a>01378 }
<a name="l01379"></a>01379 
<a name="l01380"></a>01380 <span class="keywordtype">void</span> KABCore::categoriesSelected( <span class="keyword">const</span> QStringList &amp;categories )
<a name="l01381"></a>01381 {
<a name="l01382"></a>01382   <span class="keywordtype">bool</span> merge = <span class="keyword">false</span>;
<a name="l01383"></a>01383   QString msg = i18n( <span class="stringliteral">"Merge with existing categories?"</span> );
<a name="l01384"></a>01384   <span class="keywordflow">if</span> ( KMessageBox::questionYesNo( mWidget, msg, QString::null, i18n( <span class="stringliteral">"Merge"</span> ), i18n( <span class="stringliteral">"Do Not Merge"</span> ) ) == KMessageBox::Yes )
<a name="l01385"></a>01385     merge = <span class="keyword">true</span>;
<a name="l01386"></a>01386 
<a name="l01387"></a>01387   QStringList uids = mViewManager-&gt;selectedUids();
<a name="l01388"></a>01388   QStringList::ConstIterator it;
<a name="l01389"></a>01389   <span class="keyword">const</span> QStringList::ConstIterator endIt( uids.end() );
<a name="l01390"></a>01390   <span class="keywordflow">for</span> ( it = uids.begin(); it != endIt; ++it ) {
<a name="l01391"></a>01391     KABC::Addressee addr = mAddressBook-&gt;findByUid( *it );
<a name="l01392"></a>01392     <span class="keywordflow">if</span> ( !addr.isEmpty() ) {
<a name="l01393"></a>01393       <span class="keywordflow">if</span> ( !merge )
<a name="l01394"></a>01394         addr.setCategories( categories );
<a name="l01395"></a>01395       <span class="keywordflow">else</span> {
<a name="l01396"></a>01396         QStringList addrCategories = addr.categories();
<a name="l01397"></a>01397         QStringList::ConstIterator catIt;
<a name="l01398"></a>01398         <span class="keyword">const</span> QStringList::ConstIterator catEndIt( categories.end() );
<a name="l01399"></a>01399         <span class="keywordflow">for</span> ( catIt = categories.begin(); catIt != catEndIt; ++catIt ) {
<a name="l01400"></a>01400           <span class="keywordflow">if</span> ( !addrCategories.contains( *catIt ) )
<a name="l01401"></a>01401             addrCategories.append( *catIt );
<a name="l01402"></a>01402         }
<a name="l01403"></a>01403         addr.setCategories( addrCategories );
<a name="l01404"></a>01404       }
<a name="l01405"></a>01405 
<a name="l01406"></a>01406       mAddressBook-&gt;insertAddressee( addr );
<a name="l01407"></a>01407     }
<a name="l01408"></a>01408   }
<a name="l01409"></a>01409 
<a name="l01410"></a>01410   <span class="keywordflow">if</span> ( uids.count() &gt; 0 )
<a name="l01411"></a>01411     setModified( <span class="keyword">true</span> );
<a name="l01412"></a>01412 }
<a name="l01413"></a>01413 
<a name="l01414"></a>01414 <span class="keywordtype">void</span> KABCore::editCategories()
<a name="l01415"></a>01415 {
<a name="l01416"></a>01416   <span class="keywordflow">if</span> ( mCategoryEditDialog == 0 ) {
<a name="l01417"></a>01417     mCategoryEditDialog = <span class="keyword">new</span> KPIM::CategoryEditDialog( KABPrefs::instance(), mWidget );
<a name="l01418"></a>01418     connect( mCategoryEditDialog, SIGNAL( categoryConfigChanged() ),
<a name="l01419"></a>01419              mCategorySelectDialog, SLOT( updateCategoryConfig() ) );
<a name="l01420"></a>01420   }
<a name="l01421"></a>01421 
<a name="l01422"></a>01422   mCategoryEditDialog-&gt;show();
<a name="l01423"></a>01423   mCategoryEditDialog-&gt;raise();
<a name="l01424"></a>01424 }
<a name="l01425"></a>01425 
<a name="l01426"></a>01426 <span class="keywordtype">void</span> KABCore::slotClearSearchBar()
<a name="l01427"></a>01427 {
<a name="l01428"></a>01428   mIncSearchWidget-&gt;clear();
<a name="l01429"></a>01429   mIncSearchWidget-&gt;setFocus();
<a name="l01430"></a>01430 }
<a name="l01431"></a>01431 
<a name="l01432"></a>01432 <span class="keywordtype">void</span> KABCore::slotContactsUpdated()
<a name="l01433"></a>01433 {
<a name="l01434"></a>01434   <span class="keywordflow">if</span> ( mStatusBar ) {
<a name="l01435"></a>01435     QString msg( i18n( <span class="stringliteral">"%n contact matches"</span>, <span class="stringliteral">"%n contacts matching"</span>, mSearchManager-&gt;contacts().count() ) );
<a name="l01436"></a>01436     <span class="keywordflow">if</span> ( !mStatusBar-&gt;hasItem( 1 ) )
<a name="l01437"></a>01437       mStatusBar-&gt;insertItem( msg, 1 );
<a name="l01438"></a>01438     <span class="keywordflow">else</span>
<a name="l01439"></a>01439       mStatusBar-&gt;changeItem( msg, 1 );
<a name="l01440"></a>01440   }
<a name="l01441"></a>01441 
<a name="l01442"></a>01442   emit contactsUpdated();
<a name="l01443"></a>01443 }
<a name="l01444"></a>01444 
<a name="l01445"></a>01445 <span class="keywordtype">bool</span> KABCore::handleCommandLine( KAddressBookIface* iface )
<a name="l01446"></a>01446 {
<a name="l01447"></a>01447   KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
<a name="l01448"></a>01448   QCString addrStr = args-&gt;getOption( <span class="stringliteral">"addr"</span> );
<a name="l01449"></a>01449   QCString uidStr = args-&gt;getOption( <span class="stringliteral">"uid"</span> );
<a name="l01450"></a>01450 
<a name="l01451"></a>01451   QString addr, uid, vcard;
<a name="l01452"></a>01452   <span class="keywordflow">if</span> ( !addrStr.isEmpty() )
<a name="l01453"></a>01453     addr = QString::fromLocal8Bit( addrStr );
<a name="l01454"></a>01454   <span class="keywordflow">if</span> ( !uidStr.isEmpty() )
<a name="l01455"></a>01455     uid = QString::fromLocal8Bit( uidStr );
<a name="l01456"></a>01456 
<a name="l01457"></a>01457   <span class="keywordtype">bool</span> doneSomething = <span class="keyword">false</span>;
<a name="l01458"></a>01458 
<a name="l01459"></a>01459   <span class="comment">// Can not see why anyone would pass both a uid and an email address, so I'll leave it that two contact editors will show if they do</span>
<a name="l01460"></a>01460   <span class="keywordflow">if</span> ( !addr.isEmpty() ) {
<a name="l01461"></a>01461     iface-&gt;addEmail( addr );
<a name="l01462"></a>01462     doneSomething = <span class="keyword">true</span>;
<a name="l01463"></a>01463   }
<a name="l01464"></a>01464 
<a name="l01465"></a>01465   <span class="keywordflow">if</span> ( !uid.isEmpty() ) {
<a name="l01466"></a>01466     iface-&gt;showContactEditor( uid );
<a name="l01467"></a>01467     doneSomething = <span class="keyword">true</span>;
<a name="l01468"></a>01468   }
<a name="l01469"></a>01469 
<a name="l01470"></a>01470   <span class="keywordflow">if</span> ( args-&gt;isSet( <span class="stringliteral">"new-contact"</span> ) ) {
<a name="l01471"></a>01471     iface-&gt;newContact();
<a name="l01472"></a>01472     doneSomething = <span class="keyword">true</span>;
<a name="l01473"></a>01473   }
<a name="l01474"></a>01474 
<a name="l01475"></a>01475   <span class="keywordflow">if</span> ( args-&gt;count() &gt;= 1 ) {
<a name="l01476"></a>01476     <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; i &lt; args-&gt;count(); ++i )
<a name="l01477"></a>01477       iface-&gt;importVCard( args-&gt;url( i ).url() );
<a name="l01478"></a>01478     doneSomething = <span class="keyword">true</span>;
<a name="l01479"></a>01479   }
<a name="l01480"></a>01480   <span class="keywordflow">return</span> doneSomething;
<a name="l01481"></a>01481 }
<a name="l01482"></a>01482 
<a name="l01483"></a>01483 <span class="keywordtype">void</span> KABCore::removeSelectedContactsFromDistList()
<a name="l01484"></a>01484 {
<a name="l01485"></a>01485 <span class="preprocessor">#ifdef KDEPIM_NEW_DISTRLISTS</span>
<a name="l01486"></a>01486 <span class="preprocessor"></span>
<a name="l01487"></a>01487   KPIM::DistributionList dist = KPIM::DistributionList::findByName( addressBook(), mSelectedDistributionList );
<a name="l01488"></a>01488   <span class="keywordflow">if</span> ( dist.isEmpty() )
<a name="l01489"></a>01489     <span class="keywordflow">return</span>;
<a name="l01490"></a>01490   <span class="keyword">const</span> QStringList uids = selectedUIDs();
<a name="l01491"></a>01491   <span class="keywordflow">if</span> ( uids.isEmpty() )
<a name="l01492"></a>01492       <span class="keywordflow">return</span>;
<a name="l01493"></a>01493   <span class="keywordflow">for</span> ( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
<a name="l01494"></a>01494       dist.removeEntry ( *it );
<a name="l01495"></a>01495   }
<a name="l01496"></a>01496   addressBook()-&gt;insertAddressee( dist );
<a name="l01497"></a>01497   setModified();
<a name="l01498"></a>01498 <span class="preprocessor">#endif</span>
<a name="l01499"></a>01499 <span class="preprocessor"></span>}
<a name="l01500"></a>01500 
<a name="l01501"></a>01501 <span class="keywordtype">void</span> KABCore::sendMailToDistributionList( <span class="keyword">const</span> QString &amp;name )
<a name="l01502"></a>01502 {
<a name="l01503"></a>01503 <span class="preprocessor">#ifdef KDEPIM_NEW_DISTRLISTS</span>
<a name="l01504"></a>01504 <span class="preprocessor"></span>  KPIM::DistributionList dist = KPIM::DistributionList::findByName( addressBook(), name );
<a name="l01505"></a>01505   <span class="keywordflow">if</span> ( dist.isEmpty() )
<a name="l01506"></a>01506     <span class="keywordflow">return</span>;
<a name="l01507"></a>01507   <span class="keyword">typedef</span> KPIM::DistributionList::Entry::List EntryList; 
<a name="l01508"></a>01508   QStringList mails;
<a name="l01509"></a>01509   <span class="keyword">const</span> EntryList entries = dist.entries( addressBook() );
<a name="l01510"></a>01510   <span class="keywordflow">for</span> ( EntryList::ConstIterator it = entries.begin(); it != entries.end(); ++it )
<a name="l01511"></a>01511     mails += (*it).addressee.fullEmail( (*it).email );
<a name="l01512"></a>01512   sendMail( mails.join( <span class="stringliteral">", "</span> ) ); 
<a name="l01513"></a>01513 <span class="preprocessor">#endif</span>
<a name="l01514"></a>01514 <span class="preprocessor"></span>}
<a name="l01515"></a>01515 
<a name="l01516"></a>01516 <span class="keywordtype">void</span> KABCore::editSelectedDistributionList()
<a name="l01517"></a>01517 {
<a name="l01518"></a>01518 <span class="preprocessor">#ifdef KDEPIM_NEW_DISTRLISTS</span>
<a name="l01519"></a>01519 <span class="preprocessor"></span>  editDistributionList( KPIM::DistributionList::findByName( addressBook(), mSelectedDistributionList ) );
<a name="l01520"></a>01520 <span class="preprocessor">#endif</span>
<a name="l01521"></a>01521 <span class="preprocessor"></span>}
<a name="l01522"></a>01522 
<a name="l01523"></a>01523 
<a name="l01524"></a>01524 <span class="keywordtype">void</span> KABCore::editDistributionList( <span class="keyword">const</span> QString &amp;name )
<a name="l01525"></a>01525 {
<a name="l01526"></a>01526 <span class="preprocessor">#ifdef KDEPIM_NEW_DISTRLISTS</span>
<a name="l01527"></a>01527 <span class="preprocessor"></span>  editDistributionList( KPIM::DistributionList::findByName( addressBook(), name ) );
<a name="l01528"></a>01528 <span class="preprocessor">#endif</span>
<a name="l01529"></a>01529 <span class="preprocessor"></span>}
<a name="l01530"></a>01530 
<a name="l01531"></a>01531 <span class="preprocessor">#ifdef KDEPIM_NEW_DISTRLISTS</span>
<a name="l01532"></a>01532 <span class="preprocessor"></span>
<a name="l01533"></a>01533 <span class="keywordtype">void</span> KABCore::showDistributionListEntry( <span class="keyword">const</span> QString&amp; uid )
<a name="l01534"></a>01534 {
<a name="l01535"></a>01535   KPIM::DistributionList dist = KPIM::DistributionList::findByName( addressBook(), mSelectedDistributionList );
<a name="l01536"></a>01536   <span class="keywordflow">if</span> ( !dist.isEmpty() ) {
<a name="l01537"></a>01537     mDistListEntryView-&gt;clear();
<a name="l01538"></a>01538     <span class="keyword">typedef</span> KPIM::DistributionList::Entry::List EntryList;   
<a name="l01539"></a>01539     <span class="keyword">const</span> EntryList entries = dist.entries( addressBook() ); 
<a name="l01540"></a>01540     <span class="keywordflow">for</span> (EntryList::ConstIterator it = entries.begin(); it != entries.end(); ++it ) {
<a name="l01541"></a>01541       <span class="keywordflow">if</span> ( (*it).addressee.uid() == uid ) {
<a name="l01542"></a>01542         mDistListEntryView-&gt;setEntry( dist, *it );
<a name="l01543"></a>01543         <span class="keywordflow">break</span>;
<a name="l01544"></a>01544       }
<a name="l01545"></a>01545     }
<a name="l01546"></a>01546   }
<a name="l01547"></a>01547 }
<a name="l01548"></a>01548 
<a name="l01549"></a>01549 <span class="keywordtype">void</span> KABCore::editDistributionList( <span class="keyword">const</span> KPIM::DistributionList &amp;dist )
<a name="l01550"></a>01550 {
<a name="l01551"></a>01551   <span class="keywordflow">if</span> ( dist.isEmpty() )
<a name="l01552"></a>01552     <span class="keywordflow">return</span>;
<a name="l01553"></a>01553   QGuardedPtr&lt;KPIM::DistributionListEditor::EditorWidget&gt; dlg = <span class="keyword">new</span> KPIM::DistributionListEditor::EditorWidget( addressBook(), widget() );
<a name="l01554"></a>01554   dlg-&gt;setDistributionList( dist );
<a name="l01555"></a>01555   <span class="keywordflow">if</span> ( dlg-&gt;exec() == QDialog::Accepted &amp;&amp; dlg ) {
<a name="l01556"></a>01556     <span class="keyword">const</span> KPIM::DistributionList newDist = dlg-&gt;distributionList();
<a name="l01557"></a>01557     <span class="keywordflow">if</span> ( newDist != dist ) {
<a name="l01558"></a>01558       addressBook()-&gt;insertAddressee( newDist );
<a name="l01559"></a>01559       setModified();
<a name="l01560"></a>01560     }
<a name="l01561"></a>01561   }
<a name="l01562"></a>01562   <span class="keyword">delete</span> dlg;
<a name="l01563"></a>01563 }
<a name="l01564"></a>01564 
<a name="l01565"></a>01565 
<a name="l01566"></a>01566 KPIM::DistributionList::List KABCore::distributionLists()<span class="keyword"> const</span>
<a name="l01567"></a>01567 <span class="keyword"></span>{
<a name="l01568"></a>01568   <span class="keywordflow">return</span> mSearchManager-&gt;distributionLists();
<a name="l01569"></a>01569 }
<a name="l01570"></a>01570 
<a name="l01571"></a>01571 <span class="keywordtype">void</span> KABCore::setSelectedDistributionList( <span class="keyword">const</span> QString &amp;name )
<a name="l01572"></a>01572 {
<a name="l01573"></a>01573   mSelectedDistributionList = name;
<a name="l01574"></a>01574   mSearchManager-&gt;setSelectedDistributionList( name );
<a name="l01575"></a>01575   mViewHeaderLabel-&gt;setText( name.isNull() ? i18n( <span class="stringliteral">"Contacts"</span> ) : i18n( <span class="stringliteral">"Distribution List: %1"</span> ).arg( name ) );
<a name="l01576"></a>01576   mDistListButtonWidget-&gt;setShown( !mSelectedDistributionList.isNull() );
<a name="l01577"></a>01577   <span class="keywordflow">if</span> ( !name.isNull() ) {
<a name="l01578"></a>01578     mDetailsStack-&gt;raiseWidget( mDistListEntryView );
<a name="l01579"></a>01579     <span class="keyword">const</span> QStringList selectedUids = selectedUIDs();
<a name="l01580"></a>01580     showDistributionListEntry( selectedUids.isEmpty() ? QString() : selectedUids.first() );
<a name="l01581"></a>01581   }
<a name="l01582"></a>01582   <span class="keywordflow">else</span>
<a name="l01583"></a>01583     mDetailsStack-&gt;raiseWidget( mExtensionManager-&gt;activeDetailsWidget() ? mExtensionManager-&gt;activeDetailsWidget() : mDetailsWidget );
<a name="l01584"></a>01584 }
<a name="l01585"></a>01585 
<a name="l01586"></a>01586 QStringList KABCore::distributionListNames()<span class="keyword"> const</span>
<a name="l01587"></a>01587 <span class="keyword"></span>{
<a name="l01588"></a>01588   <span class="keywordflow">return</span> mSearchManager-&gt;distributionListNames();
<a name="l01589"></a>01589 }
<a name="l01590"></a>01590 <span class="preprocessor">#endif</span>
<a name="l01591"></a>01591 <span class="preprocessor"></span>
<a name="l01592"></a>01592 <span class="preprocessor">#include "kabcore.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>&nbsp;&nbsp;<a href="../../akregator/src/html/index.html">src</a></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<a href="../../akregator/src/librss/html/index.html">librss</a></li><li><a href="../../certmanager/html/index.html">certmanager</a></li><li>&nbsp;&nbsp;<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>&nbsp;&nbsp;<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>&nbsp;&nbsp;<a href="../../kioslaves/imap4/html/index.html">imap4</a></li><li>&nbsp;&nbsp;<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>&nbsp;&nbsp;<a href="../../kpilot/kpilot/html/index.html">kpilot</a></li><li>&nbsp;&nbsp;<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="&#109;&#97;&#105;&#108;&#116;&#111;&#58;groo&#116;&#64;kde&#46;or&#x67;">Adriaan de Groot</a>
and
<a href="&#109;a&#105;&#108;&#116;&#111;&#58;w&#105;nter&#64;kde&#46;or&#x67">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>