Sophie

Sophie

distrib > Mageia > 5 > i586 > media > core-release > by-pkgid > 50facae208d4a6f280e44a513b104320 > files > 1884

qt-mobility-doc-1.2.0-13.mga5.noarch.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- serviceactions.qdoc -->
  <title>Qt Mobility 1.2: Service Actions Example</title>
  <link rel="stylesheet" type="text/css" href="style/offline.css" />
</head>
<body>
<div class="header" id="qtdocheader">
  <div class="content"> 
    <a href="index.html" class="qtref"><span>QtMobility Reference Documentation</span></a>
  </div>
  <div class="breadcrumb toolblock">
    <ul>
      <li class="first"><a href="index.html">Home</a></li>
      <!--  Breadcrumbs go here -->
<li><a href="http://qt.nokia.com/doc/4.7/all-examples.html">Examples</a></li>
<li>Service Actions Example</li>
    </ul>
  </div>
</div>
<div class="content mainContent">
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="#send-and-compose">Send and Compose</a></li>
<li class="level1"><a href="#show">Show</a></li>
<li class="level1"><a href="#query-and-retrieve">Query and Retrieve</a></li>
<li class="level1"><a href="#store-signals">Store Signals</a></li>
</ul>
</div>
<h1 class="title">Service Actions Example</h1>
<span class="subtitle"></span>
<!-- $$$serviceactions-description -->
<div class="descr"> <a name="details"></a>
<p>Files:</p>
<ul>
<li><a href="serviceactions-attachmentlistwidget-cpp.html">serviceactions/attachmentlistwidget.cpp</a></li>
<li><a href="serviceactions-attachmentlistwidget-h.html">serviceactions/attachmentlistwidget.h</a></li>
<li><a href="serviceactions-mainwindow-cpp.html">serviceactions/mainwindow.cpp</a></li>
<li><a href="serviceactions-mainwindow-h.html">serviceactions/mainwindow.h</a></li>
<li><a href="serviceactions-main-cpp.html">serviceactions/main.cpp</a></li>
<li><a href="serviceactions-serviceactions-pro.html">serviceactions/serviceactions.pro</a></li>
</ul>
<p>This simple example demonstrates how to compose, send, show, query and retrieve messages, and also react to message store events using the QtMobility Messaging API.</p>
<p>Each of these actions is demonstrated in a separate sub example accessible from the &quot;File&quot; menu of each platform.</p>
<a name="send-and-compose"></a>
<h2>Send and Compose</h2>
<p>Messages are sent and composed from a composition widget under the &quot;Compose/Send&quot; menu. Relevant message details such as sending account, recipients and message bodies (attachments for email accounts) can be entered by the user via corresponding UI elements. A <a href="qmessage.html">QMessage</a> is constructed using these details:</p>
<pre class="cpp"> <span class="type"><a href="qmessage.html">QMessage</a></span> ComposeSendWidget<span class="operator">::</span>constructQMessage(<span class="type">bool</span> asHtml) <span class="keyword">const</span>
 {
     <span class="type"><a href="qmessage.html">QMessage</a></span> message;

     <span class="keyword">if</span>(m_accountsWidget<span class="operator">-</span><span class="operator">&gt;</span>isEmpty())
     {
         <span class="type"><a href="http://qt.nokia.com/doc/4.7/qmessagebox.html">QMessageBox</a></span><span class="operator">::</span>critical(<span class="keyword">const_cast</span><span class="operator">&lt;</span>ComposeSendWidget<span class="operator">*</span><span class="operator">&gt;</span>(<span class="keyword">this</span>)<span class="operator">,</span><span class="string">&quot;No Accounts&quot;</span><span class="operator">,</span><span class="string">&quot;Cannot send a message without any available accounts&quot;</span>);
         <span class="keyword">return</span> message;
     }

     <span class="type"><a href="qmessageaccountid.html">QMessageAccountId</a></span> selectedAccountId <span class="operator">=</span> m_accountsWidget<span class="operator">-</span><span class="operator">&gt;</span>currentAccount();
     <span class="type"><a href="qmessageaccount.html">QMessageAccount</a></span> selectedAccount(selectedAccountId);

     <span class="type">bool</span> composingSms <span class="operator">=</span> (selectedAccount<span class="operator">.</span>messageTypes() <span class="operator">&amp;</span> <span class="type"><a href="qmessage.html">QMessage</a></span><span class="operator">::</span>Sms) <span class="operator">&gt;</span> <span class="number">0</span>;

     <span class="type">QMessageAddressList</span> toList;
     <span class="type">QMessageAddressList</span> ccList;
     <span class="type">QMessageAddressList</span> bccList;

     <span class="type"><a href="qmessageaddress.html">QMessageAddress</a></span><span class="operator">::</span>Type addressType <span class="operator">=</span> <span class="type"><a href="qmessageaddress.html">QMessageAddress</a></span><span class="operator">::</span>Email;
     <span class="keyword">if</span>(composingSms)
     {
         addressType <span class="operator">=</span> <span class="type"><a href="qmessageaddress.html">QMessageAddress</a></span><span class="operator">::</span>Phone;
         message<span class="operator">.</span>setType(<span class="type"><a href="qmessage.html">QMessage</a></span><span class="operator">::</span>Sms);
     }

     foreach(<span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> s<span class="operator">,</span> m_toEdit<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">.</span>split(<span class="type"><a href="http://qt.nokia.com/doc/4.7/qregexp.html">QRegExp</a></span>(<span class="string">&quot;\\s&quot;</span>)<span class="operator">,</span><span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span><span class="operator">::</span>SkipEmptyParts))
         toList<span class="operator">.</span>append(<span class="type"><a href="qmessageaddress.html">QMessageAddress</a></span>(addressType<span class="operator">,</span> s));
     message<span class="operator">.</span>setTo(toList);

     <span class="keyword">if</span>(<span class="operator">!</span>composingSms)
     {
         foreach(<span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> s<span class="operator">,</span> m_ccEdit<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">.</span>split(<span class="type"><a href="http://qt.nokia.com/doc/4.7/qregexp.html">QRegExp</a></span>(<span class="string">&quot;\\s&quot;</span>)<span class="operator">,</span><span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span><span class="operator">::</span>SkipEmptyParts))
             ccList<span class="operator">.</span>append(<span class="type"><a href="qmessageaddress.html">QMessageAddress</a></span>(<span class="type"><a href="qmessageaddress.html">QMessageAddress</a></span><span class="operator">::</span>Email<span class="operator">,</span> s));
         message<span class="operator">.</span>setCc(ccList);

         foreach(<span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> s<span class="operator">,</span> m_bccEdit<span class="operator">-</span><span class="operator">&gt;</span>text()<span class="operator">.</span>split(<span class="type"><a href="http://qt.nokia.com/doc/4.7/qregexp.html">QRegExp</a></span>(<span class="string">&quot;\\s&quot;</span>)<span class="operator">,</span><span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span><span class="operator">::</span>SkipEmptyParts))
             bccList<span class="operator">.</span>append(<span class="type"><a href="qmessageaddress.html">QMessageAddress</a></span>(<span class="type"><a href="qmessageaddress.html">QMessageAddress</a></span><span class="operator">::</span>Email<span class="operator">,</span> s));
         message<span class="operator">.</span>setBcc(bccList);
         message<span class="operator">.</span>setSubject(m_subjectEdit<span class="operator">-</span><span class="operator">&gt;</span>text());

         message<span class="operator">.</span>setType(<span class="type"><a href="qmessage.html">QMessage</a></span><span class="operator">::</span>Email);

         message<span class="operator">.</span>appendAttachments(m_attachmentList<span class="operator">-</span><span class="operator">&gt;</span>attachments());
     }

     message<span class="operator">.</span>setParentAccountId(selectedAccountId);

     <span class="keyword">if</span>(<span class="operator">!</span>composingSms <span class="operator">&amp;</span><span class="operator">&amp;</span> asHtml) {
         <span class="comment">//create html body</span>
         <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> htmlBody(<span class="string">&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h2 align=center&gt;%1&lt;/h2&gt;&lt;hr&gt;%2&lt;/body&gt;&lt;/html&gt;&quot;</span>);
         message<span class="operator">.</span>setBody(htmlBody<span class="operator">.</span>arg(message<span class="operator">.</span>subject())<span class="operator">.</span>arg(m_bodyEdit<span class="operator">-</span><span class="operator">&gt;</span>toPlainText())<span class="operator">,</span><span class="string">&quot;text/html&quot;</span>);
     }
     <span class="keyword">else</span>
         message<span class="operator">.</span>setBody(m_bodyEdit<span class="operator">-</span><span class="operator">&gt;</span>toPlainText());

     <span class="keyword">return</span> message;
 }</pre>
<p>The message is then passed to the <a href="qmessageservice.html#compose">QMessageService::compose</a>() or <a href="qmessageservice.html#send">QMessageService::send</a>() service actions to initiate sending of the message by the platform, or trigger display by the platforms' message composer with the <a href="qmessage.html">QMessage</a> contents:</p>
<pre class="cpp"> <span class="type">void</span> ComposeSendWidget<span class="operator">::</span>composeButtonClicked()
 {
     <span class="type"><a href="qmessage.html">QMessage</a></span> message(constructQMessage());
     m_service<span class="operator">-</span><span class="operator">&gt;</span>compose(message);
 }

 <span class="type">void</span> ComposeSendWidget<span class="operator">::</span>sendButtonClicked()
 {
     <span class="type">bool</span> asHtml <span class="operator">=</span> (sender() <span class="operator">=</span><span class="operator">=</span> m_sendAsHTMLAction);
     <span class="type"><a href="qmessage.html">QMessage</a></span> message(constructQMessage(asHtml));
     notifyResult(m_service<span class="operator">-</span><span class="operator">&gt;</span>send(message)<span class="operator">,</span><span class="string">&quot;Send message&quot;</span>);
 }</pre>
<a name="show"></a>
<h2>Show</h2>
<p>Messages are displayed by a show widget under the &quot;Show&quot; menu. This widget displays the users last 50 messages. (Ensure the platform has one or more messages in its mail accounts).</p>
<p>The last 50 messages (incoming/outgoing) are queried from the store using the <a href="qmessageservice.html#queryMessages">QMessageService::queryMessages</a>() service request:</p>
<pre class="cpp"> <span class="type">void</span> RecentMessagesWidget<span class="operator">::</span>load()
 {
     m_ids<span class="operator">.</span>clear();
     m_state <span class="operator">=</span> Loading;
     <span class="type">bool</span> b;

     b<span class="operator">=</span>m_service<span class="operator">-</span><span class="operator">&gt;</span>queryMessages(<span class="type"><a href="qmessagefilter.html">QMessageFilter</a></span>()<span class="operator">,</span><span class="type"><a href="qmessagesortorder.html">QMessageSortOrder</a></span><span class="operator">::</span>byReceptionTimeStamp(<span class="type"><a href="http://qt.nokia.com/doc/4.7/qt.html">Qt</a></span><span class="operator">::</span>DescendingOrder)<span class="operator">,</span>m_maxRecent);</pre>
<p>Once the results of the query are returned via the <a href="qmessageservice.html#messagesFound">QMessageService::messagesFound</a>() signal, the widget loads each of the returned messages in turn and populates it's list with message subjects.</p>
<pre class="cpp"> <span class="type">void</span> RecentMessagesWidget<span class="operator">::</span>messagesFound(<span class="keyword">const</span> <span class="type">QMessageIdList</span><span class="operator">&amp;</span> ids)
 {
     m_ids<span class="operator">.</span>append(ids);
 }
 <span class="type">void</span> RecentMessagesWidget<span class="operator">::</span>processResults()
 {
     <span class="keyword">if</span>(<span class="operator">!</span>m_ids<span class="operator">.</span>isEmpty())
     {
         <span class="type"><a href="qmessageid.html">QMessageId</a></span> id <span class="operator">=</span> m_ids<span class="operator">.</span>takeFirst();
         <span class="type"><a href="qmessage.html">QMessage</a></span> message(id);

         <span class="type"><a href="http://qt.nokia.com/doc/4.7/qlistwidgetitem.html">QListWidgetItem</a></span><span class="operator">*</span> newItem <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="http://qt.nokia.com/doc/4.7/qlistwidgetitem.html">QListWidgetItem</a></span>(message<span class="operator">.</span>from()<span class="operator">.</span>addressee()<span class="operator">+</span><span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span>(<span class="string">&quot;:&quot;</span>)<span class="operator">+</span>message<span class="operator">.</span>subject());
         newItem<span class="operator">-</span><span class="operator">&gt;</span>setData(MessageIdRole<span class="operator">,</span>id<span class="operator">.</span>toString());
         <span class="type"><a href="http://qt.nokia.com/doc/4.7/qfont.html">QFont</a></span> itemFont <span class="operator">=</span> newItem<span class="operator">-</span><span class="operator">&gt;</span>font();
         <span class="type">bool</span> isPartialMessage <span class="operator">=</span> <span class="operator">!</span>message<span class="operator">.</span>find(message<span class="operator">.</span>bodyId())<span class="operator">.</span>isContentAvailable();
         itemFont<span class="operator">.</span>setItalic(isPartialMessage);
         newItem<span class="operator">-</span><span class="operator">&gt;</span>setFont(itemFont);
         m_messageListWidget<span class="operator">-</span><span class="operator">&gt;</span>addItem(newItem);
         m_indexMap<span class="operator">.</span>insert(id<span class="operator">,</span>newItem);
         m_messageListWidget<span class="operator">-</span><span class="operator">&gt;</span>update();
         <span class="type"><a href="http://qt.nokia.com/doc/4.7/qtimer.html">QTimer</a></span><span class="operator">::</span>singleShot(<span class="number">100</span><span class="operator">,</span><span class="keyword">this</span><span class="operator">,</span>SLOT(processResults()));
     }
     <span class="keyword">else</span>
     {
         m_state <span class="operator">=</span> Done;
         updateState();
     }
 }</pre>
<p>Selecting &quot;Show&quot; from the action menu will display the selected message using the platforms' message viewer via the <a href="qmessageservice.html#show">QMessageService::show</a>() service action.</p>
<pre class="cpp"> <span class="type">void</span> ShowWidget<span class="operator">::</span>showButtonClicked()
 {

     <span class="type"><a href="qmessageid.html">QMessageId</a></span> id <span class="operator">=</span> m_recentMessagesWidget<span class="operator">-</span><span class="operator">&gt;</span>currentMessage();

     <span class="keyword">if</span>(id<span class="operator">.</span>isValid())
         m_service<span class="operator">-</span><span class="operator">&gt;</span>show(id);
 }</pre>
<a name="query-and-retrieve"></a>
<h2>Query and Retrieve</h2>
<p>Message contents are displayed/retrieved by a retrieve widget under the &quot;Query/Retrieve&quot; menu. This example displays the last 50 messages, as in the &quot;Show&quot; example, but also displays message content in a <a href="http://qt.nokia.com/doc/4.7/qtextbrowser.html">QTextBrowser</a> widget and provides the option to download messages that are incomplete.</p>
<p>After the message list is populated, the message display widget will attempt to load and display the currently selected message. The completeness of the message body is checked using the QMessageContentContainer::isContentAvailable function. If the message body is partially downloaded, a download link is displayed.</p>
<pre class="cpp"> <span class="type">void</span> MessageViewWidget<span class="operator">::</span>loadMessage()
 {
     m_messageBrowser<span class="operator">-</span><span class="operator">&gt;</span>clear();

     <span class="keyword">static</span> <span class="keyword">const</span> <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> htmlTemplate(<span class="string">&quot;\
     &lt;html&gt;\
     &lt;head&gt;\
     &lt;/head&gt;\
     &lt;body&gt;\
     &lt;table border=\&quot;0\&quot; cellspacing=\&quot;0\&quot;&gt;\
         &lt;tr&gt;&lt;td&gt;&lt;b&gt;From: &lt;/b&gt;&lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;&lt;/tr&gt;\
         &lt;tr&gt;&lt;td&gt;&lt;b&gt;Subject: &lt;/b&gt;&lt;/td&gt;&lt;td&gt;%2&lt;/td&gt;&lt;/tr&gt;\
         &lt;tr&gt;&lt;td&gt;&lt;b&gt;Date: &lt;/b&gt;&lt;/td&gt;&lt;td&gt;%3&lt;/td&gt;&lt;/tr&gt;\
         %4\
     &lt;/table&gt;\
     &lt;hr&gt;%5\
     &lt;\body&gt;\
     &lt;/html&gt;\
     &quot;</span>);

     <span class="keyword">if</span>(m_messageId<span class="operator">.</span>isValid())
     {
         <span class="type"><a href="qmessage.html">QMessage</a></span> message(m_messageId);

         <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> changeViewTypeLink;
         <span class="keyword">if</span> (m_showAttachmentsActivated) {
             <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> attachments;
             <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> changeViewTypeLink <span class="operator">=</span> <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span>(<span class="string">&quot;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;&lt;a href=\&quot;%1\&quot;&gt;Body&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&quot;</span>)\
                                          <span class="operator">.</span>arg(changeBetweenBodyAndAttachmentsLinkURL());
             <span class="type">QMessageContentContainerIdList</span> attachmentIds(message<span class="operator">.</span>attachmentIds());
             <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator">&lt;</span> attachmentIds<span class="operator">.</span>count(); <span class="operator">+</span><span class="operator">+</span>i) {
                 <span class="type"><a href="qmessagecontentcontainer.html">QMessageContentContainer</a></span> attachment(message<span class="operator">.</span>find(attachmentIds<span class="operator">[</span>i<span class="operator">]</span>));
                 <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> attachmentName <span class="operator">=</span> attachment<span class="operator">.</span>suggestedFileName();
                 <span class="keyword">if</span> (attachment<span class="operator">.</span>isContentAvailable()) {
                     attachments <span class="operator">+</span><span class="operator">=</span> <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span>(<span class="string">&quot;&lt;b&gt;%1 &lt;/b&gt;&lt;a href=\&quot;%2\&quot;&gt;Open&lt;/a&gt;&lt;br&gt;&quot;</span>)\
                                    <span class="operator">.</span>arg(attachmentName)\
                                    <span class="operator">.</span>arg(openAttachmentLinkURL()<span class="operator">+</span><span class="string">&quot;/&quot;</span><span class="operator">+</span>attachmentIds<span class="operator">[</span>i<span class="operator">]</span><span class="operator">.</span>toString());
                 } <span class="keyword">else</span> {
                     attachments <span class="operator">+</span><span class="operator">=</span> <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span>(<span class="string">&quot;&lt;b&gt;%1 &lt;/b&gt;&lt;a href=\&quot;%2\&quot;&gt;Download&lt;/a&gt;&lt;br&gt;&quot;</span>)\
                                    <span class="operator">.</span>arg(attachmentName)\
                                    <span class="operator">.</span>arg(downloadAttachmentLinkURL()<span class="operator">+</span><span class="string">&quot;/&quot;</span><span class="operator">+</span>attachmentIds<span class="operator">[</span>i<span class="operator">]</span><span class="operator">.</span>toString());
                 }
             }
             m_messageBrowser<span class="operator">-</span><span class="operator">&gt;</span>setHtml(htmlTemplate\
                                      <span class="operator">.</span>arg(message<span class="operator">.</span>from()<span class="operator">.</span>addressee())\
                                      <span class="operator">.</span>arg(message<span class="operator">.</span>subject())\
                                      <span class="operator">.</span>arg(message<span class="operator">.</span>receivedDate()<span class="operator">.</span>toString())\
                                      <span class="operator">.</span>arg(changeViewTypeLink)\
                                      <span class="operator">.</span>arg(attachments));
         } <span class="keyword">else</span> {
             <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> changeViewTypeLink;
             <span class="type">QMessageContentContainerIdList</span> attachmentIds(message<span class="operator">.</span>attachmentIds());
             <span class="keyword">if</span> (attachmentIds<span class="operator">.</span>count() <span class="operator">&gt;</span> <span class="number">0</span>) {
                 changeViewTypeLink <span class="operator">=</span> <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span>(<span class="string">&quot;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;&lt;a href=\&quot;%1\&quot;&gt;Attachments (%2)&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&quot;</span>)\
                                      <span class="operator">.</span>arg(changeBetweenBodyAndAttachmentsLinkURL())\
                                      <span class="operator">.</span>arg(attachmentIds<span class="operator">.</span>count());
             }
             <span class="type"><a href="qmessagecontentcontainer.html">QMessageContentContainer</a></span> bodyPart <span class="operator">=</span> message<span class="operator">.</span>find(message<span class="operator">.</span>bodyId());

             <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> bodyText;

             <span class="comment">//for partial message display a download link instead</span>

             <span class="type">bool</span> bodyAvailable <span class="operator">=</span> bodyPart<span class="operator">.</span>isContentAvailable();

             <span class="keyword">if</span> (bodyAvailable)
             {
                 <span class="keyword">if</span> (bodyPart<span class="operator">.</span>contentType() <span class="operator">=</span><span class="operator">=</span> <span class="string">&quot;text&quot;</span>)
                     bodyText <span class="operator">=</span> bodyPart<span class="operator">.</span>textContent();
                 <span class="keyword">else</span> bodyText <span class="operator">=</span> <span class="string">&quot;&lt;Non-text content&gt;&quot;</span>;
             }
             <span class="keyword">else</span>
                 bodyText <span class="operator">=</span> <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span>(<span class="string">&quot;&lt;p align=\&quot;center\&quot;&gt;&lt;a href=\&quot;%1\&quot;&gt;Download&lt;/a&gt;&lt;/p&gt;&quot;</span>)<span class="operator">.</span>arg(downloadLinkURL());
             m_messageBrowser<span class="operator">-</span><span class="operator">&gt;</span>setHtml(htmlTemplate\
                                      <span class="operator">.</span>arg(message<span class="operator">.</span>from()<span class="operator">.</span>addressee())\
                                      <span class="operator">.</span>arg(message<span class="operator">.</span>subject())\
                                      <span class="operator">.</span>arg(message<span class="operator">.</span>receivedDate()<span class="operator">.</span>toString())\
                                      <span class="operator">.</span>arg(changeViewTypeLink)\
                                      <span class="operator">.</span>arg(bodyText));
         }
     }
 }</pre>
<p>When the download link is clicked, the message body is retrieved using the <a href="qmessageservice.html#retrieveBody">QMessageService::retrieveBody</a>() service action.</p>
<pre class="cpp"> <span class="type">bool</span> MessageViewWidget<span class="operator">::</span>retrieveBody()
 {
     <span class="keyword">if</span>(m_state <span class="operator">!</span><span class="operator">=</span> Loading <span class="operator">&amp;</span><span class="operator">&amp;</span> <span class="operator">!</span>m_loadTimer<span class="operator">.</span>isActive())
     {
         m_loadTimer<span class="operator">.</span>setSingleShot(<span class="keyword">true</span>);
         m_loadTimer<span class="operator">.</span>start(LoadTimeLimit <span class="operator">*</span> <span class="number">1000</span>);
         m_state <span class="operator">=</span> Unloaded;

         <span class="keyword">return</span> m_service<span class="operator">-</span><span class="operator">&gt;</span>retrieveBody(m_messageId);
     }

     <span class="keyword">return</span> <span class="keyword">false</span>;
 }</pre>
<a name="store-signals"></a>
<h2>Store Signals</h2>
<p>This example displays the activities of the <a href="qmessagemanager.html">QMessageManager</a> in a <a href="http://qt.nokia.com/doc/4.7/qlistwidget.html">QListWidget</a> by connecting to QMessageManager::message(Added/Updated/Removed) signals.</p>
<pre class="cpp"> <span class="type">void</span> StoreSignalsWidget<span class="operator">::</span>messageAdded(<span class="keyword">const</span> <span class="type"><a href="qmessageid.html">QMessageId</a></span><span class="operator">&amp;</span> id<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qmessagemanager.html">QMessageManager</a></span><span class="operator">::</span>NotificationFilterIdSet<span class="operator">&amp;</span> filterSet)
 {
     <span class="keyword">if</span>(<span class="operator">!</span>filterSet<span class="operator">.</span>contains(m_notificationFilterId))
         <span class="keyword">return</span>;

     <span class="type"><a href="qmessage.html">QMessage</a></span> message(id);

     <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> msg <span class="operator">=</span> <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span>(<span class="string">&quot;Added: %1&quot;</span>)<span class="operator">.</span>arg(message<span class="operator">.</span>subject());
     m_activityListWidget<span class="operator">-</span><span class="operator">&gt;</span>addItem(msg);
 }

 <span class="type">void</span> StoreSignalsWidget<span class="operator">::</span>messageUpdated(<span class="keyword">const</span> <span class="type"><a href="qmessageid.html">QMessageId</a></span><span class="operator">&amp;</span> id<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qmessagemanager.html">QMessageManager</a></span><span class="operator">::</span>NotificationFilterIdSet<span class="operator">&amp;</span> filterSet)
 {
     <span class="keyword">if</span>(<span class="operator">!</span>filterSet<span class="operator">.</span>contains(m_notificationFilterId))
         <span class="keyword">return</span>;

     <span class="type"><a href="qmessage.html">QMessage</a></span> message(id);

     <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> msg <span class="operator">=</span> <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span>(<span class="string">&quot;Updated: %1&quot;</span>)<span class="operator">.</span>arg(message<span class="operator">.</span>subject());
     m_activityListWidget<span class="operator">-</span><span class="operator">&gt;</span>addItem(msg);
 }

 <span class="type">void</span> StoreSignalsWidget<span class="operator">::</span>messageRemoved(<span class="keyword">const</span> <span class="type"><a href="qmessageid.html">QMessageId</a></span><span class="operator">&amp;</span> id<span class="operator">,</span> <span class="keyword">const</span> <span class="type"><a href="qmessagemanager.html">QMessageManager</a></span><span class="operator">::</span>NotificationFilterIdSet<span class="operator">&amp;</span> filterSet)
 {
     <span class="keyword">if</span>(<span class="operator">!</span>filterSet<span class="operator">.</span>contains(m_notificationFilterId))
         <span class="keyword">return</span>;

     <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> idString(id<span class="operator">.</span>toString());
     idString<span class="operator">.</span>truncate(<span class="number">10</span>);

     <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span> msg <span class="operator">=</span> <span class="type"><a href="http://qt.nokia.com/doc/4.7/qstring.html">QString</a></span>(<span class="string">&quot;Removed ID: %1 ...&quot;</span>)<span class="operator">.</span>arg(idString);
     m_activityListWidget<span class="operator">-</span><span class="operator">&gt;</span>addItem(msg);
 }</pre>
</div>
<!-- @@@serviceactions -->
  <div class="ft">
    <span></span>
  </div>
</div> 
<div class="footer">
  <p>
     <acronym title="Copyright">&copy;</acronym> 2008-2011 Nokia Corporation and/or its
     subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation 
     in Finland and/or other countries worldwide.</p>
  <p>
     All other trademarks are property of their respective owners. <a title="Privacy Policy"
     href="http://qt.nokia.com/about/privacy-policy">Privacy Policy</a></p>
  <br />
  <p>
    Licensees holding valid Qt Commercial licenses may use this document in accordance with the    Qt Commercial License Agreement provided with the Software or, alternatively, in accordance    with the terms contained in a written agreement between you and Nokia.</p>
  <p>
    Alternatively, this document may be used under the terms of the <a href="http://www.gnu.org/licenses/fdl.html">GNU
    Free Documentation License version 1.3</a>
    as published by the Free Software Foundation.</p>
</div>
</body>
</html>