Sophie

Sophie

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

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>libkcal: incidenceformatter.cpp Source File (libkcal)</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=".">libkcal</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>libkcal</h2>


<!-- Generated by Doxygen 1.5.5 -->
<h1>incidenceformatter.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 libkcal.</span>
<a name="l00003"></a>00003 <span class="comment"></span>
<a name="l00004"></a>00004 <span class="comment">    Copyright (c) 2001 Cornelius Schumacher &lt;schumacher@kde.org&gt;</span>
<a name="l00005"></a>00005 <span class="comment">    Copyright (c) 2004 Reinhold Kainhofer &lt;reinhold@kainhofer.com&gt;</span>
<a name="l00006"></a>00006 <span class="comment"></span>
<a name="l00007"></a>00007 <span class="comment">    This library is free software; you can redistribute it and/or</span>
<a name="l00008"></a>00008 <span class="comment">    modify it under the terms of the GNU Library General Public</span>
<a name="l00009"></a>00009 <span class="comment">    License as published by the Free Software Foundation; either</span>
<a name="l00010"></a>00010 <span class="comment">    version 2 of the License, or (at your option) any later version.</span>
<a name="l00011"></a>00011 <span class="comment"></span>
<a name="l00012"></a>00012 <span class="comment">    This library is distributed in the hope that it will be useful,</span>
<a name="l00013"></a>00013 <span class="comment">    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00014"></a>00014 <span class="comment">    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<a name="l00015"></a>00015 <span class="comment">    Library General Public License for more details.</span>
<a name="l00016"></a>00016 <span class="comment"></span>
<a name="l00017"></a>00017 <span class="comment">    You should have received a copy of the GNU Library General Public License</span>
<a name="l00018"></a>00018 <span class="comment">    along with this library; see the file COPYING.LIB.  If not, write to</span>
<a name="l00019"></a>00019 <span class="comment">    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,</span>
<a name="l00020"></a>00020 <span class="comment">    Boston, MA 02110-1301, USA.</span>
<a name="l00021"></a>00021 <span class="comment">*/</span>
<a name="l00022"></a>00022 
<a name="l00023"></a>00023 <span class="preprocessor">#include "incidenceformatter.h"</span>
<a name="l00024"></a>00024 
<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;libkcal/attachment.h&gt;</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;libkcal/event.h&gt;</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;libkcal/todo.h&gt;</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;libkcal/journal.h&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;<a class="code" href="calendar_8h.html" title="Provides the main &amp;quot;calendar&amp;quot; object class.">libkcal/calendar.h</a>&gt;</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include &lt;libkcal/calendarlocal.h&gt;</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;libkcal/icalformat.h&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;libkcal/freebusy.h&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;<a class="code" href="calendarresources_8h.html" title="Provides a Calendar composed of several Calendar Resources.">libkcal/calendarresources.h</a>&gt;</span>
<a name="l00034"></a>00034 
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;libemailfunctions/email.h&gt;</span>
<a name="l00036"></a>00036 
<a name="l00037"></a>00037 <span class="preprocessor">#include &lt;ktnef/ktnefparser.h&gt;</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include &lt;ktnef/ktnefmessage.h&gt;</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include &lt;ktnef/ktnefdefs.h&gt;</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;kabc/phonenumber.h&gt;</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include &lt;kabc/vcardconverter.h&gt;</span>
<a name="l00042"></a>00042 <span class="preprocessor">#include &lt;kabc/stdaddressbook.h&gt;</span>
<a name="l00043"></a>00043 
<a name="l00044"></a>00044 <span class="preprocessor">#include &lt;kapplication.h&gt;</span>
<a name="l00045"></a>00045 <span class="comment">// #include &lt;kdebug.h&gt;</span>
<a name="l00046"></a>00046 
<a name="l00047"></a>00047 <span class="preprocessor">#include &lt;klocale.h&gt;</span>
<a name="l00048"></a>00048 <span class="preprocessor">#include &lt;kglobal.h&gt;</span>
<a name="l00049"></a>00049 <span class="preprocessor">#include &lt;kiconloader.h&gt;</span>
<a name="l00050"></a>00050 
<a name="l00051"></a>00051 <span class="preprocessor">#include &lt;qbuffer.h&gt;</span>
<a name="l00052"></a>00052 <span class="preprocessor">#include &lt;qstylesheet.h&gt;</span>
<a name="l00053"></a>00053 <span class="preprocessor">#include &lt;qdatetime.h&gt;</span>
<a name="l00054"></a>00054 
<a name="l00055"></a>00055 <span class="preprocessor">#include &lt;time.h&gt;</span>
<a name="l00056"></a>00056 
<a name="l00057"></a>00057 
<a name="l00058"></a>00058 <span class="keyword">using namespace </span>KCal;
<a name="l00059"></a>00059 
<a name="l00060"></a>00060 
<a name="l00061"></a>00061 <span class="comment">/*******************************************************************</span>
<a name="l00062"></a>00062 <span class="comment"> *  Helper functions for the extensive display (event viewer)</span>
<a name="l00063"></a>00063 <span class="comment"> *******************************************************************/</span>
<a name="l00064"></a>00064 
<a name="l00065"></a>00065 <span class="keyword">static</span> QString eventViewerAddLink( <span class="keyword">const</span> QString &amp;ref, <span class="keyword">const</span> QString &amp;text,
<a name="l00066"></a>00066                              <span class="keywordtype">bool</span> newline = <span class="keyword">true</span> )
<a name="l00067"></a>00067 {
<a name="l00068"></a>00068   QString tmpStr( <span class="stringliteral">"&lt;a href=\""</span> + ref + <span class="stringliteral">"\"&gt;"</span> + text + <span class="stringliteral">"&lt;/a&gt;"</span> );
<a name="l00069"></a>00069   <span class="keywordflow">if</span> ( newline ) tmpStr += <span class="stringliteral">"\n"</span>;
<a name="l00070"></a>00070   <span class="keywordflow">return</span> tmpStr;
<a name="l00071"></a>00071 }
<a name="l00072"></a>00072 
<a name="l00073"></a>00073 <span class="keyword">static</span> QString eventViewerAddTag( <span class="keyword">const</span> QString &amp; tag, <span class="keyword">const</span> QString &amp; text )
<a name="l00074"></a>00074 {
<a name="l00075"></a>00075   <span class="keywordtype">int</span> numLineBreaks = text.contains( <span class="stringliteral">"\n"</span> );
<a name="l00076"></a>00076   QString str = <span class="stringliteral">"&lt;"</span> + tag + <span class="stringliteral">"&gt;"</span>;
<a name="l00077"></a>00077   QString tmpText = text;
<a name="l00078"></a>00078   QString tmpStr = str;
<a name="l00079"></a>00079   <span class="keywordflow">if</span>( numLineBreaks &gt;= 0 ) {
<a name="l00080"></a>00080     <span class="keywordflow">if</span> ( numLineBreaks &gt; 0) {
<a name="l00081"></a>00081       <span class="keywordtype">int</span> pos = 0;
<a name="l00082"></a>00082       QString tmp;
<a name="l00083"></a>00083       <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt;= numLineBreaks; i++ ) {
<a name="l00084"></a>00084         pos = tmpText.find( <span class="stringliteral">"\n"</span> );
<a name="l00085"></a>00085         tmp = tmpText.left( pos );
<a name="l00086"></a>00086         tmpText = tmpText.right( tmpText.length() - pos - 1 );
<a name="l00087"></a>00087         tmpStr += tmp + <span class="stringliteral">"&lt;br&gt;"</span>;
<a name="l00088"></a>00088       }
<a name="l00089"></a>00089     } <span class="keywordflow">else</span> {
<a name="l00090"></a>00090       tmpStr += tmpText;
<a name="l00091"></a>00091     }
<a name="l00092"></a>00092   }
<a name="l00093"></a>00093   tmpStr += <span class="stringliteral">"&lt;/"</span> + tag + <span class="stringliteral">"&gt;"</span>;
<a name="l00094"></a>00094   <span class="keywordflow">return</span> tmpStr;
<a name="l00095"></a>00095 }
<a name="l00096"></a>00096 
<a name="l00097"></a>00097 <span class="keyword">static</span> QString linkPerson( <span class="keyword">const</span> QString&amp; email, QString name, QString uid )
<a name="l00098"></a>00098 {
<a name="l00099"></a>00099   <span class="comment">// Make the search, if there is an email address to search on,</span>
<a name="l00100"></a>00100   <span class="comment">// and either name or uid is missing</span>
<a name="l00101"></a>00101   <span class="keywordflow">if</span> ( !email.isEmpty() &amp;&amp; ( name.isEmpty() || uid.isEmpty() ) ) {
<a name="l00102"></a>00102     KABC::AddressBook *add_book = KABC::StdAddressBook::self( <span class="keyword">true</span> );
<a name="l00103"></a>00103     KABC::Addressee::List addressList = add_book-&gt;findByEmail( email );
<a name="l00104"></a>00104     KABC::Addressee o = addressList.first();
<a name="l00105"></a>00105     <span class="keywordflow">if</span> ( !o.isEmpty() &amp;&amp; addressList.size() &lt; 2 ) {
<a name="l00106"></a>00106       <span class="keywordflow">if</span> ( name.isEmpty() )
<a name="l00107"></a>00107         <span class="comment">// No name set, so use the one from the addressbook</span>
<a name="l00108"></a>00108         name = o.formattedName();
<a name="l00109"></a>00109       uid = o.uid();
<a name="l00110"></a>00110     } <span class="keywordflow">else</span>
<a name="l00111"></a>00111       <span class="comment">// Email not found in the addressbook. Don't make a link</span>
<a name="l00112"></a>00112       uid = QString::null;
<a name="l00113"></a>00113   }
<a name="l00114"></a>00114   kdDebug(5850) &lt;&lt; <span class="stringliteral">"formatAttendees: uid = "</span> &lt;&lt; uid &lt;&lt; endl;
<a name="l00115"></a>00115 
<a name="l00116"></a>00116   <span class="comment">// Show the attendee</span>
<a name="l00117"></a>00117   QString tmpString = <span class="stringliteral">"&lt;li&gt;"</span>;
<a name="l00118"></a>00118   <span class="keywordflow">if</span> ( !uid.isEmpty() ) {
<a name="l00119"></a>00119     <span class="comment">// There is a UID, so make a link to the addressbook</span>
<a name="l00120"></a>00120     <span class="keywordflow">if</span> ( name.isEmpty() )
<a name="l00121"></a>00121       <span class="comment">// Use the email address for text</span>
<a name="l00122"></a>00122       tmpString += eventViewerAddLink( <span class="stringliteral">"uid:"</span> + uid, email );
<a name="l00123"></a>00123     <span class="keywordflow">else</span>
<a name="l00124"></a>00124       tmpString += eventViewerAddLink( <span class="stringliteral">"uid:"</span> + uid, name );
<a name="l00125"></a>00125   } <span class="keywordflow">else</span> {
<a name="l00126"></a>00126     <span class="comment">// No UID, just show some text</span>
<a name="l00127"></a>00127     tmpString += ( name.isEmpty() ? email : name );
<a name="l00128"></a>00128   }
<a name="l00129"></a>00129   tmpString += <span class="charliteral">'\n'</span>;
<a name="l00130"></a>00130 
<a name="l00131"></a>00131   <span class="comment">// Make the mailto link</span>
<a name="l00132"></a>00132   <span class="keywordflow">if</span> ( !email.isEmpty() ) {
<a name="l00133"></a>00133     <a class="code" href="classKCal_1_1Person.html" title="This class represents a person.">KCal::Person</a> person( name, email );
<a name="l00134"></a>00134     KURL mailto;
<a name="l00135"></a>00135     mailto.setProtocol( <span class="stringliteral">"mailto"</span> );
<a name="l00136"></a>00136     mailto.setPath( person.fullName() );
<a name="l00137"></a>00137     tmpString += eventViewerAddLink( mailto.url(), QString::null );
<a name="l00138"></a>00138   }
<a name="l00139"></a>00139   tmpString += <span class="stringliteral">"&lt;/li&gt;\n"</span>;
<a name="l00140"></a>00140 
<a name="l00141"></a>00141   <span class="keywordflow">return</span> tmpString;
<a name="l00142"></a>00142 }
<a name="l00143"></a>00143 
<a name="l00144"></a>00144 <span class="keyword">static</span> QString eventViewerFormatAttendees( <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a> *event )
<a name="l00145"></a>00145 {
<a name="l00146"></a>00146   QString tmpStr;
<a name="l00147"></a>00147   Attendee::List attendees = <span class="keyword">event</span>-&gt;attendees();
<a name="l00148"></a>00148   <span class="keywordflow">if</span> ( attendees.count() ) {
<a name="l00149"></a>00149 
<a name="l00150"></a>00150     <span class="comment">// Add organizer link</span>
<a name="l00151"></a>00151     tmpStr += eventViewerAddTag( <span class="stringliteral">"i"</span>, i18n(<span class="stringliteral">"Organizer"</span>) );
<a name="l00152"></a>00152     tmpStr += <span class="stringliteral">"&lt;ul&gt;"</span>;
<a name="l00153"></a>00153     tmpStr += linkPerson( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#eb4c2be5ce3f3961dc10204fbc5206a7">organizer</a>().<a class="code" href="classKCal_1_1Person.html#b998a684c9d50625dead81ec3f18698c">email</a>(),
<a name="l00154"></a>00154                           <span class="keyword">event</span>-&gt;organizer().name(), QString::null );
<a name="l00155"></a>00155     tmpStr += <span class="stringliteral">"&lt;/ul&gt;"</span>;
<a name="l00156"></a>00156 
<a name="l00157"></a>00157     <span class="comment">// Add attendees links</span>
<a name="l00158"></a>00158     tmpStr += eventViewerAddTag( <span class="stringliteral">"i"</span>, i18n(<span class="stringliteral">"Attendees"</span>) );
<a name="l00159"></a>00159     tmpStr += <span class="stringliteral">"&lt;ul&gt;"</span>;
<a name="l00160"></a>00160     Attendee::List::ConstIterator it;
<a name="l00161"></a>00161     <span class="keywordflow">for</span>( it = attendees.begin(); it != attendees.end(); ++it ) {
<a name="l00162"></a>00162       <a class="code" href="classKCal_1_1Attendee.html" title="This class represents information related to an attendee of an event.">Attendee</a> *a = *it;
<a name="l00163"></a>00163       tmpStr += linkPerson( a-&gt;<a class="code" href="classKCal_1_1Person.html#b998a684c9d50625dead81ec3f18698c">email</a>(), a-&gt;<a class="code" href="classKCal_1_1Person.html#728effd37c750fe1196c063ca7c7e2be">name</a>(), a-&gt;<a class="code" href="classKCal_1_1Attendee.html#bb9d8bb1b67207c717c5e872836c7688" title="Return unique id of the attendee.">uid</a>() );
<a name="l00164"></a>00164       <span class="keywordflow">if</span> ( !a-&gt;<a class="code" href="classKCal_1_1Attendee.html#6e353bbfe35df6df4c577c480ff639c9" title="Returns the delegator.">delegator</a>().isEmpty() ) {
<a name="l00165"></a>00165           tmpStr += i18n(<span class="stringliteral">" (delegated by %1)"</span> ).arg( a-&gt;<a class="code" href="classKCal_1_1Attendee.html#6e353bbfe35df6df4c577c480ff639c9" title="Returns the delegator.">delegator</a>() );
<a name="l00166"></a>00166       }
<a name="l00167"></a>00167       <span class="keywordflow">if</span> ( !a-&gt;<a class="code" href="classKCal_1_1Attendee.html#ef41d5c9a34d29ef7260158a891c5bc1" title="Returns the delegate.">delegate</a>().isEmpty() ) {
<a name="l00168"></a>00168           tmpStr += i18n(<span class="stringliteral">" (delegated to %1)"</span> ).arg( a-&gt;<a class="code" href="classKCal_1_1Attendee.html#ef41d5c9a34d29ef7260158a891c5bc1" title="Returns the delegate.">delegate</a>() );
<a name="l00169"></a>00169       }
<a name="l00170"></a>00170     }
<a name="l00171"></a>00171     tmpStr += <span class="stringliteral">"&lt;/ul&gt;"</span>;
<a name="l00172"></a>00172   }
<a name="l00173"></a>00173   <span class="keywordflow">return</span> tmpStr;
<a name="l00174"></a>00174 }
<a name="l00175"></a>00175 
<a name="l00176"></a>00176 <span class="keyword">static</span> QString eventViewerFormatAttachments( <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a> *i )
<a name="l00177"></a>00177 {
<a name="l00178"></a>00178   QString tmpStr;
<a name="l00179"></a>00179   Attachment::List as = i-&gt;<a class="code" href="classKCal_1_1Incidence.html#dfc4bb0127ecf371c0707fed9eb21e3e" title="Return list of all associated attachments.">attachments</a>();
<a name="l00180"></a>00180   <span class="keywordflow">if</span> ( as.count() &gt; 0 ) {
<a name="l00181"></a>00181     Attachment::List::ConstIterator it;
<a name="l00182"></a>00182     <span class="keywordflow">for</span>( it = as.begin(); it != as.end(); ++it ) {
<a name="l00183"></a>00183       <span class="keywordflow">if</span> ( (*it)-&gt;isUri() ) {
<a name="l00184"></a>00184         QString name;
<a name="l00185"></a>00185         <span class="keywordflow">if</span> ( (*it)-&gt;uri().startsWith( <span class="stringliteral">"kmail:"</span> ) )
<a name="l00186"></a>00186           name = i18n( <span class="stringliteral">"Show mail"</span> );
<a name="l00187"></a>00187         <span class="keywordflow">else</span>
<a name="l00188"></a>00188           name = (*it)-&gt;uri();
<a name="l00189"></a>00189         tmpStr += eventViewerAddLink( (*it)-&gt;uri(), name );
<a name="l00190"></a>00190         tmpStr += <span class="stringliteral">"&lt;br&gt;"</span>;
<a name="l00191"></a>00191       }
<a name="l00192"></a>00192     }
<a name="l00193"></a>00193   }
<a name="l00194"></a>00194   <span class="keywordflow">return</span> tmpStr;
<a name="l00195"></a>00195 }
<a name="l00196"></a>00196 
<a name="l00197"></a>00197 <span class="comment">/*</span>
<a name="l00198"></a>00198 <span class="comment">  FIXME:This function depends of kaddressbook. Is necessary a new</span>
<a name="l00199"></a>00199 <span class="comment">  type of event?</span>
<a name="l00200"></a>00200 <span class="comment">*/</span>
<a name="l00201"></a>00201 <span class="keyword">static</span> QString eventViewerFormatBirthday( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event )
<a name="l00202"></a>00202 {
<a name="l00203"></a>00203   <span class="keywordflow">if</span> ( !event) <span class="keywordflow">return</span>  QString::null;
<a name="l00204"></a>00204   <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1CustomProperties.html#4809ed307d0a7e8bae90485a34e342fb" title="Return the value of a custom calendar property.">customProperty</a>(<span class="stringliteral">"KABC"</span>,<span class="stringliteral">"BIRTHDAY"</span>) != <span class="stringliteral">"YES"</span> ) <span class="keywordflow">return</span> QString::null;
<a name="l00205"></a>00205 
<a name="l00206"></a>00206   QString uid = <span class="keyword">event</span>-&gt;customProperty(<span class="stringliteral">"KABC"</span>,<span class="stringliteral">"UID-1"</span>);
<a name="l00207"></a>00207   QString name = <span class="keyword">event</span>-&gt;customProperty(<span class="stringliteral">"KABC"</span>,<span class="stringliteral">"NAME-1"</span>);
<a name="l00208"></a>00208   QString email= <span class="keyword">event</span>-&gt;customProperty(<span class="stringliteral">"KABC"</span>,<span class="stringliteral">"EMAIL-1"</span>);
<a name="l00209"></a>00209 
<a name="l00210"></a>00210   QString tmpString = <span class="stringliteral">"&lt;ul&gt;"</span>;
<a name="l00211"></a>00211   tmpString += linkPerson( email, name, uid );
<a name="l00212"></a>00212 
<a name="l00213"></a>00213   <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1CustomProperties.html#4809ed307d0a7e8bae90485a34e342fb" title="Return the value of a custom calendar property.">customProperty</a>( <span class="stringliteral">"KABC"</span>, <span class="stringliteral">"ANNIVERSARY"</span>) == <span class="stringliteral">"YES"</span> ) {
<a name="l00214"></a>00214     uid = <span class="keyword">event</span>-&gt;customProperty(<span class="stringliteral">"KABC"</span>,<span class="stringliteral">"UID-2"</span>);
<a name="l00215"></a>00215     name = <span class="keyword">event</span>-&gt;customProperty(<span class="stringliteral">"KABC"</span>,<span class="stringliteral">"NAME-2"</span>);
<a name="l00216"></a>00216     email= <span class="keyword">event</span>-&gt;customProperty(<span class="stringliteral">"KABC"</span>,<span class="stringliteral">"EMAIL-2"</span>);
<a name="l00217"></a>00217     tmpString += linkPerson( email, name, uid );
<a name="l00218"></a>00218   }
<a name="l00219"></a>00219 
<a name="l00220"></a>00220   tmpString += <span class="stringliteral">"&lt;/ul&gt;"</span>;
<a name="l00221"></a>00221   <span class="keywordflow">return</span> tmpString;
<a name="l00222"></a>00222 }
<a name="l00223"></a>00223 
<a name="l00224"></a>00224 <span class="keyword">static</span> QString eventViewerFormatHeader( <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a> *incidence )
<a name="l00225"></a>00225 {
<a name="l00226"></a>00226   QString tmpStr = <span class="stringliteral">"&lt;table&gt;&lt;tr&gt;"</span>;
<a name="l00227"></a>00227 
<a name="l00228"></a>00228   <span class="comment">// show icons</span>
<a name="l00229"></a>00229   {
<a name="l00230"></a>00230     tmpStr += <span class="stringliteral">"&lt;td&gt;"</span>;
<a name="l00231"></a>00231 
<a name="l00232"></a>00232     <span class="keywordflow">if</span> ( incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#7981c13389e270b9e3e06a79d8564d5b">type</a>() == <span class="stringliteral">"Event"</span> ) {
<a name="l00233"></a>00233       tmpStr += <span class="stringliteral">"&lt;img src=\""</span> +
<a name="l00234"></a>00234                 KGlobal::iconLoader()-&gt;iconPath( <span class="stringliteral">"appointment"</span>, KIcon::Small ) +
<a name="l00235"></a>00235                 <span class="stringliteral">"\"&gt;"</span>;
<a name="l00236"></a>00236     }
<a name="l00237"></a>00237     <span class="keywordflow">if</span> ( incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#7981c13389e270b9e3e06a79d8564d5b">type</a>() == <span class="stringliteral">"Todo"</span> ) {
<a name="l00238"></a>00238       tmpStr += <span class="stringliteral">"&lt;img src=\""</span> +
<a name="l00239"></a>00239                 KGlobal::iconLoader()-&gt;iconPath( <span class="stringliteral">"todo"</span>, KIcon::Small ) +
<a name="l00240"></a>00240                 <span class="stringliteral">"\"&gt;"</span>;
<a name="l00241"></a>00241     }
<a name="l00242"></a>00242     <span class="keywordflow">if</span> ( incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#7981c13389e270b9e3e06a79d8564d5b">type</a>() == <span class="stringliteral">"Journal"</span> ) {
<a name="l00243"></a>00243       tmpStr += <span class="stringliteral">"&lt;img src=\""</span> +
<a name="l00244"></a>00244                 KGlobal::iconLoader()-&gt;iconPath( <span class="stringliteral">"journal"</span>, KIcon::Small ) +
<a name="l00245"></a>00245                 <span class="stringliteral">"\"&gt;"</span>;
<a name="l00246"></a>00246     }
<a name="l00247"></a>00247     <span class="keywordflow">if</span> ( incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#74b018256a65d0d87b0dc47083722406" title="Return whether any alarm associated with this incidence is enabled.">isAlarmEnabled</a>() ) {
<a name="l00248"></a>00248       tmpStr += <span class="stringliteral">"&lt;img src=\""</span> +
<a name="l00249"></a>00249                 KGlobal::iconLoader()-&gt;iconPath( <span class="stringliteral">"bell"</span>, KIcon::Small ) +
<a name="l00250"></a>00250                 <span class="stringliteral">"\"&gt;"</span>;
<a name="l00251"></a>00251     }
<a name="l00252"></a>00252     <span class="keywordflow">if</span> ( incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#81ad15662138be07f0d55be6b075b043" title="Forward to Recurrence::doesRecur().">doesRecur</a>() ) {
<a name="l00253"></a>00253       tmpStr += <span class="stringliteral">"&lt;img src=\""</span> +
<a name="l00254"></a>00254                 KGlobal::iconLoader()-&gt;iconPath( <span class="stringliteral">"recur"</span>, KIcon::Small ) +
<a name="l00255"></a>00255                 <span class="stringliteral">"\"&gt;"</span>;
<a name="l00256"></a>00256     }
<a name="l00257"></a>00257     <span class="keywordflow">if</span> ( incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#ed5d0696a6288811b20343d6e467a93a" title="Return if the object is read-only.">isReadOnly</a>() ) {
<a name="l00258"></a>00258       tmpStr += <span class="stringliteral">"&lt;img src=\""</span> +
<a name="l00259"></a>00259                 KGlobal::iconLoader()-&gt;iconPath( <span class="stringliteral">"readonlyevent"</span>, KIcon::Small ) +
<a name="l00260"></a>00260                 <span class="stringliteral">"\"&gt;"</span>;
<a name="l00261"></a>00261     }
<a name="l00262"></a>00262 
<a name="l00263"></a>00263     tmpStr += <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00264"></a>00264   }
<a name="l00265"></a>00265 
<a name="l00266"></a>00266   tmpStr += <span class="stringliteral">"&lt;td&gt;"</span>
<a name="l00267"></a>00267             + eventViewerAddTag( <span class="stringliteral">"u"</span>,
<a name="l00268"></a>00268                                  eventViewerAddTag( <span class="stringliteral">"b"</span>, incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>() ) )
<a name="l00269"></a>00269             + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00270"></a>00270   tmpStr += <span class="stringliteral">"&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;"</span>;
<a name="l00271"></a>00271 
<a name="l00272"></a>00272   <span class="keywordflow">return</span> tmpStr;
<a name="l00273"></a>00273 }
<a name="l00274"></a>00274 
<a name="l00275"></a>00275 <span class="keyword">static</span> QString eventViewerFormatEvent( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event )
<a name="l00276"></a>00276 {
<a name="l00277"></a>00277   <span class="keywordflow">if</span> ( !event ) <span class="keywordflow">return</span> QString::null;
<a name="l00278"></a>00278   QString tmpStr = eventViewerFormatHeader( event );
<a name="l00279"></a>00279 
<a name="l00280"></a>00280   tmpStr += <span class="stringliteral">"&lt;table&gt;"</span>;
<a name="l00281"></a>00281 
<a name="l00282"></a>00282   tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00283"></a>00283   <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l00284"></a>00284     <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1Event.html#579d969ee1963d287f5662554a5aaa4b" title="Return true if the event spans multiple days, otherwise return false.">isMultiDay</a>() ) {
<a name="l00285"></a>00285       tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Time"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00286"></a>00286       tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + i18n(<span class="stringliteral">"&lt;beginTime&gt; - &lt;endTime&gt;"</span>,<span class="stringliteral">"%1 - %2"</span>)
<a name="l00287"></a>00287                     .arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>() )
<a name="l00288"></a>00288                     .arg( event-&gt;<a class="code" href="classKCal_1_1Event.html#4138e4c8a9218b9bdf55e0e8f471341d" title="Return end date as string formatted according to the users locale settings.">dtEndDateStr</a>() ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00289"></a>00289     } <span class="keywordflow">else</span> {
<a name="l00290"></a>00290       tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Date"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00291"></a>00291       tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + i18n(<span class="stringliteral">"date as string"</span>,<span class="stringliteral">"%1"</span>).arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>() ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00292"></a>00292     }
<a name="l00293"></a>00293   } <span class="keywordflow">else</span> {
<a name="l00294"></a>00294     <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1Event.html#579d969ee1963d287f5662554a5aaa4b" title="Return true if the event spans multiple days, otherwise return false.">isMultiDay</a>() ) {
<a name="l00295"></a>00295       tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Time"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00296"></a>00296       tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + i18n(<span class="stringliteral">"&lt;beginTime&gt; - &lt;endTime&gt;"</span>,<span class="stringliteral">"%1 - %2"</span>)
<a name="l00297"></a>00297                     .arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#94846b495fa6de8138dca8f997e48e57" title="returns an event&amp;#39;s starting date and time as a string formatted according to...">dtStartStr</a>() )
<a name="l00298"></a>00298                     .arg( event-&gt;<a class="code" href="classKCal_1_1Event.html#22e773f909419de771c0635ba1297e12" title="Return end date and time as string formatted according to the users locale settings...">dtEndStr</a>() ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00299"></a>00299     } <span class="keywordflow">else</span> {
<a name="l00300"></a>00300       tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Time"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00301"></a>00301       <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1Event.html#2f980150df1a3b3883f9605b25fa769f" title="Return whether the event has an end date/time.">hasEndDate</a>() &amp;&amp; <span class="keyword">event</span>-&gt;dtStart() != <span class="keyword">event</span>-&gt;dtEnd()) {
<a name="l00302"></a>00302         tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + i18n(<span class="stringliteral">"&lt;beginTime&gt; - &lt;endTime&gt;"</span>,<span class="stringliteral">"%1 - %2"</span>)
<a name="l00303"></a>00303                       .arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#ba22e2b05348fd4f18859b5e434bde3e" title="returns an event&amp;#39;s starting time as a string formatted according to the users...">dtStartTimeStr</a>() )
<a name="l00304"></a>00304                       .arg( event-&gt;<a class="code" href="classKCal_1_1Event.html#90ae758766ab822ee69fc0e4524f5359" title="Return end time as string formatted according to the users locale settings.">dtEndTimeStr</a>() ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00305"></a>00305       } <span class="keywordflow">else</span> {
<a name="l00306"></a>00306         tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + <span class="keyword">event</span>-&gt;dtStartTimeStr() + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00307"></a>00307       }
<a name="l00308"></a>00308       tmpStr += <span class="stringliteral">"&lt;/tr&gt;&lt;tr&gt;"</span>;
<a name="l00309"></a>00309       tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Date"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00310"></a>00310       tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + i18n(<span class="stringliteral">"date as string"</span>,<span class="stringliteral">"%1"</span>)
<a name="l00311"></a>00311                     .arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>() ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00312"></a>00312     }
<a name="l00313"></a>00313   }
<a name="l00314"></a>00314   tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00315"></a>00315 
<a name="l00316"></a>00316   <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1CustomProperties.html#4809ed307d0a7e8bae90485a34e342fb" title="Return the value of a custom calendar property.">customProperty</a>(<span class="stringliteral">"KABC"</span>,<span class="stringliteral">"BIRTHDAY"</span>)== <span class="stringliteral">"YES"</span> ) {
<a name="l00317"></a>00317     tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00318"></a>00318     tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Birthday"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00319"></a>00319     tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + eventViewerFormatBirthday( event ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00320"></a>00320     tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00321"></a>00321     tmpStr += <span class="stringliteral">"&lt;/table&gt;"</span>;
<a name="l00322"></a>00322     <span class="keywordflow">return</span> tmpStr;
<a name="l00323"></a>00323   }
<a name="l00324"></a>00324 
<a name="l00325"></a>00325   <span class="keywordflow">if</span> ( !event-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>().isEmpty() ) {
<a name="l00326"></a>00326     tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00327"></a>00327     tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Description"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00328"></a>00328     tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + eventViewerAddTag( <span class="stringliteral">"p"</span>, event-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>() ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00329"></a>00329     tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00330"></a>00330   }
<a name="l00331"></a>00331 
<a name="l00332"></a>00332   <span class="keywordflow">if</span> ( !event-&gt;<a class="code" href="classKCal_1_1Incidence.html#d147473a07f26ad738fbae9501eb1c3d" title="Return the event&amp;#39;s/todo&amp;#39;s location.">location</a>().isEmpty() ) {
<a name="l00333"></a>00333     tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00334"></a>00334     tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Location"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00335"></a>00335     tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + <span class="keyword">event</span>-&gt;location() + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00336"></a>00336     tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00337"></a>00337   }
<a name="l00338"></a>00338 
<a name="l00339"></a>00339   <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1Incidence.html#4eae9f79708ab85745dc6fdea51afb76" title="Return categories as a list of strings.">categories</a>().count() &gt; 0 ) {
<a name="l00340"></a>00340     tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00341"></a>00341     tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"1 Category"</span>, <span class="stringliteral">"%n Categories"</span>, event-&gt;<a class="code" href="classKCal_1_1Incidence.html#4eae9f79708ab85745dc6fdea51afb76" title="Return categories as a list of strings.">categories</a>().count() )+ <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00342"></a>00342     tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + <span class="keyword">event</span>-&gt;categoriesStr() + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00343"></a>00343     tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00344"></a>00344   }
<a name="l00345"></a>00345 
<a name="l00346"></a>00346   <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1Incidence.html#81ad15662138be07f0d55be6b075b043" title="Forward to Recurrence::doesRecur().">doesRecur</a>() ) {
<a name="l00347"></a>00347     QDateTime dt =
<a name="l00348"></a>00348       <span class="keyword">event</span>-&gt;recurrence()-&gt;getNextDateTime( QDateTime::currentDateTime() );
<a name="l00349"></a>00349     tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00350"></a>00350     tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Next on"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00351"></a>00351     <span class="keywordflow">if</span> ( !event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l00352"></a>00352       tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> +
<a name="l00353"></a>00353                 KGlobal::locale()-&gt;formatDateTime( dt, <span class="keyword">true</span> ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00354"></a>00354     } <span class="keywordflow">else</span> {
<a name="l00355"></a>00355       tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> +
<a name="l00356"></a>00356                 KGlobal::locale()-&gt;formatDate( dt.date(), true ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00357"></a>00357     }
<a name="l00358"></a>00358     tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00359"></a>00359   }
<a name="l00360"></a>00360 
<a name="l00361"></a>00361   <span class="keywordtype">int</span> attendeeCount = <span class="keyword">event</span>-&gt;attendees().count();
<a name="l00362"></a>00362   <span class="keywordflow">if</span> ( attendeeCount &gt; 0 ) {
<a name="l00363"></a>00363     tmpStr += <span class="stringliteral">"&lt;tr&gt;&lt;td colspan=\"2\"&gt;"</span>;
<a name="l00364"></a>00364     tmpStr += eventViewerFormatAttendees( event );
<a name="l00365"></a>00365     tmpStr += <span class="stringliteral">"&lt;/td&gt;&lt;/tr&gt;"</span>;
<a name="l00366"></a>00366   }
<a name="l00367"></a>00367 
<a name="l00368"></a>00368   <span class="keywordtype">int</span> attachmentCount = <span class="keyword">event</span>-&gt;attachments().count();
<a name="l00369"></a>00369   <span class="keywordflow">if</span> ( attachmentCount &gt; 0 ) {
<a name="l00370"></a>00370     tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00371"></a>00371     tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"1 attachment"</span>, <span class="stringliteral">"%n attachments"</span>, attachmentCount )+ <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00372"></a>00372     tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + eventViewerFormatAttachments( event ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00373"></a>00373     tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00374"></a>00374   }
<a name="l00375"></a>00375 
<a name="l00376"></a>00376   tmpStr += <span class="stringliteral">"&lt;/table&gt;"</span>;
<a name="l00377"></a>00377   tmpStr += <span class="stringliteral">"&lt;em&gt;"</span> + i18n( <span class="stringliteral">"Creation date: %1."</span>).arg(
<a name="l00378"></a>00378     KGlobal::locale()-&gt;formatDateTime( event-&gt;<a class="code" href="classKCal_1_1Incidence.html#8df4ebe490fea07df54e9df82c40c579" title="Return time and date of creation.">created</a>() , true ) ) + <span class="stringliteral">"&lt;/em&gt;"</span>;
<a name="l00379"></a>00379   <span class="keywordflow">return</span> tmpStr;
<a name="l00380"></a>00380 }
<a name="l00381"></a>00381 
<a name="l00382"></a>00382 <span class="keyword">static</span> QString eventViewerFormatTodo( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a> *todo )
<a name="l00383"></a>00383 {
<a name="l00384"></a>00384   <span class="keywordflow">if</span> ( !todo ) <span class="keywordflow">return</span> QString::null;
<a name="l00385"></a>00385   QString tmpStr = eventViewerFormatHeader( todo );
<a name="l00386"></a>00386 
<a name="l00387"></a>00387   tmpStr += <span class="stringliteral">"&lt;table&gt;"</span>;
<a name="l00388"></a>00388 
<a name="l00389"></a>00389   <span class="keywordflow">if</span> ( todo-&gt;<a class="code" href="classKCal_1_1Todo.html#a40c65f6e9024015f7546e8749436b12" title="Returns true if the todo has a due date, otherwise return false.">hasDueDate</a>() ) {
<a name="l00390"></a>00390     tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00391"></a>00391     tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Due on"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00392"></a>00392     <span class="keywordflow">if</span> ( !todo-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l00393"></a>00393       tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> +
<a name="l00394"></a>00394                 KGlobal::locale()-&gt;formatDateTime( todo-&gt;<a class="code" href="classKCal_1_1Todo.html#09d6933ae42390339b27053faee3afec" title="Returns due date and time.">dtDue</a>(), true ) +
<a name="l00395"></a>00395                 <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00396"></a>00396     } <span class="keywordflow">else</span> {
<a name="l00397"></a>00397       tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> +
<a name="l00398"></a>00398                 KGlobal::locale()-&gt;formatDate( todo-&gt;<a class="code" href="classKCal_1_1Todo.html#09d6933ae42390339b27053faee3afec" title="Returns due date and time.">dtDue</a>().date(), true ) +
<a name="l00399"></a>00399                 <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00400"></a>00400     }
<a name="l00401"></a>00401     tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00402"></a>00402   }
<a name="l00403"></a>00403 
<a name="l00404"></a>00404   <span class="keywordflow">if</span> ( !todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>().isEmpty() ) {
<a name="l00405"></a>00405     tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00406"></a>00406     tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Description"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00407"></a>00407     tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>() + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00408"></a>00408     tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00409"></a>00409   }
<a name="l00410"></a>00410 
<a name="l00411"></a>00411   <span class="keywordflow">if</span> ( !todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#d147473a07f26ad738fbae9501eb1c3d" title="Return the event&amp;#39;s/todo&amp;#39;s location.">location</a>().isEmpty() ) {
<a name="l00412"></a>00412     tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00413"></a>00413     tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Location"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00414"></a>00414     tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#d147473a07f26ad738fbae9501eb1c3d" title="Return the event&amp;#39;s/todo&amp;#39;s location.">location</a>() + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00415"></a>00415     tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00416"></a>00416   }
<a name="l00417"></a>00417 
<a name="l00418"></a>00418   <span class="keywordflow">if</span> ( todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#4eae9f79708ab85745dc6fdea51afb76" title="Return categories as a list of strings.">categories</a>().count() &gt; 0 ) {
<a name="l00419"></a>00419     tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00420"></a>00420     tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"1 Category"</span>, <span class="stringliteral">"%n Categories"</span>, todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#4eae9f79708ab85745dc6fdea51afb76" title="Return categories as a list of strings.">categories</a>().count() )+ <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00421"></a>00421     tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#6c9c2b897f82509f87594b17223cda3a" title="Return categories as a comma separated string.">categoriesStr</a>() + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00422"></a>00422     tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00423"></a>00423   }
<a name="l00424"></a>00424 
<a name="l00425"></a>00425   tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00426"></a>00426   tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Priority"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00427"></a>00427   <span class="keywordflow">if</span> ( todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#cbd216cda3ea9d86ee12252e98da6d0b" title="Return priority.">priority</a>() &gt; 0 ) {
<a name="l00428"></a>00428     tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + QString::number( todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#cbd216cda3ea9d86ee12252e98da6d0b" title="Return priority.">priority</a>() ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00429"></a>00429   } <span class="keywordflow">else</span> {
<a name="l00430"></a>00430     tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + i18n( <span class="stringliteral">"Unspecified"</span> ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00431"></a>00431   }
<a name="l00432"></a>00432   tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00433"></a>00433 
<a name="l00434"></a>00434   tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00435"></a>00435   tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Completed"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00436"></a>00436   tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + i18n( <span class="stringliteral">"%1 %"</span> ).arg( todo-&gt;<a class="code" href="classKCal_1_1Todo.html#e269def11f2ac042c997b3d95f8521a1" title="Returns how many percent of the task are completed.">percentComplete</a>() ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00437"></a>00437   tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00438"></a>00438 
<a name="l00439"></a>00439   <span class="keywordflow">if</span> ( todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#81ad15662138be07f0d55be6b075b043" title="Forward to Recurrence::doesRecur().">doesRecur</a>() ) {
<a name="l00440"></a>00440     QDateTime dt =
<a name="l00441"></a>00441       todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#d06004593e064a37d08c96f9ae16735e" title="Return the recurrence rule associated with this incidence.">recurrence</a>()-&gt;<a class="code" href="classKCal_1_1Recurrence.html#158561ac748570b0bf058a6b69007df8" title="Returns the date and time of the next recurrence, after the specified date/time.">getNextDateTime</a>( QDateTime::currentDateTime() );
<a name="l00442"></a>00442     tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00443"></a>00443     tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"Next on"</span> ) + <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00444"></a>00444     <span class="keywordflow">if</span> ( !todo-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l00445"></a>00445       tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> +
<a name="l00446"></a>00446                 KGlobal::locale()-&gt;formatDateTime( dt, <span class="keyword">true</span> ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00447"></a>00447     } <span class="keywordflow">else</span> {
<a name="l00448"></a>00448       tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> +
<a name="l00449"></a>00449                 KGlobal::locale()-&gt;formatDate( dt.date(), true ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00450"></a>00450     }
<a name="l00451"></a>00451     tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00452"></a>00452   }
<a name="l00453"></a>00453 
<a name="l00454"></a>00454   <span class="keywordtype">int</span> attendeeCount = todo-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#df4df93778bfab1d165580946320b0de" title="Return list of attendees.">attendees</a>().count();
<a name="l00455"></a>00455   <span class="keywordflow">if</span> ( attendeeCount &gt; 0 ) {
<a name="l00456"></a>00456     tmpStr += <span class="stringliteral">"&lt;tr&gt;&lt;td colspan=\"2\"&gt;"</span>;
<a name="l00457"></a>00457     tmpStr += eventViewerFormatAttendees( todo );
<a name="l00458"></a>00458     tmpStr += <span class="stringliteral">"&lt;/td&gt;&lt;/tr&gt;"</span>;
<a name="l00459"></a>00459   }
<a name="l00460"></a>00460 
<a name="l00461"></a>00461   <span class="keywordtype">int</span> attachmentCount = todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#dfc4bb0127ecf371c0707fed9eb21e3e" title="Return list of all associated attachments.">attachments</a>().count();
<a name="l00462"></a>00462   <span class="keywordflow">if</span> ( attachmentCount &gt; 0 ) {
<a name="l00463"></a>00463     tmpStr += <span class="stringliteral">"&lt;tr&gt;"</span>;
<a name="l00464"></a>00464     tmpStr += <span class="stringliteral">"&lt;td align=\"right\"&gt;&lt;b&gt;"</span> + i18n( <span class="stringliteral">"1 attachment"</span>, <span class="stringliteral">"%n attachments"</span>, attachmentCount )+ <span class="stringliteral">"&lt;/b&gt;&lt;/td&gt;"</span>;
<a name="l00465"></a>00465     tmpStr += <span class="stringliteral">"&lt;td&gt;"</span> + eventViewerFormatAttachments( todo ) + <span class="stringliteral">"&lt;/td&gt;"</span>;
<a name="l00466"></a>00466     tmpStr += <span class="stringliteral">"&lt;/tr&gt;"</span>;
<a name="l00467"></a>00467   }
<a name="l00468"></a>00468 
<a name="l00469"></a>00469   tmpStr += <span class="stringliteral">"&lt;/table&gt;"</span>;
<a name="l00470"></a>00470   tmpStr += <span class="stringliteral">"&lt;em&gt;"</span> + i18n( <span class="stringliteral">"Creation date: %1."</span>).arg(
<a name="l00471"></a>00471     KGlobal::locale()-&gt;formatDateTime( todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#8df4ebe490fea07df54e9df82c40c579" title="Return time and date of creation.">created</a>(), true ) ) + <span class="stringliteral">"&lt;/em&gt;"</span>;
<a name="l00472"></a>00472   <span class="keywordflow">return</span> tmpStr;
<a name="l00473"></a>00473 }
<a name="l00474"></a>00474 
<a name="l00475"></a>00475 <span class="keyword">static</span> QString eventViewerFormatJournal( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a> *journal )
<a name="l00476"></a>00476 {
<a name="l00477"></a>00477   <span class="keywordflow">if</span> ( !journal ) <span class="keywordflow">return</span> QString::null;
<a name="l00478"></a>00478 
<a name="l00479"></a>00479   QString tmpStr;
<a name="l00480"></a>00480   <span class="keywordflow">if</span> ( !journal-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>().isEmpty() ) {
<a name="l00481"></a>00481     tmpStr += eventViewerAddTag( <span class="stringliteral">"u"</span>,
<a name="l00482"></a>00482                                  eventViewerAddTag( <span class="stringliteral">"b"</span>, journal-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>() ) );
<a name="l00483"></a>00483   }
<a name="l00484"></a>00484   tmpStr += eventViewerAddTag( <span class="stringliteral">"b"</span>, i18n(<span class="stringliteral">"Journal for %1"</span>).arg( journal-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>( <span class="keyword">false</span> ) ) );
<a name="l00485"></a>00485   <span class="keywordflow">if</span> ( !journal-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>().isEmpty() )
<a name="l00486"></a>00486     tmpStr += eventViewerAddTag( <span class="stringliteral">"p"</span>, journal-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>() );
<a name="l00487"></a>00487   <span class="keywordflow">return</span> tmpStr;
<a name="l00488"></a>00488 }
<a name="l00489"></a>00489 
<a name="l00490"></a>00490 <span class="keyword">static</span> QString eventViewerFormatFreeBusy( <a class="code" href="classKCal_1_1FreeBusy.html" title="This class provides information about free/busy time of a calendar user.">FreeBusy</a> *fb )
<a name="l00491"></a>00491 {
<a name="l00492"></a>00492   <span class="keywordflow">if</span> ( !fb ) <span class="keywordflow">return</span> QString::null;
<a name="l00493"></a>00493 
<a name="l00494"></a>00494   QString tmpStr =
<a name="l00495"></a>00495     eventViewerAddTag( <span class="stringliteral">"u"</span>,
<a name="l00496"></a>00496                        eventViewerAddTag( <span class="stringliteral">"b"</span>, i18n(<span class="stringliteral">"Free/Busy information for %1"</span>)
<a name="l00497"></a>00497                                           .arg( fb-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#eb4c2be5ce3f3961dc10204fbc5206a7">organizer</a>().<a class="code" href="classKCal_1_1Person.html#5928a154f4ff67ef7f67018dd0ec2fbf">fullName</a>() ) ) );
<a name="l00498"></a>00498   tmpStr += eventViewerAddTag( <span class="stringliteral">"i"</span>, i18n(<span class="stringliteral">"Busy times in date range %1 - %2:"</span>)
<a name="l00499"></a>00499       .arg( KGlobal::locale()-&gt;formatDate( fb-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#5419a946a4e5715a0c34ec2c7e04cd9b" title="returns an event&amp;#39;s starting date/time as a QDateTime.">dtStart</a>().date(), true ) )
<a name="l00500"></a>00500       .arg( KGlobal::locale()-&gt;formatDate( fb-&gt;<a class="code" href="classKCal_1_1FreeBusy.html#c20a78466c981ba719c43d7257ebf577">dtEnd</a>().date(), true ) ) );
<a name="l00501"></a>00501 
<a name="l00502"></a>00502   QValueList&lt;Period&gt; periods = fb-&gt;<a class="code" href="classKCal_1_1FreeBusy.html#e4e82fcf1b6b37dd6e2742dc0c0cb2a9">busyPeriods</a>();
<a name="l00503"></a>00503 
<a name="l00504"></a>00504   QString text = eventViewerAddTag( <span class="stringliteral">"em"</span>, eventViewerAddTag( <span class="stringliteral">"b"</span>, i18n(<span class="stringliteral">"Busy:"</span>) ) );
<a name="l00505"></a>00505   QValueList&lt;Period&gt;::iterator it;
<a name="l00506"></a>00506   <span class="keywordflow">for</span> ( it = periods.begin(); it != periods.end(); ++it ) {
<a name="l00507"></a>00507     <a class="code" href="classKCal_1_1Period.html" title="This class represents a period of time.">Period</a> per = *it;
<a name="l00508"></a>00508     <span class="keywordflow">if</span> ( per.<a class="code" href="classKCal_1_1Period.html#17932926f71e6457392d60c3f03a320d">hasDuration</a>() ) {
<a name="l00509"></a>00509       <span class="keywordtype">int</span> dur = per.<a class="code" href="classKCal_1_1Period.html#8847029b0fb5528a4e994462553ba668">duration</a>().<a class="code" href="classKCal_1_1Duration.html#34b69f5167fc798461a45971619227f6">asSeconds</a>();
<a name="l00510"></a>00510       QString cont;
<a name="l00511"></a>00511       <span class="keywordflow">if</span> ( dur &gt;= 3600 ) {
<a name="l00512"></a>00512         cont += i18n(<span class="stringliteral">"1 hour "</span>, <span class="stringliteral">"%n hours "</span>, dur / 3600 );
<a name="l00513"></a>00513         dur %= 3600;
<a name="l00514"></a>00514       }
<a name="l00515"></a>00515       <span class="keywordflow">if</span> ( dur &gt;= 60 ) {
<a name="l00516"></a>00516         cont += i18n(<span class="stringliteral">"1 minute "</span>, <span class="stringliteral">"%n minutes "</span>, dur / 60);
<a name="l00517"></a>00517         dur %= 60;
<a name="l00518"></a>00518       }
<a name="l00519"></a>00519       <span class="keywordflow">if</span> ( dur &gt; 0 ) {
<a name="l00520"></a>00520         cont += i18n(<span class="stringliteral">"1 second"</span>, <span class="stringliteral">"%n seconds"</span>, dur);
<a name="l00521"></a>00521       }
<a name="l00522"></a>00522       text += i18n(<span class="stringliteral">"startDate for duration"</span>, <span class="stringliteral">"%1 for %2"</span>)
<a name="l00523"></a>00523           .arg( KGlobal::locale()-&gt;formatDateTime( per.<a class="code" href="classKCal_1_1Period.html#90622344d68c2d05a7421f200ea8c80f">start</a>(), false ) )
<a name="l00524"></a>00524           .arg( cont );
<a name="l00525"></a>00525       text += <span class="stringliteral">"&lt;br&gt;"</span>;
<a name="l00526"></a>00526     } <span class="keywordflow">else</span> {
<a name="l00527"></a>00527       <span class="keywordflow">if</span> ( per.<a class="code" href="classKCal_1_1Period.html#90622344d68c2d05a7421f200ea8c80f">start</a>().date() == per.<a class="code" href="classKCal_1_1Period.html#ba3877554831353f5017b8294748c592">end</a>().date() ) {
<a name="l00528"></a>00528         text += i18n(<span class="stringliteral">"date, fromTime - toTime "</span>, <span class="stringliteral">"%1, %2 - %3"</span>)
<a name="l00529"></a>00529             .arg( KGlobal::locale()-&gt;formatDate( per.<a class="code" href="classKCal_1_1Period.html#90622344d68c2d05a7421f200ea8c80f">start</a>().date() ) )
<a name="l00530"></a>00530             .arg( KGlobal::locale()-&gt;formatTime( per.<a class="code" href="classKCal_1_1Period.html#90622344d68c2d05a7421f200ea8c80f">start</a>().time() ) )
<a name="l00531"></a>00531             .arg( KGlobal::locale()-&gt;formatTime( per.<a class="code" href="classKCal_1_1Period.html#ba3877554831353f5017b8294748c592">end</a>().time() ) );
<a name="l00532"></a>00532       } <span class="keywordflow">else</span> {
<a name="l00533"></a>00533         text += i18n(<span class="stringliteral">"fromDateTime - toDateTime"</span>, <span class="stringliteral">"%1 - %2"</span>)
<a name="l00534"></a>00534           .arg( KGlobal::locale()-&gt;formatDateTime( per.<a class="code" href="classKCal_1_1Period.html#90622344d68c2d05a7421f200ea8c80f">start</a>(), false ) )
<a name="l00535"></a>00535           .arg( KGlobal::locale()-&gt;formatDateTime( per.<a class="code" href="classKCal_1_1Period.html#ba3877554831353f5017b8294748c592">end</a>(), false ) );
<a name="l00536"></a>00536       }
<a name="l00537"></a>00537       text += <span class="stringliteral">"&lt;br&gt;"</span>;
<a name="l00538"></a>00538     }
<a name="l00539"></a>00539   }
<a name="l00540"></a>00540   tmpStr += eventViewerAddTag( <span class="stringliteral">"p"</span>, text );
<a name="l00541"></a>00541   <span class="keywordflow">return</span> tmpStr;
<a name="l00542"></a>00542 }
<a name="l00543"></a>00543 
<a name="l00544"></a>00544 <span class="keyword">class </span>IncidenceFormatter::EventViewerVisitor : <span class="keyword">public</span> <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a>::Visitor
<a name="l00545"></a>00545 {
<a name="l00546"></a>00546   <span class="keyword">public</span>:
<a name="l00547"></a>00547     EventViewerVisitor() { mResult = <span class="stringliteral">""</span>; }
<a name="l00548"></a>00548     <span class="keywordtype">bool</span> act( <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a> *incidence ) { <span class="keywordflow">return</span> incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#d99ad7b4b99e8de052ffaf8541590ff3" title="Accept IncidenceVisitor.">accept</a>( *<span class="keyword">this</span> ); }
<a name="l00549"></a>00549     QString result()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mResult; }
<a name="l00550"></a>00550   <span class="keyword">protected</span>:
<a name="l00551"></a>00551     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event )
<a name="l00552"></a>00552     {
<a name="l00553"></a>00553       mResult = eventViewerFormatEvent( event );
<a name="l00554"></a>00554       <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l00555"></a>00555     }
<a name="l00556"></a>00556     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a> *todo )
<a name="l00557"></a>00557     {
<a name="l00558"></a>00558       mResult = eventViewerFormatTodo( todo );
<a name="l00559"></a>00559       <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l00560"></a>00560     }
<a name="l00561"></a>00561     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a> *journal )
<a name="l00562"></a>00562     {
<a name="l00563"></a>00563       mResult = eventViewerFormatJournal( journal );
<a name="l00564"></a>00564       <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l00565"></a>00565     }
<a name="l00566"></a>00566     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1FreeBusy.html" title="This class provides information about free/busy time of a calendar user.">FreeBusy</a> *fb )
<a name="l00567"></a>00567     {
<a name="l00568"></a>00568       mResult = eventViewerFormatFreeBusy( fb );
<a name="l00569"></a>00569       <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l00570"></a>00570     }
<a name="l00571"></a>00571 
<a name="l00572"></a>00572   <span class="keyword">protected</span>:
<a name="l00573"></a>00573     QString mResult;
<a name="l00574"></a>00574 };
<a name="l00575"></a>00575 
<a name="l00576"></a>00576 QString IncidenceFormatter::extensiveDisplayString( <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a> *incidence )
<a name="l00577"></a>00577 {
<a name="l00578"></a>00578   <span class="keywordflow">if</span> ( !incidence ) <span class="keywordflow">return</span> QString::null;
<a name="l00579"></a>00579   EventViewerVisitor v;
<a name="l00580"></a>00580   <span class="keywordflow">if</span> ( v.act( incidence ) ) {
<a name="l00581"></a>00581     <span class="keywordflow">return</span> v.result();
<a name="l00582"></a>00582   } <span class="keywordflow">else</span>
<a name="l00583"></a>00583     <span class="keywordflow">return</span> QString::null;
<a name="l00584"></a>00584 }
<a name="l00585"></a>00585 
<a name="l00586"></a>00586 
<a name="l00587"></a>00587 
<a name="l00588"></a>00588 
<a name="l00589"></a>00589 <span class="comment">/*******************************************************************</span>
<a name="l00590"></a>00590 <span class="comment"> *  Helper functions for the body part formatter of kmail</span>
<a name="l00591"></a>00591 <span class="comment"> *******************************************************************/</span>
<a name="l00592"></a>00592 
<a name="l00593"></a>00593 <span class="keyword">static</span> QString string2HTML( <span class="keyword">const</span> QString&amp; str )
<a name="l00594"></a>00594 {
<a name="l00595"></a>00595   <span class="keywordflow">return</span> QStyleSheet::convertFromPlainText(str, QStyleSheetItem::WhiteSpaceNormal);
<a name="l00596"></a>00596 }
<a name="l00597"></a>00597 
<a name="l00598"></a>00598 <span class="keyword">static</span> QString eventStartTimeStr( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event )
<a name="l00599"></a>00599 {
<a name="l00600"></a>00600   QString tmp;
<a name="l00601"></a>00601   <span class="keywordflow">if</span> ( ! event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l00602"></a>00602     tmp =  i18n(<span class="stringliteral">"%1: Start Date, %2: Start Time"</span>, <span class="stringliteral">"%1 %2"</span>)
<a name="l00603"></a>00603              .arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>(), <span class="keyword">event</span>-&gt;dtStartTimeStr() );
<a name="l00604"></a>00604   } <span class="keywordflow">else</span> {
<a name="l00605"></a>00605     tmp = i18n(<span class="stringliteral">"%1: Start Date"</span>, <span class="stringliteral">"%1 (time unspecified)"</span>)
<a name="l00606"></a>00606             .arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>() );
<a name="l00607"></a>00607   }
<a name="l00608"></a>00608   <span class="keywordflow">return</span> tmp;
<a name="l00609"></a>00609 }
<a name="l00610"></a>00610 
<a name="l00611"></a>00611 <span class="keyword">static</span> QString eventEndTimeStr( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event )
<a name="l00612"></a>00612 {
<a name="l00613"></a>00613   QString tmp;
<a name="l00614"></a>00614   <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1Event.html#2f980150df1a3b3883f9605b25fa769f" title="Return whether the event has an end date/time.">hasEndDate</a>() ) {
<a name="l00615"></a>00615     <span class="keywordflow">if</span> ( ! event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l00616"></a>00616       tmp =  i18n(<span class="stringliteral">"%1: End Date, %2: End Time"</span>, <span class="stringliteral">"%1 %2"</span>)
<a name="l00617"></a>00617                .arg( event-&gt;<a class="code" href="classKCal_1_1Event.html#4138e4c8a9218b9bdf55e0e8f471341d" title="Return end date as string formatted according to the users locale settings.">dtEndDateStr</a>(), <span class="keyword">event</span>-&gt;dtEndTimeStr() );
<a name="l00618"></a>00618     } <span class="keywordflow">else</span> {
<a name="l00619"></a>00619       tmp = i18n(<span class="stringliteral">"%1: End Date"</span>, <span class="stringliteral">"%1 (time unspecified)"</span>)
<a name="l00620"></a>00620               .arg( event-&gt;<a class="code" href="classKCal_1_1Event.html#4138e4c8a9218b9bdf55e0e8f471341d" title="Return end date as string formatted according to the users locale settings.">dtEndDateStr</a>() );
<a name="l00621"></a>00621     }
<a name="l00622"></a>00622   } <span class="keywordflow">else</span> {
<a name="l00623"></a>00623     tmp = i18n( <span class="stringliteral">"Unspecified"</span> );
<a name="l00624"></a>00624   }
<a name="l00625"></a>00625   <span class="keywordflow">return</span> tmp;
<a name="l00626"></a>00626 }
<a name="l00627"></a>00627 
<a name="l00628"></a>00628 <span class="keyword">static</span> QString invitationRow( <span class="keyword">const</span> QString &amp;cell1, <span class="keyword">const</span> QString &amp;cell2 )
<a name="l00629"></a>00629 {
<a name="l00630"></a>00630   <span class="keywordflow">return</span> <span class="stringliteral">"&lt;tr&gt;&lt;td&gt;"</span> + cell1 + <span class="stringliteral">"&lt;/td&gt;&lt;td&gt;"</span> + cell2 + <span class="stringliteral">"&lt;/td&gt;&lt;/tr&gt;\n"</span>;
<a name="l00631"></a>00631 }
<a name="l00632"></a>00632 
<a name="l00633"></a>00633 <span class="keyword">static</span> QString invitationsDetailsIncidence( <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a> *incidence )
<a name="l00634"></a>00634 {
<a name="l00635"></a>00635   QString html;
<a name="l00636"></a>00636   QString descr = incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>();
<a name="l00637"></a>00637   <span class="keywordflow">if</span>( !descr.isEmpty() ) {
<a name="l00638"></a>00638     html += <span class="stringliteral">"&lt;br/&gt;&lt;u&gt;"</span> + i18n(<span class="stringliteral">"Description:"</span>)
<a name="l00639"></a>00639       + <span class="stringliteral">"&lt;/u&gt;&lt;table border=\"0\"&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;"</span>;
<a name="l00640"></a>00640     html += string2HTML(descr) + <span class="stringliteral">"&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"</span>;
<a name="l00641"></a>00641   }
<a name="l00642"></a>00642   QStringList comments = incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#416db24cfef787a1965ae90c7855776b" title="Return all comments associated with this incidence.">comments</a>();
<a name="l00643"></a>00643   <span class="keywordflow">if</span> ( !comments.isEmpty() ) {
<a name="l00644"></a>00644     html += <span class="stringliteral">"&lt;br&gt;&lt;u&gt;"</span> + i18n(<span class="stringliteral">"Comments:"</span>)
<a name="l00645"></a>00645           + <span class="stringliteral">"&lt;/u&gt;&lt;table border=\"0\"&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;ul&gt;"</span>;
<a name="l00646"></a>00646     <span class="keywordflow">for</span> ( uint i = 0; i &lt; comments.count(); ++i )
<a name="l00647"></a>00647       html += <span class="stringliteral">"&lt;li&gt;"</span> + string2HTML( comments[i] ) + <span class="stringliteral">"&lt;/li&gt;"</span>;
<a name="l00648"></a>00648     html += <span class="stringliteral">"&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"</span>;
<a name="l00649"></a>00649   }
<a name="l00650"></a>00650   <span class="keywordflow">return</span> html;
<a name="l00651"></a>00651 }
<a name="l00652"></a>00652 
<a name="l00653"></a>00653 <span class="keyword">static</span> QString invitationDetailsEvent( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a>* event )
<a name="l00654"></a>00654 {
<a name="l00655"></a>00655   <span class="comment">// Meeting details are formatted into an HTML table</span>
<a name="l00656"></a>00656   <span class="keywordflow">if</span> ( !event )
<a name="l00657"></a>00657     <span class="keywordflow">return</span> QString::null;
<a name="l00658"></a>00658 
<a name="l00659"></a>00659   QString html;
<a name="l00660"></a>00660   QString tmp;
<a name="l00661"></a>00661 
<a name="l00662"></a>00662   QString sSummary = i18n( <span class="stringliteral">"Summary unspecified"</span> );
<a name="l00663"></a>00663   <span class="keywordflow">if</span> ( ! event-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>().isEmpty() ) {
<a name="l00664"></a>00664     sSummary = string2HTML( event-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>() );
<a name="l00665"></a>00665   }
<a name="l00666"></a>00666 
<a name="l00667"></a>00667   QString sLocation = i18n( <span class="stringliteral">"Location unspecified"</span> );
<a name="l00668"></a>00668   <span class="keywordflow">if</span> ( ! event-&gt;<a class="code" href="classKCal_1_1Incidence.html#d147473a07f26ad738fbae9501eb1c3d" title="Return the event&amp;#39;s/todo&amp;#39;s location.">location</a>().isEmpty() ) {
<a name="l00669"></a>00669     sLocation = string2HTML( event-&gt;<a class="code" href="classKCal_1_1Incidence.html#d147473a07f26ad738fbae9501eb1c3d" title="Return the event&amp;#39;s/todo&amp;#39;s location.">location</a>() );
<a name="l00670"></a>00670   }
<a name="l00671"></a>00671 
<a name="l00672"></a>00672   QString dir = ( QApplication::reverseLayout() ? <span class="stringliteral">"rtl"</span> : <span class="stringliteral">"ltr"</span> );
<a name="l00673"></a>00673   html = QString(<span class="stringliteral">"&lt;div dir=\"%1\"&gt;\n"</span>).arg(dir);
<a name="l00674"></a>00674 
<a name="l00675"></a>00675   html += <span class="stringliteral">"&lt;table border=\"0\" cellpadding=\"1\" cellspacing=\"1\"&gt;\n"</span>;
<a name="l00676"></a>00676 
<a name="l00677"></a>00677   <span class="comment">// Meeting summary &amp; location rows</span>
<a name="l00678"></a>00678   html += invitationRow( i18n( <span class="stringliteral">"What:"</span> ), sSummary );
<a name="l00679"></a>00679   html += invitationRow( i18n( <span class="stringliteral">"Where:"</span> ), sLocation );
<a name="l00680"></a>00680 
<a name="l00681"></a>00681   <span class="comment">// Meeting Start Time Row</span>
<a name="l00682"></a>00682   html += invitationRow( i18n( <span class="stringliteral">"Start Time:"</span> ), eventStartTimeStr( event ) );
<a name="l00683"></a>00683 
<a name="l00684"></a>00684   <span class="comment">// Meeting End Time Row</span>
<a name="l00685"></a>00685   html += invitationRow( i18n( <span class="stringliteral">"End Time:"</span> ), eventEndTimeStr( event ) );
<a name="l00686"></a>00686 
<a name="l00687"></a>00687   <span class="comment">// Meeting Duration Row</span>
<a name="l00688"></a>00688   <span class="keywordflow">if</span> ( !event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() &amp;&amp; <span class="keyword">event</span>-&gt;hasEndDate() ) {
<a name="l00689"></a>00689     tmp = QString::null;
<a name="l00690"></a>00690     QTime sDuration(0,0,0), t;
<a name="l00691"></a>00691     <span class="keywordtype">int</span> secs = <span class="keyword">event</span>-&gt;dtStart().secsTo( event-&gt;<a class="code" href="classKCal_1_1Event.html#0bc3052d40d160c7d58a5483dfcff693" title="Return end date and time.">dtEnd</a>() );
<a name="l00692"></a>00692     t = sDuration.addSecs( secs );
<a name="l00693"></a>00693     <span class="keywordflow">if</span> ( t.hour() &gt; 0 ) {
<a name="l00694"></a>00694       tmp += i18n( <span class="stringliteral">"1 hour "</span>, <span class="stringliteral">"%n hours "</span>, t.hour() );
<a name="l00695"></a>00695     }
<a name="l00696"></a>00696     <span class="keywordflow">if</span> ( t.minute() &gt; 0 ) {
<a name="l00697"></a>00697       tmp += i18n( <span class="stringliteral">"1 minute "</span>, <span class="stringliteral">"%n minutes "</span>,  t.minute() );
<a name="l00698"></a>00698     }
<a name="l00699"></a>00699 
<a name="l00700"></a>00700     html += invitationRow( i18n( <span class="stringliteral">"Duration:"</span> ), tmp );
<a name="l00701"></a>00701   }
<a name="l00702"></a>00702 
<a name="l00703"></a>00703   html += <span class="stringliteral">"&lt;/table&gt;\n"</span>;
<a name="l00704"></a>00704   html += invitationsDetailsIncidence( event );
<a name="l00705"></a>00705   html += <span class="stringliteral">"&lt;/div&gt;\n"</span>;
<a name="l00706"></a>00706 
<a name="l00707"></a>00707   <span class="keywordflow">return</span> html;
<a name="l00708"></a>00708 }
<a name="l00709"></a>00709 
<a name="l00710"></a>00710 <span class="keyword">static</span> QString invitationDetailsTodo( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a> *todo )
<a name="l00711"></a>00711 {
<a name="l00712"></a>00712   <span class="comment">// Task details are formatted into an HTML table</span>
<a name="l00713"></a>00713   <span class="keywordflow">if</span> ( !todo )
<a name="l00714"></a>00714     <span class="keywordflow">return</span> QString::null;
<a name="l00715"></a>00715 
<a name="l00716"></a>00716   QString sSummary = i18n( <span class="stringliteral">"Summary unspecified"</span> );
<a name="l00717"></a>00717   QString sDescr = i18n( <span class="stringliteral">"Description unspecified"</span> );
<a name="l00718"></a>00718   <span class="keywordflow">if</span> ( ! todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>().isEmpty() ) {
<a name="l00719"></a>00719     sSummary = todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>();
<a name="l00720"></a>00720   }
<a name="l00721"></a>00721   <span class="keywordflow">if</span> ( ! todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>().isEmpty() ) {
<a name="l00722"></a>00722     sDescr = todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>();
<a name="l00723"></a>00723   }
<a name="l00724"></a>00724   QString html( <span class="stringliteral">"&lt;table border=\"0\" cellpadding=\"1\" cellspacing=\"1\"&gt;\n"</span> );
<a name="l00725"></a>00725   html += invitationRow( i18n( <span class="stringliteral">"Summary:"</span> ), sSummary );
<a name="l00726"></a>00726   html += invitationRow( i18n( <span class="stringliteral">"Description:"</span> ), sDescr );
<a name="l00727"></a>00727   html += <span class="stringliteral">"&lt;/table&gt;\n"</span>;
<a name="l00728"></a>00728   html += invitationsDetailsIncidence( todo );
<a name="l00729"></a>00729 
<a name="l00730"></a>00730   <span class="keywordflow">return</span> html;
<a name="l00731"></a>00731 }
<a name="l00732"></a>00732 
<a name="l00733"></a>00733 <span class="keyword">static</span> QString invitationDetailsJournal( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a> *journal )
<a name="l00734"></a>00734 {
<a name="l00735"></a>00735   <span class="keywordflow">if</span> ( !journal )
<a name="l00736"></a>00736     <span class="keywordflow">return</span> QString::null;
<a name="l00737"></a>00737 
<a name="l00738"></a>00738   QString sSummary = i18n( <span class="stringliteral">"Summary unspecified"</span> );
<a name="l00739"></a>00739   QString sDescr = i18n( <span class="stringliteral">"Description unspecified"</span> );
<a name="l00740"></a>00740   <span class="keywordflow">if</span> ( ! journal-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>().isEmpty() ) {
<a name="l00741"></a>00741     sSummary = journal-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>();
<a name="l00742"></a>00742   }
<a name="l00743"></a>00743   <span class="keywordflow">if</span> ( ! journal-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>().isEmpty() ) {
<a name="l00744"></a>00744     sDescr = journal-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>();
<a name="l00745"></a>00745   }
<a name="l00746"></a>00746   QString html( <span class="stringliteral">"&lt;table border=\"0\" cellpadding=\"1\" cellspacing=\"1\"&gt;\n"</span> );
<a name="l00747"></a>00747   html += invitationRow( i18n( <span class="stringliteral">"Summary:"</span> ), sSummary );
<a name="l00748"></a>00748   html += invitationRow( i18n( <span class="stringliteral">"Date:"</span> ), journal-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>( <span class="keyword">false</span> ) );
<a name="l00749"></a>00749   html += invitationRow( i18n( <span class="stringliteral">"Description:"</span> ), sDescr );
<a name="l00750"></a>00750   html += <span class="stringliteral">"&lt;/table&gt;\n"</span>;
<a name="l00751"></a>00751   html += invitationsDetailsIncidence( journal );
<a name="l00752"></a>00752 
<a name="l00753"></a>00753   <span class="keywordflow">return</span> html;
<a name="l00754"></a>00754 }
<a name="l00755"></a>00755 
<a name="l00756"></a>00756 <span class="keyword">static</span> QString invitationDetailsFreeBusy( <a class="code" href="classKCal_1_1FreeBusy.html" title="This class provides information about free/busy time of a calendar user.">FreeBusy</a> *fb )
<a name="l00757"></a>00757 {
<a name="l00758"></a>00758   <span class="keywordflow">if</span> ( !fb )
<a name="l00759"></a>00759     <span class="keywordflow">return</span> QString::null;
<a name="l00760"></a>00760   QString html( <span class="stringliteral">"&lt;table border=\"0\" cellpadding=\"1\" cellspacing=\"1\"&gt;\n"</span> );
<a name="l00761"></a>00761 
<a name="l00762"></a>00762   html += invitationRow( i18n(<span class="stringliteral">"Person:"</span>), fb-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#eb4c2be5ce3f3961dc10204fbc5206a7">organizer</a>().<a class="code" href="classKCal_1_1Person.html#5928a154f4ff67ef7f67018dd0ec2fbf">fullName</a>() );
<a name="l00763"></a>00763   html += invitationRow( i18n(<span class="stringliteral">"Start date:"</span>), fb-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>() );
<a name="l00764"></a>00764   html += invitationRow( i18n(<span class="stringliteral">"End date:"</span>),
<a name="l00765"></a>00765       KGlobal::locale()-&gt;formatDate( fb-&gt;<a class="code" href="classKCal_1_1FreeBusy.html#c20a78466c981ba719c43d7257ebf577">dtEnd</a>().date(), true ) );
<a name="l00766"></a>00766   html += <span class="stringliteral">"&lt;tr&gt;&lt;td colspan=2&gt;&lt;hr&gt;&lt;/td&gt;&lt;/tr&gt;\n"</span>;
<a name="l00767"></a>00767   html += <span class="stringliteral">"&lt;tr&gt;&lt;td colspan=2&gt;Busy periods given in this free/busy object:&lt;/td&gt;&lt;/tr&gt;\n"</span>;
<a name="l00768"></a>00768 
<a name="l00769"></a>00769   QValueList&lt;Period&gt; periods = fb-&gt;<a class="code" href="classKCal_1_1FreeBusy.html#e4e82fcf1b6b37dd6e2742dc0c0cb2a9">busyPeriods</a>();
<a name="l00770"></a>00770 
<a name="l00771"></a>00771   QValueList&lt;Period&gt;::iterator it;
<a name="l00772"></a>00772   <span class="keywordflow">for</span> ( it = periods.begin(); it != periods.end(); ++it ) {
<a name="l00773"></a>00773     <a class="code" href="classKCal_1_1Period.html" title="This class represents a period of time.">Period</a> per = *it;
<a name="l00774"></a>00774     <span class="keywordflow">if</span> ( per.<a class="code" href="classKCal_1_1Period.html#17932926f71e6457392d60c3f03a320d">hasDuration</a>() ) {
<a name="l00775"></a>00775       <span class="keywordtype">int</span> dur = per.<a class="code" href="classKCal_1_1Period.html#8847029b0fb5528a4e994462553ba668">duration</a>().<a class="code" href="classKCal_1_1Duration.html#34b69f5167fc798461a45971619227f6">asSeconds</a>();
<a name="l00776"></a>00776       QString cont;
<a name="l00777"></a>00777       <span class="keywordflow">if</span> ( dur &gt;= 3600 ) {
<a name="l00778"></a>00778         cont += i18n(<span class="stringliteral">"1 hour "</span>, <span class="stringliteral">"%n hours "</span>, dur / 3600);
<a name="l00779"></a>00779         dur %= 3600;
<a name="l00780"></a>00780       }
<a name="l00781"></a>00781       <span class="keywordflow">if</span> ( dur &gt;= 60 ) {
<a name="l00782"></a>00782         cont += i18n(<span class="stringliteral">"1 minute"</span>, <span class="stringliteral">"%n minutes "</span>, dur / 60);
<a name="l00783"></a>00783         dur %= 60;
<a name="l00784"></a>00784       }
<a name="l00785"></a>00785       <span class="keywordflow">if</span> ( dur &gt; 0 ) {
<a name="l00786"></a>00786         cont += i18n(<span class="stringliteral">"1 second"</span>, <span class="stringliteral">"%n seconds"</span>, dur);
<a name="l00787"></a>00787       }
<a name="l00788"></a>00788       html += invitationRow( QString::null, i18n(<span class="stringliteral">"startDate for duration"</span>, <span class="stringliteral">"%1 for %2"</span>)
<a name="l00789"></a>00789           .arg( KGlobal::locale()-&gt;formatDateTime( per.<a class="code" href="classKCal_1_1Period.html#90622344d68c2d05a7421f200ea8c80f">start</a>(), false ) )
<a name="l00790"></a>00790           .arg(cont) );
<a name="l00791"></a>00791     } <span class="keywordflow">else</span> {
<a name="l00792"></a>00792       QString cont;
<a name="l00793"></a>00793       <span class="keywordflow">if</span> ( per.<a class="code" href="classKCal_1_1Period.html#90622344d68c2d05a7421f200ea8c80f">start</a>().date() == per.<a class="code" href="classKCal_1_1Period.html#ba3877554831353f5017b8294748c592">end</a>().date() ) {
<a name="l00794"></a>00794         cont = i18n(<span class="stringliteral">"date, fromTime - toTime "</span>, <span class="stringliteral">"%1, %2 - %3"</span>)
<a name="l00795"></a>00795             .arg( KGlobal::locale()-&gt;formatDate( per.<a class="code" href="classKCal_1_1Period.html#90622344d68c2d05a7421f200ea8c80f">start</a>().date() ) )
<a name="l00796"></a>00796             .arg( KGlobal::locale()-&gt;formatTime( per.<a class="code" href="classKCal_1_1Period.html#90622344d68c2d05a7421f200ea8c80f">start</a>().time() ) )
<a name="l00797"></a>00797             .arg( KGlobal::locale()-&gt;formatTime( per.<a class="code" href="classKCal_1_1Period.html#ba3877554831353f5017b8294748c592">end</a>().time() ) );
<a name="l00798"></a>00798       } <span class="keywordflow">else</span> {
<a name="l00799"></a>00799         cont = i18n(<span class="stringliteral">"fromDateTime - toDateTime"</span>, <span class="stringliteral">"%1 - %2"</span>)
<a name="l00800"></a>00800           .arg( KGlobal::locale()-&gt;formatDateTime( per.<a class="code" href="classKCal_1_1Period.html#90622344d68c2d05a7421f200ea8c80f">start</a>(), false ) )
<a name="l00801"></a>00801           .arg( KGlobal::locale()-&gt;formatDateTime( per.<a class="code" href="classKCal_1_1Period.html#ba3877554831353f5017b8294748c592">end</a>(), false ) );
<a name="l00802"></a>00802       }
<a name="l00803"></a>00803 
<a name="l00804"></a>00804       html += invitationRow( QString::null, cont );
<a name="l00805"></a>00805     }
<a name="l00806"></a>00806   }
<a name="l00807"></a>00807 
<a name="l00808"></a>00808   html += <span class="stringliteral">"&lt;/table&gt;\n"</span>;
<a name="l00809"></a>00809   <span class="keywordflow">return</span> html;
<a name="l00810"></a>00810 }
<a name="l00811"></a>00811 
<a name="l00812"></a>00812 <span class="keyword">static</span> QString invitationHeaderEvent( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event, <a class="code" href="classKCal_1_1ScheduleMessage.html" title="This class provides an encapsulation of a scheduling message.">ScheduleMessage</a> *msg )
<a name="l00813"></a>00813 {
<a name="l00814"></a>00814   <span class="keywordflow">if</span> ( !msg || !event )
<a name="l00815"></a>00815     <span class="keywordflow">return</span> QString::null;
<a name="l00816"></a>00816   <span class="keywordflow">switch</span> ( msg-&gt;<a class="code" href="classKCal_1_1ScheduleMessage.html#757cf1ca9629bfba4447969012446e4d" title="Return iTIP method associated with this message.">method</a>() ) {
<a name="l00817"></a>00817     <span class="keywordflow">case</span> Scheduler::Publish:
<a name="l00818"></a>00818         <span class="keywordflow">return</span> i18n(<span class="stringliteral">"This event has been published"</span>);
<a name="l00819"></a>00819     <span class="keywordflow">case</span> Scheduler::Request:
<a name="l00820"></a>00820         <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1Incidence.html#061b1b33e5105cee5a2a6db2abc04b92" title="Return the number of revisions this event has seen.">revision</a>() &gt; 0 )
<a name="l00821"></a>00821             <span class="keywordflow">return</span> i18n( <span class="stringliteral">"This meeting has been updated"</span> );
<a name="l00822"></a>00822         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"You have been invited to this meeting"</span> );
<a name="l00823"></a>00823     <span class="keywordflow">case</span> Scheduler::Refresh:
<a name="l00824"></a>00824         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"This invitation was refreshed"</span> );
<a name="l00825"></a>00825     <span class="keywordflow">case</span> Scheduler::Cancel:
<a name="l00826"></a>00826         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"This meeting has been canceled"</span> );
<a name="l00827"></a>00827     <span class="keywordflow">case</span> Scheduler::Add:
<a name="l00828"></a>00828         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Addition to the meeting invitation"</span> );
<a name="l00829"></a>00829     <span class="keywordflow">case</span> Scheduler::Reply: {
<a name="l00830"></a>00830         Attendee::List attendees = <span class="keyword">event</span>-&gt;attendees();
<a name="l00831"></a>00831         <span class="keywordflow">if</span>( attendees.count() == 0 ) {
<a name="l00832"></a>00832           kdDebug(5850) &lt;&lt; <span class="stringliteral">"No attendees in the iCal reply!\n"</span>;
<a name="l00833"></a>00833           <span class="keywordflow">return</span> QString::null;
<a name="l00834"></a>00834         }
<a name="l00835"></a>00835         <span class="keywordflow">if</span>( attendees.count() != 1 )
<a name="l00836"></a>00836           kdDebug(5850) &lt;&lt; <span class="stringliteral">"Warning: attendeecount in the reply should be 1 "</span>
<a name="l00837"></a>00837                         &lt;&lt; <span class="stringliteral">"but is "</span> &lt;&lt; attendees.count() &lt;&lt; endl;
<a name="l00838"></a>00838         <a class="code" href="classKCal_1_1Attendee.html" title="This class represents information related to an attendee of an event.">Attendee</a>* attendee = *attendees.begin();
<a name="l00839"></a>00839         QString attendeeName = attendee-&gt;<a class="code" href="classKCal_1_1Person.html#728effd37c750fe1196c063ca7c7e2be">name</a>();
<a name="l00840"></a>00840         <span class="keywordflow">if</span> ( attendeeName.isEmpty() )
<a name="l00841"></a>00841           attendeeName = attendee-&gt;<a class="code" href="classKCal_1_1Person.html#b998a684c9d50625dead81ec3f18698c">email</a>();
<a name="l00842"></a>00842         <span class="keywordflow">if</span> ( attendeeName.isEmpty() )
<a name="l00843"></a>00843           attendeeName = i18n( <span class="stringliteral">"Sender"</span> );
<a name="l00844"></a>00844 
<a name="l00845"></a>00845         QString delegatorName, dummy;
<a name="l00846"></a>00846         KPIM::getNameAndMail( attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#6e353bbfe35df6df4c577c480ff639c9" title="Returns the delegator.">delegator</a>(), delegatorName, dummy );
<a name="l00847"></a>00847         <span class="keywordflow">if</span> ( delegatorName.isEmpty() )
<a name="l00848"></a>00848           delegatorName = attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#6e353bbfe35df6df4c577c480ff639c9" title="Returns the delegator.">delegator</a>();
<a name="l00849"></a>00849 
<a name="l00850"></a>00850         <span class="keywordflow">switch</span>( attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#72768a7d915adf124527e51e200286ee" title="Return status.">status</a>() ) {
<a name="l00851"></a>00851           <span class="keywordflow">case</span> Attendee::NeedsAction:
<a name="l00852"></a>00852               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"%1 indicates this invitation still needs some action"</span> ).arg( attendeeName );
<a name="l00853"></a>00853           <span class="keywordflow">case</span> Attendee::Accepted:
<a name="l00854"></a>00854               <span class="keywordflow">if</span> ( delegatorName.isEmpty() )
<a name="l00855"></a>00855                   <span class="keywordflow">return</span> i18n( <span class="stringliteral">"%1 accepts this meeting invitation"</span> ).arg( attendeeName );
<a name="l00856"></a>00856               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"%1 accepts this meeting invitation on behalf of %2"</span> )
<a name="l00857"></a>00857                   .arg( attendeeName ).arg( delegatorName );
<a name="l00858"></a>00858           <span class="keywordflow">case</span> Attendee::Tentative:
<a name="l00859"></a>00859               <span class="keywordflow">if</span> ( delegatorName.isEmpty() )
<a name="l00860"></a>00860                   <span class="keywordflow">return</span> i18n( <span class="stringliteral">"%1 tentatively accepts this meeting invitation"</span> ).arg( attendeeName );
<a name="l00861"></a>00861               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"%1 tentatively accepts this meeting invitation on behalf of %2"</span> )
<a name="l00862"></a>00862                   .arg( attendeeName ).arg( delegatorName );
<a name="l00863"></a>00863           <span class="keywordflow">case</span> Attendee::Declined:
<a name="l00864"></a>00864               <span class="keywordflow">if</span> ( delegatorName.isEmpty() )
<a name="l00865"></a>00865                   <span class="keywordflow">return</span> i18n( <span class="stringliteral">"%1 declines this meeting invitation"</span> ).arg( attendeeName );
<a name="l00866"></a>00866               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"%1 declines this meeting invitation on behalf of %2"</span> )
<a name="l00867"></a>00867                   .arg( attendeeName ).arg( delegatorName );
<a name="l00868"></a>00868           <span class="keywordflow">case</span> Attendee::Delegated: {
<a name="l00869"></a>00869               QString delegate, dummy;
<a name="l00870"></a>00870               KPIM::getNameAndMail( attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#ef41d5c9a34d29ef7260158a891c5bc1" title="Returns the delegate.">delegate</a>(), delegate, dummy );
<a name="l00871"></a>00871               <span class="keywordflow">if</span> ( delegate.isEmpty() )
<a name="l00872"></a>00872                   delegate = attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#ef41d5c9a34d29ef7260158a891c5bc1" title="Returns the delegate.">delegate</a>();
<a name="l00873"></a>00873               <span class="keywordflow">if</span> ( !delegate.isEmpty() )
<a name="l00874"></a>00874                 <span class="keywordflow">return</span> i18n( <span class="stringliteral">"%1 has delegated this meeting invitation to %2"</span> )
<a name="l00875"></a>00875                     .arg( attendeeName ) .arg( delegate );
<a name="l00876"></a>00876               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"%1 has delegated this meeting invitation"</span> ).arg( attendeeName );
<a name="l00877"></a>00877           }
<a name="l00878"></a>00878           <span class="keywordflow">case</span> Attendee::Completed:
<a name="l00879"></a>00879               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"This meeting invitation is now completed"</span> );
<a name="l00880"></a>00880           <span class="keywordflow">case</span> Attendee::InProcess:
<a name="l00881"></a>00881               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"%1 is still processing the invitation"</span> ).arg( attendeeName );
<a name="l00882"></a>00882           <span class="keywordflow">default</span>:
<a name="l00883"></a>00883               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Unknown response to this meeting invitation"</span> );
<a name="l00884"></a>00884         }
<a name="l00885"></a>00885         <span class="keywordflow">break</span>; }
<a name="l00886"></a>00886     <span class="keywordflow">case</span> Scheduler::Counter:
<a name="l00887"></a>00887         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender makes this counter proposal"</span> );
<a name="l00888"></a>00888     <span class="keywordflow">case</span> Scheduler::Declinecounter:
<a name="l00889"></a>00889         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender declines the counter proposal"</span> );
<a name="l00890"></a>00890     <span class="keywordflow">case</span> Scheduler::NoMethod:
<a name="l00891"></a>00891         <span class="keywordflow">return</span> i18n(<span class="stringliteral">"Error: iMIP message with unknown method: '%1'"</span>)
<a name="l00892"></a>00892             .arg( msg-&gt;<a class="code" href="classKCal_1_1ScheduleMessage.html#757cf1ca9629bfba4447969012446e4d" title="Return iTIP method associated with this message.">method</a>() );
<a name="l00893"></a>00893   }
<a name="l00894"></a>00894   <span class="keywordflow">return</span> QString::null;
<a name="l00895"></a>00895 }
<a name="l00896"></a>00896 
<a name="l00897"></a>00897 <span class="keyword">static</span> QString invitationHeaderTodo( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a> *todo, <a class="code" href="classKCal_1_1ScheduleMessage.html" title="This class provides an encapsulation of a scheduling message.">ScheduleMessage</a> *msg )
<a name="l00898"></a>00898 {
<a name="l00899"></a>00899   <span class="keywordflow">if</span> ( !msg || !todo )
<a name="l00900"></a>00900     <span class="keywordflow">return</span> QString::null;
<a name="l00901"></a>00901   <span class="keywordflow">switch</span> ( msg-&gt;<a class="code" href="classKCal_1_1ScheduleMessage.html#757cf1ca9629bfba4447969012446e4d" title="Return iTIP method associated with this message.">method</a>() ) {
<a name="l00902"></a>00902     <span class="keywordflow">case</span> Scheduler::Publish:
<a name="l00903"></a>00903         <span class="keywordflow">return</span> i18n(<span class="stringliteral">"This task has been published"</span>);
<a name="l00904"></a>00904     <span class="keywordflow">case</span> Scheduler::Request:
<a name="l00905"></a>00905         <span class="keywordflow">if</span> ( todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#061b1b33e5105cee5a2a6db2abc04b92" title="Return the number of revisions this event has seen.">revision</a>() &gt; 0 )
<a name="l00906"></a>00906             <span class="keywordflow">return</span> i18n( <span class="stringliteral">"This task has been updated"</span> );
<a name="l00907"></a>00907         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"You have been assigned this task"</span> );
<a name="l00908"></a>00908     <span class="keywordflow">case</span> Scheduler::Refresh:
<a name="l00909"></a>00909         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"This task was refreshed"</span> );
<a name="l00910"></a>00910     <span class="keywordflow">case</span> Scheduler::Cancel:
<a name="l00911"></a>00911         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"This task was canceled"</span> );
<a name="l00912"></a>00912     <span class="keywordflow">case</span> Scheduler::Add:
<a name="l00913"></a>00913         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Addition to the task"</span> );
<a name="l00914"></a>00914     <span class="keywordflow">case</span> Scheduler::Reply: {
<a name="l00915"></a>00915         Attendee::List attendees = todo-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#df4df93778bfab1d165580946320b0de" title="Return list of attendees.">attendees</a>();
<a name="l00916"></a>00916         <span class="keywordflow">if</span>( attendees.count() == 0 ) {
<a name="l00917"></a>00917           kdDebug(5850) &lt;&lt; <span class="stringliteral">"No attendees in the iCal reply!\n"</span>;
<a name="l00918"></a>00918           <span class="keywordflow">return</span> QString::null;
<a name="l00919"></a>00919         }
<a name="l00920"></a>00920         <span class="keywordflow">if</span>( attendees.count() != 1 )
<a name="l00921"></a>00921           kdDebug(5850) &lt;&lt; <span class="stringliteral">"Warning: attendeecount in the reply should be 1 "</span>
<a name="l00922"></a>00922                         &lt;&lt; <span class="stringliteral">"but is "</span> &lt;&lt; attendees.count() &lt;&lt; endl;
<a name="l00923"></a>00923         <a class="code" href="classKCal_1_1Attendee.html" title="This class represents information related to an attendee of an event.">Attendee</a>* attendee = *attendees.begin();
<a name="l00924"></a>00924 
<a name="l00925"></a>00925         <span class="keywordflow">switch</span>( attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#72768a7d915adf124527e51e200286ee" title="Return status.">status</a>() ) {
<a name="l00926"></a>00926           <span class="keywordflow">case</span> Attendee::NeedsAction:
<a name="l00927"></a>00927               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender indicates this task assignment still needs some action"</span> );
<a name="l00928"></a>00928           <span class="keywordflow">case</span> Attendee::Accepted:
<a name="l00929"></a>00929               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender accepts this task"</span> );
<a name="l00930"></a>00930           <span class="keywordflow">case</span> Attendee::Tentative:
<a name="l00931"></a>00931               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender tentatively accepts this task"</span> );
<a name="l00932"></a>00932           <span class="keywordflow">case</span> Attendee::Declined:
<a name="l00933"></a>00933               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender declines this task"</span> );
<a name="l00934"></a>00934           <span class="keywordflow">case</span> Attendee::Delegated: {
<a name="l00935"></a>00935               QString delegate, dummy;
<a name="l00936"></a>00936               KPIM::getNameAndMail( attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#ef41d5c9a34d29ef7260158a891c5bc1" title="Returns the delegate.">delegate</a>(), delegate, dummy );
<a name="l00937"></a>00937               <span class="keywordflow">if</span> ( delegate.isEmpty() )
<a name="l00938"></a>00938                 delegate = attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#ef41d5c9a34d29ef7260158a891c5bc1" title="Returns the delegate.">delegate</a>();
<a name="l00939"></a>00939               <span class="keywordflow">if</span> ( !delegate.isEmpty() )
<a name="l00940"></a>00940                 <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender has delegated this request for the task to %1"</span> ).arg( delegate );
<a name="l00941"></a>00941               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender has delegated this request for the task "</span> );
<a name="l00942"></a>00942           }
<a name="l00943"></a>00943           <span class="keywordflow">case</span> Attendee::Completed:
<a name="l00944"></a>00944               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"The request for this task is now completed"</span> );
<a name="l00945"></a>00945           <span class="keywordflow">case</span> Attendee::InProcess:
<a name="l00946"></a>00946               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender is still processing the invitation"</span> );
<a name="l00947"></a>00947           <span class="keywordflow">default</span>:
<a name="l00948"></a>00948               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Unknown response to this task"</span> );
<a name="l00949"></a>00949           }
<a name="l00950"></a>00950         <span class="keywordflow">break</span>; }
<a name="l00951"></a>00951     <span class="keywordflow">case</span> Scheduler::Counter:
<a name="l00952"></a>00952         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender makes this counter proposal"</span> );
<a name="l00953"></a>00953     <span class="keywordflow">case</span> Scheduler::Declinecounter:
<a name="l00954"></a>00954         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender declines the counter proposal"</span> );
<a name="l00955"></a>00955     <span class="keywordflow">case</span> Scheduler::NoMethod:
<a name="l00956"></a>00956         <span class="keywordflow">return</span> i18n(<span class="stringliteral">"Error: iMIP message with unknown method: '%1'"</span>)
<a name="l00957"></a>00957             .arg( msg-&gt;<a class="code" href="classKCal_1_1ScheduleMessage.html#757cf1ca9629bfba4447969012446e4d" title="Return iTIP method associated with this message.">method</a>() );
<a name="l00958"></a>00958   }
<a name="l00959"></a>00959   <span class="keywordflow">return</span> QString::null;
<a name="l00960"></a>00960 }
<a name="l00961"></a>00961 
<a name="l00962"></a>00962 <span class="keyword">static</span> QString invitationHeaderJournal( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a> *journal, <a class="code" href="classKCal_1_1ScheduleMessage.html" title="This class provides an encapsulation of a scheduling message.">ScheduleMessage</a> *msg )
<a name="l00963"></a>00963 {
<a name="l00964"></a>00964   <span class="comment">// TODO: Several of the methods are not allowed for journals, so remove them.</span>
<a name="l00965"></a>00965   <span class="keywordflow">if</span> ( !msg || !journal )
<a name="l00966"></a>00966     <span class="keywordflow">return</span> QString::null;
<a name="l00967"></a>00967   <span class="keywordflow">switch</span> ( msg-&gt;<a class="code" href="classKCal_1_1ScheduleMessage.html#757cf1ca9629bfba4447969012446e4d" title="Return iTIP method associated with this message.">method</a>() ) {
<a name="l00968"></a>00968     <span class="keywordflow">case</span> Scheduler::Publish:
<a name="l00969"></a>00969         <span class="keywordflow">return</span> i18n(<span class="stringliteral">"This journal has been published"</span>);
<a name="l00970"></a>00970     <span class="keywordflow">case</span> Scheduler::Request:
<a name="l00971"></a>00971         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"You have been assigned this journal"</span> );
<a name="l00972"></a>00972     <span class="keywordflow">case</span> Scheduler::Refresh:
<a name="l00973"></a>00973         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"This journal was refreshed"</span> );
<a name="l00974"></a>00974     <span class="keywordflow">case</span> Scheduler::Cancel:
<a name="l00975"></a>00975         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"This journal was canceled"</span> );
<a name="l00976"></a>00976     <span class="keywordflow">case</span> Scheduler::Add:
<a name="l00977"></a>00977         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Addition to the journal"</span> );
<a name="l00978"></a>00978     <span class="keywordflow">case</span> Scheduler::Reply: {
<a name="l00979"></a>00979         Attendee::List attendees = journal-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#df4df93778bfab1d165580946320b0de" title="Return list of attendees.">attendees</a>();
<a name="l00980"></a>00980         <span class="keywordflow">if</span>( attendees.count() == 0 ) {
<a name="l00981"></a>00981           kdDebug(5850) &lt;&lt; <span class="stringliteral">"No attendees in the iCal reply!\n"</span>;
<a name="l00982"></a>00982           <span class="keywordflow">return</span> QString::null;
<a name="l00983"></a>00983         }
<a name="l00984"></a>00984         <span class="keywordflow">if</span>( attendees.count() != 1 )
<a name="l00985"></a>00985           kdDebug(5850) &lt;&lt; <span class="stringliteral">"Warning: attendeecount in the reply should be 1 "</span>
<a name="l00986"></a>00986                         &lt;&lt; <span class="stringliteral">"but is "</span> &lt;&lt; attendees.count() &lt;&lt; endl;
<a name="l00987"></a>00987         <a class="code" href="classKCal_1_1Attendee.html" title="This class represents information related to an attendee of an event.">Attendee</a>* attendee = *attendees.begin();
<a name="l00988"></a>00988 
<a name="l00989"></a>00989         <span class="keywordflow">switch</span>( attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#72768a7d915adf124527e51e200286ee" title="Return status.">status</a>() ) {
<a name="l00990"></a>00990           <span class="keywordflow">case</span> Attendee::NeedsAction:
<a name="l00991"></a>00991               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender indicates this journal assignment still needs some action"</span> );
<a name="l00992"></a>00992           <span class="keywordflow">case</span> Attendee::Accepted:
<a name="l00993"></a>00993               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender accepts this journal"</span> );
<a name="l00994"></a>00994           <span class="keywordflow">case</span> Attendee::Tentative:
<a name="l00995"></a>00995               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender tentatively accepts this journal"</span> );
<a name="l00996"></a>00996           <span class="keywordflow">case</span> Attendee::Declined:
<a name="l00997"></a>00997               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender declines this journal"</span> );
<a name="l00998"></a>00998           <span class="keywordflow">case</span> Attendee::Delegated:
<a name="l00999"></a>00999               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender has delegated this request for the journal"</span> );
<a name="l01000"></a>01000           <span class="keywordflow">case</span> Attendee::Completed:
<a name="l01001"></a>01001               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"The request for this journal is now completed"</span> );
<a name="l01002"></a>01002           <span class="keywordflow">case</span> Attendee::InProcess:
<a name="l01003"></a>01003               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender is still processing the invitation"</span> );
<a name="l01004"></a>01004           <span class="keywordflow">default</span>:
<a name="l01005"></a>01005               <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Unknown response to this journal"</span> );
<a name="l01006"></a>01006           }
<a name="l01007"></a>01007         <span class="keywordflow">break</span>; }
<a name="l01008"></a>01008     <span class="keywordflow">case</span> Scheduler::Counter:
<a name="l01009"></a>01009         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender makes this counter proposal"</span> );
<a name="l01010"></a>01010     <span class="keywordflow">case</span> Scheduler::Declinecounter:
<a name="l01011"></a>01011         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Sender declines the counter proposal"</span> );
<a name="l01012"></a>01012     <span class="keywordflow">case</span> Scheduler::NoMethod:
<a name="l01013"></a>01013         <span class="keywordflow">return</span> i18n(<span class="stringliteral">"Error: iMIP message with unknown method: '%1'"</span>)
<a name="l01014"></a>01014             .arg( msg-&gt;<a class="code" href="classKCal_1_1ScheduleMessage.html#757cf1ca9629bfba4447969012446e4d" title="Return iTIP method associated with this message.">method</a>() );
<a name="l01015"></a>01015   }
<a name="l01016"></a>01016   <span class="keywordflow">return</span> QString::null;
<a name="l01017"></a>01017 }
<a name="l01018"></a>01018 
<a name="l01019"></a>01019 <span class="keyword">static</span> QString invitationHeaderFreeBusy( <a class="code" href="classKCal_1_1FreeBusy.html" title="This class provides information about free/busy time of a calendar user.">FreeBusy</a> *fb, <a class="code" href="classKCal_1_1ScheduleMessage.html" title="This class provides an encapsulation of a scheduling message.">ScheduleMessage</a> *msg )
<a name="l01020"></a>01020 {
<a name="l01021"></a>01021   <span class="keywordflow">if</span> ( !msg || !fb )
<a name="l01022"></a>01022     <span class="keywordflow">return</span> QString::null;
<a name="l01023"></a>01023   <span class="keywordflow">switch</span> ( msg-&gt;<a class="code" href="classKCal_1_1ScheduleMessage.html#757cf1ca9629bfba4447969012446e4d" title="Return iTIP method associated with this message.">method</a>() ) {
<a name="l01024"></a>01024     <span class="keywordflow">case</span> Scheduler::Publish:
<a name="l01025"></a>01025         <span class="keywordflow">return</span> i18n(<span class="stringliteral">"This free/busy list has been published"</span>);
<a name="l01026"></a>01026     <span class="keywordflow">case</span> Scheduler::Request:
<a name="l01027"></a>01027         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"The free/busy list has been requested"</span> );
<a name="l01028"></a>01028     <span class="keywordflow">case</span> Scheduler::Refresh:
<a name="l01029"></a>01029         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"This free/busy list was refreshed"</span> );
<a name="l01030"></a>01030     <span class="keywordflow">case</span> Scheduler::Cancel:
<a name="l01031"></a>01031         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"This free/busy list was canceled"</span> );
<a name="l01032"></a>01032     <span class="keywordflow">case</span> Scheduler::Add:
<a name="l01033"></a>01033         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Addition to the free/busy list"</span> );
<a name="l01034"></a>01034     <span class="keywordflow">case</span> Scheduler::NoMethod:
<a name="l01035"></a>01035     <span class="keywordflow">default</span>:
<a name="l01036"></a>01036         <span class="keywordflow">return</span> i18n(<span class="stringliteral">"Error: Free/Busy iMIP message with unknown method: '%1'"</span>)
<a name="l01037"></a>01037             .arg( msg-&gt;<a class="code" href="classKCal_1_1ScheduleMessage.html#757cf1ca9629bfba4447969012446e4d" title="Return iTIP method associated with this message.">method</a>() );
<a name="l01038"></a>01038   }
<a name="l01039"></a>01039 }
<a name="l01040"></a>01040 
<a name="l01041"></a>01041 <span class="keyword">class </span>IncidenceFormatter::ScheduleMessageVisitor : <span class="keyword">public</span> <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a>::Visitor
<a name="l01042"></a>01042 {
<a name="l01043"></a>01043   <span class="keyword">public</span>:
<a name="l01044"></a>01044     ScheduleMessageVisitor() : mMessage(0) { mResult = <span class="stringliteral">""</span>; }
<a name="l01045"></a>01045     <span class="keywordtype">bool</span> act( <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a> *incidence, <a class="code" href="classKCal_1_1ScheduleMessage.html" title="This class provides an encapsulation of a scheduling message.">ScheduleMessage</a> *msg ) { mMessage = msg; <span class="keywordflow">return</span> incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#d99ad7b4b99e8de052ffaf8541590ff3" title="Accept IncidenceVisitor.">accept</a>( *<span class="keyword">this</span> ); }
<a name="l01046"></a>01046     QString result()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mResult; }
<a name="l01047"></a>01047 
<a name="l01048"></a>01048   <span class="keyword">protected</span>:
<a name="l01049"></a>01049     QString mResult;
<a name="l01050"></a>01050     <a class="code" href="classKCal_1_1ScheduleMessage.html" title="This class provides an encapsulation of a scheduling message.">ScheduleMessage</a> *mMessage;
<a name="l01051"></a>01051 };
<a name="l01052"></a>01052 
<a name="l01053"></a>01053 <span class="keyword">class </span>IncidenceFormatter::InvitationHeaderVisitor :
<a name="l01054"></a>01054       <span class="keyword">public</span> <a class="code" href="classKCal_1_1IncidenceFormatter.html" title="This class is a helper class that provides several static methods to format an Incidence...">IncidenceFormatter</a>::ScheduleMessageVisitor
<a name="l01055"></a>01055 {
<a name="l01056"></a>01056   <span class="keyword">protected</span>:
<a name="l01057"></a>01057     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event )
<a name="l01058"></a>01058     {
<a name="l01059"></a>01059       mResult = invitationHeaderEvent( event, mMessage );
<a name="l01060"></a>01060       <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l01061"></a>01061     }
<a name="l01062"></a>01062     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a> *todo )
<a name="l01063"></a>01063     {
<a name="l01064"></a>01064       mResult = invitationHeaderTodo( todo, mMessage );
<a name="l01065"></a>01065       <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l01066"></a>01066     }
<a name="l01067"></a>01067     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a> *journal )
<a name="l01068"></a>01068     {
<a name="l01069"></a>01069       mResult = invitationHeaderJournal( journal, mMessage );
<a name="l01070"></a>01070       <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l01071"></a>01071     }
<a name="l01072"></a>01072     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1FreeBusy.html" title="This class provides information about free/busy time of a calendar user.">FreeBusy</a> *fb )
<a name="l01073"></a>01073     {
<a name="l01074"></a>01074       mResult = invitationHeaderFreeBusy( fb, mMessage );
<a name="l01075"></a>01075       <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l01076"></a>01076     }
<a name="l01077"></a>01077 };
<a name="l01078"></a>01078 
<a name="l01079"></a>01079 <span class="keyword">class </span>IncidenceFormatter::InvitationBodyVisitor :
<a name="l01080"></a>01080       <span class="keyword">public</span> <a class="code" href="classKCal_1_1IncidenceFormatter.html" title="This class is a helper class that provides several static methods to format an Incidence...">IncidenceFormatter</a>::ScheduleMessageVisitor
<a name="l01081"></a>01081 {
<a name="l01082"></a>01082   <span class="keyword">protected</span>:
<a name="l01083"></a>01083     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event )
<a name="l01084"></a>01084     {
<a name="l01085"></a>01085       mResult = invitationDetailsEvent( event );
<a name="l01086"></a>01086       <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l01087"></a>01087     }
<a name="l01088"></a>01088     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a> *todo )
<a name="l01089"></a>01089     {
<a name="l01090"></a>01090       mResult = invitationDetailsTodo( todo );
<a name="l01091"></a>01091       <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l01092"></a>01092     }
<a name="l01093"></a>01093     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a> *journal )
<a name="l01094"></a>01094     {
<a name="l01095"></a>01095       mResult = invitationDetailsJournal( journal );
<a name="l01096"></a>01096       <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l01097"></a>01097     }
<a name="l01098"></a>01098     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1FreeBusy.html" title="This class provides information about free/busy time of a calendar user.">FreeBusy</a> *fb )
<a name="l01099"></a>01099     {
<a name="l01100"></a>01100       mResult = invitationDetailsFreeBusy( fb );
<a name="l01101"></a>01101       <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l01102"></a>01102     }
<a name="l01103"></a>01103 };
<a name="l01104"></a>01104 
<a name="l01105"></a>01105 <span class="keyword">class </span>IncidenceFormatter::IncidenceCompareVisitor :
<a name="l01106"></a>01106   <span class="keyword">public</span> <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a>::Visitor
<a name="l01107"></a>01107 {
<a name="l01108"></a>01108   <span class="keyword">public</span>:
<a name="l01109"></a>01109     IncidenceCompareVisitor() : mExistingIncidence(0) {}
<a name="l01110"></a>01110     <span class="keywordtype">bool</span> act( <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a> *incidence, <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a>* existingIncidence )
<a name="l01111"></a>01111     {
<a name="l01112"></a>01112       mExistingIncidence = existingIncidence;
<a name="l01113"></a>01113       <span class="keywordflow">return</span> incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#d99ad7b4b99e8de052ffaf8541590ff3" title="Accept IncidenceVisitor.">accept</a>( *<span class="keyword">this</span> );
<a name="l01114"></a>01114     }
<a name="l01115"></a>01115 
<a name="l01116"></a>01116     QString result()<span class="keyword"> const</span>
<a name="l01117"></a>01117 <span class="keyword">    </span>{
<a name="l01118"></a>01118       <span class="keywordflow">if</span> ( mChanges.isEmpty() )
<a name="l01119"></a>01119         <span class="keywordflow">return</span> QString();
<a name="l01120"></a>01120       QString html = <span class="stringliteral">"&lt;div align=\"left\"&gt;&lt;ul&gt;&lt;li&gt;"</span>;
<a name="l01121"></a>01121       html += mChanges.join( <span class="stringliteral">"&lt;/li&gt;&lt;li&gt;"</span> );
<a name="l01122"></a>01122       html += <span class="stringliteral">"&lt;/li&gt;&lt;ul&gt;&lt;/div&gt;"</span>;
<a name="l01123"></a>01123       <span class="keywordflow">return</span> html;
<a name="l01124"></a>01124     }
<a name="l01125"></a>01125 
<a name="l01126"></a>01126   <span class="keyword">protected</span>:
<a name="l01127"></a>01127     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event )
<a name="l01128"></a>01128     {
<a name="l01129"></a>01129       compareEvents( event, dynamic_cast&lt;Event*&gt;( mExistingIncidence ) );
<a name="l01130"></a>01130       compareIncidences( event, mExistingIncidence );
<a name="l01131"></a>01131       <span class="keywordflow">return</span> !mChanges.isEmpty();
<a name="l01132"></a>01132     }
<a name="l01133"></a>01133     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a> *todo )
<a name="l01134"></a>01134     {
<a name="l01135"></a>01135       compareIncidences( todo, mExistingIncidence );
<a name="l01136"></a>01136       <span class="keywordflow">return</span> !mChanges.isEmpty();
<a name="l01137"></a>01137     }
<a name="l01138"></a>01138     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a> *journal )
<a name="l01139"></a>01139     {
<a name="l01140"></a>01140       compareIncidences( journal, mExistingIncidence );
<a name="l01141"></a>01141       <span class="keywordflow">return</span> !mChanges.isEmpty();
<a name="l01142"></a>01142     }
<a name="l01143"></a>01143     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1FreeBusy.html" title="This class provides information about free/busy time of a calendar user.">FreeBusy</a> *fb )
<a name="l01144"></a>01144     {
<a name="l01145"></a>01145       Q_UNUSED( fb );
<a name="l01146"></a>01146       <span class="keywordflow">return</span> !mChanges.isEmpty();
<a name="l01147"></a>01147     }
<a name="l01148"></a>01148 
<a name="l01149"></a>01149   <span class="keyword">private</span>:
<a name="l01150"></a>01150     <span class="keywordtype">void</span> compareEvents( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *newEvent, <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *oldEvent )
<a name="l01151"></a>01151     {
<a name="l01152"></a>01152       <span class="keywordflow">if</span> ( !oldEvent || !newEvent )
<a name="l01153"></a>01153         <span class="keywordflow">return</span>;
<a name="l01154"></a>01154       <span class="keywordflow">if</span> ( oldEvent-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#5419a946a4e5715a0c34ec2c7e04cd9b" title="returns an event&amp;#39;s starting date/time as a QDateTime.">dtStart</a>() != newEvent-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#5419a946a4e5715a0c34ec2c7e04cd9b" title="returns an event&amp;#39;s starting date/time as a QDateTime.">dtStart</a>() || oldEvent-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() != newEvent-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() )
<a name="l01155"></a>01155         mChanges += i18n( <span class="stringliteral">"The begin of the meeting has been changed from %1 to %2"</span> )
<a name="l01156"></a>01156             .arg( eventStartTimeStr( oldEvent ) ).arg( eventStartTimeStr( newEvent ) );
<a name="l01157"></a>01157       <span class="keywordflow">if</span> ( oldEvent-&gt;<a class="code" href="classKCal_1_1Event.html#0bc3052d40d160c7d58a5483dfcff693" title="Return end date and time.">dtEnd</a>() != newEvent-&gt;<a class="code" href="classKCal_1_1Event.html#0bc3052d40d160c7d58a5483dfcff693" title="Return end date and time.">dtEnd</a>() || oldEvent-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() != newEvent-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() )
<a name="l01158"></a>01158         mChanges += i18n( <span class="stringliteral">"The end of the meeting has been changed from %1 to %2"</span> )
<a name="l01159"></a>01159             .arg( eventEndTimeStr( oldEvent ) ).arg( eventEndTimeStr( newEvent ) );
<a name="l01160"></a>01160     }
<a name="l01161"></a>01161 
<a name="l01162"></a>01162     <span class="keywordtype">void</span> compareIncidences( <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a> *newInc, <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a> *oldInc )
<a name="l01163"></a>01163     {
<a name="l01164"></a>01164       <span class="keywordflow">if</span> ( !oldInc || !newInc )
<a name="l01165"></a>01165         <span class="keywordflow">return</span>;
<a name="l01166"></a>01166       <span class="keywordflow">if</span> ( oldInc-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>() != newInc-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>() )
<a name="l01167"></a>01167         mChanges += i18n( <span class="stringliteral">"The summary has been changed to: \"%1\""</span> ).arg( newInc-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>() );
<a name="l01168"></a>01168       <span class="keywordflow">if</span> ( oldInc-&gt;<a class="code" href="classKCal_1_1Incidence.html#d147473a07f26ad738fbae9501eb1c3d" title="Return the event&amp;#39;s/todo&amp;#39;s location.">location</a>() != newInc-&gt;<a class="code" href="classKCal_1_1Incidence.html#d147473a07f26ad738fbae9501eb1c3d" title="Return the event&amp;#39;s/todo&amp;#39;s location.">location</a>() )
<a name="l01169"></a>01169         mChanges += i18n( <span class="stringliteral">"The location has been changed to: \"%1\""</span> ).arg( newInc-&gt;<a class="code" href="classKCal_1_1Incidence.html#d147473a07f26ad738fbae9501eb1c3d" title="Return the event&amp;#39;s/todo&amp;#39;s location.">location</a>() );
<a name="l01170"></a>01170       <span class="keywordflow">if</span> ( oldInc-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>() != newInc-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>() )
<a name="l01171"></a>01171         mChanges += i18n( <span class="stringliteral">"The description has been changed to: \"%1\""</span> ).arg( newInc-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>() );
<a name="l01172"></a>01172       Attendee::List oldAttendees = oldInc-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#df4df93778bfab1d165580946320b0de" title="Return list of attendees.">attendees</a>();
<a name="l01173"></a>01173       Attendee::List newAttendees = newInc-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#df4df93778bfab1d165580946320b0de" title="Return list of attendees.">attendees</a>();
<a name="l01174"></a>01174       <span class="keywordflow">for</span> ( Attendee::List::ConstIterator it = newAttendees.constBegin(); it != newAttendees.constEnd(); ++it ) {
<a name="l01175"></a>01175         <a class="code" href="classKCal_1_1Attendee.html" title="This class represents information related to an attendee of an event.">Attendee</a> *oldAtt = oldInc-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#86f959675fdababd454eed502b841176" title="Return the Attendee with this email address.">attendeeByMail</a>( (*it)-&gt;email() );
<a name="l01176"></a>01176         <span class="keywordflow">if</span> ( !oldAtt ) {
<a name="l01177"></a>01177           mChanges += i18n( <span class="stringliteral">"Attendee %1 has been added"</span> ).arg( (*it)-&gt;fullName() );
<a name="l01178"></a>01178         } <span class="keywordflow">else</span> {
<a name="l01179"></a>01179           <span class="keywordflow">if</span> ( oldAtt-&gt;<a class="code" href="classKCal_1_1Attendee.html#72768a7d915adf124527e51e200286ee" title="Return status.">status</a>() != (*it)-&gt;status() )
<a name="l01180"></a>01180             mChanges += i18n( <span class="stringliteral">"The status of attendee %1 has been changed to: %2"</span> ).arg( (*it)-&gt;fullName() )
<a name="l01181"></a>01181                 .arg( (*it)-&gt;statusStr() );
<a name="l01182"></a>01182         }
<a name="l01183"></a>01183       }
<a name="l01184"></a>01184       <span class="keywordflow">for</span> ( Attendee::List::ConstIterator it = oldAttendees.constBegin(); it != oldAttendees.constEnd(); ++it ) {
<a name="l01185"></a>01185         <a class="code" href="classKCal_1_1Attendee.html" title="This class represents information related to an attendee of an event.">Attendee</a> *newAtt = newInc-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#86f959675fdababd454eed502b841176" title="Return the Attendee with this email address.">attendeeByMail</a>( (*it)-&gt;email() );
<a name="l01186"></a>01186         <span class="keywordflow">if</span> ( !newAtt )
<a name="l01187"></a>01187           mChanges += i18n( <span class="stringliteral">"Attendee %1 has been removed"</span> ).arg( (*it)-&gt;fullName() );
<a name="l01188"></a>01188       }
<a name="l01189"></a>01189     }
<a name="l01190"></a>01190 
<a name="l01191"></a>01191   <span class="keyword">private</span>:
<a name="l01192"></a>01192     <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a>* mExistingIncidence;
<a name="l01193"></a>01193     QStringList mChanges;
<a name="l01194"></a>01194 };
<a name="l01195"></a>01195 
<a name="l01196"></a>01196 
<a name="l01197"></a>01197 QString InvitationFormatterHelper::makeLink( <span class="keyword">const</span> QString &amp;<span class="keywordtype">id</span>, <span class="keyword">const</span> QString &amp;text )
<a name="l01198"></a>01198 {
<a name="l01199"></a>01199   QString res( <span class="stringliteral">"&lt;a href=\"%1\"&gt;&lt;b&gt;%2&lt;/b&gt;&lt;/a&gt;"</span> );
<a name="l01200"></a>01200   <span class="keywordflow">return</span> res.arg( generateLinkURL( <span class="keywordtype">id</span> ) ).arg( text );
<a name="l01201"></a>01201   <span class="keywordflow">return</span> res;
<a name="l01202"></a>01202 }
<a name="l01203"></a>01203 
<a name="l01204"></a>01204 
<a name="l01205"></a>01205 QString IncidenceFormatter::formatICalInvitation( QString invitation, <a class="code" href="classKCal_1_1Calendar.html" title="This is the main &amp;quot;calendar&amp;quot; object class.">Calendar</a> *mCalendar,
<a name="l01206"></a>01206     InvitationFormatterHelper *helper )
<a name="l01207"></a>01207 {
<a name="l01208"></a>01208   <span class="keywordflow">if</span> ( invitation.isEmpty() ) <span class="keywordflow">return</span> QString::null;
<a name="l01209"></a>01209 
<a name="l01210"></a>01210   <a class="code" href="classKCal_1_1ICalFormat.html" title="This class implements the iCalendar format.">ICalFormat</a> format;
<a name="l01211"></a>01211   <span class="comment">// parseScheduleMessage takes the tz from the calendar, no need to set it manually here for the format!</span>
<a name="l01212"></a>01212   <a class="code" href="classKCal_1_1ScheduleMessage.html" title="This class provides an encapsulation of a scheduling message.">ScheduleMessage</a> *msg = format.<a class="code" href="classKCal_1_1ICalFormat.html#58751e76f49e8019963f50af93ba4571" title="Parse scheduling message provided as string s.">parseScheduleMessage</a>( mCalendar, invitation );
<a name="l01213"></a>01213 
<a name="l01214"></a>01214   <span class="keywordflow">if</span>( !msg ) {
<a name="l01215"></a>01215     kdDebug( 5850 ) &lt;&lt; <span class="stringliteral">"Failed to parse the scheduling message"</span> &lt;&lt; endl;
<a name="l01216"></a>01216     Q_ASSERT( format.<a class="code" href="classKCal_1_1CalFormat.html#bbc98894ae8c89b897f5c1e0adbb28e2" title="Return exception, if there is any, containing information about the last error that...">exception</a>() );
<a name="l01217"></a>01217     kdDebug( 5850 ) &lt;&lt; format.<a class="code" href="classKCal_1_1CalFormat.html#bbc98894ae8c89b897f5c1e0adbb28e2" title="Return exception, if there is any, containing information about the last error that...">exception</a>()-&gt;<a class="code" href="classKCal_1_1ErrorFormat.html#66ed2e703af6cac1bca1e53d7e7c702e" title="Return format error message.">message</a>() &lt;&lt; endl;
<a name="l01218"></a>01218     <span class="keywordflow">return</span> QString::null;
<a name="l01219"></a>01219   }
<a name="l01220"></a>01220 
<a name="l01221"></a>01221   <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a> *incBase = msg-&gt;<a class="code" href="classKCal_1_1ScheduleMessage.html#24805f0f67816c9b8610c24bbde16136" title="Return event associated with this message.">event</a>();
<a name="l01222"></a>01222 
<a name="l01223"></a>01223   <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a>* existingIncidence = 0;
<a name="l01224"></a>01224   <span class="keywordflow">if</span> ( helper-&gt;calendar() ) {
<a name="l01225"></a>01225     existingIncidence = helper-&gt;calendar()-&gt;incidence( incBase-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#75c8bd2df73c5a62bd7cf77c2ac4d3c6" title="Return the unique id for the event.">uid</a>() );
<a name="l01226"></a>01226     <span class="keywordflow">if</span> ( !existingIncidence ) {
<a name="l01227"></a>01227       <span class="keyword">const</span> Incidence::List list = helper-&gt;calendar()-&gt;incidences();
<a name="l01228"></a>01228       <span class="keywordflow">for</span> ( Incidence::List::ConstIterator it = list.begin(), end = list.end(); it != end; ++it ) {
<a name="l01229"></a>01229         <span class="keywordflow">if</span> ( (*it)-&gt;schedulingID() == incBase-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#75c8bd2df73c5a62bd7cf77c2ac4d3c6" title="Return the unique id for the event.">uid</a>() ) {
<a name="l01230"></a>01230           existingIncidence = *it;
<a name="l01231"></a>01231           <span class="keywordflow">break</span>;
<a name="l01232"></a>01232         }
<a name="l01233"></a>01233       }
<a name="l01234"></a>01234     }
<a name="l01235"></a>01235   }
<a name="l01236"></a>01236 
<a name="l01237"></a>01237   <span class="comment">// First make the text of the message</span>
<a name="l01238"></a>01238   QString html;
<a name="l01239"></a>01239 
<a name="l01240"></a>01240   QString tableStyle = QString::fromLatin1(
<a name="l01241"></a>01241     <span class="stringliteral">"style=\"border: solid 1px; margin: 0em;\""</span> );
<a name="l01242"></a>01242   QString tableHead = QString::fromLatin1(
<a name="l01243"></a>01243     <span class="stringliteral">"&lt;div align=\"center\"&gt;"</span>
<a name="l01244"></a>01244     <span class="stringliteral">"&lt;table width=\"80%\" cellpadding=\"1\" cellspacing=\"0\" %1&gt;"</span>
<a name="l01245"></a>01245     <span class="stringliteral">"&lt;tr&gt;&lt;td&gt;"</span>).arg(tableStyle);
<a name="l01246"></a>01246 
<a name="l01247"></a>01247   html += tableHead;
<a name="l01248"></a>01248   InvitationHeaderVisitor headerVisitor;
<a name="l01249"></a>01249   <span class="comment">// The InvitationHeaderVisitor returns false if the incidence is somehow invalid, or not handled</span>
<a name="l01250"></a>01250   <span class="keywordflow">if</span> ( !headerVisitor.act( incBase, msg ) )
<a name="l01251"></a>01251     <span class="keywordflow">return</span> QString::null;
<a name="l01252"></a>01252   html += <span class="stringliteral">"&lt;b&gt;"</span> + headerVisitor.result() + <span class="stringliteral">"&lt;/b&gt;"</span>;
<a name="l01253"></a>01253 
<a name="l01254"></a>01254   InvitationBodyVisitor bodyVisitor;
<a name="l01255"></a>01255   <span class="keywordflow">if</span> ( !bodyVisitor.act( incBase, msg ) )
<a name="l01256"></a>01256     <span class="keywordflow">return</span> QString::null;
<a name="l01257"></a>01257   html += bodyVisitor.result();
<a name="l01258"></a>01258 
<a name="l01259"></a>01259   <span class="keywordflow">if</span> ( msg-&gt;<a class="code" href="classKCal_1_1ScheduleMessage.html#757cf1ca9629bfba4447969012446e4d" title="Return iTIP method associated with this message.">method</a>() == Scheduler::Request ) { <span class="comment">// ### Scheduler::Publish/Refresh/Add as well?</span>
<a name="l01260"></a>01260     IncidenceCompareVisitor compareVisitor;
<a name="l01261"></a>01261     <span class="keywordflow">if</span> ( compareVisitor.act( incBase, existingIncidence ) ) {
<a name="l01262"></a>01262       html += i18n(<span class="stringliteral">"&lt;p align=\"left\"&gt;The following changes have been made by the organizer:&lt;/p&gt;"</span>);
<a name="l01263"></a>01263       html += compareVisitor.result();
<a name="l01264"></a>01264     }
<a name="l01265"></a>01265   }
<a name="l01266"></a>01266 
<a name="l01267"></a>01267   html += <span class="stringliteral">"&lt;br/&gt;"</span>;
<a name="l01268"></a>01268   html += <span class="stringliteral">"&lt;table border=\"0\" cellspacing=\"0\"&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;"</span>;
<a name="l01269"></a>01269 
<a name="l01270"></a>01270 <span class="preprocessor">#if 0</span>
<a name="l01271"></a>01271 <span class="preprocessor"></span>  html += helper-&gt;makeLinkURL( <span class="stringliteral">"accept"</span>, i18n(<span class="stringliteral">"[Enter this into my calendar]"</span>) );
<a name="l01272"></a>01272   html += <span class="stringliteral">"&lt;/td&gt;&lt;td&gt; &amp;nbsp; &lt;/td&gt;&lt;td&gt;"</span>;
<a name="l01273"></a>01273 <span class="preprocessor">#endif</span>
<a name="l01274"></a>01274 <span class="preprocessor"></span>
<a name="l01275"></a>01275   <span class="comment">// Add groupware links</span>
<a name="l01276"></a>01276 
<a name="l01277"></a>01277   <span class="keywordflow">switch</span> ( msg-&gt;<a class="code" href="classKCal_1_1ScheduleMessage.html#757cf1ca9629bfba4447969012446e4d" title="Return iTIP method associated with this message.">method</a>() ) {
<a name="l01278"></a>01278     <span class="keywordflow">case</span> Scheduler::Publish:
<a name="l01279"></a>01279     <span class="keywordflow">case</span> Scheduler::Request:
<a name="l01280"></a>01280     <span class="keywordflow">case</span> Scheduler::Refresh:
<a name="l01281"></a>01281     <span class="keywordflow">case</span> Scheduler::Add:
<a name="l01282"></a>01282     {
<a name="l01283"></a>01283         <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a> *inc = <span class="keyword">dynamic_cast&lt;</span><a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a>*<span class="keyword">&gt;</span>( incBase );
<a name="l01284"></a>01284         <span class="keywordflow">if</span> ( inc &amp;&amp; inc-&gt;<a class="code" href="classKCal_1_1Incidence.html#061b1b33e5105cee5a2a6db2abc04b92" title="Return the number of revisions this event has seen.">revision</a>() &gt; 0 &amp;&amp; (existingIncidence || !helper-&gt;calendar()) ) {
<a name="l01285"></a>01285             <span class="keywordflow">if</span> ( incBase-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#7981c13389e270b9e3e06a79d8564d5b">type</a>() == <span class="stringliteral">"Todo"</span> ) {
<a name="l01286"></a>01286                 html += <span class="stringliteral">"&lt;td colspan=\"9\"&gt;"</span>;
<a name="l01287"></a>01287                 html += helper-&gt;makeLink( <span class="stringliteral">"reply"</span>, i18n( <span class="stringliteral">"[Enter this into my task list]"</span> ) );
<a name="l01288"></a>01288             } <span class="keywordflow">else</span> {
<a name="l01289"></a>01289                 html += <span class="stringliteral">"&lt;td colspan=\"13\"&gt;"</span>;
<a name="l01290"></a>01290                 html += helper-&gt;makeLink( <span class="stringliteral">"reply"</span>, i18n( <span class="stringliteral">"[Enter this into my calendar]"</span> ) );
<a name="l01291"></a>01291             }
<a name="l01292"></a>01292             html += <span class="stringliteral">"&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;"</span>;
<a name="l01293"></a>01293         }
<a name="l01294"></a>01294         html += <span class="stringliteral">"&lt;td&gt;"</span>;
<a name="l01295"></a>01295 
<a name="l01296"></a>01296         <span class="keywordflow">if</span> ( helper-&gt;calendar() &amp;&amp; !existingIncidence ) {
<a name="l01297"></a>01297           <span class="comment">// Accept</span>
<a name="l01298"></a>01298           html += helper-&gt;makeLink( <span class="stringliteral">"accept"</span>, i18n( <span class="stringliteral">"[Accept]"</span> ) );
<a name="l01299"></a>01299           html += <span class="stringliteral">"&lt;/td&gt;&lt;td&gt; &amp;nbsp; &lt;/td&gt;&lt;td&gt;"</span>;
<a name="l01300"></a>01300           html += helper-&gt;makeLink( <span class="stringliteral">"accept_conditionally"</span>,
<a name="l01301"></a>01301                             i18n( <span class="stringliteral">"Accept conditionally"</span>, <span class="stringliteral">"[Accept cond.]"</span> ) );
<a name="l01302"></a>01302           html += <span class="stringliteral">"&lt;/td&gt;&lt;td&gt; &amp;nbsp; &lt;/td&gt;&lt;td&gt;"</span>;
<a name="l01303"></a>01303           <span class="comment">// counter proposal</span>
<a name="l01304"></a>01304           html += helper-&gt;makeLink( <span class="stringliteral">"counter"</span>, i18n( <span class="stringliteral">"[Counter proposal]"</span> ) );
<a name="l01305"></a>01305           html += <span class="stringliteral">"&lt;/td&gt;&lt;td&gt; &amp;nbsp; &lt;/td&gt;&lt;td&gt;"</span>;
<a name="l01306"></a>01306           <span class="comment">// Decline</span>
<a name="l01307"></a>01307           html += helper-&gt;makeLink( <span class="stringliteral">"decline"</span>, i18n( <span class="stringliteral">"[Decline]"</span> ) );
<a name="l01308"></a>01308           html += <span class="stringliteral">"&lt;/td&gt;&lt;td&gt; &amp;nbsp; &lt;/td&gt;&lt;td&gt;"</span>;
<a name="l01309"></a>01309 
<a name="l01310"></a>01310           <span class="comment">// Delegate</span>
<a name="l01311"></a>01311           html += helper-&gt;makeLink( <span class="stringliteral">"delegate"</span>, i18n( <span class="stringliteral">"[Delegate]"</span> ) );
<a name="l01312"></a>01312           html += <span class="stringliteral">"&lt;/td&gt;&lt;td&gt; &amp;nbsp; &lt;/td&gt;&lt;td&gt;"</span>;
<a name="l01313"></a>01313 
<a name="l01314"></a>01314           <span class="comment">// Forward</span>
<a name="l01315"></a>01315           html += helper-&gt;makeLink( <span class="stringliteral">"forward"</span>, i18n( <span class="stringliteral">"[Forward]"</span> ) );
<a name="l01316"></a>01316 
<a name="l01317"></a>01317           <span class="keywordflow">if</span> ( incBase-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#7981c13389e270b9e3e06a79d8564d5b">type</a>() == <span class="stringliteral">"Event"</span> ) {
<a name="l01318"></a>01318               html += <span class="stringliteral">"&lt;/b&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt; &amp;nbsp; &lt;/td&gt;&lt;td&gt;"</span>;
<a name="l01319"></a>01319               html += helper-&gt;makeLink( <span class="stringliteral">"check_calendar"</span>, i18n(<span class="stringliteral">"[Check my calendar]"</span> ) );
<a name="l01320"></a>01320           }
<a name="l01321"></a>01321         }
<a name="l01322"></a>01322         <span class="keywordflow">break</span>;
<a name="l01323"></a>01323     }
<a name="l01324"></a>01324 
<a name="l01325"></a>01325     <span class="keywordflow">case</span> Scheduler::Cancel:
<a name="l01326"></a>01326         <span class="comment">// Cancel event from my calendar</span>
<a name="l01327"></a>01327         html += helper-&gt;makeLink( <span class="stringliteral">"cancel"</span>, i18n( <span class="stringliteral">"[Remove this from my calendar]"</span> ) );
<a name="l01328"></a>01328         <span class="keywordflow">break</span>;
<a name="l01329"></a>01329 
<a name="l01330"></a>01330     <span class="keywordflow">case</span> Scheduler::Reply:
<a name="l01331"></a>01331         <span class="comment">// Enter this into my calendar</span>
<a name="l01332"></a>01332         <span class="keywordflow">if</span> ( incBase-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#7981c13389e270b9e3e06a79d8564d5b">type</a>() == <span class="stringliteral">"Todo"</span> ) {
<a name="l01333"></a>01333           html += helper-&gt;makeLink( <span class="stringliteral">"reply"</span>, i18n( <span class="stringliteral">"[Enter this into my task list]"</span> ) );
<a name="l01334"></a>01334         } <span class="keywordflow">else</span> {
<a name="l01335"></a>01335           html += helper-&gt;makeLink( <span class="stringliteral">"reply"</span>, i18n( <span class="stringliteral">"[Enter this into my calendar]"</span> ) );
<a name="l01336"></a>01336         }
<a name="l01337"></a>01337         <span class="keywordflow">break</span>;
<a name="l01338"></a>01338 
<a name="l01339"></a>01339     <span class="keywordflow">case</span> Scheduler::Counter:
<a name="l01340"></a>01340     <span class="keywordflow">case</span> Scheduler::Declinecounter:
<a name="l01341"></a>01341     <span class="keywordflow">case</span> Scheduler::NoMethod:
<a name="l01342"></a>01342         <span class="keywordflow">break</span>;
<a name="l01343"></a>01343   }
<a name="l01344"></a>01344 
<a name="l01345"></a>01345   html += <span class="stringliteral">"&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"</span>;
<a name="l01346"></a>01346 
<a name="l01347"></a>01347   html += <span class="stringliteral">"&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;&lt;/div&gt;"</span>;
<a name="l01348"></a>01348 
<a name="l01349"></a>01349   <span class="keywordflow">return</span> html;
<a name="l01350"></a>01350 }
<a name="l01351"></a>01351 
<a name="l01352"></a>01352 
<a name="l01353"></a>01353 
<a name="l01354"></a>01354 
<a name="l01355"></a>01355 <span class="comment">/*******************************************************************</span>
<a name="l01356"></a>01356 <span class="comment"> *  Helper functions for the msTNEF -&gt; VPart converter</span>
<a name="l01357"></a>01357 <span class="comment"> *******************************************************************/</span>
<a name="l01358"></a>01358 
<a name="l01359"></a>01359 
<a name="l01360"></a>01360 <span class="comment">//-----------------------------------------------------------------------------</span>
<a name="l01361"></a>01361 
<a name="l01362"></a>01362 <span class="keyword">static</span> QString stringProp( KTNEFMessage* tnefMsg, <span class="keyword">const</span> Q_UINT32&amp; key,
<a name="l01363"></a>01363                            <span class="keyword">const</span> QString&amp; fallback = QString::null)
<a name="l01364"></a>01364 {
<a name="l01365"></a>01365   <span class="keywordflow">return</span> tnefMsg-&gt;findProp( key &lt; 0x10000 ? key &amp; 0xFFFF : key &gt;&gt; 16,
<a name="l01366"></a>01366                             fallback );
<a name="l01367"></a>01367 }
<a name="l01368"></a>01368 
<a name="l01369"></a>01369 <span class="keyword">static</span> QString sNamedProp( KTNEFMessage* tnefMsg, <span class="keyword">const</span> QString&amp; name,
<a name="l01370"></a>01370                            <span class="keyword">const</span> QString&amp; fallback = QString::null )
<a name="l01371"></a>01371 {
<a name="l01372"></a>01372   <span class="keywordflow">return</span> tnefMsg-&gt;findNamedProp( name, fallback );
<a name="l01373"></a>01373 }
<a name="l01374"></a>01374 
<a name="l01375"></a>01375 <span class="keyword">struct </span>save_tz { <span class="keywordtype">char</span>* old_tz; <span class="keywordtype">char</span>* tz_env_str; };
<a name="l01376"></a>01376 
<a name="l01377"></a>01377 <span class="comment">/* temporarily go to a different timezone */</span>
<a name="l01378"></a>01378 <span class="keyword">static</span> <span class="keyword">struct </span>save_tz set_tz( const char* _tc )
<a name="l01379"></a>01379 {
<a name="l01380"></a>01380   <span class="keyword">const</span> <span class="keywordtype">char</span> *tc = _tc?_tc:<span class="stringliteral">"UTC"</span>;
<a name="l01381"></a>01381 
<a name="l01382"></a>01382   <span class="keyword">struct </span>save_tz rv;
<a name="l01383"></a>01383 
<a name="l01384"></a>01384   rv.old_tz = 0;
<a name="l01385"></a>01385   rv.tz_env_str = 0;
<a name="l01386"></a>01386 
<a name="l01387"></a>01387   <span class="comment">//kdDebug(5006) &lt;&lt; "set_tz(), timezone before = " &lt;&lt; timezone &lt;&lt; endl;</span>
<a name="l01388"></a>01388 
<a name="l01389"></a>01389   <span class="keywordtype">char</span>* tz_env = 0;
<a name="l01390"></a>01390   <span class="keywordflow">if</span>( getenv( <span class="stringliteral">"TZ"</span> ) ) {
<a name="l01391"></a>01391     tz_env = strdup( getenv( <span class="stringliteral">"TZ"</span> ) );
<a name="l01392"></a>01392     rv.old_tz = tz_env;
<a name="l01393"></a>01393   }
<a name="l01394"></a>01394   <span class="keywordtype">char</span>* tmp_env = (<span class="keywordtype">char</span>*)malloc( strlen( tc ) + 4 );
<a name="l01395"></a>01395   strcpy( tmp_env, <span class="stringliteral">"TZ="</span> );
<a name="l01396"></a>01396   strcpy( tmp_env+3, tc );
<a name="l01397"></a>01397   putenv( tmp_env );
<a name="l01398"></a>01398 
<a name="l01399"></a>01399   rv.tz_env_str = tmp_env;
<a name="l01400"></a>01400 
<a name="l01401"></a>01401   <span class="comment">/* tmp_env is not free'ed -- it is part of the environment */</span>
<a name="l01402"></a>01402 
<a name="l01403"></a>01403   tzset();
<a name="l01404"></a>01404   <span class="comment">//kdDebug(5006) &lt;&lt; "set_tz(), timezone after = " &lt;&lt; timezone &lt;&lt; endl;</span>
<a name="l01405"></a>01405 
<a name="l01406"></a>01406   <span class="keywordflow">return</span> rv;
<a name="l01407"></a>01407 }
<a name="l01408"></a>01408 
<a name="l01409"></a>01409 <span class="comment">/* restore previous timezone */</span>
<a name="l01410"></a>01410 <span class="keyword">static</span> <span class="keywordtype">void</span> unset_tz( <span class="keyword">struct</span> save_tz old_tz )
<a name="l01411"></a>01411 {
<a name="l01412"></a>01412   <span class="keywordflow">if</span>( old_tz.old_tz ) {
<a name="l01413"></a>01413     <span class="keywordtype">char</span>* tmp_env = (<span class="keywordtype">char</span>*)malloc( strlen( old_tz.old_tz ) + 4 );
<a name="l01414"></a>01414     strcpy( tmp_env, <span class="stringliteral">"TZ="</span> );
<a name="l01415"></a>01415     strcpy( tmp_env+3, old_tz.old_tz );
<a name="l01416"></a>01416     putenv( tmp_env );
<a name="l01417"></a>01417     <span class="comment">/* tmp_env is not free'ed -- it is part of the environment */</span>
<a name="l01418"></a>01418     free( old_tz.old_tz );
<a name="l01419"></a>01419   } <span class="keywordflow">else</span> {
<a name="l01420"></a>01420     <span class="comment">/* clear TZ from env */</span>
<a name="l01421"></a>01421     putenv( strdup(<span class="stringliteral">"TZ"</span>) );
<a name="l01422"></a>01422   }
<a name="l01423"></a>01423   tzset();
<a name="l01424"></a>01424 
<a name="l01425"></a>01425   <span class="comment">/* is this OK? */</span>
<a name="l01426"></a>01426   <span class="keywordflow">if</span>( old_tz.tz_env_str ) free( old_tz.tz_env_str );
<a name="l01427"></a>01427 }
<a name="l01428"></a>01428 
<a name="l01429"></a>01429 <span class="keyword">static</span> QDateTime utc2Local( <span class="keyword">const</span> QDateTime&amp; utcdt )
<a name="l01430"></a>01430 {
<a name="l01431"></a>01431   <span class="keyword">struct </span>tm tmL;
<a name="l01432"></a>01432 
<a name="l01433"></a>01433   save_tz tmp_tz = set_tz(<span class="stringliteral">"UTC"</span>);
<a name="l01434"></a>01434   time_t utc = utcdt.toTime_t();
<a name="l01435"></a>01435   unset_tz( tmp_tz );
<a name="l01436"></a>01436 
<a name="l01437"></a>01437   localtime_r( &amp;utc, &amp;tmL );
<a name="l01438"></a>01438   <span class="keywordflow">return</span> QDateTime( QDate( tmL.tm_year+1900, tmL.tm_mon+1, tmL.tm_mday ),
<a name="l01439"></a>01439                     QTime( tmL.tm_hour, tmL.tm_min, tmL.tm_sec ) );
<a name="l01440"></a>01440 }
<a name="l01441"></a>01441 
<a name="l01442"></a>01442 
<a name="l01443"></a>01443 <span class="keyword">static</span> QDateTime pureISOToLocalQDateTime( <span class="keyword">const</span> QString&amp; dtStr,
<a name="l01444"></a>01444                                           <span class="keywordtype">bool</span> bDateOnly = <span class="keyword">false</span> )
<a name="l01445"></a>01445 {
<a name="l01446"></a>01446   QDate tmpDate;
<a name="l01447"></a>01447   QTime tmpTime;
<a name="l01448"></a>01448   <span class="keywordtype">int</span> year, month, day, hour, minute, second;
<a name="l01449"></a>01449 
<a name="l01450"></a>01450   <span class="keywordflow">if</span>( bDateOnly ) {
<a name="l01451"></a>01451     year = dtStr.left( 4 ).toInt();
<a name="l01452"></a>01452     month = dtStr.mid( 4, 2 ).toInt();
<a name="l01453"></a>01453     day = dtStr.mid( 6, 2 ).toInt();
<a name="l01454"></a>01454     hour = 0;
<a name="l01455"></a>01455     minute = 0;
<a name="l01456"></a>01456     second = 0;
<a name="l01457"></a>01457   } <span class="keywordflow">else</span> {
<a name="l01458"></a>01458     year = dtStr.left( 4 ).toInt();
<a name="l01459"></a>01459     month = dtStr.mid( 4, 2 ).toInt();
<a name="l01460"></a>01460     day = dtStr.mid( 6, 2 ).toInt();
<a name="l01461"></a>01461     hour = dtStr.mid( 9, 2 ).toInt();
<a name="l01462"></a>01462     minute = dtStr.mid( 11, 2 ).toInt();
<a name="l01463"></a>01463     second = dtStr.mid( 13, 2 ).toInt();
<a name="l01464"></a>01464   }
<a name="l01465"></a>01465   tmpDate.setYMD( year, month, day );
<a name="l01466"></a>01466   tmpTime.setHMS( hour, minute, second );
<a name="l01467"></a>01467 
<a name="l01468"></a>01468   <span class="keywordflow">if</span>( tmpDate.isValid() &amp;&amp; tmpTime.isValid() ) {
<a name="l01469"></a>01469     QDateTime dT = QDateTime( tmpDate, tmpTime );
<a name="l01470"></a>01470 
<a name="l01471"></a>01471     <span class="keywordflow">if</span>( !bDateOnly ) {
<a name="l01472"></a>01472       <span class="comment">// correct for GMT ( == Zulu time == UTC )</span>
<a name="l01473"></a>01473       <span class="keywordflow">if</span> (dtStr.at(dtStr.length()-1) == <span class="charliteral">'Z'</span>) {
<a name="l01474"></a>01474         <span class="comment">//dT = dT.addSecs( 60 * KRFCDate::localUTCOffset() );</span>
<a name="l01475"></a>01475         <span class="comment">//localUTCOffset( dT ) );</span>
<a name="l01476"></a>01476         dT = utc2Local( dT );
<a name="l01477"></a>01477       }
<a name="l01478"></a>01478     }
<a name="l01479"></a>01479     <span class="keywordflow">return</span> dT;
<a name="l01480"></a>01480   } <span class="keywordflow">else</span>
<a name="l01481"></a>01481     <span class="keywordflow">return</span> QDateTime();
<a name="l01482"></a>01482 }
<a name="l01483"></a>01483 
<a name="l01484"></a>01484 
<a name="l01485"></a>01485 
<a name="l01486"></a><a class="code" href="classKCal_1_1IncidenceFormatter.html#b3b6cbbcd5e9027bad9dcd9cb506ec76">01486</a> QString <a class="code" href="classKCal_1_1IncidenceFormatter.html#b3b6cbbcd5e9027bad9dcd9cb506ec76">IncidenceFormatter::msTNEFToVPart</a>( <span class="keyword">const</span> QByteArray&amp; tnef )
<a name="l01487"></a>01487 {
<a name="l01488"></a>01488   <span class="keywordtype">bool</span> bOk = <span class="keyword">false</span>;
<a name="l01489"></a>01489 
<a name="l01490"></a>01490   KTNEFParser parser;
<a name="l01491"></a>01491   QBuffer buf( tnef );
<a name="l01492"></a>01492   <a class="code" href="classKCal_1_1CalendarLocal.html" title="This class provides a calendar stored as a local file.">CalendarLocal</a> cal ( QString::fromLatin1( <span class="stringliteral">"UTC"</span> ) );
<a name="l01493"></a>01493   KABC::Addressee addressee;
<a name="l01494"></a>01494   KABC::VCardConverter cardConv;
<a name="l01495"></a>01495   <a class="code" href="classKCal_1_1ICalFormat.html" title="This class implements the iCalendar format.">ICalFormat</a> calFormat;
<a name="l01496"></a>01496   <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a>* <span class="keyword">event</span> = <span class="keyword">new</span> <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a>();
<a name="l01497"></a>01497 
<a name="l01498"></a>01498   <span class="keywordflow">if</span>( parser.openDevice( &amp;buf ) ) {
<a name="l01499"></a>01499     KTNEFMessage* tnefMsg = parser.message();
<a name="l01500"></a>01500     <span class="comment">//QMap&lt;int,KTNEFProperty*&gt; props = parser.message()-&gt;properties();</span>
<a name="l01501"></a>01501 
<a name="l01502"></a>01502     <span class="comment">// Everything depends from property PR_MESSAGE_CLASS</span>
<a name="l01503"></a>01503     <span class="comment">// (this is added by KTNEFParser):</span>
<a name="l01504"></a>01504     QString msgClass = tnefMsg-&gt;findProp( 0x001A, QString::null, <span class="keyword">true</span> )
<a name="l01505"></a>01505       .upper();
<a name="l01506"></a>01506     <span class="keywordflow">if</span>( !msgClass.isEmpty() ) {
<a name="l01507"></a>01507       <span class="comment">// Match the old class names that might be used by Outlook for</span>
<a name="l01508"></a>01508       <span class="comment">// compatibility with Microsoft Mail for Windows for Workgroups 3.1.</span>
<a name="l01509"></a>01509       <span class="keywordtype">bool</span> bCompatClassAppointment = <span class="keyword">false</span>;
<a name="l01510"></a>01510       <span class="keywordtype">bool</span> bCompatMethodRequest = <span class="keyword">false</span>;
<a name="l01511"></a>01511       <span class="keywordtype">bool</span> bCompatMethodCancled = <span class="keyword">false</span>;
<a name="l01512"></a>01512       <span class="keywordtype">bool</span> bCompatMethodAccepted = <span class="keyword">false</span>;
<a name="l01513"></a>01513       <span class="keywordtype">bool</span> bCompatMethodAcceptedCond = <span class="keyword">false</span>;
<a name="l01514"></a>01514       <span class="keywordtype">bool</span> bCompatMethodDeclined = <span class="keyword">false</span>;
<a name="l01515"></a>01515       <span class="keywordflow">if</span>( msgClass.startsWith( <span class="stringliteral">"IPM.MICROSOFT SCHEDULE."</span> ) ) {
<a name="l01516"></a>01516         bCompatClassAppointment = <span class="keyword">true</span>;
<a name="l01517"></a>01517         <span class="keywordflow">if</span>( msgClass.endsWith( <span class="stringliteral">".MTGREQ"</span> ) )
<a name="l01518"></a>01518           bCompatMethodRequest = <span class="keyword">true</span>;
<a name="l01519"></a>01519         <span class="keywordflow">if</span>( msgClass.endsWith( <span class="stringliteral">".MTGCNCL"</span> ) )
<a name="l01520"></a>01520           bCompatMethodCancled = <span class="keyword">true</span>;
<a name="l01521"></a>01521         <span class="keywordflow">if</span>( msgClass.endsWith( <span class="stringliteral">".MTGRESPP"</span> ) )
<a name="l01522"></a>01522           bCompatMethodAccepted = <span class="keyword">true</span>;
<a name="l01523"></a>01523         <span class="keywordflow">if</span>( msgClass.endsWith( <span class="stringliteral">".MTGRESPA"</span> ) )
<a name="l01524"></a>01524           bCompatMethodAcceptedCond = <span class="keyword">true</span>;
<a name="l01525"></a>01525         <span class="keywordflow">if</span>( msgClass.endsWith( <span class="stringliteral">".MTGRESPN"</span> ) )
<a name="l01526"></a>01526           bCompatMethodDeclined = <span class="keyword">true</span>;
<a name="l01527"></a>01527       }
<a name="l01528"></a>01528       <span class="keywordtype">bool</span> bCompatClassNote = ( msgClass == <span class="stringliteral">"IPM.MICROSOFT MAIL.NOTE"</span> );
<a name="l01529"></a>01529 
<a name="l01530"></a>01530       <span class="keywordflow">if</span>( bCompatClassAppointment || <span class="stringliteral">"IPM.APPOINTMENT"</span> == msgClass ) {
<a name="l01531"></a>01531         <span class="comment">// Compose a vCal</span>
<a name="l01532"></a>01532         <span class="keywordtype">bool</span> bIsReply = <span class="keyword">false</span>;
<a name="l01533"></a>01533         QString prodID = <span class="stringliteral">"-//Microsoft Corporation//Outlook "</span>;
<a name="l01534"></a>01534         prodID += tnefMsg-&gt;findNamedProp( <span class="stringliteral">"0x8554"</span>, <span class="stringliteral">"9.0"</span> );
<a name="l01535"></a>01535         prodID += <span class="stringliteral">"MIMEDIR/EN\n"</span>;
<a name="l01536"></a>01536         prodID += <span class="stringliteral">"VERSION:2.0\n"</span>;
<a name="l01537"></a>01537         calFormat.<a class="code" href="classKCal_1_1CalFormat.html#02aec9050e64484ed59706048ba72c35" title="Set the application name for use in unique IDs and error messages, and product ID...">setApplication</a>( <span class="stringliteral">"Outlook"</span>, prodID );
<a name="l01538"></a>01538 
<a name="l01539"></a>01539         <a class="code" href="classKCal_1_1Scheduler.html#b5bb0cf1cf4c936a606b1968e85601b1" title="iTIP methods.">Scheduler::Method</a> method;
<a name="l01540"></a>01540         <span class="keywordflow">if</span>( bCompatMethodRequest )
<a name="l01541"></a>01541           method = Scheduler::Request;
<a name="l01542"></a>01542         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( bCompatMethodCancled )
<a name="l01543"></a>01543           method = Scheduler::Cancel;
<a name="l01544"></a>01544         <span class="keywordflow">else</span> <span class="keywordflow">if</span>( bCompatMethodAccepted || bCompatMethodAcceptedCond ||
<a name="l01545"></a>01545                  bCompatMethodDeclined ) {
<a name="l01546"></a>01546           method = Scheduler::Reply;
<a name="l01547"></a>01547           bIsReply = <span class="keyword">true</span>;
<a name="l01548"></a>01548         } <span class="keywordflow">else</span> {
<a name="l01549"></a>01549           <span class="comment">// pending(khz): verify whether "0x0c17" is the right tag ???</span>
<a name="l01550"></a>01550           <span class="comment">//</span>
<a name="l01551"></a>01551           <span class="comment">// at the moment we think there are REQUESTS and UPDATES</span>
<a name="l01552"></a>01552           <span class="comment">//</span>
<a name="l01553"></a>01553           <span class="comment">// but WHAT ABOUT REPLIES ???</span>
<a name="l01554"></a>01554           <span class="comment">//</span>
<a name="l01555"></a>01555           <span class="comment">//</span>
<a name="l01556"></a>01556 
<a name="l01557"></a>01557           <span class="keywordflow">if</span>( tnefMsg-&gt;findProp(0x0c17) == <span class="stringliteral">"1"</span> )
<a name="l01558"></a>01558             bIsReply = <span class="keyword">true</span>;
<a name="l01559"></a>01559           method = Scheduler::Request;
<a name="l01560"></a>01560         }
<a name="l01561"></a>01561 
<a name="l01563"></a>01563         <a class="code" href="classKCal_1_1ScheduleMessage.html" title="This class provides an encapsulation of a scheduling message.">ScheduleMessage</a> schedMsg(event, method, ScheduleMessage::Unknown );
<a name="l01564"></a>01564 
<a name="l01565"></a>01565         QString sSenderSearchKeyEmail( tnefMsg-&gt;findProp( 0x0C1D ) );
<a name="l01566"></a>01566 
<a name="l01567"></a>01567         <span class="keywordflow">if</span>( !sSenderSearchKeyEmail.isEmpty() ) {
<a name="l01568"></a>01568           <span class="keywordtype">int</span> colon = sSenderSearchKeyEmail.find( <span class="charliteral">':'</span> );
<a name="l01569"></a>01569           <span class="comment">// May be e.g. "SMTP:KHZ@KDE.ORG"</span>
<a name="l01570"></a>01570           <span class="keywordflow">if</span>( sSenderSearchKeyEmail.find( <span class="charliteral">':'</span> ) == -1 )
<a name="l01571"></a>01571             sSenderSearchKeyEmail.remove( 0, colon+1 );
<a name="l01572"></a>01572         }
<a name="l01573"></a>01573 
<a name="l01574"></a>01574         QString s( tnefMsg-&gt;findProp( 0x0e04 ) );
<a name="l01575"></a>01575         QStringList attendees = QStringList::split( <span class="charliteral">';'</span>, s );
<a name="l01576"></a>01576         <span class="keywordflow">if</span>( attendees.count() ) {
<a name="l01577"></a>01577           <span class="keywordflow">for</span>( QStringList::Iterator it = attendees.begin();
<a name="l01578"></a>01578                it != attendees.end(); ++it ) {
<a name="l01579"></a>01579             <span class="comment">// Skip all entries that have no '@' since these are</span>
<a name="l01580"></a>01580             <span class="comment">// no mail addresses</span>
<a name="l01581"></a>01581             <span class="keywordflow">if</span>( (*it).find(<span class="charliteral">'@'</span>) == -1 ) {
<a name="l01582"></a>01582               s = (*it).stripWhiteSpace();
<a name="l01583"></a>01583 
<a name="l01584"></a>01584               <a class="code" href="classKCal_1_1Attendee.html" title="This class represents information related to an attendee of an event.">Attendee</a> *attendee = <span class="keyword">new</span> <a class="code" href="classKCal_1_1Attendee.html" title="This class represents information related to an attendee of an event.">Attendee</a>( s, s, <span class="keyword">true</span> );
<a name="l01585"></a>01585               <span class="keywordflow">if</span>( bIsReply ) {
<a name="l01586"></a>01586                 <span class="keywordflow">if</span>( bCompatMethodAccepted )
<a name="l01587"></a>01587                   attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#df95a36a03d37474e3e9c559f9012026" title="Set status.">setStatus</a>( Attendee::Accepted );
<a name="l01588"></a>01588                 <span class="keywordflow">if</span>( bCompatMethodDeclined )
<a name="l01589"></a>01589                   attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#df95a36a03d37474e3e9c559f9012026" title="Set status.">setStatus</a>( Attendee::Declined );
<a name="l01590"></a>01590                 <span class="keywordflow">if</span>( bCompatMethodAcceptedCond )
<a name="l01591"></a>01591                   attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#df95a36a03d37474e3e9c559f9012026" title="Set status.">setStatus</a>(Attendee::Tentative);
<a name="l01592"></a>01592               } <span class="keywordflow">else</span> {
<a name="l01593"></a>01593                 attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#df95a36a03d37474e3e9c559f9012026" title="Set status.">setStatus</a>( Attendee::NeedsAction );
<a name="l01594"></a>01594                 attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#14d6f303c7e6389ed263d525118b6aa9" title="Set role of Attendee.">setRole</a>( Attendee::ReqParticipant );
<a name="l01595"></a>01595               }
<a name="l01596"></a>01596               <span class="keyword">event</span>-&gt;addAttendee(attendee);
<a name="l01597"></a>01597             }
<a name="l01598"></a>01598           }
<a name="l01599"></a>01599         } <span class="keywordflow">else</span> {
<a name="l01600"></a>01600           <span class="comment">// Oops, no attendees?</span>
<a name="l01601"></a>01601           <span class="comment">// This must be old style, let us use the PR_SENDER_SEARCH_KEY.</span>
<a name="l01602"></a>01602           s = sSenderSearchKeyEmail;
<a name="l01603"></a>01603           <span class="keywordflow">if</span>( !s.isEmpty() ) {
<a name="l01604"></a>01604             <a class="code" href="classKCal_1_1Attendee.html" title="This class represents information related to an attendee of an event.">Attendee</a> *attendee = <span class="keyword">new</span> <a class="code" href="classKCal_1_1Attendee.html" title="This class represents information related to an attendee of an event.">Attendee</a>( QString::null, QString::null,
<a name="l01605"></a>01605                                                <span class="keyword">true</span> );
<a name="l01606"></a>01606             <span class="keywordflow">if</span>( bIsReply ) {
<a name="l01607"></a>01607               <span class="keywordflow">if</span>( bCompatMethodAccepted )
<a name="l01608"></a>01608                 attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#df95a36a03d37474e3e9c559f9012026" title="Set status.">setStatus</a>( Attendee::Accepted );
<a name="l01609"></a>01609               <span class="keywordflow">if</span>( bCompatMethodAcceptedCond )
<a name="l01610"></a>01610                 attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#df95a36a03d37474e3e9c559f9012026" title="Set status.">setStatus</a>( Attendee::Declined );
<a name="l01611"></a>01611               <span class="keywordflow">if</span>( bCompatMethodDeclined )
<a name="l01612"></a>01612                 attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#df95a36a03d37474e3e9c559f9012026" title="Set status.">setStatus</a>( Attendee::Tentative );
<a name="l01613"></a>01613             } <span class="keywordflow">else</span> {
<a name="l01614"></a>01614               attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#df95a36a03d37474e3e9c559f9012026" title="Set status.">setStatus</a>(Attendee::NeedsAction);
<a name="l01615"></a>01615               attendee-&gt;<a class="code" href="classKCal_1_1Attendee.html#14d6f303c7e6389ed263d525118b6aa9" title="Set role of Attendee.">setRole</a>(Attendee::ReqParticipant);
<a name="l01616"></a>01616             }
<a name="l01617"></a>01617             <span class="keyword">event</span>-&gt;addAttendee(attendee);
<a name="l01618"></a>01618           }
<a name="l01619"></a>01619         }
<a name="l01620"></a>01620         s = tnefMsg-&gt;findProp( 0x0c1f ); <span class="comment">// look for organizer property</span>
<a name="l01621"></a>01621         <span class="keywordflow">if</span>( s.isEmpty() &amp;&amp; !bIsReply )
<a name="l01622"></a>01622           s = sSenderSearchKeyEmail;
<a name="l01623"></a>01623         <span class="comment">// TODO: Use the common name?</span>
<a name="l01624"></a>01624         <span class="keywordflow">if</span>( !s.isEmpty() )
<a name="l01625"></a>01625           event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#117a09a965803c17635d9a3631a66772" title="sets the organizer for the event">setOrganizer</a>( s );
<a name="l01626"></a>01626 
<a name="l01627"></a>01627         s = tnefMsg-&gt;findProp( 0x8516 ).replace( QChar( <span class="charliteral">'-'</span> ), QString::null )
<a name="l01628"></a>01628           .replace( QChar( <span class="charliteral">':'</span> ), QString::null );
<a name="l01629"></a>01629         <span class="keyword">event</span>-&gt;setDtStart( QDateTime::fromString( s ) ); <span class="comment">// ## Format??</span>
<a name="l01630"></a>01630 
<a name="l01631"></a>01631         s = tnefMsg-&gt;findProp( 0x8517 ).replace( QChar( <span class="charliteral">'-'</span> ), QString::null )
<a name="l01632"></a>01632           .replace( QChar( <span class="charliteral">':'</span> ), QString::null );
<a name="l01633"></a>01633         <span class="keyword">event</span>-&gt;setDtEnd( QDateTime::fromString( s ) );
<a name="l01634"></a>01634 
<a name="l01635"></a>01635         s = tnefMsg-&gt;findProp( 0x8208 );
<a name="l01636"></a>01636         <span class="keyword">event</span>-&gt;setLocation( s );
<a name="l01637"></a>01637 
<a name="l01638"></a>01638         <span class="comment">// is it OK to set this to OPAQUE always ??</span>
<a name="l01639"></a>01639         <span class="comment">//vPart += "TRANSP:OPAQUE\n"; ###FIXME, portme!</span>
<a name="l01640"></a>01640         <span class="comment">//vPart += "SEQUENCE:0\n";</span>
<a name="l01641"></a>01641 
<a name="l01642"></a>01642         <span class="comment">// is "0x0023" OK  -  or should we look for "0x0003" ??</span>
<a name="l01643"></a>01643         s = tnefMsg-&gt;findProp( 0x0023 );
<a name="l01644"></a>01644         <span class="keyword">event</span>-&gt;setUid( s );
<a name="l01645"></a>01645 
<a name="l01646"></a>01646         <span class="comment">// PENDING(khz): is this value in local timezone? Must it be</span>
<a name="l01647"></a>01647         <span class="comment">// adjusted? Most likely this is a bug in the server or in</span>
<a name="l01648"></a>01648         <span class="comment">// Outlook - we ignore it for now.</span>
<a name="l01649"></a>01649         s = tnefMsg-&gt;findProp( 0x8202 ).replace( QChar( <span class="charliteral">'-'</span> ), QString::null )
<a name="l01650"></a>01650           .replace( QChar( <span class="charliteral">':'</span> ), QString::null );
<a name="l01651"></a>01651         <span class="comment">// ### libkcal always uses currentDateTime()</span>
<a name="l01652"></a>01652         <span class="comment">// event-&gt;setDtStamp(QDateTime::fromString(s));</span>
<a name="l01653"></a>01653 
<a name="l01654"></a>01654         s = tnefMsg-&gt;findNamedProp( <span class="stringliteral">"Keywords"</span> );
<a name="l01655"></a>01655         <span class="keyword">event</span>-&gt;setCategories( s );
<a name="l01656"></a>01656 
<a name="l01657"></a>01657         s = tnefMsg-&gt;findProp( 0x1000 );
<a name="l01658"></a>01658         <span class="keyword">event</span>-&gt;setDescription( s );
<a name="l01659"></a>01659 
<a name="l01660"></a>01660         s = tnefMsg-&gt;findProp( 0x0070 );
<a name="l01661"></a>01661         <span class="keyword">event</span>-&gt;setSummary( s );
<a name="l01662"></a>01662 
<a name="l01663"></a>01663         s = tnefMsg-&gt;findProp( 0x0026 );
<a name="l01664"></a>01664         <span class="keyword">event</span>-&gt;setPriority( s.toInt() );
<a name="l01665"></a>01665 
<a name="l01666"></a>01666         <span class="comment">// is reminder flag set ?</span>
<a name="l01667"></a>01667         <span class="keywordflow">if</span>(!tnefMsg-&gt;findProp(0x8503).isEmpty()) {
<a name="l01668"></a>01668           <a class="code" href="classKCal_1_1Alarm.html" title="This class represents an alarm notification.">Alarm</a> *alarm = <span class="keyword">new</span> <a class="code" href="classKCal_1_1Alarm.html" title="This class represents an alarm notification.">Alarm</a>(event);
<a name="l01669"></a>01669           QDateTime highNoonTime =
<a name="l01670"></a>01670             pureISOToLocalQDateTime( tnefMsg-&gt;findProp( 0x8502 )
<a name="l01671"></a>01671                                      .replace( QChar( <span class="charliteral">'-'</span> ), <span class="stringliteral">""</span> )
<a name="l01672"></a>01672                                      .replace( QChar( <span class="charliteral">':'</span> ), <span class="stringliteral">""</span> ) );
<a name="l01673"></a>01673           QDateTime wakeMeUpTime =
<a name="l01674"></a>01674             pureISOToLocalQDateTime( tnefMsg-&gt;findProp( 0x8560, <span class="stringliteral">""</span> )
<a name="l01675"></a>01675                                      .replace( QChar( <span class="charliteral">'-'</span> ), <span class="stringliteral">""</span> )
<a name="l01676"></a>01676                                      .replace( QChar( <span class="charliteral">':'</span> ), <span class="stringliteral">""</span> ) );
<a name="l01677"></a>01677           alarm-&gt;<a class="code" href="classKCal_1_1Alarm.html#148abaa601477be008ce0ac348336084" title="Set the time to trigger an alarm.">setTime</a>(wakeMeUpTime);
<a name="l01678"></a>01678 
<a name="l01679"></a>01679           <span class="keywordflow">if</span>( highNoonTime.isValid() &amp;&amp; wakeMeUpTime.isValid() )
<a name="l01680"></a>01680             alarm-&gt;<a class="code" href="classKCal_1_1Alarm.html#a8a1584d8039829258846a3c7dfb9e17" title="Set offset of alarm in time relative to the start of the event.">setStartOffset</a>( <a class="code" href="classKCal_1_1Duration.html" title="This class represents a duration.">Duration</a>( highNoonTime, wakeMeUpTime ) );
<a name="l01681"></a>01681           <span class="keywordflow">else</span>
<a name="l01682"></a>01682             <span class="comment">// default: wake them up 15 minutes before the appointment</span>
<a name="l01683"></a>01683             alarm-&gt;<a class="code" href="classKCal_1_1Alarm.html#a8a1584d8039829258846a3c7dfb9e17" title="Set offset of alarm in time relative to the start of the event.">setStartOffset</a>( <a class="code" href="classKCal_1_1Duration.html" title="This class represents a duration.">Duration</a>( 15*60 ) );
<a name="l01684"></a>01684           alarm-&gt;<a class="code" href="classKCal_1_1Alarm.html#b5b69003ad8ad9450b8f4f542c234a8d" title="Set the alarm to be a display alarm.">setDisplayAlarm</a>( i18n( <span class="stringliteral">"Reminder"</span> ) );
<a name="l01685"></a>01685 
<a name="l01686"></a>01686           <span class="comment">// Sorry: the different action types are not known (yet)</span>
<a name="l01687"></a>01687           <span class="comment">//        so we always set 'DISPLAY' (no sounds, no images...)</span>
<a name="l01688"></a>01688           <span class="keyword">event</span>-&gt;addAlarm( alarm );
<a name="l01689"></a>01689         }
<a name="l01690"></a>01690         cal.<a class="code" href="classKCal_1_1CalendarLocal.html#92badd294078f18a2c2acbfab8ce10ac" title="Add Event to calendar.">addEvent</a>( event );
<a name="l01691"></a>01691         bOk = <span class="keyword">true</span>;
<a name="l01692"></a>01692         <span class="comment">// we finished composing a vCal</span>
<a name="l01693"></a>01693       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( bCompatClassNote || <span class="stringliteral">"IPM.CONTACT"</span> == msgClass ) {
<a name="l01694"></a>01694         addressee.setUid( stringProp( tnefMsg, attMSGID ) );
<a name="l01695"></a>01695         addressee.setFormattedName( stringProp( tnefMsg, MAPI_TAG_PR_DISPLAY_NAME ) );
<a name="l01696"></a>01696         addressee.insertEmail( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_EMAIL1EMAILADDRESS ), <span class="keyword">true</span> );
<a name="l01697"></a>01697         addressee.insertEmail( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_EMAIL2EMAILADDRESS ), <span class="keyword">false</span> );
<a name="l01698"></a>01698         addressee.insertEmail( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_EMAIL3EMAILADDRESS ), <span class="keyword">false</span> );
<a name="l01699"></a>01699         addressee.insertCustom( <span class="stringliteral">"KADDRESSBOOK"</span>, <span class="stringliteral">"X-IMAddress"</span>, sNamedProp( tnefMsg, MAPI_TAG_CONTACT_IMADDRESS ) );
<a name="l01700"></a>01700         addressee.insertCustom( <span class="stringliteral">"KADDRESSBOOK"</span>, <span class="stringliteral">"X-SpousesName"</span>, stringProp( tnefMsg, MAPI_TAG_PR_SPOUSE_NAME ) );
<a name="l01701"></a>01701         addressee.insertCustom( <span class="stringliteral">"KADDRESSBOOK"</span>, <span class="stringliteral">"X-ManagersName"</span>, stringProp( tnefMsg, MAPI_TAG_PR_MANAGER_NAME ) );
<a name="l01702"></a>01702         addressee.insertCustom( <span class="stringliteral">"KADDRESSBOOK"</span>, <span class="stringliteral">"X-AssistantsName"</span>, stringProp( tnefMsg, MAPI_TAG_PR_ASSISTANT ) );
<a name="l01703"></a>01703         addressee.insertCustom( <span class="stringliteral">"KADDRESSBOOK"</span>, <span class="stringliteral">"X-Department"</span>, stringProp( tnefMsg, MAPI_TAG_PR_DEPARTMENT_NAME ) );
<a name="l01704"></a>01704         addressee.insertCustom( <span class="stringliteral">"KADDRESSBOOK"</span>, <span class="stringliteral">"X-Office"</span>, stringProp( tnefMsg, MAPI_TAG_PR_OFFICE_LOCATION ) );
<a name="l01705"></a>01705         addressee.insertCustom( <span class="stringliteral">"KADDRESSBOOK"</span>, <span class="stringliteral">"X-Profession"</span>, stringProp( tnefMsg, MAPI_TAG_PR_PROFESSION ) );
<a name="l01706"></a>01706 
<a name="l01707"></a>01707         QString s = tnefMsg-&gt;findProp( MAPI_TAG_PR_WEDDING_ANNIVERSARY )
<a name="l01708"></a>01708           .replace( QChar( <span class="charliteral">'-'</span> ), QString::null )
<a name="l01709"></a>01709           .replace( QChar( <span class="charliteral">':'</span> ), QString::null );
<a name="l01710"></a>01710         <span class="keywordflow">if</span>( !s.isEmpty() )
<a name="l01711"></a>01711           addressee.insertCustom( <span class="stringliteral">"KADDRESSBOOK"</span>, <span class="stringliteral">"X-Anniversary"</span>, s );
<a name="l01712"></a>01712 
<a name="l01713"></a>01713         addressee.setUrl( KURL( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_WEBPAGE )  ) );
<a name="l01714"></a>01714 
<a name="l01715"></a>01715         <span class="comment">// collect parts of Name entry</span>
<a name="l01716"></a>01716         addressee.setFamilyName( stringProp( tnefMsg, MAPI_TAG_PR_SURNAME ) );
<a name="l01717"></a>01717         addressee.setGivenName( stringProp( tnefMsg, MAPI_TAG_PR_GIVEN_NAME ) );
<a name="l01718"></a>01718         addressee.setAdditionalName( stringProp( tnefMsg, MAPI_TAG_PR_MIDDLE_NAME ) );
<a name="l01719"></a>01719         addressee.setPrefix( stringProp( tnefMsg, MAPI_TAG_PR_DISPLAY_NAME_PREFIX ) );
<a name="l01720"></a>01720         addressee.setSuffix( stringProp( tnefMsg, MAPI_TAG_PR_GENERATION ) );
<a name="l01721"></a>01721 
<a name="l01722"></a>01722         addressee.setNickName( stringProp( tnefMsg, MAPI_TAG_PR_NICKNAME ) );
<a name="l01723"></a>01723         addressee.setRole( stringProp( tnefMsg, MAPI_TAG_PR_TITLE ) );
<a name="l01724"></a>01724         addressee.setOrganization( stringProp( tnefMsg, MAPI_TAG_PR_COMPANY_NAME ) );
<a name="l01725"></a>01725         <span class="comment">/*</span>
<a name="l01726"></a>01726 <span class="comment">        the MAPI property ID of this (multiline) )field is unknown:</span>
<a name="l01727"></a>01727 <span class="comment">        vPart += stringProp(tnefMsg, "\n","NOTE", ... , "" );</span>
<a name="l01728"></a>01728 <span class="comment">        */</span>
<a name="l01729"></a>01729 
<a name="l01730"></a>01730         KABC::Address adr;
<a name="l01731"></a>01731         adr.setPostOfficeBox( stringProp( tnefMsg, MAPI_TAG_PR_HOME_ADDRESS_PO_BOX ) );
<a name="l01732"></a>01732         adr.setStreet( stringProp( tnefMsg, MAPI_TAG_PR_HOME_ADDRESS_STREET ) );
<a name="l01733"></a>01733         adr.setLocality( stringProp( tnefMsg, MAPI_TAG_PR_HOME_ADDRESS_CITY ) );
<a name="l01734"></a>01734         adr.setRegion( stringProp( tnefMsg, MAPI_TAG_PR_HOME_ADDRESS_STATE_OR_PROVINCE ) );
<a name="l01735"></a>01735         adr.setPostalCode( stringProp( tnefMsg, MAPI_TAG_PR_HOME_ADDRESS_POSTAL_CODE ) );
<a name="l01736"></a>01736         adr.setCountry( stringProp( tnefMsg, MAPI_TAG_PR_HOME_ADDRESS_COUNTRY ) );
<a name="l01737"></a>01737         adr.setType(KABC::Address::Home);
<a name="l01738"></a>01738         addressee.insertAddress(adr);
<a name="l01739"></a>01739 
<a name="l01740"></a>01740         adr.setPostOfficeBox( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_BUSINESSADDRESSPOBOX ) );
<a name="l01741"></a>01741         adr.setStreet( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_BUSINESSADDRESSSTREET ) );
<a name="l01742"></a>01742         adr.setLocality( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_BUSINESSADDRESSCITY ) );
<a name="l01743"></a>01743         adr.setRegion( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_BUSINESSADDRESSSTATE ) );
<a name="l01744"></a>01744         adr.setPostalCode( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_BUSINESSADDRESSPOSTALCODE ) );
<a name="l01745"></a>01745         adr.setCountry( sNamedProp( tnefMsg, MAPI_TAG_CONTACT_BUSINESSADDRESSCOUNTRY ) );
<a name="l01746"></a>01746         adr.setType( KABC::Address::Work );
<a name="l01747"></a>01747         addressee.insertAddress( adr );
<a name="l01748"></a>01748 
<a name="l01749"></a>01749         adr.setPostOfficeBox( stringProp( tnefMsg, MAPI_TAG_PR_OTHER_ADDRESS_PO_BOX ) );
<a name="l01750"></a>01750         adr.setStreet( stringProp(tnefMsg, MAPI_TAG_PR_OTHER_ADDRESS_STREET ) );
<a name="l01751"></a>01751         adr.setLocality( stringProp(tnefMsg, MAPI_TAG_PR_OTHER_ADDRESS_CITY ) );
<a name="l01752"></a>01752         adr.setRegion( stringProp(tnefMsg, MAPI_TAG_PR_OTHER_ADDRESS_STATE_OR_PROVINCE ) );
<a name="l01753"></a>01753         adr.setPostalCode( stringProp(tnefMsg, MAPI_TAG_PR_OTHER_ADDRESS_POSTAL_CODE ) );
<a name="l01754"></a>01754         adr.setCountry( stringProp(tnefMsg, MAPI_TAG_PR_OTHER_ADDRESS_COUNTRY ) );
<a name="l01755"></a>01755         adr.setType( KABC::Address::Dom );
<a name="l01756"></a>01756         addressee.insertAddress(adr);
<a name="l01757"></a>01757 
<a name="l01758"></a>01758         <span class="comment">// problem: the 'other' address was stored by KOrganizer in</span>
<a name="l01759"></a>01759         <span class="comment">//          a line looking like the following one:</span>
<a name="l01760"></a>01760         <span class="comment">// vPart += "\nADR;TYPE=dom;TYPE=intl;TYPE=parcel;TYPE=postal;TYPE=work;TYPE=home:other_pobox;;other_str1\nother_str2;other_loc;other_region;other_pocode;other_country</span>
<a name="l01761"></a>01761 
<a name="l01762"></a>01762         QString nr;
<a name="l01763"></a>01763         nr = stringProp( tnefMsg, MAPI_TAG_PR_HOME_TELEPHONE_NUMBER );
<a name="l01764"></a>01764         addressee.insertPhoneNumber( KABC::PhoneNumber( nr, KABC::PhoneNumber::Home ) );
<a name="l01765"></a>01765         nr = stringProp( tnefMsg, MAPI_TAG_PR_BUSINESS_TELEPHONE_NUMBER );
<a name="l01766"></a>01766         addressee.insertPhoneNumber( KABC::PhoneNumber( nr, KABC::PhoneNumber::Work ) );
<a name="l01767"></a>01767         nr = stringProp( tnefMsg, MAPI_TAG_PR_MOBILE_TELEPHONE_NUMBER );
<a name="l01768"></a>01768         addressee.insertPhoneNumber( KABC::PhoneNumber( nr, KABC::PhoneNumber::Cell ) );
<a name="l01769"></a>01769         nr = stringProp( tnefMsg, MAPI_TAG_PR_HOME_FAX_NUMBER );
<a name="l01770"></a>01770         addressee.insertPhoneNumber( KABC::PhoneNumber( nr, KABC::PhoneNumber::Fax | KABC::PhoneNumber::Home ) );
<a name="l01771"></a>01771         nr = stringProp( tnefMsg, MAPI_TAG_PR_BUSINESS_FAX_NUMBER );
<a name="l01772"></a>01772         addressee.insertPhoneNumber( KABC::PhoneNumber( nr, KABC::PhoneNumber::Fax | KABC::PhoneNumber::Work ) );
<a name="l01773"></a>01773 
<a name="l01774"></a>01774         s = tnefMsg-&gt;findProp( MAPI_TAG_PR_BIRTHDAY )
<a name="l01775"></a>01775           .replace( QChar( <span class="charliteral">'-'</span> ), QString::null )
<a name="l01776"></a>01776           .replace( QChar( <span class="charliteral">':'</span> ), QString::null );
<a name="l01777"></a>01777         <span class="keywordflow">if</span>( !s.isEmpty() )
<a name="l01778"></a>01778           addressee.setBirthday( QDateTime::fromString( s ) );
<a name="l01779"></a>01779 
<a name="l01780"></a>01780         bOk = ( !addressee.isEmpty() );
<a name="l01781"></a>01781       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( <span class="stringliteral">"IPM.NOTE"</span> == msgClass ) {
<a name="l01782"></a>01782 
<a name="l01783"></a>01783       } <span class="comment">// else if ... and so on ...</span>
<a name="l01784"></a>01784     }
<a name="l01785"></a>01785   }
<a name="l01786"></a>01786 
<a name="l01787"></a>01787   <span class="comment">// Compose return string</span>
<a name="l01788"></a>01788   QString iCal = calFormat.<a class="code" href="classKCal_1_1ICalFormat.html#eed3930a405f0962bfb54f054fdc8982" title="Return calendar information as string.">toString</a>( &amp;cal );
<a name="l01789"></a>01789   <span class="keywordflow">if</span>( !iCal.isEmpty() )
<a name="l01790"></a>01790     <span class="comment">// This was an iCal</span>
<a name="l01791"></a>01791     <span class="keywordflow">return</span> iCal;
<a name="l01792"></a>01792 
<a name="l01793"></a>01793   <span class="comment">// Not an iCal - try a vCard</span>
<a name="l01794"></a>01794   KABC::VCardConverter converter;
<a name="l01795"></a>01795   <span class="keywordflow">return</span> converter.createVCard( addressee );
<a name="l01796"></a>01796 }
<a name="l01797"></a>01797 
<a name="l01798"></a>01798 
<a name="l01799"></a>01799 QString IncidenceFormatter::formatTNEFInvitation( <span class="keyword">const</span> QByteArray&amp; tnef,
<a name="l01800"></a>01800         <a class="code" href="classKCal_1_1Calendar.html" title="This is the main &amp;quot;calendar&amp;quot; object class.">Calendar</a> *mCalendar, InvitationFormatterHelper *helper )
<a name="l01801"></a>01801 {
<a name="l01802"></a>01802   QString vPart = <a class="code" href="classKCal_1_1IncidenceFormatter.html#b3b6cbbcd5e9027bad9dcd9cb506ec76">IncidenceFormatter::msTNEFToVPart</a>( tnef );
<a name="l01803"></a>01803   QString iCal = IncidenceFormatter::formatICalInvitation( vPart, mCalendar, helper );
<a name="l01804"></a>01804   <span class="keywordflow">if</span>( !iCal.isEmpty() )
<a name="l01805"></a>01805     <span class="keywordflow">return</span> iCal;
<a name="l01806"></a>01806   <span class="keywordflow">return</span> vPart;
<a name="l01807"></a>01807 }
<a name="l01808"></a>01808 
<a name="l01809"></a>01809 
<a name="l01810"></a>01810 
<a name="l01811"></a>01811 
<a name="l01812"></a>01812 <span class="comment">/*******************************************************************</span>
<a name="l01813"></a>01813 <span class="comment"> *  Helper functions for the Incidence tooltips</span>
<a name="l01814"></a>01814 <span class="comment"> *******************************************************************/</span>
<a name="l01815"></a>01815 
<a name="l01816"></a>01816 <span class="keyword">class </span>IncidenceFormatter::ToolTipVisitor : <span class="keyword">public</span> <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a>::Visitor
<a name="l01817"></a>01817 {
<a name="l01818"></a>01818   <span class="keyword">public</span>:
<a name="l01819"></a>01819     ToolTipVisitor() : mRichText( true ), mResult( <span class="stringliteral">""</span> ) {}
<a name="l01820"></a>01820 
<a name="l01821"></a>01821     <span class="keywordtype">bool</span> act( <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a> *incidence, <span class="keywordtype">bool</span> richText=<span class="keyword">true</span>)
<a name="l01822"></a>01822     {
<a name="l01823"></a>01823       mRichText = richText;
<a name="l01824"></a>01824       mResult = <span class="stringliteral">""</span>;
<a name="l01825"></a>01825       <span class="keywordflow">return</span> incidence ? incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#d99ad7b4b99e8de052ffaf8541590ff3" title="Accept IncidenceVisitor.">accept</a>( *<span class="keyword">this</span> ) : <span class="keyword">false</span>;
<a name="l01826"></a>01826     }
<a name="l01827"></a>01827     QString result()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mResult; }
<a name="l01828"></a>01828 
<a name="l01829"></a>01829   <span class="keyword">protected</span>:
<a name="l01830"></a>01830     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event );
<a name="l01831"></a>01831     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a> *todo );
<a name="l01832"></a>01832     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a> *journal );
<a name="l01833"></a>01833     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1FreeBusy.html" title="This class provides information about free/busy time of a calendar user.">FreeBusy</a> *fb );
<a name="l01834"></a>01834 
<a name="l01835"></a>01835     QString dateRangeText( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a>*event );
<a name="l01836"></a>01836     QString dateRangeText( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a> *todo );
<a name="l01837"></a>01837     QString dateRangeText( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a> *journal );
<a name="l01838"></a>01838     QString dateRangeText( <a class="code" href="classKCal_1_1FreeBusy.html" title="This class provides information about free/busy time of a calendar user.">FreeBusy</a> *fb );
<a name="l01839"></a>01839 
<a name="l01840"></a>01840     QString generateToolTip( <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a>* incidence, QString dtRangeText );
<a name="l01841"></a>01841 
<a name="l01842"></a>01842   <span class="keyword">protected</span>:
<a name="l01843"></a>01843     <span class="keywordtype">bool</span> mRichText;
<a name="l01844"></a>01844     QString mResult;
<a name="l01845"></a>01845 };
<a name="l01846"></a>01846 
<a name="l01847"></a>01847 QString IncidenceFormatter::ToolTipVisitor::dateRangeText( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a>*event )
<a name="l01848"></a>01848 {
<a name="l01849"></a>01849   QString ret;
<a name="l01850"></a>01850   QString tmp;
<a name="l01851"></a>01851   <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1Event.html#579d969ee1963d287f5662554a5aaa4b" title="Return true if the event spans multiple days, otherwise return false.">isMultiDay</a>() ) {
<a name="l01852"></a>01852 
<a name="l01853"></a>01853     tmp = <span class="stringliteral">"&lt;br&gt;"</span> + i18n(<span class="stringliteral">"Event start"</span>, <span class="stringliteral">"&lt;i&gt;From:&lt;/i&gt;&amp;nbsp;%1"</span>);
<a name="l01854"></a>01854     <span class="keywordflow">if</span> (event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>())
<a name="l01855"></a>01855       ret += tmp.arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>) );
<a name="l01856"></a>01856     <span class="keywordflow">else</span>
<a name="l01857"></a>01857       ret += tmp.arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#94846b495fa6de8138dca8f997e48e57" title="returns an event&amp;#39;s starting date and time as a string formatted according to...">dtStartStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>) );
<a name="l01858"></a>01858 
<a name="l01859"></a>01859     tmp = <span class="stringliteral">"&lt;br&gt;"</span> + i18n(<span class="stringliteral">"Event end"</span>,<span class="stringliteral">"&lt;i&gt;To:&lt;/i&gt;&amp;nbsp;%1"</span>);
<a name="l01860"></a>01860     <span class="keywordflow">if</span> (event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>())
<a name="l01861"></a>01861       ret += tmp.arg( event-&gt;<a class="code" href="classKCal_1_1Event.html#4138e4c8a9218b9bdf55e0e8f471341d" title="Return end date as string formatted according to the users locale settings.">dtEndDateStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>) );
<a name="l01862"></a>01862     <span class="keywordflow">else</span>
<a name="l01863"></a>01863       ret += tmp.arg( event-&gt;<a class="code" href="classKCal_1_1Event.html#22e773f909419de771c0635ba1297e12" title="Return end date and time as string formatted according to the users locale settings...">dtEndStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>) );
<a name="l01864"></a>01864 
<a name="l01865"></a>01865   } <span class="keywordflow">else</span> {
<a name="l01866"></a>01866 
<a name="l01867"></a>01867     ret += <span class="stringliteral">"&lt;br&gt;"</span>+i18n(<span class="stringliteral">"&lt;i&gt;Date:&lt;/i&gt;&amp;nbsp;%1"</span>).
<a name="l01868"></a>01868         arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>) );
<a name="l01869"></a>01869     <span class="keywordflow">if</span> ( !event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l01870"></a>01870       <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#ba22e2b05348fd4f18859b5e434bde3e" title="returns an event&amp;#39;s starting time as a string formatted according to the users...">dtStartTimeStr</a>() == <span class="keyword">event</span>-&gt;dtEndTimeStr() ) { <span class="comment">// to prevent 'Time: 17:00 - 17:00'</span>
<a name="l01871"></a>01871         tmp = <span class="stringliteral">"&lt;br&gt;"</span> + i18n(<span class="stringliteral">"time for event, &amp;nbsp; to prevent ugly line breaks"</span>,
<a name="l01872"></a>01872         <span class="stringliteral">"&lt;i&gt;Time:&lt;/i&gt;&amp;nbsp;%1"</span>).
<a name="l01873"></a>01873         arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#ba22e2b05348fd4f18859b5e434bde3e" title="returns an event&amp;#39;s starting time as a string formatted according to the users...">dtStartTimeStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>) );
<a name="l01874"></a>01874       } <span class="keywordflow">else</span> {
<a name="l01875"></a>01875         tmp = <span class="stringliteral">"&lt;br&gt;"</span> + i18n(<span class="stringliteral">"time range for event, &amp;nbsp; to prevent ugly line breaks"</span>,
<a name="l01876"></a>01876         <span class="stringliteral">"&lt;i&gt;Time:&lt;/i&gt;&amp;nbsp;%1&amp;nbsp;-&amp;nbsp;%2"</span>).
<a name="l01877"></a>01877         arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#ba22e2b05348fd4f18859b5e434bde3e" title="returns an event&amp;#39;s starting time as a string formatted according to the users...">dtStartTimeStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>) ).
<a name="l01878"></a>01878         arg( event-&gt;<a class="code" href="classKCal_1_1Event.html#90ae758766ab822ee69fc0e4524f5359" title="Return end time as string formatted according to the users locale settings.">dtEndTimeStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>) );
<a name="l01879"></a>01879       }
<a name="l01880"></a>01880       ret += tmp;
<a name="l01881"></a>01881     }
<a name="l01882"></a>01882 
<a name="l01883"></a>01883   }
<a name="l01884"></a>01884   <span class="keywordflow">return</span> ret;
<a name="l01885"></a>01885 }
<a name="l01886"></a>01886 
<a name="l01887"></a>01887 QString IncidenceFormatter::ToolTipVisitor::dateRangeText( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a>*todo )
<a name="l01888"></a>01888 {
<a name="l01889"></a>01889   QString ret;
<a name="l01890"></a>01890   <span class="keywordtype">bool</span> floats( todo-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() );
<a name="l01891"></a>01891   <span class="keywordflow">if</span> (todo-&gt;<a class="code" href="classKCal_1_1Todo.html#1fb5a233b65e2c35f9cb03460bb68c30" title="Returns true if the todo has a start date, otherwise return false.">hasStartDate</a>())
<a name="l01892"></a>01892     <span class="comment">// No need to add &lt;i&gt; here. This is separated issue and each line</span>
<a name="l01893"></a>01893     <span class="comment">// is very visible on its own. On the other hand... Yes, I like it</span>
<a name="l01894"></a>01894     <span class="comment">// italics here :)</span>
<a name="l01895"></a>01895     ret += <span class="stringliteral">"&lt;br&gt;"</span> + i18n(<span class="stringliteral">"&lt;i&gt;Start:&lt;/i&gt;&amp;nbsp;%1"</span>).arg(
<a name="l01896"></a>01896       (floats)
<a name="l01897"></a>01897         ?(todo-&gt;<a class="code" href="classKCal_1_1Todo.html#76e9a4052617ebb42bd4546e76e5604f" title="Returns an todo&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>))
<a name="l01898"></a>01898         :(todo-&gt;<a class="code" href="classKCal_1_1Todo.html#ce7bb432d809d48af76490d69eb27a95" title="Returns an todo&amp;#39;s starting date and time as a string formatted according to the...">dtStartStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>)) ) ;
<a name="l01899"></a>01899   <span class="keywordflow">if</span> (todo-&gt;<a class="code" href="classKCal_1_1Todo.html#a40c65f6e9024015f7546e8749436b12" title="Returns true if the todo has a due date, otherwise return false.">hasDueDate</a>())
<a name="l01900"></a>01900     ret += <span class="stringliteral">"&lt;br&gt;"</span> + i18n(<span class="stringliteral">"&lt;i&gt;Due:&lt;/i&gt;&amp;nbsp;%1"</span>).arg(
<a name="l01901"></a>01901       (floats)
<a name="l01902"></a>01902         ?(todo-&gt;<a class="code" href="classKCal_1_1Todo.html#bbae1ac010a13aefaf4c6564a8a610d8" title="Returns due date as string formatted according to the users locale settings.">dtDueDateStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>))
<a name="l01903"></a>01903         :(todo-&gt;<a class="code" href="classKCal_1_1Todo.html#59c85e3c3ba760c61b83b30e09bac50b" title="Returns due date and time as string formatted according to the users locale settings...">dtDueStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>)) );
<a name="l01904"></a>01904   <span class="keywordflow">if</span> (todo-&gt;<a class="code" href="classKCal_1_1Todo.html#c935ce3f04f7e9d828d3f954de585af6" title="Returns true if the todo is 100% completed, otherwise return false.">isCompleted</a>())
<a name="l01905"></a>01905     ret += <span class="stringliteral">"&lt;br&gt;"</span> + i18n(<span class="stringliteral">"&lt;i&gt;Completed:&lt;/i&gt;&amp;nbsp;%1"</span>).arg( todo-&gt;<a class="code" href="classKCal_1_1Todo.html#cfb13bad32697c0d58a4c5949ca38176" title="Returns string contaiting date and time when the todo was completed formatted according...">completedStr</a>().replace(<span class="stringliteral">" "</span>, <span class="stringliteral">"&amp;nbsp;"</span>) );
<a name="l01906"></a>01906   <span class="keywordflow">else</span>
<a name="l01907"></a>01907     ret += <span class="stringliteral">"&lt;br&gt;"</span> + i18n(<span class="stringliteral">"%1 % completed"</span>).arg(todo-&gt;<a class="code" href="classKCal_1_1Todo.html#e269def11f2ac042c997b3d95f8521a1" title="Returns how many percent of the task are completed.">percentComplete</a>());
<a name="l01908"></a>01908 
<a name="l01909"></a>01909   <span class="keywordflow">return</span> ret;
<a name="l01910"></a>01910 }
<a name="l01911"></a>01911 
<a name="l01912"></a>01912 QString IncidenceFormatter::ToolTipVisitor::dateRangeText( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a>*journal )
<a name="l01913"></a>01913 {
<a name="l01914"></a>01914   QString ret;
<a name="l01915"></a>01915   <span class="keywordflow">if</span> (journal-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#5419a946a4e5715a0c34ec2c7e04cd9b" title="returns an event&amp;#39;s starting date/time as a QDateTime.">dtStart</a>().isValid() ) {
<a name="l01916"></a>01916     ret += <span class="stringliteral">"&lt;br&gt;"</span> + i18n(<span class="stringliteral">"&lt;i&gt;Date:&lt;/i&gt;&amp;nbsp;%1"</span>).arg( journal-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>( <span class="keyword">false</span> ) );
<a name="l01917"></a>01917   }
<a name="l01918"></a>01918   <span class="keywordflow">return</span> ret;
<a name="l01919"></a>01919 }
<a name="l01920"></a>01920 
<a name="l01921"></a>01921 QString IncidenceFormatter::ToolTipVisitor::dateRangeText( <a class="code" href="classKCal_1_1FreeBusy.html" title="This class provides information about free/busy time of a calendar user.">FreeBusy</a> *fb )
<a name="l01922"></a>01922 {
<a name="l01923"></a>01923   QString tmp( <span class="stringliteral">"&lt;br&gt;"</span> + i18n(<span class="stringliteral">"&lt;i&gt;Period start:&lt;/i&gt;&amp;nbsp;%1"</span>) );
<a name="l01924"></a>01924   QString ret = tmp.arg( KGlobal::locale()-&gt;formatDateTime( fb-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#5419a946a4e5715a0c34ec2c7e04cd9b" title="returns an event&amp;#39;s starting date/time as a QDateTime.">dtStart</a>() ) );
<a name="l01925"></a>01925   tmp = <span class="stringliteral">"&lt;br&gt;"</span> + i18n(<span class="stringliteral">"&lt;i&gt;Period start:&lt;/i&gt;&amp;nbsp;%1"</span>);
<a name="l01926"></a>01926   ret += tmp.arg( KGlobal::locale()-&gt;formatDateTime( fb-&gt;<a class="code" href="classKCal_1_1FreeBusy.html#c20a78466c981ba719c43d7257ebf577">dtEnd</a>() ) );
<a name="l01927"></a>01927   <span class="keywordflow">return</span> ret;
<a name="l01928"></a>01928 }
<a name="l01929"></a>01929 
<a name="l01930"></a>01930 
<a name="l01931"></a>01931 
<a name="l01932"></a>01932 <span class="keywordtype">bool</span> IncidenceFormatter::ToolTipVisitor::visit( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event )
<a name="l01933"></a>01933 {
<a name="l01934"></a>01934   mResult = generateToolTip( event, dateRangeText( event ) );
<a name="l01935"></a>01935   <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l01936"></a>01936 }
<a name="l01937"></a>01937 
<a name="l01938"></a>01938 <span class="keywordtype">bool</span> IncidenceFormatter::ToolTipVisitor::visit( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a> *todo )
<a name="l01939"></a>01939 {
<a name="l01940"></a>01940   mResult = generateToolTip( todo, dateRangeText( todo ) );
<a name="l01941"></a>01941   <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l01942"></a>01942 }
<a name="l01943"></a>01943 
<a name="l01944"></a>01944 <span class="keywordtype">bool</span> IncidenceFormatter::ToolTipVisitor::visit( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a> *journal )
<a name="l01945"></a>01945 {
<a name="l01946"></a>01946   mResult = generateToolTip( journal, dateRangeText( journal ) );
<a name="l01947"></a>01947   <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l01948"></a>01948 }
<a name="l01949"></a>01949 
<a name="l01950"></a>01950 <span class="keywordtype">bool</span> IncidenceFormatter::ToolTipVisitor::visit( <a class="code" href="classKCal_1_1FreeBusy.html" title="This class provides information about free/busy time of a calendar user.">FreeBusy</a> *fb )
<a name="l01951"></a>01951 {
<a name="l01952"></a>01952   mResult = <span class="stringliteral">"&lt;qt&gt;&lt;b&gt;"</span> + i18n(<span class="stringliteral">"Free/Busy information for %1"</span>)
<a name="l01953"></a>01953         .arg(fb-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#eb4c2be5ce3f3961dc10204fbc5206a7">organizer</a>().<a class="code" href="classKCal_1_1Person.html#5928a154f4ff67ef7f67018dd0ec2fbf">fullName</a>()) + <span class="stringliteral">"&lt;/b&gt;"</span>;
<a name="l01954"></a>01954   mResult += dateRangeText( fb );
<a name="l01955"></a>01955   mResult += <span class="stringliteral">"&lt;/qt&gt;"</span>;
<a name="l01956"></a>01956   <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l01957"></a>01957 }
<a name="l01958"></a>01958 
<a name="l01959"></a>01959 QString IncidenceFormatter::ToolTipVisitor::generateToolTip( <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a>* incidence, QString dtRangeText )
<a name="l01960"></a>01960 {
<a name="l01961"></a>01961   <span class="keywordflow">if</span> ( !incidence )
<a name="l01962"></a>01962     <span class="keywordflow">return</span> QString::null;
<a name="l01963"></a>01963 
<a name="l01964"></a>01964   QString tmp = <span class="stringliteral">"&lt;qt&gt;&lt;b&gt;"</span>+ incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>().replace(<span class="stringliteral">"\n"</span>, <span class="stringliteral">"&lt;br&gt;"</span>)+<span class="stringliteral">"&lt;/b&gt;"</span>;
<a name="l01965"></a>01965 
<a name="l01966"></a>01966   tmp += dtRangeText;
<a name="l01967"></a>01967 
<a name="l01968"></a>01968   <span class="keywordflow">if</span> (!incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#d147473a07f26ad738fbae9501eb1c3d" title="Return the event&amp;#39;s/todo&amp;#39;s location.">location</a>().isEmpty()) {
<a name="l01969"></a>01969     <span class="comment">// Put Location: in italics</span>
<a name="l01970"></a>01970     tmp += <span class="stringliteral">"&lt;br&gt;"</span>+i18n(<span class="stringliteral">"&lt;i&gt;Location:&lt;/i&gt;&amp;nbsp;%1"</span>).
<a name="l01971"></a>01971       arg( incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#d147473a07f26ad738fbae9501eb1c3d" title="Return the event&amp;#39;s/todo&amp;#39;s location.">location</a>().replace(<span class="stringliteral">"\n"</span>, <span class="stringliteral">"&lt;br&gt;"</span>) );
<a name="l01972"></a>01972   }
<a name="l01973"></a>01973   <span class="keywordflow">if</span> (!incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>().isEmpty()) {
<a name="l01974"></a>01974     QString desc(incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>());
<a name="l01975"></a>01975     <span class="keywordflow">if</span> (desc.length()&gt;120) {
<a name="l01976"></a>01976       desc = desc.left(120) + <span class="stringliteral">"..."</span>;
<a name="l01977"></a>01977     }
<a name="l01978"></a>01978     tmp += <span class="stringliteral">"&lt;br&gt;----------&lt;br&gt;"</span> + i18n(<span class="stringliteral">"&lt;i&gt;Description:&lt;/i&gt;&lt;br&gt;"</span>) + desc.replace(<span class="stringliteral">"\n"</span>, <span class="stringliteral">"&lt;br&gt;"</span>);
<a name="l01979"></a>01979   }
<a name="l01980"></a>01980   tmp += <span class="stringliteral">"&lt;/qt&gt;"</span>;
<a name="l01981"></a>01981   <span class="keywordflow">return</span> tmp;
<a name="l01982"></a>01982 }
<a name="l01983"></a>01983 
<a name="l01984"></a>01984 QString IncidenceFormatter::toolTipString( <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a> *incidence, <span class="keywordtype">bool</span> richText )
<a name="l01985"></a>01985 {
<a name="l01986"></a>01986   ToolTipVisitor v;
<a name="l01987"></a>01987   <span class="keywordflow">if</span> ( v.act( incidence, richText ) ) {
<a name="l01988"></a>01988     <span class="keywordflow">return</span> v.result();
<a name="l01989"></a>01989   } <span class="keywordflow">else</span>
<a name="l01990"></a>01990     <span class="keywordflow">return</span> QString::null;
<a name="l01991"></a>01991 }
<a name="l01992"></a>01992 
<a name="l01993"></a>01993 
<a name="l01994"></a>01994 
<a name="l01995"></a>01995 
<a name="l01996"></a>01996 <span class="comment">/*******************************************************************</span>
<a name="l01997"></a>01997 <span class="comment"> *  Helper functions for the Incidence tooltips</span>
<a name="l01998"></a>01998 <span class="comment"> *******************************************************************/</span>
<a name="l01999"></a>01999 
<a name="l02000"></a>02000 <span class="keyword">class </span>IncidenceFormatter::MailBodyVisitor : <span class="keyword">public</span> <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a>::Visitor
<a name="l02001"></a>02001 {
<a name="l02002"></a>02002   <span class="keyword">public</span>:
<a name="l02003"></a>02003     MailBodyVisitor() : mResult( <span class="stringliteral">""</span> ) {}
<a name="l02004"></a>02004 
<a name="l02005"></a>02005     <span class="keywordtype">bool</span> act( <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a> *incidence )
<a name="l02006"></a>02006     {
<a name="l02007"></a>02007       mResult = <span class="stringliteral">""</span>;
<a name="l02008"></a>02008       <span class="keywordflow">return</span> incidence ? incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#d99ad7b4b99e8de052ffaf8541590ff3" title="Accept IncidenceVisitor.">accept</a>( *<span class="keyword">this</span> ) : <span class="keyword">false</span>;
<a name="l02009"></a>02009     }
<a name="l02010"></a>02010     QString result()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mResult; }
<a name="l02011"></a>02011 
<a name="l02012"></a>02012   <span class="keyword">protected</span>:
<a name="l02013"></a>02013     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event );
<a name="l02014"></a>02014     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a> *todo );
<a name="l02015"></a>02015     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a> *journal );
<a name="l02016"></a>02016     <span class="keywordtype">bool</span> visit( <a class="code" href="classKCal_1_1FreeBusy.html" title="This class provides information about free/busy time of a calendar user.">FreeBusy</a> * ) { mResult = i18n(<span class="stringliteral">"This is a Free Busy Object"</span>); <span class="keywordflow">return</span> !mResult.isEmpty(); }
<a name="l02017"></a>02017   <span class="keyword">protected</span>:
<a name="l02018"></a>02018     QString mResult;
<a name="l02019"></a>02019 };
<a name="l02020"></a>02020 
<a name="l02021"></a>02021 
<a name="l02022"></a>02022 <span class="keyword">static</span> QString mailBodyIncidence( <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a> *incidence )
<a name="l02023"></a>02023 {
<a name="l02024"></a>02024   QString body;
<a name="l02025"></a>02025   <span class="keywordflow">if</span> ( !incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>().isEmpty() ) {
<a name="l02026"></a>02026     body += i18n(<span class="stringliteral">"Summary: %1\n"</span>).arg( incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#5f6e41afa4e1b167c4b49e603506b34c" title="Return short summary.">summary</a>() );
<a name="l02027"></a>02027   }
<a name="l02028"></a>02028   <span class="keywordflow">if</span> ( !incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#eb4c2be5ce3f3961dc10204fbc5206a7">organizer</a>().<a class="code" href="classKCal_1_1Person.html#518b8f369213cf81edf1be2f68110556">isEmpty</a>() ) {
<a name="l02029"></a>02029     body += i18n(<span class="stringliteral">"Organizer: %1\n"</span>).arg( incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#eb4c2be5ce3f3961dc10204fbc5206a7">organizer</a>().<a class="code" href="classKCal_1_1Person.html#5928a154f4ff67ef7f67018dd0ec2fbf">fullName</a>() );
<a name="l02030"></a>02030   }
<a name="l02031"></a>02031   <span class="keywordflow">if</span> ( !incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#d147473a07f26ad738fbae9501eb1c3d" title="Return the event&amp;#39;s/todo&amp;#39;s location.">location</a>().isEmpty() ) {
<a name="l02032"></a>02032     body += i18n(<span class="stringliteral">"Location: %1\n"</span>).arg( incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#d147473a07f26ad738fbae9501eb1c3d" title="Return the event&amp;#39;s/todo&amp;#39;s location.">location</a>() );
<a name="l02033"></a>02033   }
<a name="l02034"></a>02034   <span class="keywordflow">return</span> body;
<a name="l02035"></a>02035 }
<a name="l02036"></a>02036 
<a name="l02037"></a>02037 <span class="keywordtype">bool</span> IncidenceFormatter::MailBodyVisitor::visit( <a class="code" href="classKCal_1_1Event.html" title="This class provides an Event in the sense of RFC2445.">Event</a> *event )
<a name="l02038"></a>02038 {
<a name="l02039"></a>02039   QString recurrence[]= {i18n(<span class="stringliteral">"no recurrence"</span>, <span class="stringliteral">"None"</span>),
<a name="l02040"></a>02040     i18n(<span class="stringliteral">"Minutely"</span>), i18n(<span class="stringliteral">"Hourly"</span>), i18n(<span class="stringliteral">"Daily"</span>),
<a name="l02041"></a>02041     i18n(<span class="stringliteral">"Weekly"</span>), i18n(<span class="stringliteral">"Monthly Same Day"</span>), i18n(<span class="stringliteral">"Monthly Same Position"</span>),
<a name="l02042"></a>02042     i18n(<span class="stringliteral">"Yearly"</span>), i18n(<span class="stringliteral">"Yearly"</span>), i18n(<span class="stringliteral">"Yearly"</span>)};
<a name="l02043"></a>02043 
<a name="l02044"></a>02044   mResult = mailBodyIncidence( event );
<a name="l02045"></a>02045   mResult += i18n(<span class="stringliteral">"Start Date: %1\n"</span>).arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>() );
<a name="l02046"></a>02046   <span class="keywordflow">if</span> ( !event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l02047"></a>02047     mResult += i18n(<span class="stringliteral">"Start Time: %1\n"</span>).arg( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#ba22e2b05348fd4f18859b5e434bde3e" title="returns an event&amp;#39;s starting time as a string formatted according to the users...">dtStartTimeStr</a>() );
<a name="l02048"></a>02048   }
<a name="l02049"></a>02049   <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#5419a946a4e5715a0c34ec2c7e04cd9b" title="returns an event&amp;#39;s starting date/time as a QDateTime.">dtStart</a>() != <span class="keyword">event</span>-&gt;dtEnd() ) {
<a name="l02050"></a>02050     mResult += i18n(<span class="stringliteral">"End Date: %1\n"</span>).arg( event-&gt;<a class="code" href="classKCal_1_1Event.html#4138e4c8a9218b9bdf55e0e8f471341d" title="Return end date as string formatted according to the users locale settings.">dtEndDateStr</a>() );
<a name="l02051"></a>02051   }
<a name="l02052"></a>02052   <span class="keywordflow">if</span> ( !event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l02053"></a>02053     mResult += i18n(<span class="stringliteral">"End Time: %1\n"</span>).arg( event-&gt;<a class="code" href="classKCal_1_1Event.html#90ae758766ab822ee69fc0e4524f5359" title="Return end time as string formatted according to the users locale settings.">dtEndTimeStr</a>() );
<a name="l02054"></a>02054   }
<a name="l02055"></a>02055   <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1Incidence.html#81ad15662138be07f0d55be6b075b043" title="Forward to Recurrence::doesRecur().">doesRecur</a>() ) {
<a name="l02056"></a>02056     <a class="code" href="classKCal_1_1Recurrence.html" title="This class represents a recurrence rule for a calendar incidence.">Recurrence</a> *recur = <span class="keyword">event</span>-&gt;recurrence();
<a name="l02057"></a>02057     <span class="comment">// TODO: Merge these two to one of the form "Recurs every 3 days"</span>
<a name="l02058"></a>02058     mResult += i18n(<span class="stringliteral">"Recurs: %1\n"</span>)
<a name="l02059"></a>02059              .arg( recurrence[ recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#9b3d0a238b28bc8602a2036e11ef2fcf" title="Returns the event&amp;#39;s recurrence status.">recurrenceType</a>() ] );
<a name="l02060"></a>02060     mResult += i18n(<span class="stringliteral">"Frequency: %1\n"</span>)
<a name="l02061"></a>02061              .arg( event-&gt;<a class="code" href="classKCal_1_1Incidence.html#d06004593e064a37d08c96f9ae16735e" title="Return the recurrence rule associated with this incidence.">recurrence</a>()-&gt;<a class="code" href="classKCal_1_1Recurrence.html#85afd958b67570632dece34bc9920849" title="Returns frequency of recurrence, in terms of the recurrence time period type.">frequency</a>() );
<a name="l02062"></a>02062 
<a name="l02063"></a>02063     <span class="keywordflow">if</span> ( recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#54913d2f0a66bae406a7b11945919a00" title="Returns -1 if the event recurs infinitely, 0 if the end date is set, otherwise the...">duration</a>() &gt; 0 ) {
<a name="l02064"></a>02064       mResult += i18n (<span class="stringliteral">"Repeats once"</span>, <span class="stringliteral">"Repeats %n times"</span>, recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#54913d2f0a66bae406a7b11945919a00" title="Returns -1 if the event recurs infinitely, 0 if the end date is set, otherwise the...">duration</a>());
<a name="l02065"></a>02065       mResult += <span class="charliteral">'\n'</span>;
<a name="l02066"></a>02066     } <span class="keywordflow">else</span> {
<a name="l02067"></a>02067       <span class="keywordflow">if</span> ( recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#54913d2f0a66bae406a7b11945919a00" title="Returns -1 if the event recurs infinitely, 0 if the end date is set, otherwise the...">duration</a>() != -1 ) {
<a name="l02068"></a>02068 <span class="comment">// TODO_Recurrence: What to do with floating</span>
<a name="l02069"></a>02069         QString endstr;
<a name="l02070"></a>02070         <span class="keywordflow">if</span> ( event-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l02071"></a>02071           endstr = KGlobal::locale()-&gt;formatDate( recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#451db06445aa82b0ba7f54bd9d63c94b" title="Returns the date of the last recurrence.">endDate</a>() );
<a name="l02072"></a>02072         } <span class="keywordflow">else</span> {
<a name="l02073"></a>02073           endstr = KGlobal::locale()-&gt;formatDateTime( recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#6a7814ddb89dd40d01a2b7efe4f3eb6f" title="Returns the date/time of the last recurrence.">endDateTime</a>() );
<a name="l02074"></a>02074         }
<a name="l02075"></a>02075         mResult += i18n(<span class="stringliteral">"Repeat until: %1\n"</span>).arg( endstr );
<a name="l02076"></a>02076       } <span class="keywordflow">else</span> {
<a name="l02077"></a>02077         mResult += i18n(<span class="stringliteral">"Repeats forever\n"</span>);
<a name="l02078"></a>02078       }
<a name="l02079"></a>02079     }
<a name="l02080"></a>02080   }
<a name="l02081"></a>02081   QString details = <span class="keyword">event</span>-&gt;description();
<a name="l02082"></a>02082   <span class="keywordflow">if</span> ( !details.isEmpty() ) {
<a name="l02083"></a>02083     mResult += i18n(<span class="stringliteral">"Details:\n%1\n"</span>).arg( details );
<a name="l02084"></a>02084   }
<a name="l02085"></a>02085   <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l02086"></a>02086 }
<a name="l02087"></a>02087 
<a name="l02088"></a>02088 <span class="keywordtype">bool</span> IncidenceFormatter::MailBodyVisitor::visit( <a class="code" href="classKCal_1_1Todo.html" title="This class provides a Todo in the sense of RFC2445.">Todo</a> *todo )
<a name="l02089"></a>02089 {
<a name="l02090"></a>02090   mResult = mailBodyIncidence( todo );
<a name="l02091"></a>02091 
<a name="l02092"></a>02092   <span class="keywordflow">if</span> ( todo-&gt;<a class="code" href="classKCal_1_1Todo.html#1fb5a233b65e2c35f9cb03460bb68c30" title="Returns true if the todo has a start date, otherwise return false.">hasStartDate</a>() ) {
<a name="l02093"></a>02093     mResult += i18n(<span class="stringliteral">"Start Date: %1\n"</span>).arg( todo-&gt;<a class="code" href="classKCal_1_1Todo.html#76e9a4052617ebb42bd4546e76e5604f" title="Returns an todo&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>() );
<a name="l02094"></a>02094     <span class="keywordflow">if</span> ( !todo-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l02095"></a>02095       mResult += i18n(<span class="stringliteral">"Start Time: %1\n"</span>).arg( todo-&gt;<a class="code" href="classKCal_1_1Todo.html#09078d277f64ebd1a1d486616ea0b728" title="Returns an todo&amp;#39;s starting time as a string formatted according to the users...">dtStartTimeStr</a>() );
<a name="l02096"></a>02096     }
<a name="l02097"></a>02097   }
<a name="l02098"></a>02098   <span class="keywordflow">if</span> ( todo-&gt;<a class="code" href="classKCal_1_1Todo.html#a40c65f6e9024015f7546e8749436b12" title="Returns true if the todo has a due date, otherwise return false.">hasDueDate</a>() ) {
<a name="l02099"></a>02099     mResult += i18n(<span class="stringliteral">"Due Date: %1\n"</span>).arg( todo-&gt;<a class="code" href="classKCal_1_1Todo.html#bbae1ac010a13aefaf4c6564a8a610d8" title="Returns due date as string formatted according to the users locale settings.">dtDueDateStr</a>() );
<a name="l02100"></a>02100     <span class="keywordflow">if</span> ( !todo-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l02101"></a>02101       mResult += i18n(<span class="stringliteral">"Due Time: %1\n"</span>).arg( todo-&gt;<a class="code" href="classKCal_1_1Todo.html#1bd3ebeb9b5d9a2c9cae6fbcc70e6653" title="Returns due time as string formatted according to the users locale settings.">dtDueTimeStr</a>() );
<a name="l02102"></a>02102     }
<a name="l02103"></a>02103   }
<a name="l02104"></a>02104   QString details = todo-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>();
<a name="l02105"></a>02105   <span class="keywordflow">if</span> ( !details.isEmpty() ) {
<a name="l02106"></a>02106     mResult += i18n(<span class="stringliteral">"Details:\n%1\n"</span>).arg( details );
<a name="l02107"></a>02107   }
<a name="l02108"></a>02108   <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l02109"></a>02109 }
<a name="l02110"></a>02110 
<a name="l02111"></a>02111 <span class="keywordtype">bool</span> IncidenceFormatter::MailBodyVisitor::visit( <a class="code" href="classKCal_1_1Journal.html" title="This class provides a Journal in the sense of RFC2445.">Journal</a> *journal )
<a name="l02112"></a>02112 {
<a name="l02113"></a>02113   mResult = mailBodyIncidence( journal );
<a name="l02114"></a>02114   mResult += i18n(<span class="stringliteral">"Date: %1\n"</span>).arg( journal-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#8990090cb365956d18e5296d651ce659" title="returns an event&amp;#39;s starting date as a string formatted according to the users...">dtStartDateStr</a>() );
<a name="l02115"></a>02115   <span class="keywordflow">if</span> ( !journal-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l02116"></a>02116     mResult += i18n(<span class="stringliteral">"Time: %1\n"</span>).arg( journal-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#ba22e2b05348fd4f18859b5e434bde3e" title="returns an event&amp;#39;s starting time as a string formatted according to the users...">dtStartTimeStr</a>() );
<a name="l02117"></a>02117   }
<a name="l02118"></a>02118   <span class="keywordflow">if</span> ( !journal-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>().isEmpty() )
<a name="l02119"></a>02119     mResult += i18n(<span class="stringliteral">"Text of the journal:\n%1\n"</span>).arg( journal-&gt;<a class="code" href="classKCal_1_1Incidence.html#5614d24c09a8909b08c26c5e33918831" title="Return long description.">description</a>() );
<a name="l02120"></a>02120   <span class="keywordflow">return</span> !mResult.isEmpty();
<a name="l02121"></a>02121 }
<a name="l02122"></a>02122 
<a name="l02123"></a>02123 
<a name="l02124"></a>02124 
<a name="l02125"></a>02125 QString IncidenceFormatter::mailBodyString( <a class="code" href="classKCal_1_1IncidenceBase.html" title="This class provides the base class common to all calendar components.">IncidenceBase</a> *incidence )
<a name="l02126"></a>02126 {
<a name="l02127"></a>02127   <span class="keywordflow">if</span> ( !incidence )
<a name="l02128"></a>02128     <span class="keywordflow">return</span> QString::null;
<a name="l02129"></a>02129 
<a name="l02130"></a>02130   MailBodyVisitor v;
<a name="l02131"></a>02131   <span class="keywordflow">if</span> ( v.act( incidence ) ) {
<a name="l02132"></a>02132     <span class="keywordflow">return</span> v.result();
<a name="l02133"></a>02133   }
<a name="l02134"></a>02134   <span class="keywordflow">return</span> QString::null;
<a name="l02135"></a>02135 }
<a name="l02136"></a>02136 
<a name="l02137"></a>02137 <span class="keyword">static</span> QString recurEnd( <a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a> *incidence )
<a name="l02138"></a>02138 {
<a name="l02139"></a>02139   QString endstr;
<a name="l02140"></a>02140   <span class="keywordflow">if</span> ( incidence-&gt;<a class="code" href="classKCal_1_1IncidenceBase.html#edfe188f8024f1ec9e25972ddd332724" title="Return true or false depending on whether the incidence &amp;quot;floats,&amp;quot; i.e.">doesFloat</a>() ) {
<a name="l02141"></a>02141     endstr = KGlobal::locale()-&gt;formatDate( incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#d06004593e064a37d08c96f9ae16735e" title="Return the recurrence rule associated with this incidence.">recurrence</a>()-&gt;<a class="code" href="classKCal_1_1Recurrence.html#451db06445aa82b0ba7f54bd9d63c94b" title="Returns the date of the last recurrence.">endDate</a>() );
<a name="l02142"></a>02142   } <span class="keywordflow">else</span> {
<a name="l02143"></a>02143     endstr = KGlobal::locale()-&gt;formatDateTime( incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#d06004593e064a37d08c96f9ae16735e" title="Return the recurrence rule associated with this incidence.">recurrence</a>()-&gt;<a class="code" href="classKCal_1_1Recurrence.html#6a7814ddb89dd40d01a2b7efe4f3eb6f" title="Returns the date/time of the last recurrence.">endDateTime</a>() );
<a name="l02144"></a>02144   }
<a name="l02145"></a>02145   <span class="keywordflow">return</span> endstr;
<a name="l02146"></a>02146 }
<a name="l02147"></a>02147 
<a name="l02148"></a>02148 QString IncidenceFormatter::recurrenceString(<a class="code" href="classKCal_1_1Incidence.html" title="This class provides the base class common to all calendar components.">Incidence</a> * incidence)
<a name="l02149"></a>02149 {
<a name="l02150"></a>02150   <span class="keywordflow">if</span> ( !incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#81ad15662138be07f0d55be6b075b043" title="Forward to Recurrence::doesRecur().">doesRecur</a>() )
<a name="l02151"></a>02151     <span class="keywordflow">return</span> i18n( <span class="stringliteral">"No recurrence"</span> );
<a name="l02152"></a>02152 
<a name="l02153"></a>02153   <a class="code" href="classKCal_1_1Recurrence.html" title="This class represents a recurrence rule for a calendar incidence.">Recurrence</a> *recur = incidence-&gt;<a class="code" href="classKCal_1_1Incidence.html#d06004593e064a37d08c96f9ae16735e" title="Return the recurrence rule associated with this incidence.">recurrence</a>();
<a name="l02154"></a>02154   <span class="keywordflow">switch</span> ( recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#9b3d0a238b28bc8602a2036e11ef2fcf" title="Returns the event&amp;#39;s recurrence status.">recurrenceType</a>() ) {
<a name="l02155"></a>02155     <span class="keywordflow">case</span> Recurrence::rNone:
<a name="l02156"></a>02156       <span class="keywordflow">return</span> i18n( <span class="stringliteral">"No recurrence"</span> );
<a name="l02157"></a>02157     <span class="keywordflow">case</span> Recurrence::rMinutely:
<a name="l02158"></a>02158       <span class="keywordflow">if</span> ( recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#54913d2f0a66bae406a7b11945919a00" title="Returns -1 if the event recurs infinitely, 0 if the end date is set, otherwise the...">duration</a>() != -1 )
<a name="l02159"></a>02159         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Recurs every minute until %1"</span>, <span class="stringliteral">"Recurs every %n minutes until %1"</span>, recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#85afd958b67570632dece34bc9920849" title="Returns frequency of recurrence, in terms of the recurrence time period type.">frequency</a>() )
<a name="l02160"></a>02160             .arg( recurEnd( incidence ) );
<a name="l02161"></a>02161       <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Recurs every minute"</span>, <span class="stringliteral">"Recurs every %n minutes"</span>, recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#85afd958b67570632dece34bc9920849" title="Returns frequency of recurrence, in terms of the recurrence time period type.">frequency</a>() );
<a name="l02162"></a>02162     <span class="keywordflow">case</span> Recurrence::rHourly:
<a name="l02163"></a>02163       <span class="keywordflow">if</span> ( recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#54913d2f0a66bae406a7b11945919a00" title="Returns -1 if the event recurs infinitely, 0 if the end date is set, otherwise the...">duration</a>() != -1 )
<a name="l02164"></a>02164         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Recurs hourly until %1"</span>, <span class="stringliteral">"Recurs every %n hours until %1"</span>, recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#85afd958b67570632dece34bc9920849" title="Returns frequency of recurrence, in terms of the recurrence time period type.">frequency</a>() )
<a name="l02165"></a>02165             .arg( recurEnd( incidence ) );
<a name="l02166"></a>02166       <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Recurs hourly"</span>, <span class="stringliteral">"Recurs every %n hours"</span>, recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#85afd958b67570632dece34bc9920849" title="Returns frequency of recurrence, in terms of the recurrence time period type.">frequency</a>() );
<a name="l02167"></a>02167     <span class="keywordflow">case</span> Recurrence::rDaily:
<a name="l02168"></a>02168       <span class="keywordflow">if</span> ( recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#54913d2f0a66bae406a7b11945919a00" title="Returns -1 if the event recurs infinitely, 0 if the end date is set, otherwise the...">duration</a>() != -1 )
<a name="l02169"></a>02169         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Recurs daily until %1"</span>, <span class="stringliteral">"Recurs every %n days until %1"</span>, recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#85afd958b67570632dece34bc9920849" title="Returns frequency of recurrence, in terms of the recurrence time period type.">frequency</a>() )
<a name="l02170"></a>02170             .arg( recurEnd( incidence ) );
<a name="l02171"></a>02171       <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Recurs daily"</span>, <span class="stringliteral">"Recurs every %n days"</span>, recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#85afd958b67570632dece34bc9920849" title="Returns frequency of recurrence, in terms of the recurrence time period type.">frequency</a>() );
<a name="l02172"></a>02172     <span class="keywordflow">case</span> Recurrence::rWeekly:
<a name="l02173"></a>02173       <span class="keywordflow">if</span> ( recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#54913d2f0a66bae406a7b11945919a00" title="Returns -1 if the event recurs infinitely, 0 if the end date is set, otherwise the...">duration</a>() != -1 )
<a name="l02174"></a>02174         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Recurs weekly until %1"</span>, <span class="stringliteral">"Recurs every %n weeks until %1"</span>, recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#85afd958b67570632dece34bc9920849" title="Returns frequency of recurrence, in terms of the recurrence time period type.">frequency</a>() )
<a name="l02175"></a>02175             .arg( recurEnd( incidence ) );
<a name="l02176"></a>02176       <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Recurs weekly"</span>, <span class="stringliteral">"Recurs every %n weeks"</span>, recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#85afd958b67570632dece34bc9920849" title="Returns frequency of recurrence, in terms of the recurrence time period type.">frequency</a>() );
<a name="l02177"></a>02177     <span class="keywordflow">case</span> Recurrence::rMonthlyPos:
<a name="l02178"></a>02178     <span class="keywordflow">case</span> Recurrence::rMonthlyDay:
<a name="l02179"></a>02179       <span class="keywordflow">if</span> ( recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#54913d2f0a66bae406a7b11945919a00" title="Returns -1 if the event recurs infinitely, 0 if the end date is set, otherwise the...">duration</a>() != -1 )
<a name="l02180"></a>02180         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Recurs monthly until %1"</span> ).arg( recurEnd( incidence ) );
<a name="l02181"></a>02181       <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Recurs monthly"</span> );
<a name="l02182"></a>02182     <span class="keywordflow">case</span> Recurrence::rYearlyMonth:
<a name="l02183"></a>02183     <span class="keywordflow">case</span> Recurrence::rYearlyDay:
<a name="l02184"></a>02184     <span class="keywordflow">case</span> Recurrence::rYearlyPos:
<a name="l02185"></a>02185       <span class="keywordflow">if</span> ( recur-&gt;<a class="code" href="classKCal_1_1Recurrence.html#54913d2f0a66bae406a7b11945919a00" title="Returns -1 if the event recurs infinitely, 0 if the end date is set, otherwise the...">duration</a>() != -1 )
<a name="l02186"></a>02186         <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Recurs yearly until %1"</span> ).arg( recurEnd( incidence ) );
<a name="l02187"></a>02187       <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Recurs yearly"</span> );
<a name="l02188"></a>02188     <span class="keywordflow">default</span>:
<a name="l02189"></a>02189       <span class="keywordflow">return</span> i18n( <span class="stringliteral">"Incidence recurs"</span> );
<a name="l02190"></a>02190   }
<a name="l02191"></a>02191 }
</pre></div></div>
    </div></div>


      </td>
  </tr>
  <tr>
    <td valign="top" id="leftmenu" width="25%">
      <a name="navigation"></a>
      <div class="menu_box"><h2>libkcal</h2>
<div class="nav_list">
<ul><li><a href="index.html">Main Page</a></li><li><a href="namespaces.html">Namespace List</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="namespacemembers.html">Namespace Members</a></li><li><a href="functions.html">Class Members</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="classKCal_1_1Alarm.html">kcal::alarm</option>,  <option value="classKCal_1_1Attachment.html">kcal::attachment</option>,  <option value="classKCal_1_1Attendee.html">kcal::attendee</option>,  <option value="classKCal_1_1Calendar.html">kcal::calendar</option>,  <option value="classKCal_1_1Calendar_1_1Observer.html">kcal::calendar::observer</option>,  <option value="classKCal_1_1CalendarLocal.html">kcal::calendarlocal</option>,  <option value="classKCal_1_1CalendarNull.html">kcal::calendarnull</option>,  <option value="classKCal_1_1CalendarResources.html">kcal::calendarresources</option>,  <option value="classKCal_1_1CalFilter.html">kcal::calfilter</option>,  <option value="classKCal_1_1CalFormat.html">kcal::calformat</option>,  <option value="classKCal_1_1CalStorage.html">kcal::calstorage</option>,  <option value="classKCal_1_1Compat.html">kcal::compat</option>,  <option value="classKCal_1_1CompatFactory.html">kcal::compatfactory</option>,  <option value="classKCal_1_1CustomProperties.html">kcal::customproperties</option>,  <option value="classKCal_1_1DndFactory.html">kcal::dndfactory</option>,  <option value="classKCal_1_1Duration.html">kcal::duration</option>,  <option value="classKCal_1_1ErrorFormat.html">kcal::errorformat</option>,  <option value="classKCal_1_1Event.html">kcal::event</option>,  <option value="classKCal_1_1Exception.html">kcal::exception</option>,  <option value="classKCal_1_1FileStorage.html">kcal::filestorage</option>,  <option value="classKCal_1_1FreeBusy.html">kcal::freebusy</option>,  <option value="classKCal_1_1HtmlExport.html">kcal::htmlexport</option>,  <option value="classKCal_1_1ICalDrag.html">kcal::icaldrag</option>,  <option value="classKCal_1_1ICalFormat.html">kcal::icalformat</option>,  <option value="classKCal_1_1Incidence.html">kcal::incidence</option>,  <option value="classKCal_1_1Incidence_1_1AddVisitor.html">kcal::incidence::addvisitor</option>,  <option value="classKCal_1_1Incidence_1_1DeleteVisitor.html">kcal::incidence::deletevisitor</option>,  <option value="classKCal_1_1IncidenceBase.html">kcal::incidencebase</option>,  <option value="classKCal_1_1IncidenceBase_1_1Visitor.html">kcal::incidencebase::visitor</option>,  <option value="classKCal_1_1IncidenceFormatter.html">kcal::incidenceformatter</option>,  <option value="classKCal_1_1Journal.html">kcal::journal</option>,  <option value="classKCal_1_1ListBase.html">kcal::listbase</option>,  <option value="classKCal_1_1Period.html">kcal::period</option>,  <option value="classKCal_1_1Person.html">kcal::person</option>,  <option value="classKCal_1_1QtopiaFormat.html">kcal::qtopiaformat</option>,  <option value="classKCal_1_1Recurrence.html">kcal::recurrence</option>,  <option value="classKCal_1_1RecurrenceRule.html">kcal::recurrencerule</option>,  <option value="classKCal_1_1RecurrenceRule_1_1WDayPos.html">kcal::recurrencerule::wdaypos</option>,  <option value="classKCal_1_1ResourceCached.html">kcal::resourcecached</option>,  <option value="classKCal_1_1ResourceCachedReloadConfig.html">kcal::resourcecachedreloadconfig</option>,  <option value="classKCal_1_1ResourceCachedSaveConfig.html">kcal::resourcecachedsaveconfig</option>,  <option value="classKCal_1_1ResourceCalendar.html">kcal::resourcecalendar</option>,  <option value="classKCal_1_1ResourceLocal.html">kcal::resourcelocal</option>,  <option value="classKCal_1_1ResourceLocalConfig.html">kcal::resourcelocalconfig</option>,  <option value="classKCal_1_1ScheduleMessage.html">kcal::schedulemessage</option>,  <option value="classKCal_1_1Scheduler.html">kcal::scheduler</option>,  <option value="classKCal_1_1Todo.html">kcal::todo</option>,  <option value="classKCal_1_1VCalDrag.html">kcal::vcaldrag</option>,  <option value="classKCal_1_1VCalFormat.html">kcal::vcalformat</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>