Sophie

Sophie

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

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: viewmanager.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>viewmanager.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment">    This file is part of KAddressBook.</span>
<a name="l00003"></a>00003 <span class="comment">    Copyright (c) 2002 Mike Pilone &lt;mpilone@slac.com&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="preprocessor">#include &lt;qfile.h&gt;</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;qlayout.h&gt;</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;qwidgetstack.h&gt;</span>
<a name="l00027"></a>00027 
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;libkdepim/kvcarddrag.h&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;kabc/addressbook.h&gt;</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include &lt;kabc/vcardconverter.h&gt;</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;kactionclasses.h&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;kconfig.h&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;kdebug.h&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;kdeversion.h&gt;</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;kiconloader.h&gt;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;klocale.h&gt;</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include &lt;kmessagebox.h&gt;</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include &lt;kmultipledrag.h&gt;</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include &lt;ktempdir.h&gt;</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;ktrader.h&gt;</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include &lt;kurldrag.h&gt;</span>
<a name="l00042"></a>00042 
<a name="l00043"></a>00043 <span class="preprocessor">#include "addviewdialog.h"</span>
<a name="l00044"></a>00044 <span class="preprocessor">#include "addresseeutil.h"</span>
<a name="l00045"></a>00045 <span class="preprocessor">#include "core.h"</span>
<a name="l00046"></a>00046 <span class="preprocessor">#include "filtereditdialog.h"</span>
<a name="l00047"></a>00047 <span class="preprocessor">#include "filterselectionwidget.h"</span>
<a name="l00048"></a>00048 <span class="preprocessor">#include "kabprefs.h"</span>
<a name="l00049"></a>00049 
<a name="l00050"></a>00050 <span class="preprocessor">#include "viewmanager.h"</span>
<a name="l00051"></a>00051 
<a name="l00052"></a>00052 ViewManager::ViewManager( KAB::Core *core, QWidget *parent, <span class="keyword">const</span> <span class="keywordtype">char</span> *name )
<a name="l00053"></a>00053   : QWidget( parent, name ), mCore( core ), mActiveView( 0 ),
<a name="l00054"></a>00054     mFilterSelectionWidget( 0 )
<a name="l00055"></a>00055 {
<a name="l00056"></a>00056   initGUI();
<a name="l00057"></a>00057   initActions();
<a name="l00058"></a>00058 
<a name="l00059"></a>00059   mViewDict.setAutoDelete( <span class="keyword">true</span> );
<a name="l00060"></a>00060 
<a name="l00061"></a>00061   createViewFactories();
<a name="l00062"></a>00062 }
<a name="l00063"></a>00063 
<a name="l00064"></a>00064 ViewManager::~ViewManager()
<a name="l00065"></a>00065 {
<a name="l00066"></a>00066   unloadViews();
<a name="l00067"></a>00067   mViewFactoryDict.clear();
<a name="l00068"></a>00068 }
<a name="l00069"></a>00069 
<a name="l00070"></a>00070 <span class="keywordtype">void</span> ViewManager::restoreSettings()
<a name="l00071"></a>00071 {
<a name="l00072"></a>00072   mViewNameList = KABPrefs::instance()-&gt;viewNames();
<a name="l00073"></a>00073   QString activeViewName = KABPrefs::instance()-&gt;currentView();
<a name="l00074"></a>00074 
<a name="l00075"></a>00075   mActionSelectView-&gt;setItems( mViewNameList );
<a name="l00076"></a>00076 
<a name="l00077"></a>00077   <span class="comment">// Filter</span>
<a name="l00078"></a>00078   mFilterList = <a class="code" href="classFilter.html#0d0848758b5b80290a94eabf8456f69f" title="Loads the filter from the config file.">Filter::restore</a>( mCore-&gt;config(), <span class="stringliteral">"Filter"</span> );
<a name="l00079"></a>00079   mFilterSelectionWidget-&gt;<a class="code" href="classFilterSelectionWidget.html#c419eb4e8de10437450202707bb88722">setItems</a>( filterNames() );
<a name="l00080"></a>00080   mFilterSelectionWidget-&gt;<a class="code" href="classFilterSelectionWidget.html#429a78ad950e4b01e94bc42b9347507d">setCurrentItem</a>( KABPrefs::instance()-&gt;currentFilter() );
<a name="l00081"></a>00081 
<a name="l00082"></a>00082   <span class="comment">// Tell the views to reread their config, since they may have</span>
<a name="l00083"></a>00083   <span class="comment">// been modified by global settings</span>
<a name="l00084"></a>00084   QDictIterator&lt;KAddressBookView&gt; it( mViewDict );
<a name="l00085"></a>00085   <span class="keywordflow">for</span> ( it.toFirst(); it.current(); ++it ) {
<a name="l00086"></a>00086     KConfigGroupSaver saver( mCore-&gt;config(), it.currentKey() );
<a name="l00087"></a>00087     it.current()-&gt;readConfig( mCore-&gt;config() );
<a name="l00088"></a>00088   }
<a name="l00089"></a>00089 
<a name="l00090"></a>00090   setActiveView( activeViewName );
<a name="l00091"></a>00091 
<a name="l00092"></a>00092   mActionDeleteView-&gt;setEnabled( mViewNameList.count() &gt; 1 );
<a name="l00093"></a>00093 }
<a name="l00094"></a>00094 
<a name="l00095"></a>00095 <span class="keywordtype">void</span> ViewManager::saveSettings()
<a name="l00096"></a>00096 {
<a name="l00097"></a>00097   QDictIterator&lt;KAddressBookView&gt; it( mViewDict );
<a name="l00098"></a>00098   <span class="keywordflow">for</span> ( it.toFirst(); it.current(); ++it ) {
<a name="l00099"></a>00099     KConfigGroupSaver saver( mCore-&gt;config(), it.currentKey() );
<a name="l00100"></a>00100     (*it)-&gt;writeConfig( mCore-&gt;config() );
<a name="l00101"></a>00101   }
<a name="l00102"></a>00102 
<a name="l00103"></a>00103   <a class="code" href="classFilter.html#2c544783fe126b4662eb3321323c59a2" title="Saves the filter to the config file.">Filter::save</a>( mCore-&gt;config(), <span class="stringliteral">"Filter"</span>, mFilterList );
<a name="l00104"></a>00104   KABPrefs::instance()-&gt;setCurrentFilter( mFilterSelectionWidget-&gt;<a class="code" href="classFilterSelectionWidget.html#ad6340abed572625972c056648df2f38">currentItem</a>() );
<a name="l00105"></a>00105 
<a name="l00106"></a>00106   <span class="comment">// write the view name list</span>
<a name="l00107"></a>00107   KABPrefs::instance()-&gt;setViewNames( mViewNameList );
<a name="l00108"></a>00108 
<a name="l00109"></a>00109   <span class="keywordflow">if</span> ( mActiveView )
<a name="l00110"></a>00110     KABPrefs::instance()-&gt;setCurrentView( mActiveView-&gt;caption() );
<a name="l00111"></a>00111 }
<a name="l00112"></a>00112 
<a name="l00113"></a>00113 QStringList ViewManager::selectedUids()<span class="keyword"> const</span>
<a name="l00114"></a>00114 <span class="keyword"></span>{
<a name="l00115"></a>00115   <span class="keywordflow">if</span> ( mActiveView ) {
<a name="l00116"></a>00116     <span class="keywordflow">return</span> mActiveView-&gt;<a class="code" href="classKAddressBookView.html#8b372380967f1a2150ee2b700b2149a4" title="Must be overloaded in subclasses.">selectedUids</a>();
<a name="l00117"></a>00117   } <span class="keywordflow">else</span>
<a name="l00118"></a>00118     <span class="keywordflow">return</span> QStringList();
<a name="l00119"></a>00119 }
<a name="l00120"></a>00120 
<a name="l00121"></a>00121 QStringList ViewManager::selectedEmails()<span class="keyword"> const</span>
<a name="l00122"></a>00122 <span class="keyword"></span>{
<a name="l00123"></a>00123   <span class="keywordflow">if</span> ( mActiveView )
<a name="l00124"></a>00124     <span class="keywordflow">return</span> mActiveView-&gt;<a class="code" href="classKAddressBookView.html#39fcc2a6514a2690ac4ae89a40aaa067" title="Returns a QString with all the selected email addresses concatenated together with...">selectedEmails</a>();
<a name="l00125"></a>00125   <span class="keywordflow">else</span>
<a name="l00126"></a>00126     <span class="keywordflow">return</span> QStringList();
<a name="l00127"></a>00127 }
<a name="l00128"></a>00128 
<a name="l00129"></a>00129 KABC::Addressee::List ViewManager::selectedAddressees()<span class="keyword"> const</span>
<a name="l00130"></a>00130 <span class="keyword"></span>{
<a name="l00131"></a>00131   KABC::Addressee::List list;
<a name="l00132"></a>00132 
<a name="l00133"></a>00133   <span class="keyword">const</span> QStringList uids = selectedUids();
<a name="l00134"></a>00134   QStringList::ConstIterator it;
<a name="l00135"></a>00135   <span class="keywordflow">for</span> ( it = uids.begin(); it != uids.end(); ++it ) {
<a name="l00136"></a>00136     KABC::Addressee addr = mCore-&gt;addressBook()-&gt;findByUid( *it );
<a name="l00137"></a>00137     <span class="keywordflow">if</span> ( !addr.isEmpty() )
<a name="l00138"></a>00138       list.append( addr );
<a name="l00139"></a>00139   }
<a name="l00140"></a>00140 
<a name="l00141"></a>00141   <span class="keywordflow">return</span> list;
<a name="l00142"></a>00142 }
<a name="l00143"></a>00143 
<a name="l00144"></a>00144 <span class="keywordtype">void</span> ViewManager::setFilterSelectionWidget( <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> *wdg )
<a name="l00145"></a>00145 {
<a name="l00146"></a>00146   mFilterSelectionWidget = wdg;
<a name="l00147"></a>00147 }
<a name="l00148"></a>00148 
<a name="l00149"></a>00149 KABC::Field *ViewManager::currentSortField()<span class="keyword"> const</span>
<a name="l00150"></a>00150 <span class="keyword"></span>{
<a name="l00151"></a>00151   <span class="keywordflow">if</span> ( mActiveView )
<a name="l00152"></a>00152     <span class="keywordflow">return</span> mActiveView-&gt;<a class="code" href="classKAddressBookView.html#78b2d39633cdf0a8de4000cabcfcee50">sortField</a>();
<a name="l00153"></a>00153   <span class="keywordflow">else</span>
<a name="l00154"></a>00154     <span class="keywordflow">return</span> 0;
<a name="l00155"></a>00155 }
<a name="l00156"></a>00156 
<a name="l00157"></a>00157 KABC::Field::List ViewManager::viewFields()<span class="keyword"> const</span>
<a name="l00158"></a>00158 <span class="keyword"></span>{
<a name="l00159"></a>00159 <span class="comment">/*</span>
<a name="l00160"></a>00160 <span class="comment">  if ( mActiveView )</span>
<a name="l00161"></a>00161 <span class="comment">    return mActiveView-&gt;fields();</span>
<a name="l00162"></a>00162 <span class="comment">  else</span>
<a name="l00163"></a>00163 <span class="comment">*/</span>
<a name="l00164"></a>00164     <span class="keywordflow">return</span> KABC::Field::List();
<a name="l00165"></a>00165 }
<a name="l00166"></a>00166 
<a name="l00167"></a>00167 <span class="keywordtype">void</span> ViewManager::setSelected( <span class="keyword">const</span> QString &amp;uid, <span class="keywordtype">bool</span> <a class="code" href="classViewManager.html#989c54ee417e5272bc7bff10c2259952" title="Emitted whenever the user selects an entry in the view.">selected</a> )
<a name="l00168"></a>00168 {
<a name="l00169"></a>00169   <span class="keywordflow">if</span> ( mActiveView )
<a name="l00170"></a>00170     mActiveView-&gt;<a class="code" href="classKAddressBookView.html#b1f67bf8e83c72484b0aa308533c0979" title="This method must be overloaded in subclasses.">setSelected</a>( uid, selected );
<a name="l00171"></a>00171 }
<a name="l00172"></a>00172 
<a name="l00173"></a>00173 <span class="keywordtype">void</span> ViewManager::setFirstSelected( <span class="keywordtype">bool</span> selected )
<a name="l00174"></a>00174 {
<a name="l00175"></a>00175   <span class="keywordflow">if</span> ( mActiveView )
<a name="l00176"></a>00176     mActiveView-&gt;<a class="code" href="classKAddressBookView.html#c2269e27bb8c8ff06dfe2b9e3b3357c8" title="Selects the first contact in the view.">setFirstSelected</a>( selected );
<a name="l00177"></a>00177 }
<a name="l00178"></a>00178 
<a name="l00179"></a>00179 <span class="keywordtype">void</span> ViewManager::unloadViews()
<a name="l00180"></a>00180 {
<a name="l00181"></a>00181   mViewDict.clear();
<a name="l00182"></a>00182   mActiveView = 0;
<a name="l00183"></a>00183 }
<a name="l00184"></a>00184 
<a name="l00185"></a>00185 <span class="keywordtype">void</span> ViewManager::setActiveView( <span class="keyword">const</span> QString &amp;name )
<a name="l00186"></a>00186 {
<a name="l00187"></a>00187   <a class="code" href="classKAddressBookView.html" title="Base class for all views in kaddressbook.">KAddressBookView</a> *view = 0;
<a name="l00188"></a>00188 
<a name="l00189"></a>00189   <span class="comment">// Check that this isn't the same as the current active view</span>
<a name="l00190"></a>00190   <span class="keywordflow">if</span> ( mActiveView &amp;&amp; ( mActiveView-&gt;caption() == name ) )
<a name="l00191"></a>00191     <span class="keywordflow">return</span>;
<a name="l00192"></a>00192 
<a name="l00193"></a>00193   <span class="comment">// At this point we know the view that should be active is not</span>
<a name="l00194"></a>00194   <span class="comment">// currently active. We will try to find the new on in the list. If</span>
<a name="l00195"></a>00195   <span class="comment">// we can't find it, it means it hasn't been instantiated, so we will</span>
<a name="l00196"></a>00196   <span class="comment">// create it on demand.</span>
<a name="l00197"></a>00197 
<a name="l00198"></a>00198   view = mViewDict.find( name );
<a name="l00199"></a>00199 
<a name="l00200"></a>00200   <span class="comment">// Check if we found the view. If we didn't, then we need to create it</span>
<a name="l00201"></a>00201   <span class="keywordflow">if</span> ( view == 0 ) {
<a name="l00202"></a>00202     KConfig *config = mCore-&gt;config();
<a name="l00203"></a>00203     KConfigGroupSaver saver( config, name );
<a name="l00204"></a>00204     QString type = config-&gt;readEntry( <span class="stringliteral">"Type"</span>, <span class="stringliteral">"Table"</span> );
<a name="l00205"></a>00205 
<a name="l00206"></a>00206     kdDebug(5720) &lt;&lt; <span class="stringliteral">"ViewManager::setActiveView: creating view - "</span> &lt;&lt; name &lt;&lt; endl;
<a name="l00207"></a>00207 
<a name="l00208"></a>00208     ViewFactory *factory = mViewFactoryDict.find( type );
<a name="l00209"></a>00209     <span class="keywordflow">if</span> ( factory )
<a name="l00210"></a>00210       view = factory-&gt;view( mCore, mViewWidgetStack );
<a name="l00211"></a>00211 
<a name="l00212"></a>00212     <span class="keywordflow">if</span> ( view ) {
<a name="l00213"></a>00213       view-&gt;setCaption( name );
<a name="l00214"></a>00214       mViewDict.insert( name, view );
<a name="l00215"></a>00215       mViewWidgetStack-&gt;addWidget( view );
<a name="l00216"></a>00216       view-&gt;<a class="code" href="classKAddressBookView.html#a57dbc0b432a252da27fc8afe81ef898" title="Called whenever this view should read the config.">readConfig</a>( config );
<a name="l00217"></a>00217 
<a name="l00218"></a>00218       <span class="comment">// The manager just relays the signals</span>
<a name="l00219"></a>00219       connect( view, SIGNAL( <a class="code" href="classViewManager.html#989c54ee417e5272bc7bff10c2259952" title="Emitted whenever the user selects an entry in the view.">selected</a>( <span class="keyword">const</span> QString&amp; ) ),
<a name="l00220"></a>00220                SIGNAL( <a class="code" href="classViewManager.html#989c54ee417e5272bc7bff10c2259952" title="Emitted whenever the user selects an entry in the view.">selected</a>( <span class="keyword">const</span> QString &amp; ) ) );
<a name="l00221"></a>00221       connect( view, SIGNAL( <a class="code" href="classViewManager.html#f6ab813586423fe446a0003919fe4d36" title="Emitted whenever the user activates an entry in the view.">executed</a>( <span class="keyword">const</span> QString&amp; ) ),
<a name="l00222"></a>00222                SIGNAL( <a class="code" href="classViewManager.html#f6ab813586423fe446a0003919fe4d36" title="Emitted whenever the user activates an entry in the view.">executed</a>( <span class="keyword">const</span> QString&amp; ) ) );
<a name="l00223"></a>00223       connect( view, SIGNAL( <a class="code" href="classViewManager.html#98f2d3f16deb7dbec008bc2745687c7a" title="Emitted whenever the address book is modified in some way.">modified</a>() ), SIGNAL( <a class="code" href="classViewManager.html#98f2d3f16deb7dbec008bc2745687c7a" title="Emitted whenever the address book is modified in some way.">modified</a>() ) );
<a name="l00224"></a>00224       connect( view, SIGNAL( <a class="code" href="classViewManager.html#e39727d2a7883e371cb5b3b539e6c694" title="Called whenever the user drops something in the active view.">dropped</a>( QDropEvent* ) ),
<a name="l00225"></a>00225                SLOT( <a class="code" href="classViewManager.html#e39727d2a7883e371cb5b3b539e6c694" title="Called whenever the user drops something in the active view.">dropped</a>( QDropEvent* ) ) );
<a name="l00226"></a>00226       connect( view, SIGNAL( <a class="code" href="classViewManager.html#5692590c641a473bc8443d81b60eaa9a" title="Called whenever the user attempts to start a drag in the view.">startDrag</a>() ), SLOT( <a class="code" href="classViewManager.html#5692590c641a473bc8443d81b60eaa9a" title="Called whenever the user attempts to start a drag in the view.">startDrag</a>() ) );
<a name="l00227"></a>00227       connect( view, SIGNAL( <a class="code" href="classViewManager.html#e0511b561555336acbe43ea2f371fed9" title="Emitted whenever the sort field of a view has changed.">sortFieldChanged</a>() ), SIGNAL( <a class="code" href="classViewManager.html#e0511b561555336acbe43ea2f371fed9" title="Emitted whenever the sort field of a view has changed.">sortFieldChanged</a>() ) );
<a name="l00228"></a>00228     }
<a name="l00229"></a>00229   }
<a name="l00230"></a>00230 
<a name="l00231"></a>00231   <span class="comment">// If we found or created the view, raise it and refresh it</span>
<a name="l00232"></a>00232   <span class="keywordflow">if</span> ( view ) {
<a name="l00233"></a>00233     mActiveView = view;
<a name="l00234"></a>00234     mViewWidgetStack-&gt;raiseWidget( view );
<a name="l00235"></a>00235     <span class="comment">// Set the proper filter in the view. By setting the combo</span>
<a name="l00236"></a>00236     <span class="comment">// box, the activated slot will be called, which will push</span>
<a name="l00237"></a>00237     <span class="comment">// the filter to the view and refresh it.</span>
<a name="l00238"></a>00238     <span class="keywordflow">if</span> ( view-&gt;<a class="code" href="classKAddressBookView.html#8096d78bec403feaa38bc7f8b23a746f">defaultFilterType</a>() == KAddressBookView::None ) {
<a name="l00239"></a>00239       mFilterSelectionWidget-&gt;<a class="code" href="classFilterSelectionWidget.html#429a78ad950e4b01e94bc42b9347507d">setCurrentItem</a>( 0 );
<a name="l00240"></a>00240       setActiveFilter( 0 );
<a name="l00241"></a>00241     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( view-&gt;<a class="code" href="classKAddressBookView.html#8096d78bec403feaa38bc7f8b23a746f">defaultFilterType</a>() == KAddressBookView::Active ) {
<a name="l00242"></a>00242       setActiveFilter( mFilterSelectionWidget-&gt;<a class="code" href="classFilterSelectionWidget.html#ad6340abed572625972c056648df2f38">currentItem</a>() );
<a name="l00243"></a>00243     } <span class="keywordflow">else</span> {
<a name="l00244"></a>00244       uint pos = filterPosition( view-&gt;<a class="code" href="classKAddressBookView.html#3d6430760a156a68efcb45b5756ce891">defaultFilterName</a>() );
<a name="l00245"></a>00245       mFilterSelectionWidget-&gt;<a class="code" href="classFilterSelectionWidget.html#429a78ad950e4b01e94bc42b9347507d">setCurrentItem</a>( pos );
<a name="l00246"></a>00246       setActiveFilter( pos );
<a name="l00247"></a>00247     }
<a name="l00248"></a>00248 
<a name="l00249"></a>00249     <span class="comment">// Update the inc search widget to show the fields in the new active</span>
<a name="l00250"></a>00250     <span class="comment">// view.</span>
<a name="l00251"></a>00251     mActiveView-&gt;<a class="code" href="classKAddressBookView.html#33052941465838c43b69b61653639d13" title="Must be overloaded in subclasses to refresh the view.">refresh</a>();
<a name="l00252"></a>00252 
<a name="l00253"></a>00253   } <span class="keywordflow">else</span>
<a name="l00254"></a>00254     kdDebug(5720) &lt;&lt; <span class="stringliteral">"ViewManager::setActiveView: unable to find view\n"</span>;
<a name="l00255"></a>00255 }
<a name="l00256"></a>00256 
<a name="l00257"></a>00257 <span class="keywordtype">void</span> ViewManager::refreshView( <span class="keyword">const</span> QString &amp;uid )
<a name="l00258"></a>00258 {
<a name="l00259"></a>00259   <span class="keywordflow">if</span> ( mActiveView )
<a name="l00260"></a>00260     mActiveView-&gt;<a class="code" href="classKAddressBookView.html#33052941465838c43b69b61653639d13" title="Must be overloaded in subclasses to refresh the view.">refresh</a>( uid );
<a name="l00261"></a>00261 }
<a name="l00262"></a>00262 
<a name="l00263"></a>00263 <span class="keywordtype">void</span> ViewManager::editView()
<a name="l00264"></a>00264 {
<a name="l00265"></a>00265   <span class="keywordflow">if</span> ( !mActiveView )
<a name="l00266"></a>00266     <span class="keywordflow">return</span>;
<a name="l00267"></a>00267 
<a name="l00268"></a>00268   ViewFactory *factory = mViewFactoryDict.find( mActiveView-&gt;<a class="code" href="classKAddressBookView.html#76149bcdfe0f05e536a9905af3909eba" title="Return the type of the view: Icon, Table, etc.">type</a>() );
<a name="l00269"></a>00269   <a class="code" href="classViewConfigureWidget.html" title="This widget is the base class for all view configuration widgets.">ViewConfigureWidget</a> *wdg = 0;
<a name="l00270"></a>00270 
<a name="l00271"></a>00271   <span class="keywordflow">if</span> ( factory ) {
<a name="l00272"></a>00272     <span class="comment">// Save the filters so the dialog has the latest set</span>
<a name="l00273"></a>00273     <a class="code" href="classFilter.html#2c544783fe126b4662eb3321323c59a2" title="Saves the filter to the config file.">Filter::save</a>( mCore-&gt;config(), <span class="stringliteral">"Filter"</span>, mFilterList );
<a name="l00274"></a>00274 
<a name="l00275"></a>00275     wdg = factory-&gt;configureWidget( mCore-&gt;addressBook(), 0 );
<a name="l00276"></a>00276   }
<a name="l00277"></a>00277 
<a name="l00278"></a>00278   <span class="keywordflow">if</span> ( wdg ) {
<a name="l00279"></a>00279     ViewConfigureDialog dlg( wdg, mActiveView-&gt;caption(), this );
<a name="l00280"></a>00280 
<a name="l00281"></a>00281     KConfigGroupSaver saver( mCore-&gt;config(), mActiveView-&gt;caption() );
<a name="l00282"></a>00282     dlg.<a class="code" href="classViewConfigureWidget.html#53bb10707460fd590d2e200c4718b82d" title="Reads the configuration from the config object and sets the values in the GUI.">restoreSettings</a>( mCore-&gt;config() );
<a name="l00283"></a>00283 
<a name="l00284"></a>00284     <span class="keywordflow">if</span> ( dlg.exec() ) {
<a name="l00285"></a>00285       dlg.saveSettings( mCore-&gt;config() );
<a name="l00286"></a>00286       mActiveView-&gt;<a class="code" href="classKAddressBookView.html#a57dbc0b432a252da27fc8afe81ef898" title="Called whenever this view should read the config.">readConfig</a>( mCore-&gt;config() );
<a name="l00287"></a>00287       <span class="comment">// Set the proper filter in the view. By setting the combo</span>
<a name="l00288"></a>00288       <span class="comment">// box, the activated slot will be called, which will push</span>
<a name="l00289"></a>00289       <span class="comment">// the filter to the view and refresh it.</span>
<a name="l00290"></a>00290       <span class="keywordflow">if</span> ( mActiveView-&gt;<a class="code" href="classKAddressBookView.html#8096d78bec403feaa38bc7f8b23a746f">defaultFilterType</a>() == KAddressBookView::None ) {
<a name="l00291"></a>00291         mFilterSelectionWidget-&gt;<a class="code" href="classFilterSelectionWidget.html#429a78ad950e4b01e94bc42b9347507d">setCurrentItem</a>( 0 );
<a name="l00292"></a>00292         setActiveFilter( 0 );
<a name="l00293"></a>00293       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( mActiveView-&gt;<a class="code" href="classKAddressBookView.html#8096d78bec403feaa38bc7f8b23a746f">defaultFilterType</a>() == KAddressBookView::Active ) {
<a name="l00294"></a>00294         setActiveFilter( mFilterSelectionWidget-&gt;<a class="code" href="classFilterSelectionWidget.html#ad6340abed572625972c056648df2f38">currentItem</a>() );
<a name="l00295"></a>00295       } <span class="keywordflow">else</span> {
<a name="l00296"></a>00296         uint pos = filterPosition( mActiveView-&gt;<a class="code" href="classKAddressBookView.html#3d6430760a156a68efcb45b5756ce891">defaultFilterName</a>() );
<a name="l00297"></a>00297         mFilterSelectionWidget-&gt;<a class="code" href="classFilterSelectionWidget.html#429a78ad950e4b01e94bc42b9347507d">setCurrentItem</a>( pos );
<a name="l00298"></a>00298         setActiveFilter( pos );
<a name="l00299"></a>00299       }
<a name="l00300"></a>00300 
<a name="l00301"></a>00301       mActiveView-&gt;<a class="code" href="classKAddressBookView.html#33052941465838c43b69b61653639d13" title="Must be overloaded in subclasses to refresh the view.">refresh</a>();
<a name="l00302"></a>00302       emit <a class="code" href="classViewManager.html#05e84d1c07c8f2e83d980be2e91582b0" title="Emitted whenever the view fields changed.">viewFieldsChanged</a>();
<a name="l00303"></a>00303     }
<a name="l00304"></a>00304   }
<a name="l00305"></a>00305 }
<a name="l00306"></a>00306 
<a name="l00307"></a>00307 <span class="keywordtype">void</span> ViewManager::deleteView()
<a name="l00308"></a>00308 {
<a name="l00309"></a>00309   QString text = i18n( <span class="stringliteral">"&lt;qt&gt;Are you sure that you want to delete the view &lt;b&gt;%1&lt;/b&gt;?&lt;/qt&gt;"</span> )
<a name="l00310"></a>00310                      .arg( mActiveView-&gt;caption() );
<a name="l00311"></a>00311   QString caption = i18n( <span class="stringliteral">"Confirm Delete"</span> );
<a name="l00312"></a>00312 
<a name="l00313"></a>00313   <span class="keywordflow">if</span> ( KMessageBox::warningContinueCancel( <span class="keyword">this</span>, text, caption, KGuiItem( i18n(<span class="stringliteral">"&amp;Delete"</span>), <span class="stringliteral">"editdelete"</span>) ) == KMessageBox::Continue ) {
<a name="l00314"></a>00314     mViewNameList.remove( mActiveView-&gt;caption() );
<a name="l00315"></a>00315 
<a name="l00316"></a>00316     <span class="comment">// remove the view from the config file</span>
<a name="l00317"></a>00317     KConfig *config = mCore-&gt;config();
<a name="l00318"></a>00318     config-&gt;deleteGroup( mActiveView-&gt;caption() );
<a name="l00319"></a>00319 
<a name="l00320"></a>00320     mViewDict.remove( mActiveView-&gt;caption() );
<a name="l00321"></a>00321     mActiveView = 0;
<a name="l00322"></a>00322 
<a name="l00323"></a>00323     <span class="comment">// we are in an invalid state now, but that should be fixed after</span>
<a name="l00324"></a>00324     <span class="comment">// we emit the signal</span>
<a name="l00325"></a>00325     mActionSelectView-&gt;setItems( mViewNameList );
<a name="l00326"></a>00326     <span class="keywordflow">if</span> ( mViewNameList.count() &gt; 0 ) {
<a name="l00327"></a>00327       mActionSelectView-&gt;setCurrentItem( 0 );
<a name="l00328"></a>00328       setActiveView( mViewNameList[ 0 ] );
<a name="l00329"></a>00329     }
<a name="l00330"></a>00330     mActionDeleteView-&gt;setEnabled( mViewNameList.count() &gt; 1 );
<a name="l00331"></a>00331   }
<a name="l00332"></a>00332 }
<a name="l00333"></a>00333 
<a name="l00334"></a>00334 <span class="keywordtype">void</span> ViewManager::addView()
<a name="l00335"></a>00335 {
<a name="l00336"></a>00336   <a class="code" href="classAddViewDialog.html" title="Modal dialog used for adding a new view.">AddViewDialog</a> dialog( &amp;mViewFactoryDict, <span class="keyword">this</span> );
<a name="l00337"></a>00337 
<a name="l00338"></a>00338   <span class="keywordflow">if</span> ( dialog.exec() ) {
<a name="l00339"></a>00339     QString newName = dialog.viewName();
<a name="l00340"></a>00340     QString type = dialog.viewType();
<a name="l00341"></a>00341 
<a name="l00342"></a>00342     <span class="comment">// Check for name conflicts</span>
<a name="l00343"></a>00343     <span class="keywordtype">bool</span> firstConflict = <span class="keyword">true</span>;
<a name="l00344"></a>00344     <span class="keywordtype">int</span> numTries = 1;
<a name="l00345"></a>00345     <span class="keywordflow">while</span> ( mViewNameList.contains( newName ) &gt; 0 ) {
<a name="l00346"></a>00346       <span class="keywordflow">if</span> ( !firstConflict ) {
<a name="l00347"></a>00347         newName = newName.left( newName.length() - 4 );
<a name="l00348"></a>00348         firstConflict = <span class="keyword">false</span>;
<a name="l00349"></a>00349       }
<a name="l00350"></a>00350 
<a name="l00351"></a>00351       newName = QString( <span class="stringliteral">"%1 &lt;%2&gt;"</span> ).arg( newName ).arg( numTries );
<a name="l00352"></a>00352       numTries++;
<a name="l00353"></a>00353     }
<a name="l00354"></a>00354 
<a name="l00355"></a>00355     <span class="comment">// Add the new one to the list</span>
<a name="l00356"></a>00356     mViewNameList.append( newName );
<a name="l00357"></a>00357 
<a name="l00358"></a>00358     <span class="comment">// write the view to the config file,</span>
<a name="l00359"></a>00359     KConfig *config = mCore-&gt;config();
<a name="l00360"></a>00360     config-&gt;deleteGroup( newName );
<a name="l00361"></a>00361     KConfigGroupSaver saver( config, newName );
<a name="l00362"></a>00362     config-&gt;writeEntry( <span class="stringliteral">"Type"</span>, type );
<a name="l00363"></a>00363 
<a name="l00364"></a>00364     <span class="comment">// try to set the active view</span>
<a name="l00365"></a>00365     mActionSelectView-&gt;setItems( mViewNameList );
<a name="l00366"></a>00366     mActionSelectView-&gt;setCurrentItem( mViewNameList.findIndex( newName ) );
<a name="l00367"></a>00367     setActiveView( newName );
<a name="l00368"></a>00368 
<a name="l00369"></a>00369     editView();
<a name="l00370"></a>00370 
<a name="l00371"></a>00371     mActionDeleteView-&gt;setEnabled( mViewNameList.count() &gt; 1 );
<a name="l00372"></a>00372   }
<a name="l00373"></a>00373 }
<a name="l00374"></a>00374 
<a name="l00375"></a>00375 <span class="keywordtype">void</span> ViewManager::scrollUp()
<a name="l00376"></a>00376 {
<a name="l00377"></a>00377   <span class="keywordflow">if</span> ( mActiveView )
<a name="l00378"></a>00378     mActiveView-&gt;<a class="code" href="classKAddressBookView.html#dec384d3e38e3a9fdca0d336680fc6fb">scrollUp</a>();
<a name="l00379"></a>00379 }
<a name="l00380"></a>00380 
<a name="l00381"></a>00381 <span class="keywordtype">void</span> ViewManager::scrollDown()
<a name="l00382"></a>00382 {
<a name="l00383"></a>00383   <span class="keywordflow">if</span> ( mActiveView )
<a name="l00384"></a>00384     mActiveView-&gt;<a class="code" href="classKAddressBookView.html#b237b767f8b4efa118f44a26f4a4c0d0">scrollDown</a>();
<a name="l00385"></a>00385 }
<a name="l00386"></a>00386 
<a name="l00387"></a>00387 <span class="keywordtype">void</span> ViewManager::createViewFactories()
<a name="l00388"></a>00388 {
<a name="l00389"></a>00389   <span class="keyword">const</span> KTrader::OfferList plugins = KTrader::self()-&gt;query( <span class="stringliteral">"KAddressBook/View"</span>,
<a name="l00390"></a>00390     QString( <span class="stringliteral">"[X-KDE-KAddressBook-ViewPluginVersion] == %1"</span> ).arg(  KAB_VIEW_PLUGIN_VERSION ) );
<a name="l00391"></a>00391   KTrader::OfferList::ConstIterator it;
<a name="l00392"></a>00392   <span class="keywordflow">for</span> ( it = plugins.begin(); it != plugins.end(); ++it ) {
<a name="l00393"></a>00393     <span class="keywordflow">if</span> ( !(*it)-&gt;hasServiceType( <span class="stringliteral">"KAddressBook/View"</span> ) )
<a name="l00394"></a>00394       <span class="keywordflow">continue</span>;
<a name="l00395"></a>00395 
<a name="l00396"></a>00396     KLibFactory *factory = KLibLoader::self()-&gt;factory( (*it)-&gt;library().latin1() );
<a name="l00397"></a>00397 
<a name="l00398"></a>00398     <span class="keywordflow">if</span> ( !factory ) {
<a name="l00399"></a>00399       kdDebug(5720) &lt;&lt; <span class="stringliteral">"ViewManager::createViewFactories(): Factory creation failed"</span> &lt;&lt; endl;
<a name="l00400"></a>00400       <span class="keywordflow">continue</span>;
<a name="l00401"></a>00401     }
<a name="l00402"></a>00402 
<a name="l00403"></a>00403     ViewFactory *viewFactory = <span class="keyword">static_cast&lt;</span>ViewFactory*<span class="keyword">&gt;</span>( factory );
<a name="l00404"></a>00404 
<a name="l00405"></a>00405     <span class="keywordflow">if</span> ( !viewFactory ) {
<a name="l00406"></a>00406       kdDebug(5720) &lt;&lt; <span class="stringliteral">"ViewManager::createViewFactories(): Cast failed"</span> &lt;&lt; endl;
<a name="l00407"></a>00407       <span class="keywordflow">continue</span>;
<a name="l00408"></a>00408     }
<a name="l00409"></a>00409 
<a name="l00410"></a>00410     mViewFactoryDict.insert( viewFactory-&gt;type(), viewFactory );
<a name="l00411"></a>00411   }
<a name="l00412"></a>00412 }
<a name="l00413"></a>00413 
<a name="l00414"></a><a class="code" href="classViewManager.html#e39727d2a7883e371cb5b3b539e6c694">00414</a> <span class="keywordtype">void</span> <a class="code" href="classViewManager.html#e39727d2a7883e371cb5b3b539e6c694" title="Called whenever the user drops something in the active view.">ViewManager::dropped</a>( QDropEvent *e )
<a name="l00415"></a>00415 {
<a name="l00416"></a>00416   kdDebug(5720) &lt;&lt; <span class="stringliteral">"ViewManager::dropped: got a drop event"</span> &lt;&lt; endl;
<a name="l00417"></a>00417 
<a name="l00418"></a>00418   <span class="comment">// don't allow drops from our own drags</span>
<a name="l00419"></a>00419   <span class="keywordflow">if</span> ( e-&gt;source() == this )
<a name="l00420"></a>00420     <span class="keywordflow">return</span>;
<a name="l00421"></a>00421 
<a name="l00422"></a>00422   QString clipText, vcards;
<a name="l00423"></a>00423   KURL::List urls;
<a name="l00424"></a>00424 
<a name="l00425"></a>00425   <span class="keywordflow">if</span> ( KURLDrag::decode( e, urls) ) {
<a name="l00426"></a>00426     KURL::List::ConstIterator it = urls.begin();
<a name="l00427"></a>00427     <span class="keywordtype">int</span> c = urls.count();
<a name="l00428"></a>00428     <span class="keywordflow">if</span> ( c &gt; 1 ) {
<a name="l00429"></a>00429       QString questionString = i18n( <span class="stringliteral">"Import one contact into your addressbook?"</span>, <span class="stringliteral">"Import %n contacts into your addressbook?"</span>, c );
<a name="l00430"></a>00430       <span class="keywordflow">if</span> ( KMessageBox::questionYesNo( <span class="keyword">this</span>, questionString, i18n( <span class="stringliteral">"Import Contacts?"</span> ), i18n(<span class="stringliteral">"Import"</span>), i18n(<span class="stringliteral">"Do Not Import"</span>) ) == KMessageBox::Yes ) {
<a name="l00431"></a>00431         <span class="keywordflow">for</span> ( ; it != urls.end(); ++it )
<a name="l00432"></a>00432           emit <a class="code" href="classViewManager.html#7a4961938ef73b2295fc3e51363f9b35" title="Emitted whenever a url is dragged on a view.">urlDropped</a>( *it );
<a name="l00433"></a>00433       }
<a name="l00434"></a>00434     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( c == 1 )
<a name="l00435"></a>00435       emit <a class="code" href="classViewManager.html#7a4961938ef73b2295fc3e51363f9b35" title="Emitted whenever a url is dragged on a view.">urlDropped</a>( *it );
<a name="l00436"></a>00436   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( KVCardDrag::decode( e, vcards ) ) {
<a name="l00437"></a>00437     KABC::VCardConverter converter;
<a name="l00438"></a>00438 
<a name="l00439"></a>00439     <span class="keyword">const</span> KABC::Addressee::List list = converter.parseVCards( vcards );
<a name="l00440"></a>00440     KABC::Addressee::List::ConstIterator it;
<a name="l00441"></a>00441     <span class="keywordflow">for</span> ( it = list.begin(); it != list.end(); ++it ) {
<a name="l00442"></a>00442       KABC::Addressee a = mCore-&gt;addressBook()-&gt;findByUid( (*it).uid() );
<a name="l00443"></a>00443       <span class="keywordflow">if</span> ( a.isEmpty() ) { <span class="comment">// not yet in address book</span>
<a name="l00444"></a>00444         mCore-&gt;addressBook()-&gt;insertAddressee( *it );
<a name="l00445"></a>00445         emit <a class="code" href="classViewManager.html#98f2d3f16deb7dbec008bc2745687c7a" title="Emitted whenever the address book is modified in some way.">modified</a>();
<a name="l00446"></a>00446       }
<a name="l00447"></a>00447     }
<a name="l00448"></a>00448 
<a name="l00449"></a>00449     mActiveView-&gt;<a class="code" href="classKAddressBookView.html#33052941465838c43b69b61653639d13" title="Must be overloaded in subclasses to refresh the view.">refresh</a>();
<a name="l00450"></a>00450   }
<a name="l00451"></a>00451 }
<a name="l00452"></a>00452 
<a name="l00453"></a><a class="code" href="classViewManager.html#5692590c641a473bc8443d81b60eaa9a">00453</a> <span class="keywordtype">void</span> <a class="code" href="classViewManager.html#5692590c641a473bc8443d81b60eaa9a" title="Called whenever the user attempts to start a drag in the view.">ViewManager::startDrag</a>()
<a name="l00454"></a>00454 {
<a name="l00455"></a>00455   <span class="comment">// Get the list of all the selected addressees</span>
<a name="l00456"></a>00456   KABC::Addressee::List addrList;
<a name="l00457"></a>00457   <span class="keyword">const</span> QStringList uidList = selectedUids();
<a name="l00458"></a>00458   <span class="keywordflow">if</span> (  uidList.isEmpty() )
<a name="l00459"></a>00459     <span class="keywordflow">return</span>;
<a name="l00460"></a>00460 
<a name="l00461"></a>00461   kdDebug(5720) &lt;&lt; <span class="stringliteral">"ViewManager::startDrag: starting to drag"</span> &lt;&lt; endl;
<a name="l00462"></a>00462 
<a name="l00463"></a>00463   QStringList::ConstIterator it;
<a name="l00464"></a>00464   <span class="keywordflow">for</span> ( it = uidList.begin(); it != uidList.end(); ++it )
<a name="l00465"></a>00465     addrList.append( mCore-&gt;addressBook()-&gt;findByUid( *it ) );
<a name="l00466"></a>00466 
<a name="l00467"></a>00467   KMultipleDrag *drag = <span class="keyword">new</span> KMultipleDrag( <span class="keyword">this</span> );
<a name="l00468"></a>00468 
<a name="l00469"></a>00469   KABC::VCardConverter converter;
<a name="l00470"></a>00470   QString vcards = converter.createVCards( addrList );
<a name="l00471"></a>00471 
<a name="l00472"></a>00472   <span class="comment">// Best text representation is given by textdrag, so it must be first</span>
<a name="l00473"></a>00473   drag-&gt;addDragObject( <span class="keyword">new</span> QTextDrag( <a class="code" href="classAddresseeUtil.html#6a831bd0936a148dd1851f89027e4149" title="Converts the list of addressee objects into a list of email addresses.">AddresseeUtil::addresseesToEmails</a>( addrList ), <span class="keyword">this</span> ) );
<a name="l00474"></a>00474   drag-&gt;addDragObject( <span class="keyword">new</span> KVCardDrag( vcards, <span class="keyword">this</span> ) );
<a name="l00475"></a>00475 
<a name="l00476"></a>00476   KTempDir tempDir;
<a name="l00477"></a>00477   <span class="comment">// can't set tempDir to autoDelete, in case of dropping on the desktop, the copy is async...</span>
<a name="l00478"></a>00478   <span class="keywordflow">if</span> ( tempDir.status() == 0 ) {
<a name="l00479"></a>00479     QString fileName;
<a name="l00480"></a>00480     <span class="keywordflow">if</span> ( addrList.count() == 1 )
<a name="l00481"></a>00481       fileName = addrList[ 0 ].givenName() + <span class="stringliteral">"_"</span> + addrList[ 0 ].familyName() + <span class="stringliteral">".vcf"</span>;
<a name="l00482"></a>00482     <span class="keywordflow">else</span>
<a name="l00483"></a>00483       fileName = <span class="stringliteral">"contacts.vcf"</span>;
<a name="l00484"></a>00484 
<a name="l00485"></a>00485     QFile tempFile( tempDir.name() + <span class="stringliteral">"/"</span> + fileName );
<a name="l00486"></a>00486     <span class="keywordflow">if</span> ( tempFile.open( IO_WriteOnly ) ) {
<a name="l00487"></a>00487       tempFile.writeBlock( vcards.utf8() );
<a name="l00488"></a>00488       tempFile.close();
<a name="l00489"></a>00489 
<a name="l00490"></a>00490       KURLDrag *urlDrag = <span class="keyword">new</span> KURLDrag( KURL( tempFile.name() ), <span class="keyword">this</span> );
<a name="l00491"></a>00491       drag-&gt;addDragObject( urlDrag );
<a name="l00492"></a>00492     }
<a name="l00493"></a>00493   }
<a name="l00494"></a>00494 
<a name="l00495"></a>00495   drag-&gt;setPixmap( KGlobal::iconLoader()-&gt;loadIcon( <span class="stringliteral">"vcard"</span>, KIcon::Desktop ) );
<a name="l00496"></a>00496   drag-&gt;dragCopy();
<a name="l00497"></a>00497 }
<a name="l00498"></a>00498 
<a name="l00499"></a>00499 <span class="keywordtype">void</span> ViewManager::setActiveFilter( <span class="keywordtype">int</span> index )
<a name="l00500"></a>00500 {
<a name="l00501"></a>00501   <a class="code" href="classFilter.html" title="Filter for AddressBook related objects (Addressees).">Filter</a> currentFilter;
<a name="l00502"></a>00502 
<a name="l00503"></a>00503   <span class="keywordflow">if</span> ( ( index - 1 ) &lt; 0 )
<a name="l00504"></a>00504     currentFilter = <a class="code" href="classFilter.html" title="Filter for AddressBook related objects (Addressees).">Filter</a>();
<a name="l00505"></a>00505   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ( index - 1 ) &lt; 1 ) {
<a name="l00506"></a>00506     currentFilter = <a class="code" href="classFilter.html" title="Filter for AddressBook related objects (Addressees).">Filter</a>();
<a name="l00507"></a>00507     currentFilter.<a class="code" href="classFilter.html#fc8fd041e058eedd96d0164c280a4431" title="Sets the filter rule.">setMatchRule</a>(Filter::NotMatching);
<a name="l00508"></a>00508   }
<a name="l00509"></a>00509   <span class="keywordflow">else</span>
<a name="l00510"></a>00510     currentFilter = mFilterList[ index - 2 ];
<a name="l00511"></a>00511 
<a name="l00512"></a>00512   <span class="comment">// Check if we have a view. Since the filter combo is created before</span>
<a name="l00513"></a>00513   <span class="comment">// the view, this slot could be called before there is a valid view.</span>
<a name="l00514"></a>00514   <span class="keywordflow">if</span> ( mActiveView ) {
<a name="l00515"></a>00515     mActiveView-&gt;<a class="code" href="classKAddressBookView.html#3c79e2e2fecbef5ceb6479b494740d74" title="Sets the active filter.">setFilter</a>( currentFilter );
<a name="l00516"></a>00516     mActiveView-&gt;<a class="code" href="classKAddressBookView.html#33052941465838c43b69b61653639d13" title="Must be overloaded in subclasses to refresh the view.">refresh</a>();
<a name="l00517"></a>00517     emit <a class="code" href="classViewManager.html#989c54ee417e5272bc7bff10c2259952" title="Emitted whenever the user selects an entry in the view.">selected</a>( QString::null );
<a name="l00518"></a>00518   }
<a name="l00519"></a>00519 }
<a name="l00520"></a>00520 
<a name="l00521"></a>00521 <span class="keywordtype">void</span> ViewManager::configureFilters()
<a name="l00522"></a>00522 {
<a name="l00523"></a>00523   FilterDialog dlg( <span class="keyword">this</span> );
<a name="l00524"></a>00524 
<a name="l00525"></a>00525   dlg.setFilters( mFilterList );
<a name="l00526"></a>00526 
<a name="l00527"></a>00527   <span class="keywordflow">if</span> ( dlg.exec() )
<a name="l00528"></a>00528     mFilterList = dlg.filters();
<a name="l00529"></a>00529 
<a name="l00530"></a>00530   uint pos = mFilterSelectionWidget-&gt;<a class="code" href="classFilterSelectionWidget.html#ad6340abed572625972c056648df2f38">currentItem</a>();
<a name="l00531"></a>00531   mFilterSelectionWidget-&gt;<a class="code" href="classFilterSelectionWidget.html#c419eb4e8de10437450202707bb88722">setItems</a>( filterNames() );
<a name="l00532"></a>00532   mFilterSelectionWidget-&gt;<a class="code" href="classFilterSelectionWidget.html#429a78ad950e4b01e94bc42b9347507d">setCurrentItem</a>( pos );
<a name="l00533"></a>00533   setActiveFilter( pos );
<a name="l00534"></a>00534 }
<a name="l00535"></a>00535 
<a name="l00536"></a>00536 QStringList ViewManager::filterNames()<span class="keyword"> const</span>
<a name="l00537"></a>00537 <span class="keyword"></span>{
<a name="l00538"></a>00538   QStringList names( i18n( <span class="stringliteral">"None"</span> ) );
<a name="l00539"></a>00539   names.append( i18n( <span class="stringliteral">"Unfiled"</span> ) );
<a name="l00540"></a>00540 
<a name="l00541"></a>00541   Filter::List::ConstIterator it;
<a name="l00542"></a>00542   <span class="keywordflow">for</span> ( it = mFilterList.begin(); it != mFilterList.end(); ++it )
<a name="l00543"></a>00543     names.append( (*it).name() );
<a name="l00544"></a>00544 
<a name="l00545"></a>00545   <span class="keywordflow">return</span> names;
<a name="l00546"></a>00546 }
<a name="l00547"></a>00547 
<a name="l00548"></a>00548 <span class="keywordtype">int</span> ViewManager::filterPosition( <span class="keyword">const</span> QString &amp;name )<span class="keyword"> const</span>
<a name="l00549"></a>00549 <span class="keyword"></span>{
<a name="l00550"></a>00550   <span class="keywordtype">int</span> pos = 0;
<a name="l00551"></a>00551 
<a name="l00552"></a>00552   Filter::List::ConstIterator it;
<a name="l00553"></a>00553   <span class="keywordflow">for</span> ( it = mFilterList.begin(); it != mFilterList.end(); ++it, ++pos )
<a name="l00554"></a>00554     <span class="keywordflow">if</span> ( name == (*it).name() )
<a name="l00555"></a>00555       <span class="keywordflow">return</span> pos + 2;
<a name="l00556"></a>00556 
<a name="l00557"></a>00557   <span class="keywordflow">return</span> 0;
<a name="l00558"></a>00558 }
<a name="l00559"></a>00559 
<a name="l00560"></a>00560 <span class="keywordtype">void</span> ViewManager::initActions()
<a name="l00561"></a>00561 {
<a name="l00562"></a>00562   mActionSelectView = <span class="keyword">new</span> KSelectAction( i18n( <span class="stringliteral">"Select View"</span> ), 0, mCore-&gt;actionCollection(), <span class="stringliteral">"select_view"</span> );
<a name="l00563"></a>00563 <span class="preprocessor">#if KDE_VERSION &gt;= 309</span>
<a name="l00564"></a>00564 <span class="preprocessor"></span>  mActionSelectView-&gt;setMenuAccelsEnabled( <span class="keyword">false</span> );
<a name="l00565"></a>00565 <span class="preprocessor">#endif</span>
<a name="l00566"></a>00566 <span class="preprocessor"></span>  connect( mActionSelectView, SIGNAL( activated( <span class="keyword">const</span> QString&amp; ) ),
<a name="l00567"></a>00567            SLOT( setActiveView( <span class="keyword">const</span> QString&amp; ) ) );
<a name="l00568"></a>00568 
<a name="l00569"></a>00569   KAction *action;
<a name="l00570"></a>00570 
<a name="l00571"></a>00571   action = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"Modify View..."</span> ), <span class="stringliteral">"configure"</span>, 0, <span class="keyword">this</span>,
<a name="l00572"></a>00572                         SLOT( editView() ), mCore-&gt;actionCollection(),
<a name="l00573"></a>00573                         <span class="stringliteral">"view_modify"</span> );
<a name="l00574"></a>00574   action-&gt;setWhatsThis( i18n( <span class="stringliteral">"By pressing this button a dialog opens that allows you to modify the view of the addressbook. There you can add or remove fields that you want to be shown or hidden in the addressbook like the name for example."</span> ) );
<a name="l00575"></a>00575 
<a name="l00576"></a>00576   action = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"Add View..."</span> ), <span class="stringliteral">"window_new"</span>, 0, <span class="keyword">this</span>,
<a name="l00577"></a>00577                         SLOT( addView() ), mCore-&gt;actionCollection(),
<a name="l00578"></a>00578                         <span class="stringliteral">"view_add"</span> );
<a name="l00579"></a>00579   action-&gt;setWhatsThis( i18n( <span class="stringliteral">"You can add a new view by choosing one from the dialog that appears after pressing the button. You have to give the view a name, so that you can distinguish between the different views."</span> ) );
<a name="l00580"></a>00580 
<a name="l00581"></a>00581   mActionDeleteView = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"Delete View"</span> ), <span class="stringliteral">"view_remove"</span>, 0,
<a name="l00582"></a>00582                                    <span class="keyword">this</span>, SLOT( deleteView() ),
<a name="l00583"></a>00583                                    mCore-&gt;actionCollection(), <span class="stringliteral">"view_delete"</span> );
<a name="l00584"></a>00584   mActionDeleteView-&gt;setWhatsThis( i18n( <span class="stringliteral">"By pressing this button you can delete the actual view, which you have added before."</span> ) );
<a name="l00585"></a>00585 
<a name="l00586"></a>00586   action = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"Refresh View"</span> ), <span class="stringliteral">"reload"</span>, 0, <span class="keyword">this</span>,
<a name="l00587"></a>00587                SLOT( refreshView() ), mCore-&gt;actionCollection(),
<a name="l00588"></a>00588                <span class="stringliteral">"view_refresh"</span> );
<a name="l00589"></a>00589   action-&gt;setWhatsThis( i18n( <span class="stringliteral">"The view will be refreshed by pressing this button."</span> ) );
<a name="l00590"></a>00590 
<a name="l00591"></a>00591   action = <span class="keyword">new</span> KAction( i18n( <span class="stringliteral">"Edit &amp;Filters..."</span> ), <span class="stringliteral">"filter"</span>, 0, <span class="keyword">this</span>,
<a name="l00592"></a>00592                SLOT( configureFilters() ), mCore-&gt;actionCollection(),
<a name="l00593"></a>00593                <span class="stringliteral">"options_edit_filters"</span> );
<a name="l00594"></a>00594   action-&gt;setWhatsThis( i18n( <span class="stringliteral">"Edit the contact filters&lt;p&gt;You will be presented with a dialog, where you can add, remove and edit filters."</span> ) );
<a name="l00595"></a>00595 }
<a name="l00596"></a>00596 
<a name="l00597"></a>00597 <span class="keywordtype">void</span> ViewManager::initGUI()
<a name="l00598"></a>00598 {
<a name="l00599"></a>00599   QHBoxLayout *layout = <span class="keyword">new</span> QHBoxLayout( <span class="keyword">this</span> );
<a name="l00600"></a>00600   mViewWidgetStack = <span class="keyword">new</span> QWidgetStack( <span class="keyword">this</span> );
<a name="l00601"></a>00601   layout-&gt;addWidget( mViewWidgetStack );
<a name="l00602"></a>00602 }
<a name="l00603"></a>00603 
<a name="l00604"></a>00604 <span class="preprocessor">#include "viewmanager.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>