Sophie

Sophie

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

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>akregator/src: akregator_view.cpp Source File (akregator/src)</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="../../html/index.html">akregator</a> / <a href=".">src</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>akregator/src</h2>


<!-- Generated by Doxygen 1.5.5 -->
<h1>akregator_view.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 Akregator.</span>
<a name="l00003"></a>00003 <span class="comment"></span>
<a name="l00004"></a>00004 <span class="comment">    Copyright (C) 2004 Stanislav Karchebny &lt;Stanislav.Karchebny@kdemail.net&gt;</span>
<a name="l00005"></a>00005 <span class="comment">                  2004 Sashmit Bhaduri &lt;smt@vfemail.net&gt;</span>
<a name="l00006"></a>00006 <span class="comment">                  2005 Frank Osterfeld &lt;frank.osterfeld at kdemail.net&gt;</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment">    This program is free software; you can redistribute it and/or modify</span>
<a name="l00009"></a>00009 <span class="comment">    it under the terms of the GNU General Public License as published by</span>
<a name="l00010"></a>00010 <span class="comment">    the Free Software Foundation; either version 2 of the License, or</span>
<a name="l00011"></a>00011 <span class="comment">    (at your option) any later version.</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment">    This program is distributed in the hope that it will be useful,</span>
<a name="l00014"></a>00014 <span class="comment">    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00015"></a>00015 <span class="comment">    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<a name="l00016"></a>00016 <span class="comment">    GNU General Public License for more details.</span>
<a name="l00017"></a>00017 <span class="comment"></span>
<a name="l00018"></a>00018 <span class="comment">    You should have received a copy of the GNU General Public License</span>
<a name="l00019"></a>00019 <span class="comment">    along with this program; if not, write to the Free Software</span>
<a name="l00020"></a>00020 <span class="comment">    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span>
<a name="l00021"></a>00021 <span class="comment"></span>
<a name="l00022"></a>00022 <span class="comment">    As a special exception, permission is given to link this program</span>
<a name="l00023"></a>00023 <span class="comment">    with any edition of Qt, and distribute the resulting executable,</span>
<a name="l00024"></a>00024 <span class="comment">    without including the source code for Qt in the source distribution.</span>
<a name="l00025"></a>00025 <span class="comment">*/</span>
<a name="l00026"></a>00026 
<a name="l00027"></a>00027 <span class="preprocessor">#include "actionmanagerimpl.h"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "akregator_part.h"</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "akregator_run.h"</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "akregator_view.h"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "listtabwidget.h"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "addfeeddialog.h"</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "propertiesdialog.h"</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "frame.h"</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include "fetchqueue.h"</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include "feedlistview.h"</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include "articlelistview.h"</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include "articleviewer.h"</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include "viewer.h"</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include "feed.h"</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include "tagfolder.h"</span>
<a name="l00042"></a>00042 <span class="preprocessor">#include "folder.h"</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include "feedlist.h"</span>
<a name="l00044"></a>00044 <span class="preprocessor">#include "akregatorconfig.h"</span>
<a name="l00045"></a>00045 <span class="preprocessor">#include "kernel.h"</span>
<a name="l00046"></a>00046 <span class="preprocessor">#include "pageviewer.h"</span>
<a name="l00047"></a>00047 <span class="preprocessor">#include "searchbar.h"</span>
<a name="l00048"></a>00048 <span class="preprocessor">#include "speechclient.h"</span>
<a name="l00049"></a>00049 <span class="preprocessor">#include "storage.h"</span>
<a name="l00050"></a>00050 <span class="preprocessor">#include "tabwidget.h"</span>
<a name="l00051"></a>00051 <span class="preprocessor">#include "tag.h"</span>
<a name="l00052"></a>00052 <span class="preprocessor">#include "tagset.h"</span>
<a name="l00053"></a>00053 <span class="preprocessor">#include "tagnode.h"</span>
<a name="l00054"></a>00054 <span class="preprocessor">#include "tagnodelist.h"</span>
<a name="l00055"></a>00055 <span class="preprocessor">#include "tagpropertiesdialog.h"</span>
<a name="l00056"></a>00056 <span class="preprocessor">#include "treenode.h"</span>
<a name="l00057"></a>00057 <span class="preprocessor">#include "progressmanager.h"</span>
<a name="l00058"></a>00058 <span class="preprocessor">#include "treenodevisitor.h"</span>
<a name="l00059"></a>00059 <span class="preprocessor">#include "notificationmanager.h"</span>
<a name="l00060"></a>00060 
<a name="l00061"></a>00061 <span class="preprocessor">#include &lt;kaction.h&gt;</span>
<a name="l00062"></a>00062 <span class="preprocessor">#include &lt;kapplication.h&gt;</span>
<a name="l00063"></a>00063 <span class="preprocessor">#include &lt;kcharsets.h&gt;</span>
<a name="l00064"></a>00064 <span class="preprocessor">#include &lt;kcombobox.h&gt;</span>
<a name="l00065"></a>00065 <span class="preprocessor">#include &lt;kconfig.h&gt;</span>
<a name="l00066"></a>00066 <span class="preprocessor">#include &lt;kdebug.h&gt;</span>
<a name="l00067"></a>00067 <span class="preprocessor">#include &lt;kdialog.h&gt;</span>
<a name="l00068"></a>00068 <span class="preprocessor">#include &lt;kfiledialog.h&gt;</span>
<a name="l00069"></a>00069 <span class="preprocessor">#include &lt;kfileitem.h&gt;</span>
<a name="l00070"></a>00070 <span class="preprocessor">#include &lt;khtml_part.h&gt;</span>
<a name="l00071"></a>00071 <span class="preprocessor">#include &lt;khtmlview.h&gt;</span>
<a name="l00072"></a>00072 <span class="preprocessor">#include &lt;kiconloader.h&gt;</span>
<a name="l00073"></a>00073 <span class="preprocessor">#include &lt;kinputdialog.h&gt;</span>
<a name="l00074"></a>00074 <span class="preprocessor">#include &lt;klineedit.h&gt;</span>
<a name="l00075"></a>00075 <span class="preprocessor">#include &lt;klistview.h&gt;</span>
<a name="l00076"></a>00076 <span class="preprocessor">#include &lt;klocale.h&gt;</span>
<a name="l00077"></a>00077 <span class="preprocessor">#include &lt;kmessagebox.h&gt;</span>
<a name="l00078"></a>00078 <span class="preprocessor">#include &lt;kpassdlg.h&gt;</span>
<a name="l00079"></a>00079 <span class="preprocessor">#include &lt;kprocess.h&gt;</span>
<a name="l00080"></a>00080 <span class="preprocessor">#include &lt;krun.h&gt;</span>
<a name="l00081"></a>00081 <span class="preprocessor">#include &lt;kshell.h&gt;</span>
<a name="l00082"></a>00082 <span class="preprocessor">#include &lt;kstandarddirs.h&gt;</span>
<a name="l00083"></a>00083 <span class="preprocessor">#include &lt;kurl.h&gt;</span>
<a name="l00084"></a>00084 <span class="preprocessor">#include &lt;kxmlguifactory.h&gt;</span>
<a name="l00085"></a>00085 <span class="preprocessor">#include &lt;kparts/partmanager.h&gt;</span>
<a name="l00086"></a>00086 
<a name="l00087"></a>00087 <span class="preprocessor">#include &lt;qbuttongroup.h&gt;</span>
<a name="l00088"></a>00088 <span class="preprocessor">#include &lt;qcheckbox.h&gt;</span>
<a name="l00089"></a>00089 <span class="preprocessor">#include &lt;qdatetime.h&gt;</span> <span class="comment">// for startup time measure</span>
<a name="l00090"></a>00090 <span class="preprocessor">#include &lt;qfile.h&gt;</span>
<a name="l00091"></a>00091 <span class="preprocessor">#include &lt;qhbox.h&gt;</span>
<a name="l00092"></a>00092 <span class="preprocessor">#include &lt;qlabel.h&gt;</span>
<a name="l00093"></a>00093 <span class="preprocessor">#include &lt;qlayout.h&gt;</span>
<a name="l00094"></a>00094 <span class="preprocessor">#include &lt;qmultilineedit.h&gt;</span>
<a name="l00095"></a>00095 <span class="preprocessor">#include &lt;qpopupmenu.h&gt;</span>
<a name="l00096"></a>00096 <span class="preprocessor">#include &lt;qptrlist.h&gt;</span>
<a name="l00097"></a>00097 <span class="preprocessor">#include &lt;qstylesheet.h&gt;</span>
<a name="l00098"></a>00098 <span class="preprocessor">#include &lt;qtextstream.h&gt;</span>
<a name="l00099"></a>00099 <span class="preprocessor">#include &lt;qtimer.h&gt;</span>
<a name="l00100"></a>00100 <span class="preprocessor">#include &lt;qtoolbutton.h&gt;</span>
<a name="l00101"></a>00101 <span class="preprocessor">#include &lt;qtooltip.h&gt;</span>
<a name="l00102"></a>00102 <span class="preprocessor">#include &lt;qvaluevector.h&gt;</span>
<a name="l00103"></a>00103 <span class="preprocessor">#include &lt;qwhatsthis.h&gt;</span>
<a name="l00104"></a>00104 <span class="preprocessor">#include &lt;qclipboard.h&gt;</span>
<a name="l00105"></a>00105 
<a name="l00106"></a>00106 <span class="keyword">namespace </span>Akregator {
<a name="l00107"></a>00107 
<a name="l00108"></a>00108 <span class="keyword">class </span>View::EditNodePropertiesVisitor : <span class="keyword">public</span> TreeNodeVisitor
<a name="l00109"></a>00109 {
<a name="l00110"></a>00110     <span class="keyword">public</span>:
<a name="l00111"></a>00111         EditNodePropertiesVisitor(<a class="code" href="classAkregator_1_1View.html#68b7a5828072bd7bbf583f1d4a4e0ed0" title="constructor">View</a>* view) : m_view(view) {}
<a name="l00112"></a>00112 
<a name="l00113"></a>00113         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> visitTagNode(TagNode* node)
<a name="l00114"></a>00114         {
<a name="l00115"></a>00115             TagPropertiesDialog* dlg = <span class="keyword">new</span> TagPropertiesDialog(m_view);
<a name="l00116"></a>00116             dlg-&gt;setTag(node-&gt;tag());
<a name="l00117"></a>00117             dlg-&gt;exec();
<a name="l00118"></a>00118             <span class="keyword">delete</span> dlg;
<a name="l00119"></a>00119             <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00120"></a>00120         }
<a name="l00121"></a>00121 
<a name="l00122"></a>00122         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> visitFolder(Folder* node)
<a name="l00123"></a>00123         {
<a name="l00124"></a>00124             m_view-&gt;m_listTabWidget-&gt;activeView()-&gt;startNodeRenaming(node);
<a name="l00125"></a>00125             <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00126"></a>00126         }
<a name="l00127"></a>00127 
<a name="l00128"></a>00128         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> visitFeed(Feed* node)
<a name="l00129"></a>00129         {
<a name="l00130"></a>00130             FeedPropertiesDialog *dlg = <span class="keyword">new</span> FeedPropertiesDialog( m_view, <span class="stringliteral">"edit_feed"</span> );
<a name="l00131"></a>00131             dlg-&gt;setFeed(node);
<a name="l00132"></a>00132             dlg-&gt;exec();
<a name="l00133"></a>00133             <span class="keyword">delete</span> dlg;
<a name="l00134"></a>00134             <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00135"></a>00135         }
<a name="l00136"></a>00136     <span class="keyword">private</span>:
<a name="l00137"></a>00137 
<a name="l00138"></a>00138         <a class="code" href="classAkregator_1_1View.html#68b7a5828072bd7bbf583f1d4a4e0ed0" title="constructor">View</a>* m_view;
<a name="l00139"></a>00139 };
<a name="l00140"></a>00140 
<a name="l00141"></a>00141 <span class="keyword">class </span>View::DeleteNodeVisitor : <span class="keyword">public</span> TreeNodeVisitor
<a name="l00142"></a>00142 {
<a name="l00143"></a>00143     <span class="keyword">public</span>:
<a name="l00144"></a>00144         DeleteNodeVisitor(<a class="code" href="classAkregator_1_1View.html#68b7a5828072bd7bbf583f1d4a4e0ed0" title="constructor">View</a>* view) : m_view(view) {}
<a name="l00145"></a>00145 
<a name="l00146"></a>00146         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> visitTagNode(TagNode* node)
<a name="l00147"></a>00147         {
<a name="l00148"></a>00148             QString msg = i18n(<span class="stringliteral">"&lt;qt&gt;Are you sure you want to delete tag &lt;b&gt;%1&lt;/b&gt;? The tag will be removed from all articles.&lt;/qt&gt;"</span>).arg(node-&gt;title());
<a name="l00149"></a>00149             <span class="keywordflow">if</span> (KMessageBox::warningContinueCancel(0, msg, i18n(<span class="stringliteral">"Delete Tag"</span>), KStdGuiItem::del()) == KMessageBox::Continue)
<a name="l00150"></a>00150             {
<a name="l00151"></a>00151                 Tag tag = node-&gt;tag();
<a name="l00152"></a>00152                 QValueList&lt;Article&gt; articles = m_view-&gt;m_feedList-&gt;rootNode()-&gt;articles(tag.id());
<a name="l00153"></a>00153                 node-&gt;setNotificationMode(<span class="keyword">false</span>);
<a name="l00154"></a>00154                 <span class="keywordflow">for</span> (QValueList&lt;Article&gt;::Iterator it = articles.begin(); it != articles.end(); ++it)
<a name="l00155"></a>00155                     (*it).removeTag(tag.id());
<a name="l00156"></a>00156                 node-&gt;setNotificationMode(<span class="keyword">true</span>);
<a name="l00157"></a>00157                 Kernel::self()-&gt;tagSet()-&gt;remove(tag);
<a name="l00158"></a>00158                 m_view-&gt;m_listTabWidget-&gt;activeView()-&gt;setFocus();
<a name="l00159"></a>00159             }
<a name="l00160"></a>00160             <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00161"></a>00161         }
<a name="l00162"></a>00162 
<a name="l00163"></a>00163         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> visitFolder(Folder* node)
<a name="l00164"></a>00164         {
<a name="l00165"></a>00165             QString msg;
<a name="l00166"></a>00166             <span class="keywordflow">if</span> (node-&gt;title().isEmpty())
<a name="l00167"></a>00167                 msg = i18n(<span class="stringliteral">"&lt;qt&gt;Are you sure you want to delete this folder and its feeds and subfolders?&lt;/qt&gt;"</span>);
<a name="l00168"></a>00168             <span class="keywordflow">else</span>
<a name="l00169"></a>00169                 msg = i18n(<span class="stringliteral">"&lt;qt&gt;Are you sure you want to delete folder &lt;b&gt;%1&lt;/b&gt; and its feeds and subfolders?&lt;/qt&gt;"</span>).arg(node-&gt;title());
<a name="l00170"></a>00170 
<a name="l00171"></a>00171             <span class="keywordflow">if</span> (KMessageBox::warningContinueCancel(0, msg, i18n(<span class="stringliteral">"Delete Folder"</span>), KStdGuiItem::del()) == KMessageBox::Continue)
<a name="l00172"></a>00172             {
<a name="l00173"></a>00173                 <span class="keyword">delete</span> node;
<a name="l00174"></a>00174                 m_view-&gt;m_listTabWidget-&gt;activeView()-&gt;setFocus();
<a name="l00175"></a>00175             }
<a name="l00176"></a>00176             <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00177"></a>00177         }
<a name="l00178"></a>00178 
<a name="l00179"></a>00179         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> visitFeed(Feed* node)
<a name="l00180"></a>00180         {
<a name="l00181"></a>00181             QString msg;
<a name="l00182"></a>00182             <span class="keywordflow">if</span> (node-&gt;title().isEmpty())
<a name="l00183"></a>00183                 msg = i18n(<span class="stringliteral">"&lt;qt&gt;Are you sure you want to delete this feed?&lt;/qt&gt;"</span>);
<a name="l00184"></a>00184             <span class="keywordflow">else</span>
<a name="l00185"></a>00185                 msg = i18n(<span class="stringliteral">"&lt;qt&gt;Are you sure you want to delete feed &lt;b&gt;%1&lt;/b&gt;?&lt;/qt&gt;"</span>).arg(node-&gt;title());
<a name="l00186"></a>00186 
<a name="l00187"></a>00187             <span class="keywordflow">if</span> (KMessageBox::warningContinueCancel(0, msg, i18n(<span class="stringliteral">"Delete Feed"</span>), KStdGuiItem::del()) == KMessageBox::Continue)
<a name="l00188"></a>00188             {
<a name="l00189"></a>00189                 <span class="keyword">delete</span> node;
<a name="l00190"></a>00190                 m_view-&gt;m_listTabWidget-&gt;activeView()-&gt;setFocus();
<a name="l00191"></a>00191             }
<a name="l00192"></a>00192             <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00193"></a>00193         }
<a name="l00194"></a>00194     <span class="keyword">private</span>:
<a name="l00195"></a>00195 
<a name="l00196"></a>00196         <a class="code" href="classAkregator_1_1View.html#68b7a5828072bd7bbf583f1d4a4e0ed0" title="constructor">View</a>* m_view;
<a name="l00197"></a>00197 };
<a name="l00198"></a>00198 
<a name="l00199"></a>00199 
<a name="l00200"></a><a class="code" href="classAkregator_1_1View.html#ae8d67a27612bcd066315995315a76e5">00200</a> <a class="code" href="classAkregator_1_1View.html#ae8d67a27612bcd066315995315a76e5" title="destructor.">View::~View</a>()
<a name="l00201"></a>00201 {
<a name="l00202"></a>00202     <span class="comment">// if m_shuttingDown is false, slotOnShutdown was not called. That</span>
<a name="l00203"></a>00203      <span class="comment">// means that not the whole app is shutdown, only the part. So it</span>
<a name="l00204"></a>00204     <span class="comment">// should be no risk to do the cleanups now</span>
<a name="l00205"></a>00205     <span class="keywordflow">if</span> (!m_shuttingDown)
<a name="l00206"></a>00206     {
<a name="l00207"></a>00207         kdDebug() &lt;&lt; <span class="stringliteral">"View::~View(): slotOnShutdown() wasn't called. Calling it now."</span> &lt;&lt; endl;
<a name="l00208"></a>00208         slotOnShutdown();
<a name="l00209"></a>00209     }
<a name="l00210"></a>00210     kdDebug() &lt;&lt; <span class="stringliteral">"View::~View(): leaving"</span> &lt;&lt; endl;
<a name="l00211"></a>00211 }
<a name="l00212"></a>00212 
<a name="l00213"></a><a class="code" href="classAkregator_1_1View.html#68b7a5828072bd7bbf583f1d4a4e0ed0">00213</a> View::View( <a class="code" href="classAkregator_1_1Part.html" title="This is a RSS Aggregator &amp;quot;Part&amp;quot;.">Part</a> *part, QWidget *parent, <a class="code" href="classAkregator_1_1ActionManagerImpl.html" title="Akregator-specific implementation of the ActionManager interface.">ActionManagerImpl</a>* actionManager, <span class="keyword">const</span> <span class="keywordtype">char</span> *name)
<a name="l00214"></a>00214  : QWidget(parent, name), m_viewMode(NormalView), m_actionManager(actionManager)
<a name="l00215"></a>00215 {
<a name="l00216"></a>00216     m_editNodePropertiesVisitor = <span class="keyword">new</span> EditNodePropertiesVisitor(<span class="keyword">this</span>);
<a name="l00217"></a>00217     m_deleteNodeVisitor = <span class="keyword">new</span> DeleteNodeVisitor(<span class="keyword">this</span>);
<a name="l00218"></a>00218     m_keepFlagIcon = QPixmap(locate(<span class="stringliteral">"data"</span>, <span class="stringliteral">"akregator/pics/akregator_flag.png"</span>));
<a name="l00219"></a>00219     m_part = part;
<a name="l00220"></a>00220     m_feedList = <span class="keyword">new</span> <a class="code" href="classAkregator_1_1FeedList.html" title="The model of a feed tree, represents an OPML document.">FeedList</a>();
<a name="l00221"></a>00221     m_tagNodeList = <span class="keyword">new</span> TagNodeList(m_feedList, Kernel::self()-&gt;tagSet());
<a name="l00222"></a>00222     m_shuttingDown = <span class="keyword">false</span>;
<a name="l00223"></a>00223     m_displayingAboutPage = <span class="keyword">false</span>;
<a name="l00224"></a>00224     m_currentFrame = 0L;
<a name="l00225"></a>00225     setFocusPolicy(QWidget::StrongFocus);
<a name="l00226"></a>00226 
<a name="l00227"></a>00227     QVBoxLayout *lt = <span class="keyword">new</span> QVBoxLayout( <span class="keyword">this</span> );
<a name="l00228"></a>00228     
<a name="l00229"></a>00229     m_horizontalSplitter = <span class="keyword">new</span> QSplitter(QSplitter::Horizontal, <span class="keyword">this</span>);
<a name="l00230"></a>00230 
<a name="l00231"></a>00231     m_horizontalSplitter-&gt;setOpaqueResize(<span class="keyword">true</span>);
<a name="l00232"></a>00232     lt-&gt;addWidget(m_horizontalSplitter);
<a name="l00233"></a>00233 
<a name="l00234"></a>00234     connect (Kernel::self()-&gt;fetchQueue(), SIGNAL(fetched(<a class="code" href="classAkregator_1_1Feed.html" title="represents a feed">Feed</a>*)), <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#df813d0f4e22a9b57dc118d7b64340b7" title="Feed has been fetched, populate article view if needed and update counters.">slotFeedFetched</a>(<a class="code" href="classAkregator_1_1Feed.html" title="represents a feed">Feed</a>*)));
<a name="l00235"></a>00235     connect (Kernel::self()-&gt;fetchQueue(), SIGNAL(signalStarted()), <span class="keyword">this</span>, SLOT(slotFetchingStarted()));
<a name="l00236"></a>00236     connect (Kernel::self()-&gt;fetchQueue(), SIGNAL(signalStopped()), <span class="keyword">this</span>, SLOT(slotFetchingStopped()));
<a name="l00237"></a>00237 
<a name="l00238"></a>00238     connect(Kernel::self()-&gt;tagSet(), SIGNAL(signalTagAdded(<span class="keyword">const</span> Tag&amp;)), <span class="keyword">this</span>, SLOT(slotTagCreated(<span class="keyword">const</span> Tag&amp;)));
<a name="l00239"></a>00239     connect(Kernel::self()-&gt;tagSet(), SIGNAL(signalTagRemoved(<span class="keyword">const</span> Tag&amp;)), <span class="keyword">this</span>, SLOT(slotTagRemoved(<span class="keyword">const</span> Tag&amp;)));
<a name="l00240"></a>00240 
<a name="l00241"></a>00241     m_listTabWidget = <span class="keyword">new</span> <a class="code" href="classAkregator_1_1ListTabWidget.html" title="A widget containing multiple list views, e.g.">ListTabWidget</a>(m_horizontalSplitter);
<a name="l00242"></a>00242     m_actionManager-&gt;<a class="code" href="classAkregator_1_1ActionManagerImpl.html#9bfea92c417c727ec7833024c06bb7fc">initListTabWidget</a>(m_listTabWidget);
<a name="l00243"></a>00243 
<a name="l00244"></a>00244     connect(m_listTabWidget, SIGNAL(signalNodeSelected(<a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>*)), <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#5771f647c0fd90c828857da74f97841f" title="selected tree node has changed">slotNodeSelected</a>(<a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>*)));
<a name="l00245"></a>00245 
<a name="l00246"></a>00246     <span class="keywordflow">if</span> (!Settings::showTaggingGUI())
<a name="l00247"></a>00247         m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#3619d2c9dcb98106a8c13c35153a4341">setViewMode</a>(ListTabWidget::single);
<a name="l00248"></a>00248 
<a name="l00249"></a>00249     m_feedListView = <span class="keyword">new</span> NodeListView( <span class="keyword">this</span>, <span class="stringliteral">"feedtree"</span> );
<a name="l00250"></a>00250     m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#5d4873cfcd907744d9663a9717b1fce9">addView</a>(m_feedListView, i18n(<span class="stringliteral">"Feeds"</span>), KGlobal::iconLoader()-&gt;loadIcon(<span class="stringliteral">"folder"</span>, KIcon::Small));
<a name="l00251"></a>00251 
<a name="l00252"></a>00252     connect(m_feedListView, SIGNAL(signalContextMenu(KListView*, <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>*, <span class="keyword">const</span> QPoint&amp;)), <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#8d664d40ff761936897824890c1ec6b1" title="Shows requested popup menu for feed tree.">slotFeedTreeContextMenu</a>(KListView*, <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>*, <span class="keyword">const</span> QPoint&amp;)));
<a name="l00253"></a>00253 
<a name="l00254"></a>00254     connect(m_feedListView, SIGNAL(signalDropped (KURL::List &amp;, <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>*,
<a name="l00255"></a>00255             <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>*)), <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#0aa903f500d4d01e41d1ee8ab8d12440" title="called when URLs are dropped into the tree view">slotFeedURLDropped</a> (KURL::List &amp;,
<a name="l00256"></a>00256             <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>*, <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>*)));
<a name="l00257"></a>00257 
<a name="l00258"></a>00258     m_tagNodeListView = <span class="keyword">new</span> NodeListView(<span class="keyword">this</span>);
<a name="l00259"></a>00259     m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#5d4873cfcd907744d9663a9717b1fce9">addView</a>(m_tagNodeListView, i18n(<span class="stringliteral">"Tags"</span>), KGlobal::iconLoader()-&gt;loadIcon(<span class="stringliteral">"rss_tag"</span>, KIcon::Small));
<a name="l00260"></a>00260 
<a name="l00261"></a>00261     connect(m_tagNodeListView, SIGNAL(signalContextMenu(KListView*, <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>*, <span class="keyword">const</span> QPoint&amp;)), <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#8d664d40ff761936897824890c1ec6b1" title="Shows requested popup menu for feed tree.">slotFeedTreeContextMenu</a>(KListView*, <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>*, <span class="keyword">const</span> QPoint&amp;)));
<a name="l00262"></a>00262 
<a name="l00263"></a>00263     
<a name="l00264"></a>00264     ProgressManager::self()-&gt;setFeedList(m_feedList);
<a name="l00265"></a>00265 
<a name="l00266"></a>00266     m_tabs = <span class="keyword">new</span> TabWidget(m_horizontalSplitter);
<a name="l00267"></a>00267     m_actionManager-&gt;<a class="code" href="classAkregator_1_1ActionManagerImpl.html#c6a8bcf9c6c147a763ea684aa99fea9e">initTabWidget</a>(m_tabs);
<a name="l00268"></a>00268 
<a name="l00269"></a>00269     connect( m_part, SIGNAL(signalSettingsChanged()), m_tabs, SLOT(slotSettingsChanged()));
<a name="l00270"></a>00270 
<a name="l00271"></a>00271     connect( m_tabs, SIGNAL( currentFrameChanged(Frame *) ), <span class="keyword">this</span>,
<a name="l00272"></a>00272             SLOT( <a class="code" href="classAkregator_1_1View.html#b9fd8ba6990cd75b7537e758392c68ac" title="called when another part/frame is activated.">slotFrameChanged</a>(Frame *) ) );
<a name="l00273"></a>00273 
<a name="l00274"></a>00274     QWhatsThis::add(m_tabs, i18n(<span class="stringliteral">"You can view multiple articles in several open tabs."</span>));
<a name="l00275"></a>00275 
<a name="l00276"></a>00276     m_mainTab = <span class="keyword">new</span> QWidget(<span class="keyword">this</span>, <span class="stringliteral">"Article Tab"</span>);
<a name="l00277"></a>00277     QVBoxLayout *mainTabLayout = <span class="keyword">new</span> QVBoxLayout( m_mainTab, 0, 2, <span class="stringliteral">"mainTabLayout"</span>);
<a name="l00278"></a>00278 
<a name="l00279"></a>00279     QWhatsThis::add(m_mainTab, i18n(<span class="stringliteral">"Articles list."</span>));
<a name="l00280"></a>00280 
<a name="l00281"></a>00281     m_searchBar = <span class="keyword">new</span> SearchBar(m_mainTab);
<a name="l00282"></a>00282 
<a name="l00283"></a>00283     <span class="keywordflow">if</span> ( !Settings::showQuickFilter() )
<a name="l00284"></a>00284         m_searchBar-&gt;hide();
<a name="l00285"></a>00285 
<a name="l00286"></a>00286     mainTabLayout-&gt;addWidget(m_searchBar);
<a name="l00287"></a>00287 
<a name="l00288"></a>00288     m_articleSplitter = <span class="keyword">new</span> QSplitter(QSplitter::Vertical, m_mainTab, <span class="stringliteral">"panner2"</span>);
<a name="l00289"></a>00289 
<a name="l00290"></a>00290     m_articleList = <span class="keyword">new</span> ArticleListView( m_articleSplitter, <span class="stringliteral">"articles"</span> );
<a name="l00291"></a>00291     m_actionManager-&gt;<a class="code" href="classAkregator_1_1ActionManagerImpl.html#1c497f0eeb19a2c539ebf612b421f1c5">initArticleListView</a>(m_articleList);
<a name="l00292"></a>00292 
<a name="l00293"></a>00293     connect( m_articleList, SIGNAL(signalMouseButtonPressed(<span class="keywordtype">int</span>, <span class="keyword">const</span> <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a>&amp;, <span class="keyword">const</span> QPoint &amp;, <span class="keywordtype">int</span>)), <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#a750ca71d3f4bd16f2a9b55c14135a32" title="special behaviour in article list view (TODO: move code there?)">slotMouseButtonPressed</a>(<span class="keywordtype">int</span>, <span class="keyword">const</span> <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a>&amp;, <span class="keyword">const</span> QPoint &amp;, <span class="keywordtype">int</span>)));
<a name="l00294"></a>00294 
<a name="l00295"></a>00295     <span class="comment">// use selectionChanged instead of clicked</span>
<a name="l00296"></a>00296     connect( m_articleList, SIGNAL(signalArticleChosen(<span class="keyword">const</span> <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a>&amp;)),
<a name="l00297"></a>00297                 <span class="keyword">this</span>, SLOT( <a class="code" href="classAkregator_1_1View.html#dcb8e0575e52f966299ca82dbb3ac9c3" title="the article selection has changed">slotArticleSelected</a>(<span class="keyword">const</span> <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a>&amp;)) );
<a name="l00298"></a>00298     connect( m_articleList, SIGNAL(signalDoubleClicked(<span class="keyword">const</span> <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a>&amp;, <span class="keyword">const</span> QPoint&amp;, <span class="keywordtype">int</span>)),
<a name="l00299"></a>00299                 <span class="keyword">this</span>, SLOT( <a class="code" href="classAkregator_1_1View.html#9e057967b1a4fd1dddf483b3ef54889f" title="opens article of item in external browser">slotOpenArticleExternal</a>(<span class="keyword">const</span> <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a>&amp;, <span class="keyword">const</span> QPoint&amp;, <span class="keywordtype">int</span>)) );
<a name="l00300"></a>00300 
<a name="l00301"></a>00301     m_articleViewer = <span class="keyword">new</span> <a class="code" href="classAkregator_1_1ArticleViewer.html" title="This HTML viewer is used to display articles.">ArticleViewer</a>(m_articleSplitter, <span class="stringliteral">"article_viewer"</span>);
<a name="l00302"></a>00302     m_articleViewer-&gt;setSafeMode();  <span class="comment">// disable JS, Java, etc...</span>
<a name="l00303"></a>00303 
<a name="l00304"></a>00304     m_actionManager-&gt;<a class="code" href="classAkregator_1_1ActionManagerImpl.html#0a0dcea028a2a4dd5efa0ad377b1c668">initArticleViewer</a>(m_articleViewer);
<a name="l00305"></a>00305 
<a name="l00306"></a>00306     connect(m_searchBar, SIGNAL(signalSearch(<span class="keyword">const</span> <a class="code" href="classAkregator_1_1Filters_1_1ArticleMatcher.html" title="a powerful matcher supporting multiple criterions, which can be combined via logical...">Akregator::Filters::ArticleMatcher</a>&amp;, <span class="keyword">const</span> <a class="code" href="classAkregator_1_1Filters_1_1ArticleMatcher.html" title="a powerful matcher supporting multiple criterions, which can be combined via logical...">Akregator::Filters::ArticleMatcher</a>&amp;)), m_articleList, SLOT(slotSetFilter(<span class="keyword">const</span> <a class="code" href="classAkregator_1_1Filters_1_1ArticleMatcher.html" title="a powerful matcher supporting multiple criterions, which can be combined via logical...">Akregator::Filters::ArticleMatcher</a>&amp;, <span class="keyword">const</span> <a class="code" href="classAkregator_1_1Filters_1_1ArticleMatcher.html" title="a powerful matcher supporting multiple criterions, which can be combined via logical...">Akregator::Filters::ArticleMatcher</a>&amp;)));
<a name="l00307"></a>00307 
<a name="l00308"></a>00308     connect(m_searchBar, SIGNAL(signalSearch(<span class="keyword">const</span> <a class="code" href="classAkregator_1_1Filters_1_1ArticleMatcher.html" title="a powerful matcher supporting multiple criterions, which can be combined via logical...">Akregator::Filters::ArticleMatcher</a>&amp;, <span class="keyword">const</span> <a class="code" href="classAkregator_1_1Filters_1_1ArticleMatcher.html" title="a powerful matcher supporting multiple criterions, which can be combined via logical...">Akregator::Filters::ArticleMatcher</a>&amp;)), m_articleViewer, SLOT(slotSetFilter(<span class="keyword">const</span> <a class="code" href="classAkregator_1_1Filters_1_1ArticleMatcher.html" title="a powerful matcher supporting multiple criterions, which can be combined via logical...">Akregator::Filters::ArticleMatcher</a>&amp;, <span class="keyword">const</span> <a class="code" href="classAkregator_1_1Filters_1_1ArticleMatcher.html" title="a powerful matcher supporting multiple criterions, which can be combined via logical...">Akregator::Filters::ArticleMatcher</a>&amp;)));
<a name="l00309"></a>00309 
<a name="l00310"></a>00310     connect( m_articleViewer, SIGNAL(urlClicked(<span class="keyword">const</span> KURL&amp;, Viewer*, <span class="keywordtype">bool</span>, <span class="keywordtype">bool</span>)),
<a name="l00311"></a>00311              <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#1fb6d84f9339585dcd275f55905ffa3e" title="HACK: part of the url opening hack for 3.5.">slotUrlClickedInViewer</a>(<span class="keyword">const</span> KURL&amp;, Viewer*, <span class="keywordtype">bool</span>, <span class="keywordtype">bool</span>)) );
<a name="l00312"></a>00312 
<a name="l00313"></a>00313     connect( m_articleViewer-&gt;browserExtension(), SIGNAL(mouseOverInfo(<span class="keyword">const</span> KFileItem *)),
<a name="l00314"></a>00314                                             <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#355b13d86ee9a7a735f4c4dda569b03a" title="displays a URL in the status bar when the user moves the mouse over a link">slotMouseOverInfo</a>(<span class="keyword">const</span> KFileItem *)) );
<a name="l00315"></a>00315 
<a name="l00316"></a>00316     connect( m_part, SIGNAL(signalSettingsChanged()), m_articleViewer, SLOT(slotPaletteOrFontChanged()));
<a name="l00317"></a>00317     QWhatsThis::add(m_articleViewer-&gt;widget(), i18n(<span class="stringliteral">"Browsing area."</span>));
<a name="l00318"></a>00318     mainTabLayout-&gt;addWidget( m_articleSplitter );
<a name="l00319"></a>00319 
<a name="l00320"></a>00320     m_mainFrame=<span class="keyword">new</span> Frame(<span class="keyword">this</span>, m_part, m_mainTab, i18n(<span class="stringliteral">"Articles"</span>), <span class="keyword">false</span>);
<a name="l00321"></a>00321     connectFrame(m_mainFrame);
<a name="l00322"></a>00322     m_tabs-&gt;addFrame(m_mainFrame);
<a name="l00323"></a>00323 
<a name="l00324"></a>00324     m_horizontalSplitter-&gt;setSizes( Settings::splitter1Sizes() );
<a name="l00325"></a>00325     m_articleSplitter-&gt;setSizes( Settings::splitter2Sizes() );
<a name="l00326"></a>00326 
<a name="l00327"></a>00327     KConfig *conf = Settings::self()-&gt;config();
<a name="l00328"></a>00328     conf-&gt;setGroup(<span class="stringliteral">"General"</span>);
<a name="l00329"></a>00329     <span class="keywordflow">if</span>(!conf-&gt;readBoolEntry(<span class="stringliteral">"Disable Introduction"</span>, <span class="keyword">false</span>))
<a name="l00330"></a>00330     {
<a name="l00331"></a>00331         m_articleList-&gt;hide();
<a name="l00332"></a>00332         m_searchBar-&gt;hide();
<a name="l00333"></a>00333         m_articleViewer-&gt;<a class="code" href="classAkregator_1_1ArticleViewer.html#6e0540bb1504deb481c60ac4627d0165">displayAboutPage</a>();
<a name="l00334"></a>00334         m_mainFrame-&gt;setTitle(i18n(<span class="stringliteral">"About"</span>));
<a name="l00335"></a>00335         m_displayingAboutPage = <span class="keyword">true</span>;
<a name="l00336"></a>00336     }
<a name="l00337"></a>00337 
<a name="l00338"></a>00338     m_fetchTimer = <span class="keyword">new</span> QTimer(<span class="keyword">this</span>);
<a name="l00339"></a>00339     connect( m_fetchTimer, SIGNAL(timeout()), <span class="keyword">this</span>, SLOT(slotDoIntervalFetches()) );
<a name="l00340"></a>00340     m_fetchTimer-&gt;start(1000*60);
<a name="l00341"></a>00341 
<a name="l00342"></a>00342     <span class="comment">// delete expired articles once per hour</span>
<a name="l00343"></a>00343     m_expiryTimer = <span class="keyword">new</span> QTimer(<span class="keyword">this</span>);
<a name="l00344"></a>00344     connect(m_expiryTimer, SIGNAL(timeout()), <span class="keyword">this</span>,
<a name="l00345"></a>00345             SLOT(slotDeleteExpiredArticles()) );
<a name="l00346"></a>00346     m_expiryTimer-&gt;start(3600*1000);
<a name="l00347"></a>00347 
<a name="l00348"></a>00348     m_markReadTimer = <span class="keyword">new</span> QTimer(<span class="keyword">this</span>);
<a name="l00349"></a>00349     connect(m_markReadTimer, SIGNAL(timeout()), <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#39d8c21551313de06b5bb41b486bfd29" title="marks the currenctly selected article as read after a user-set delay">slotSetCurrentArticleReadDelayed</a>()) );
<a name="l00350"></a>00350 
<a name="l00351"></a>00351     <span class="keywordflow">switch</span> (Settings::viewMode())
<a name="l00352"></a>00352     {
<a name="l00353"></a>00353         <span class="keywordflow">case</span> CombinedView:
<a name="l00354"></a>00354             <a class="code" href="classAkregator_1_1View.html#c11073c7a4be7a84f489614df24d9dbe" title="switches view mode to combined view">slotCombinedView</a>();
<a name="l00355"></a>00355             <span class="keywordflow">break</span>;
<a name="l00356"></a>00356         <span class="keywordflow">case</span> WidescreenView:
<a name="l00357"></a>00357             <a class="code" href="classAkregator_1_1View.html#da047ed192ab73a7837f265f3987d9d6" title="switches view mode to widescreen view">slotWidescreenView</a>();
<a name="l00358"></a>00358             <span class="keywordflow">break</span>;
<a name="l00359"></a>00359         <span class="keywordflow">default</span>:
<a name="l00360"></a>00360             <a class="code" href="classAkregator_1_1View.html#9f4253a801a0c06e567b6f5b9b94ab8e" title="switches view mode to normal view">slotNormalView</a>();
<a name="l00361"></a>00361     }
<a name="l00362"></a>00362 
<a name="l00363"></a>00363     <span class="keywordflow">if</span> (!Settings::resetQuickFilterOnNodeChange())
<a name="l00364"></a>00364     {
<a name="l00365"></a>00365         m_searchBar-&gt;slotSetStatus(Settings::statusFilter());
<a name="l00366"></a>00366         m_searchBar-&gt;slotSetText(Settings::textFilter());
<a name="l00367"></a>00367     }
<a name="l00368"></a>00368 
<a name="l00369"></a>00369     QTimer::singleShot(1000, <span class="keyword">this</span>, SLOT(slotDeleteExpiredArticles()) );
<a name="l00370"></a>00370     m_part-&gt;<a class="code" href="classAkregator_1_1Part.html#28339e454f049229ae862f9b62f77b4b" title="merges a nested part&amp;#39;s GUI into the gui of this part">mergePart</a>(m_articleViewer);
<a name="l00371"></a>00371 }
<a name="l00372"></a>00372 
<a name="l00373"></a>00373 <span class="keywordtype">void</span> View::slotSettingsChanged()
<a name="l00374"></a>00374 {
<a name="l00375"></a>00375     <span class="comment">// if tagging is hidden, show only feed list</span>
<a name="l00376"></a>00376     m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#3619d2c9dcb98106a8c13c35153a4341">setViewMode</a>(Settings::showTaggingGUI() ? ListTabWidget::verticalTabs : ListTabWidget::single);
<a name="l00377"></a>00377     
<a name="l00378"></a>00378 }
<a name="l00379"></a>00379 
<a name="l00380"></a>00380 <span class="keywordtype">void</span> View::slotOnShutdown()
<a name="l00381"></a>00381 {
<a name="l00382"></a>00382     m_shuttingDown = <span class="keyword">true</span>; <span class="comment">// prevents slotFrameChanged from crashing</span>
<a name="l00383"></a>00383 
<a name="l00384"></a>00384     m_articleList-&gt;slotShowNode(0);
<a name="l00385"></a>00385     m_articleViewer-&gt;slotShowNode(0);
<a name="l00386"></a>00386 
<a name="l00387"></a>00387     Kernel::self()-&gt;fetchQueue()-&gt;slotAbort();
<a name="l00388"></a>00388 
<a name="l00389"></a>00389     m_feedListView-&gt;setNodeList(0);
<a name="l00390"></a>00390     ProgressManager::self()-&gt;setFeedList(0);
<a name="l00391"></a>00391 
<a name="l00392"></a>00392     <span class="keyword">delete</span> m_feedList;
<a name="l00393"></a>00393     <span class="keyword">delete</span> m_tagNodeList;
<a name="l00394"></a>00394 
<a name="l00395"></a>00395     <span class="comment">// close all pageviewers in a controlled way</span>
<a name="l00396"></a>00396     <span class="comment">// fixes bug 91660, at least when no part loading data</span>
<a name="l00397"></a>00397     m_tabs-&gt;setCurrentPage(m_tabs-&gt;count()-1); <span class="comment">// select last page</span>
<a name="l00398"></a>00398     <span class="keywordflow">while</span> (m_tabs-&gt;count() &gt; 1) <span class="comment">// remove frames until only the main frame remains</span>
<a name="l00399"></a>00399         m_tabs-&gt;slotRemoveCurrentFrame();
<a name="l00400"></a>00400 
<a name="l00401"></a>00401     <span class="keyword">delete</span> m_mainTab;
<a name="l00402"></a>00402     <span class="keyword">delete</span> m_mainFrame;
<a name="l00403"></a>00403     <span class="keyword">delete</span> m_editNodePropertiesVisitor;
<a name="l00404"></a>00404     <span class="keyword">delete</span> m_deleteNodeVisitor;
<a name="l00405"></a>00405 }
<a name="l00406"></a>00406 
<a name="l00407"></a><a class="code" href="classAkregator_1_1View.html#524fa260be510a1de14612f9b76d8f2c">00407</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#524fa260be510a1de14612f9b76d8f2c" title="saves settings.">View::saveSettings</a>()
<a name="l00408"></a>00408 {
<a name="l00409"></a>00409     Settings::setSplitter1Sizes( m_horizontalSplitter-&gt;sizes() );
<a name="l00410"></a>00410     Settings::setSplitter2Sizes( m_articleSplitter-&gt;sizes() );
<a name="l00411"></a>00411     Settings::setViewMode( m_viewMode );
<a name="l00412"></a>00412     Settings::writeConfig();
<a name="l00413"></a>00413 }
<a name="l00414"></a>00414 
<a name="l00415"></a><a class="code" href="classAkregator_1_1View.html#a5a99328351f0b1d1564d57808ddf711">00415</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#a5a99328351f0b1d1564d57808ddf711" title="opens a page viewer in a new tab and loads an URL">View::slotOpenNewTab</a>(<span class="keyword">const</span> KURL&amp; url, <span class="keywordtype">bool</span> background)
<a name="l00416"></a>00416 {
<a name="l00417"></a>00417     PageViewer* page = <span class="keyword">new</span> PageViewer(<span class="keyword">this</span>, <span class="stringliteral">"page"</span>);
<a name="l00418"></a>00418     
<a name="l00419"></a>00419     connect( m_part, SIGNAL(signalSettingsChanged()), page, SLOT(slotPaletteOrFontChanged()));
<a name="l00420"></a>00420 
<a name="l00421"></a>00421     connect( page, SIGNAL(setTabIcon(<span class="keyword">const</span> QPixmap&amp;)),
<a name="l00422"></a>00422             <span class="keyword">this</span>, SLOT(setTabIcon(<span class="keyword">const</span> QPixmap&amp;)));
<a name="l00423"></a>00423     connect( page, SIGNAL(urlClicked(<span class="keyword">const</span> KURL &amp;, Viewer*, <span class="keywordtype">bool</span>, <span class="keywordtype">bool</span>)),
<a name="l00424"></a>00424             <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#1fb6d84f9339585dcd275f55905ffa3e" title="HACK: part of the url opening hack for 3.5.">slotUrlClickedInViewer</a>(<span class="keyword">const</span> KURL &amp;, Viewer*, <span class="keywordtype">bool</span>, <span class="keywordtype">bool</span>)) );
<a name="l00425"></a>00425 
<a name="l00426"></a>00426     Frame* frame = <span class="keyword">new</span> Frame(<span class="keyword">this</span>, page, page-&gt;widget(), i18n(<span class="stringliteral">"Untitled"</span>));
<a name="l00427"></a>00427     frame-&gt;setAutoDeletePart(<span class="keyword">true</span>); <span class="comment">// delete page viewer when removing the tab</span>
<a name="l00428"></a>00428 
<a name="l00429"></a>00429     connect(page, SIGNAL(setWindowCaption (<span class="keyword">const</span> QString &amp;)), frame, SLOT(setTitle (<span class="keyword">const</span> QString &amp;)));
<a name="l00430"></a>00430     connectFrame(frame);
<a name="l00431"></a>00431     m_tabs-&gt;addFrame(frame);
<a name="l00432"></a>00432 
<a name="l00433"></a>00433     <span class="keywordflow">if</span>(!background)
<a name="l00434"></a>00434         m_tabs-&gt;showPage(page-&gt;widget());
<a name="l00435"></a>00435     <span class="keywordflow">else</span>
<a name="l00436"></a>00436         setFocus();
<a name="l00437"></a>00437 
<a name="l00438"></a>00438     page-&gt;openURL(url);
<a name="l00439"></a>00439 }
<a name="l00440"></a>00440 
<a name="l00441"></a>00441 
<a name="l00442"></a>00442 <span class="keywordtype">void</span> View::setTabIcon(<span class="keyword">const</span> QPixmap&amp; icon)
<a name="l00443"></a>00443 {
<a name="l00444"></a>00444     <span class="keyword">const</span> PageViewer *s = <span class="keyword">dynamic_cast&lt;</span><span class="keyword">const </span>PageViewer*<span class="keyword">&gt;</span>(sender());
<a name="l00445"></a>00445     <span class="keywordflow">if</span> (s) {
<a name="l00446"></a>00446         m_tabs-&gt;setTabIconSet(const_cast&lt;PageViewer*&gt;(s)-&gt;widget(), icon);
<a name="l00447"></a>00447     }
<a name="l00448"></a>00448 }
<a name="l00449"></a>00449 
<a name="l00450"></a>00450 <span class="keywordtype">void</span> View::connectFrame(Frame *f)
<a name="l00451"></a>00451 {
<a name="l00452"></a>00452     connect(f, SIGNAL(statusText(<span class="keyword">const</span> QString &amp;)), <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#0e66502b54fd87a95430d09d2c1719bf" title="sets the status bar text to a given string">slotStatusText</a>(<span class="keyword">const</span> QString&amp;)));
<a name="l00453"></a>00453     connect(f, SIGNAL(captionChanged (<span class="keyword">const</span> QString &amp;)), <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#a2078c77fea1c387d327dafb35089ac4" title="sets the window caption after a frame change">slotCaptionChanged</a> (<span class="keyword">const</span> QString &amp;)));
<a name="l00454"></a>00454     connect(f, SIGNAL(loadingProgress(<span class="keywordtype">int</span>)), <span class="keyword">this</span>, SLOT(slotLoadingProgress(<span class="keywordtype">int</span>)) );
<a name="l00455"></a>00455     connect(f, SIGNAL(started()), <span class="keyword">this</span>, SLOT(slotStarted()));
<a name="l00456"></a>00456     connect(f, SIGNAL(completed()), <span class="keyword">this</span>, SLOT(slotCompleted()));
<a name="l00457"></a>00457     connect(f, SIGNAL(canceled(<span class="keyword">const</span> QString &amp;)), <span class="keyword">this</span>, SLOT(slotCanceled(<span class="keyword">const</span> QString&amp;)));
<a name="l00458"></a>00458 }
<a name="l00459"></a>00459 
<a name="l00460"></a><a class="code" href="classAkregator_1_1View.html#0e66502b54fd87a95430d09d2c1719bf">00460</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#0e66502b54fd87a95430d09d2c1719bf" title="sets the status bar text to a given string">View::slotStatusText</a>(<span class="keyword">const</span> QString &amp;c)
<a name="l00461"></a>00461 {
<a name="l00462"></a>00462     <span class="keywordflow">if</span> (sender() == m_currentFrame)
<a name="l00463"></a>00463         emit setStatusBarText(c);
<a name="l00464"></a>00464 }
<a name="l00465"></a>00465 
<a name="l00466"></a><a class="code" href="classAkregator_1_1View.html#a2078c77fea1c387d327dafb35089ac4">00466</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#a2078c77fea1c387d327dafb35089ac4" title="sets the window caption after a frame change">View::slotCaptionChanged</a>(<span class="keyword">const</span> QString &amp;c)
<a name="l00467"></a>00467 {
<a name="l00468"></a>00468     <span class="keywordflow">if</span> (sender() == m_currentFrame)
<a name="l00469"></a>00469         emit setWindowCaption(c);
<a name="l00470"></a>00470 }
<a name="l00471"></a>00471 
<a name="l00472"></a>00472 <span class="keywordtype">void</span> View::slotStarted()
<a name="l00473"></a>00473 {
<a name="l00474"></a>00474     <span class="keywordflow">if</span> (sender() == m_currentFrame)
<a name="l00475"></a>00475         emit signalStarted(0);
<a name="l00476"></a>00476 }
<a name="l00477"></a>00477 
<a name="l00478"></a>00478 <span class="keywordtype">void</span> View::slotCanceled(<span class="keyword">const</span> QString &amp;s)
<a name="l00479"></a>00479 {
<a name="l00480"></a>00480     <span class="keywordflow">if</span> (sender() == m_currentFrame)
<a name="l00481"></a>00481         emit signalCanceled(s);
<a name="l00482"></a>00482 }
<a name="l00483"></a>00483 
<a name="l00484"></a>00484 <span class="keywordtype">void</span> View::slotCompleted()
<a name="l00485"></a>00485 {
<a name="l00486"></a>00486     <span class="keywordflow">if</span> (sender() == m_currentFrame)
<a name="l00487"></a>00487         emit signalCompleted();
<a name="l00488"></a>00488 }
<a name="l00489"></a>00489 
<a name="l00490"></a>00490 <span class="keywordtype">void</span> View::slotLoadingProgress(<span class="keywordtype">int</span> percent)
<a name="l00491"></a>00491 {
<a name="l00492"></a>00492     <span class="keywordflow">if</span> (sender() == m_currentFrame)
<a name="l00493"></a>00493         emit setProgress(percent);
<a name="l00494"></a>00494 }
<a name="l00495"></a>00495 
<a name="l00496"></a><a class="code" href="classAkregator_1_1View.html#a92dab498944ee990031e9b9d1bb2236">00496</a> <span class="keywordtype">bool</span> <a class="code" href="classAkregator_1_1View.html#a92dab498944ee990031e9b9d1bb2236" title="Adds the feeds in doc to the &amp;quot;Imported Folder&amp;quot;.">View::importFeeds</a>(<span class="keyword">const</span> QDomDocument&amp; doc)
<a name="l00497"></a>00497 {
<a name="l00498"></a>00498     <a class="code" href="classAkregator_1_1FeedList.html" title="The model of a feed tree, represents an OPML document.">FeedList</a>* feedList = <span class="keyword">new</span> <a class="code" href="classAkregator_1_1FeedList.html" title="The model of a feed tree, represents an OPML document.">FeedList</a>();
<a name="l00499"></a>00499     <span class="keywordtype">bool</span> parsed = feedList-&gt;<a class="code" href="classAkregator_1_1FeedList.html#632935fbc18dfbdd1012b41ac9f91423" title="reads an OPML document and appends the items to this list">readFromXML</a>(doc);
<a name="l00500"></a>00500 
<a name="l00501"></a>00501     <span class="comment">// FIXME: parsing error, print some message</span>
<a name="l00502"></a>00502     <span class="keywordflow">if</span> (!parsed)
<a name="l00503"></a>00503     {
<a name="l00504"></a>00504         <span class="keyword">delete</span> feedList;
<a name="l00505"></a>00505         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00506"></a>00506     }
<a name="l00507"></a>00507     QString title = feedList-&gt;title();
<a name="l00508"></a>00508 
<a name="l00509"></a>00509     <span class="keywordflow">if</span> (title.isEmpty())
<a name="l00510"></a>00510         title = i18n(<span class="stringliteral">"Imported Folder"</span>);
<a name="l00511"></a>00511 
<a name="l00512"></a>00512     <span class="keywordtype">bool</span> ok;
<a name="l00513"></a>00513     title = KInputDialog::getText(i18n(<span class="stringliteral">"Add Imported Folder"</span>), i18n(<span class="stringliteral">"Imported folder name:"</span>), title, &amp;ok);
<a name="l00514"></a>00514 
<a name="l00515"></a>00515     <span class="keywordflow">if</span> (!ok)
<a name="l00516"></a>00516     {
<a name="l00517"></a>00517         <span class="keyword">delete</span> feedList;
<a name="l00518"></a>00518         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00519"></a>00519     }
<a name="l00520"></a>00520 
<a name="l00521"></a>00521     <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>* fg = <span class="keyword">new</span> <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>(title);
<a name="l00522"></a>00522     m_feedList-&gt;rootNode()-&gt;appendChild(fg);
<a name="l00523"></a>00523     m_feedList-&gt;<a class="code" href="classAkregator_1_1FeedList.html#bb859a2c58a78ef7a498c87dba354cd3" title="appends another feed list as sub tree.">append</a>(feedList, fg);
<a name="l00524"></a>00524 
<a name="l00525"></a>00525     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00526"></a>00526 }
<a name="l00527"></a>00527 
<a name="l00528"></a><a class="code" href="classAkregator_1_1View.html#2f6eb960fdea851e5522a28f54d922b7">00528</a> <span class="keywordtype">bool</span> <a class="code" href="classAkregator_1_1View.html#2f6eb960fdea851e5522a28f54d922b7" title="Parse OPML presentation of feeds and read in articles archive, if present.">View::loadFeeds</a>(<span class="keyword">const</span> QDomDocument&amp; doc, <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>* parent)
<a name="l00529"></a>00529 {
<a name="l00530"></a>00530     <a class="code" href="classAkregator_1_1FeedList.html" title="The model of a feed tree, represents an OPML document.">FeedList</a>* feedList = <span class="keyword">new</span> <a class="code" href="classAkregator_1_1FeedList.html" title="The model of a feed tree, represents an OPML document.">FeedList</a>();
<a name="l00531"></a>00531     <span class="keywordtype">bool</span> parsed = feedList-&gt;<a class="code" href="classAkregator_1_1FeedList.html#632935fbc18dfbdd1012b41ac9f91423" title="reads an OPML document and appends the items to this list">readFromXML</a>(doc);
<a name="l00532"></a>00532 
<a name="l00533"></a>00533     <span class="comment">// parsing went wrong</span>
<a name="l00534"></a>00534     <span class="keywordflow">if</span> (!parsed)
<a name="l00535"></a>00535     {
<a name="l00536"></a>00536         <span class="keyword">delete</span> feedList;
<a name="l00537"></a>00537         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00538"></a>00538     }
<a name="l00539"></a>00539     m_feedListView-&gt;setUpdatesEnabled(<span class="keyword">false</span>);
<a name="l00540"></a>00540     m_tagNodeListView-&gt;setUpdatesEnabled(<span class="keyword">false</span>);
<a name="l00541"></a>00541     <span class="keywordflow">if</span> (!parent)
<a name="l00542"></a>00542     {
<a name="l00543"></a>00543         <a class="code" href="classAkregator_1_1TagSet.html" title="represents a set of tags (see Tag) In an application, there is usually one central...">TagSet</a>* tagSet = Kernel::self()-&gt;tagSet();
<a name="l00544"></a>00544 
<a name="l00545"></a>00545         Kernel::self()-&gt;setFeedList(feedList);
<a name="l00546"></a>00546         ProgressManager::self()-&gt;setFeedList(feedList);
<a name="l00547"></a>00547         disconnectFromFeedList(m_feedList);
<a name="l00548"></a>00548         <span class="keyword">delete</span> m_feedList;
<a name="l00549"></a>00549         <span class="keyword">delete</span> m_tagNodeList;
<a name="l00550"></a>00550         m_feedList = feedList;
<a name="l00551"></a>00551         connectToFeedList(m_feedList);
<a name="l00552"></a>00552 
<a name="l00553"></a>00553         m_tagNodeList = <span class="keyword">new</span> TagNodeList(m_feedList, tagSet);
<a name="l00554"></a>00554         m_feedListView-&gt;setNodeList(m_feedList);
<a name="l00555"></a>00555         m_tagNodeListView-&gt;setNodeList(m_tagNodeList);
<a name="l00556"></a>00556 
<a name="l00557"></a>00557         QStringList tagIDs = m_feedList-&gt;rootNode()-&gt;tags();
<a name="l00558"></a>00558         QStringList::ConstIterator end = tagIDs.end();
<a name="l00559"></a>00559         <span class="keywordflow">for</span> (QStringList::ConstIterator it = tagIDs.begin(); it != end; ++it)
<a name="l00560"></a>00560         {
<a name="l00561"></a>00561             kdDebug() &lt;&lt; *it &lt;&lt; endl;
<a name="l00562"></a>00562             <span class="comment">// create a tag for every tag ID in the archive that is not part of the tagset</span>
<a name="l00563"></a>00563             <span class="comment">// this is a fallback in case the tagset was corrupted,</span>
<a name="l00564"></a>00564             <span class="comment">// so the tagging information from archive does not get lost.</span>
<a name="l00565"></a>00565             <span class="keywordflow">if</span> (!tagSet-&gt;<a class="code" href="classAkregator_1_1TagSet.html#3edc85c0231237589914d5f4a5c7f723" title="returns true if this set contains a tag with a given ID">containsID</a>(*it))
<a name="l00566"></a>00566             {
<a name="l00567"></a>00567                 Tag tag(*it, *it);
<a name="l00568"></a>00568                 tagSet-&gt;<a class="code" href="classAkregator_1_1TagSet.html#68e58316da63cfe3e2a85426bc7735ca" title="adds a tag to the tag set.">insert</a>(tag);
<a name="l00569"></a>00569             }
<a name="l00570"></a>00570         }
<a name="l00571"></a>00571     }
<a name="l00572"></a>00572     <span class="keywordflow">else</span>
<a name="l00573"></a>00573         m_feedList-&gt;<a class="code" href="classAkregator_1_1FeedList.html#bb859a2c58a78ef7a498c87dba354cd3" title="appends another feed list as sub tree.">append</a>(feedList, parent);
<a name="l00574"></a>00574 
<a name="l00575"></a>00575     m_feedListView-&gt;setUpdatesEnabled(<span class="keyword">true</span>);
<a name="l00576"></a>00576     m_feedListView-&gt;triggerUpdate();
<a name="l00577"></a>00577     m_tagNodeListView-&gt;setUpdatesEnabled(<span class="keyword">true</span>);
<a name="l00578"></a>00578     m_tagNodeListView-&gt;triggerUpdate();
<a name="l00579"></a>00579     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00580"></a>00580 }
<a name="l00581"></a>00581 
<a name="l00582"></a>00582 <span class="keywordtype">void</span> View::slotDeleteExpiredArticles()
<a name="l00583"></a>00583 {
<a name="l00584"></a>00584     <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* rootNode = m_feedList-&gt;rootNode();
<a name="l00585"></a>00585     <span class="keywordflow">if</span> (rootNode)
<a name="l00586"></a>00586         rootNode-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#e3c46f81d6dcdc2f47a9f4176fbd291f" title="Deletes all expired articles in the node (depending on the expiry settings).">slotDeleteExpiredArticles</a>();
<a name="l00587"></a>00587 }
<a name="l00588"></a>00588 
<a name="l00589"></a><a class="code" href="classAkregator_1_1View.html#62e6a6a32a5ce89b98b467b511492d39">00589</a> QDomDocument <a class="code" href="classAkregator_1_1View.html#62e6a6a32a5ce89b98b467b511492d39">View::feedListToOPML</a>()
<a name="l00590"></a>00590 {
<a name="l00591"></a>00591     <span class="keywordflow">return</span> m_feedList-&gt;<a class="code" href="classAkregator_1_1FeedList.html#7e43794e7d2883e279426709dd21bbae" title="exports the feed list as OPML.">toXML</a>();
<a name="l00592"></a>00592 }
<a name="l00593"></a>00593 
<a name="l00594"></a><a class="code" href="classAkregator_1_1View.html#8cf27876e35bf3f5cd865a6e80eb2788">00594</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#8cf27876e35bf3f5cd865a6e80eb2788" title="Add a feed to a group.">View::addFeedToGroup</a>(<span class="keyword">const</span> QString&amp; url, <span class="keyword">const</span> QString&amp; groupName)
<a name="l00595"></a>00595 {
<a name="l00596"></a>00596 
<a name="l00597"></a>00597     <span class="comment">// Locate the group.</span>
<a name="l00598"></a>00598     <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* node = m_feedListView-&gt;findNodeByTitle(groupName);
<a name="l00599"></a>00599 
<a name="l00600"></a>00600     <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>* group = 0;
<a name="l00601"></a>00601     <span class="keywordflow">if</span> (!node || !node-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#0f07a1ca8accba641e632ac89c279fa0" title="Helps the rest of the app to decide if node should be handled as group or not.">isGroup</a>())
<a name="l00602"></a>00602     {
<a name="l00603"></a>00603         <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>* g = <span class="keyword">new</span> <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>( groupName );
<a name="l00604"></a>00604         m_feedList-&gt;rootNode()-&gt;appendChild(g);
<a name="l00605"></a>00605         group = g;
<a name="l00606"></a>00606     }
<a name="l00607"></a>00607     <span class="keywordflow">else</span>
<a name="l00608"></a>00608         group = <span class="keyword">static_cast&lt;</span><a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>*<span class="keyword">&gt;</span>(node);
<a name="l00609"></a>00609 
<a name="l00610"></a>00610     <span class="comment">// Invoke the Add Feed dialog with url filled in.</span>
<a name="l00611"></a>00611     <span class="keywordflow">if</span> (group)
<a name="l00612"></a>00612         addFeed(url, 0, group, <span class="keyword">true</span>);
<a name="l00613"></a>00613 }
<a name="l00614"></a>00614 
<a name="l00615"></a><a class="code" href="classAkregator_1_1View.html#9f4253a801a0c06e567b6f5b9b94ab8e">00615</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#9f4253a801a0c06e567b6f5b9b94ab8e" title="switches view mode to normal view">View::slotNormalView</a>()
<a name="l00616"></a>00616 {
<a name="l00617"></a>00617     <span class="keywordflow">if</span> (m_viewMode == NormalView)
<a name="l00618"></a>00618     <span class="keywordflow">return</span>;
<a name="l00619"></a>00619 
<a name="l00620"></a>00620     <span class="keywordflow">if</span> (m_viewMode == CombinedView)
<a name="l00621"></a>00621     {
<a name="l00622"></a>00622         m_articleList-&gt;slotShowNode(m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode());
<a name="l00623"></a>00623         m_articleList-&gt;show();
<a name="l00624"></a>00624 
<a name="l00625"></a>00625         <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a> article = m_articleList-&gt;currentArticle();
<a name="l00626"></a>00626 
<a name="l00627"></a>00627         <span class="keywordflow">if</span> (!article.<a class="code" href="classAkregator_1_1Article.html#bbc089d0e0c6dc49318327adc2a414b4">isNull</a>())
<a name="l00628"></a>00628             m_articleViewer-&gt;<a class="code" href="classAkregator_1_1ArticleViewer.html#967a33bb28464b72aa17af69984e3ca0" title="Show single article (normal view).">slotShowArticle</a>(article);
<a name="l00629"></a>00629         <span class="keywordflow">else</span>
<a name="l00630"></a>00630             m_articleViewer-&gt;<a class="code" href="classAkregator_1_1ArticleViewer.html#0771aee544c1d035b64722cadf1e26f9">slotShowSummary</a>(m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode());
<a name="l00631"></a>00631     }
<a name="l00632"></a>00632 
<a name="l00633"></a>00633     m_articleSplitter-&gt;setOrientation(QSplitter::Vertical);
<a name="l00634"></a>00634     m_viewMode = NormalView;
<a name="l00635"></a>00635 
<a name="l00636"></a>00636     Settings::setViewMode( m_viewMode );
<a name="l00637"></a>00637 }
<a name="l00638"></a>00638 
<a name="l00639"></a><a class="code" href="classAkregator_1_1View.html#da047ed192ab73a7837f265f3987d9d6">00639</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#da047ed192ab73a7837f265f3987d9d6" title="switches view mode to widescreen view">View::slotWidescreenView</a>()
<a name="l00640"></a>00640 {
<a name="l00641"></a>00641     <span class="keywordflow">if</span> (m_viewMode == WidescreenView)
<a name="l00642"></a>00642     <span class="keywordflow">return</span>;
<a name="l00643"></a>00643 
<a name="l00644"></a>00644     <span class="keywordflow">if</span> (m_viewMode == CombinedView)
<a name="l00645"></a>00645     {
<a name="l00646"></a>00646         m_articleList-&gt;slotShowNode(m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode());
<a name="l00647"></a>00647         m_articleList-&gt;show();
<a name="l00648"></a>00648 
<a name="l00649"></a>00649         <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a> article = m_articleList-&gt;currentArticle();
<a name="l00650"></a>00650 
<a name="l00651"></a>00651         <span class="keywordflow">if</span> (!article.<a class="code" href="classAkregator_1_1Article.html#bbc089d0e0c6dc49318327adc2a414b4">isNull</a>())
<a name="l00652"></a>00652             m_articleViewer-&gt;<a class="code" href="classAkregator_1_1ArticleViewer.html#967a33bb28464b72aa17af69984e3ca0" title="Show single article (normal view).">slotShowArticle</a>(article);
<a name="l00653"></a>00653         <span class="keywordflow">else</span>
<a name="l00654"></a>00654             m_articleViewer-&gt;<a class="code" href="classAkregator_1_1ArticleViewer.html#0771aee544c1d035b64722cadf1e26f9">slotShowSummary</a>(m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode());
<a name="l00655"></a>00655     }
<a name="l00656"></a>00656 
<a name="l00657"></a>00657     m_articleSplitter-&gt;setOrientation(QSplitter::Horizontal);
<a name="l00658"></a>00658     m_viewMode = WidescreenView;
<a name="l00659"></a>00659 
<a name="l00660"></a>00660     Settings::setViewMode( m_viewMode );
<a name="l00661"></a>00661 }
<a name="l00662"></a>00662 
<a name="l00663"></a><a class="code" href="classAkregator_1_1View.html#c11073c7a4be7a84f489614df24d9dbe">00663</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#c11073c7a4be7a84f489614df24d9dbe" title="switches view mode to combined view">View::slotCombinedView</a>()
<a name="l00664"></a>00664 {
<a name="l00665"></a>00665     <span class="keywordflow">if</span> (m_viewMode == CombinedView)
<a name="l00666"></a>00666         <span class="keywordflow">return</span>;
<a name="l00667"></a>00667 
<a name="l00668"></a>00668     m_articleList-&gt;slotClear();
<a name="l00669"></a>00669     m_articleList-&gt;hide();
<a name="l00670"></a>00670     m_viewMode = CombinedView;
<a name="l00671"></a>00671 
<a name="l00672"></a>00672     <a class="code" href="classAkregator_1_1View.html#5771f647c0fd90c828857da74f97841f" title="selected tree node has changed">slotNodeSelected</a>(m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode());
<a name="l00673"></a>00673     Settings::setViewMode( m_viewMode );
<a name="l00674"></a>00674 }
<a name="l00675"></a>00675 
<a name="l00676"></a><a class="code" href="classAkregator_1_1View.html#b9fd8ba6990cd75b7537e758392c68ac">00676</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#b9fd8ba6990cd75b7537e758392c68ac" title="called when another part/frame is activated.">View::slotFrameChanged</a>(Frame *f)
<a name="l00677"></a>00677 {
<a name="l00678"></a>00678     <span class="keywordflow">if</span> (m_shuttingDown)
<a name="l00679"></a>00679         <span class="keywordflow">return</span>;
<a name="l00680"></a>00680 
<a name="l00681"></a>00681     m_currentFrame=f;
<a name="l00682"></a>00682 
<a name="l00683"></a>00683     emit setWindowCaption(f-&gt;caption());
<a name="l00684"></a>00684     emit setProgress(f-&gt;progress());
<a name="l00685"></a>00685     emit setStatusBarText(f-&gt;statusText());
<a name="l00686"></a>00686 
<a name="l00687"></a>00687     <span class="keywordflow">if</span> (f-&gt;part() == m_part)
<a name="l00688"></a>00688         m_part-&gt;<a class="code" href="classAkregator_1_1Part.html#28339e454f049229ae862f9b62f77b4b" title="merges a nested part&amp;#39;s GUI into the gui of this part">mergePart</a>(m_articleViewer);
<a name="l00689"></a>00689     <span class="keywordflow">else</span>
<a name="l00690"></a>00690         m_part-&gt;<a class="code" href="classAkregator_1_1Part.html#28339e454f049229ae862f9b62f77b4b" title="merges a nested part&amp;#39;s GUI into the gui of this part">mergePart</a>(f-&gt;part());
<a name="l00691"></a>00691 
<a name="l00692"></a>00692     f-&gt;widget()-&gt;setFocus();
<a name="l00693"></a>00693 
<a name="l00694"></a>00694     <span class="keywordflow">switch</span> (f-&gt;state())
<a name="l00695"></a>00695     {
<a name="l00696"></a>00696         <span class="keywordflow">case</span> Frame::Started:
<a name="l00697"></a>00697             emit signalStarted(0);
<a name="l00698"></a>00698             <span class="keywordflow">break</span>;
<a name="l00699"></a>00699         <span class="keywordflow">case</span> Frame::Canceled:
<a name="l00700"></a>00700             emit signalCanceled(QString::null);
<a name="l00701"></a>00701             <span class="keywordflow">break</span>;
<a name="l00702"></a>00702         <span class="keywordflow">case</span> Frame::Idle:
<a name="l00703"></a>00703         <span class="keywordflow">case</span> Frame::Completed:
<a name="l00704"></a>00704         <span class="keywordflow">default</span>:
<a name="l00705"></a>00705             emit signalCompleted();
<a name="l00706"></a>00706     }
<a name="l00707"></a>00707 }
<a name="l00708"></a>00708 
<a name="l00709"></a><a class="code" href="classAkregator_1_1View.html#8d664d40ff761936897824890c1ec6b1">00709</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#8d664d40ff761936897824890c1ec6b1" title="Shows requested popup menu for feed tree.">View::slotFeedTreeContextMenu</a>(KListView*, <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* <span class="comment">/*node*/</span>, <span class="keyword">const</span> QPoint&amp; <span class="comment">/*p*/</span>)
<a name="l00710"></a>00710 {
<a name="l00711"></a>00711     m_tabs-&gt;showPage(m_mainTab);
<a name="l00712"></a>00712 }
<a name="l00713"></a>00713 
<a name="l00714"></a>00714 <span class="keywordtype">void</span> View::slotMoveCurrentNodeUp()
<a name="l00715"></a>00715 {
<a name="l00716"></a>00716     <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* current = m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode();
<a name="l00717"></a>00717     <span class="keywordflow">if</span> (!current)
<a name="l00718"></a>00718         <span class="keywordflow">return</span>;
<a name="l00719"></a>00719     <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* prev = current-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#04a7bb9778165dfae373c71e645b3b56" title="Get the previous sibling.">prevSibling</a>();
<a name="l00720"></a>00720     <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>* parent = current-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#badc676b2769b5f3b245a5ba4f12faad" title="Returns the parent node.">parent</a>();
<a name="l00721"></a>00721 
<a name="l00722"></a>00722     <span class="keywordflow">if</span> (!prev || !parent)
<a name="l00723"></a>00723         <span class="keywordflow">return</span>;
<a name="l00724"></a>00724 
<a name="l00725"></a>00725     parent-&gt;<a class="code" href="classAkregator_1_1Folder.html#71dac3a74e4f4b5a144d493ca92fcbd8" title="remove node from children.">removeChild</a>(prev);
<a name="l00726"></a>00726     parent-&gt;<a class="code" href="classAkregator_1_1Folder.html#24e0997c19feed2e4581e7b226fbbed5" title="inserts node as child after child node after.">insertChild</a>(prev, current);
<a name="l00727"></a>00727     m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;ensureNodeVisible(current);
<a name="l00728"></a>00728 }
<a name="l00729"></a>00729 
<a name="l00730"></a>00730 <span class="keywordtype">void</span> View::slotMoveCurrentNodeDown()
<a name="l00731"></a>00731 {
<a name="l00732"></a>00732     TreeNode* current = m_listTabWidget-&gt;activeView()-&gt;selectedNode();
<a name="l00733"></a>00733     <span class="keywordflow">if</span> (!current)
<a name="l00734"></a>00734         <span class="keywordflow">return</span>;
<a name="l00735"></a>00735     TreeNode* next = current-&gt;nextSibling();
<a name="l00736"></a>00736     Folder* parent = current-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#badc676b2769b5f3b245a5ba4f12faad" title="Returns the parent node.">parent</a>();
<a name="l00737"></a>00737 
<a name="l00738"></a>00738     <span class="keywordflow">if</span> (!next || !parent)
<a name="l00739"></a>00739         <span class="keywordflow">return</span>;
<a name="l00740"></a>00740 
<a name="l00741"></a>00741     parent-&gt;removeChild(current);
<a name="l00742"></a>00742     parent-&gt;insertChild(current, next);
<a name="l00743"></a>00743     m_listTabWidget-&gt;activeView()-&gt;ensureNodeVisible(current);
<a name="l00744"></a>00744 }
<a name="l00745"></a>00745 
<a name="l00746"></a>00746 <span class="keywordtype">void</span> View::slotMoveCurrentNodeLeft()
<a name="l00747"></a>00747 {
<a name="l00748"></a>00748     TreeNode* current = m_listTabWidget-&gt;activeView()-&gt;selectedNode();
<a name="l00749"></a>00749     <span class="keywordflow">if</span> (!current || !current-&gt;parent() || !current-&gt;parent()-&gt;parent())
<a name="l00750"></a>00750         <span class="keywordflow">return</span>;
<a name="l00751"></a>00751 
<a name="l00752"></a>00752     Folder* parent = current-&gt;parent();
<a name="l00753"></a>00753     Folder* grandparent = current-&gt;parent()-&gt;parent();
<a name="l00754"></a>00754 
<a name="l00755"></a>00755     parent-&gt;removeChild(current);
<a name="l00756"></a>00756     grandparent-&gt;insertChild(current, parent);
<a name="l00757"></a>00757     m_listTabWidget-&gt;activeView()-&gt;ensureNodeVisible(current);
<a name="l00758"></a>00758 }
<a name="l00759"></a>00759 
<a name="l00760"></a>00760 <span class="keywordtype">void</span> View::slotMoveCurrentNodeRight()
<a name="l00761"></a>00761 {
<a name="l00762"></a>00762     TreeNode* current = m_listTabWidget-&gt;activeView()-&gt;selectedNode();
<a name="l00763"></a>00763     <span class="keywordflow">if</span> (!current || !current-&gt;parent())
<a name="l00764"></a>00764         <span class="keywordflow">return</span>;
<a name="l00765"></a>00765     TreeNode* prev = current-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#04a7bb9778165dfae373c71e645b3b56" title="Get the previous sibling.">prevSibling</a>();
<a name="l00766"></a>00766 
<a name="l00767"></a>00767     <span class="keywordflow">if</span> ( prev &amp;&amp; prev-&gt;isGroup() )
<a name="l00768"></a>00768     {
<a name="l00769"></a>00769         Folder* fg = <span class="keyword">static_cast&lt;</span>Folder*<span class="keyword">&gt;</span>(prev);
<a name="l00770"></a>00770         current-&gt;parent()-&gt;removeChild(current);
<a name="l00771"></a>00771         fg-&gt;appendChild(current);
<a name="l00772"></a>00772         m_listTabWidget-&gt;activeView()-&gt;ensureNodeVisible(current);
<a name="l00773"></a>00773     }
<a name="l00774"></a>00774 }
<a name="l00775"></a>00775 
<a name="l00776"></a><a class="code" href="classAkregator_1_1View.html#5771f647c0fd90c828857da74f97841f">00776</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#5771f647c0fd90c828857da74f97841f" title="selected tree node has changed">View::slotNodeSelected</a>(<a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* node)
<a name="l00777"></a>00777 {
<a name="l00778"></a>00778     m_markReadTimer-&gt;stop();
<a name="l00779"></a>00779 
<a name="l00780"></a>00780     <span class="keywordflow">if</span> (node)
<a name="l00781"></a>00781     {
<a name="l00782"></a>00782         kdDebug() &lt;&lt; <span class="stringliteral">"node selected: "</span> &lt;&lt; node-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#735f8ddbe88f73d3ad1754812fd41983" title="Get title of node.">title</a>() &lt;&lt; endl;
<a name="l00783"></a>00783         kdDebug() &lt;&lt; <span class="stringliteral">"unread: "</span> &lt;&lt; node-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#b7560da4f68b7b9a3ec9fb975090f58f" title="The unread count, returns the number of new/unread articles in the node (for groups:...">unread</a>() &lt;&lt; endl;
<a name="l00784"></a>00784         kdDebug() &lt;&lt; <span class="stringliteral">"total: "</span> &lt;&lt; node-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#16c7b02a24ac258217135262cf84734b" title="returns the number of total articles in the node (for groups: the accumulated count...">totalCount</a>() &lt;&lt; endl;
<a name="l00785"></a>00785     }
<a name="l00786"></a>00786 
<a name="l00787"></a>00787     <span class="keywordflow">if</span> (m_displayingAboutPage)
<a name="l00788"></a>00788     {
<a name="l00789"></a>00789         m_mainFrame-&gt;setTitle(i18n(<span class="stringliteral">"Articles"</span>));
<a name="l00790"></a>00790         <span class="keywordflow">if</span> (m_viewMode != CombinedView)
<a name="l00791"></a>00791             m_articleList-&gt;show();
<a name="l00792"></a>00792         <span class="keywordflow">if</span> (Settings::showQuickFilter())
<a name="l00793"></a>00793             m_searchBar-&gt;show();
<a name="l00794"></a>00794         m_displayingAboutPage = <span class="keyword">false</span>;
<a name="l00795"></a>00795     }
<a name="l00796"></a>00796 
<a name="l00797"></a>00797     m_tabs-&gt;showPage(m_mainTab);
<a name="l00798"></a>00798 
<a name="l00799"></a>00799     <span class="keywordflow">if</span> (Settings::resetQuickFilterOnNodeChange())
<a name="l00800"></a>00800         m_searchBar-&gt;slotClearSearch();
<a name="l00801"></a>00801 
<a name="l00802"></a>00802     <span class="keywordflow">if</span> (m_viewMode == CombinedView)
<a name="l00803"></a>00803         m_articleViewer-&gt;<a class="code" href="classAkregator_1_1ArticleViewer.html#c9e6764936e8cbdc4d1b0bc7aa0d4b25" title="Shows the articles of the tree node node (combined view).">slotShowNode</a>(node);
<a name="l00804"></a>00804     <span class="keywordflow">else</span>
<a name="l00805"></a>00805     {
<a name="l00806"></a>00806         m_articleList-&gt;slotShowNode(node);
<a name="l00807"></a>00807         m_articleViewer-&gt;<a class="code" href="classAkregator_1_1ArticleViewer.html#0771aee544c1d035b64722cadf1e26f9">slotShowSummary</a>(node);
<a name="l00808"></a>00808     }
<a name="l00809"></a>00809 
<a name="l00810"></a>00810     <span class="keywordflow">if</span> (node)
<a name="l00811"></a>00811         m_mainFrame-&gt;setCaption(node-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#735f8ddbe88f73d3ad1754812fd41983" title="Get title of node.">title</a>());
<a name="l00812"></a>00812 
<a name="l00813"></a>00813     m_actionManager-&gt;<a class="code" href="classAkregator_1_1ActionManagerImpl.html#877378e286310b25b3f9f961437c35d6">slotNodeSelected</a>(node);
<a name="l00814"></a>00814 
<a name="l00815"></a>00815     updateTagActions();
<a name="l00816"></a>00816 }
<a name="l00817"></a>00817 
<a name="l00818"></a>00818 <span class="keywordtype">void</span> View::slotOpenURL(<span class="keyword">const</span> KURL&amp; url, Viewer* currentViewer, BrowserRun::OpeningMode mode)
<a name="l00819"></a>00819 {
<a name="l00820"></a>00820     <span class="keywordflow">if</span> (mode == BrowserRun::EXTERNAL)
<a name="l00821"></a>00821         Viewer::displayInExternalBrowser(url);
<a name="l00822"></a>00822     <span class="keywordflow">else</span>
<a name="l00823"></a>00823     {
<a name="l00824"></a>00824          KParts::URLArgs args = currentViewer ? currentViewer-&gt;browserExtension()-&gt;urlArgs() : KParts::URLArgs();
<a name="l00825"></a>00825             
<a name="l00826"></a>00826         BrowserRun* r = <span class="keyword">new</span> BrowserRun(<span class="keyword">this</span>, currentViewer, url, args, mode);
<a name="l00827"></a>00827         connect(r, SIGNAL(signalOpenInViewer(<span class="keyword">const</span> KURL&amp;, Akregator::Viewer*, Akregator::BrowserRun::OpeningMode)),
<a name="l00828"></a>00828             <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#b6406b763f64f7230eba9c11c9c91fc7" title="HACK: receives signal from browserrun when the browserrun detects an HTML mimetype...">slotOpenURLReply</a>(<span class="keyword">const</span> KURL&amp;, Akregator::Viewer*, Akregator::BrowserRun::OpeningMode)));
<a name="l00829"></a>00829     }
<a name="l00830"></a>00830 }
<a name="l00831"></a>00831 
<a name="l00832"></a>00832 <span class="comment">//TODO: KDE4 remove this ugly ugly hack</span>
<a name="l00833"></a><a class="code" href="classAkregator_1_1View.html#1fb6d84f9339585dcd275f55905ffa3e">00833</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#1fb6d84f9339585dcd275f55905ffa3e" title="HACK: part of the url opening hack for 3.5.">View::slotUrlClickedInViewer</a>(<span class="keyword">const</span> KURL&amp; url, Viewer* viewer, <span class="keywordtype">bool</span> newTab, <span class="keywordtype">bool</span> background)
<a name="l00834"></a>00834 {
<a name="l00835"></a>00835     
<a name="l00836"></a>00836     <span class="keywordflow">if</span> (!newTab)
<a name="l00837"></a>00837     {
<a name="l00838"></a>00838         slotOpenURL(url, viewer, BrowserRun::CURRENT_TAB);
<a name="l00839"></a>00839     }
<a name="l00840"></a>00840     <span class="keywordflow">else</span>
<a name="l00841"></a>00841     {
<a name="l00842"></a>00842         slotOpenURL(url, 0L, background ? BrowserRun::NEW_TAB_BACKGROUND : BrowserRun::NEW_TAB_FOREGROUND);
<a name="l00843"></a>00843     }
<a name="l00844"></a>00844 }
<a name="l00845"></a>00845 
<a name="l00846"></a>00846 <span class="comment">//TODO: KDE4 remove this ugly ugly hack</span>
<a name="l00847"></a><a class="code" href="classAkregator_1_1View.html#b6406b763f64f7230eba9c11c9c91fc7">00847</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#b6406b763f64f7230eba9c11c9c91fc7" title="HACK: receives signal from browserrun when the browserrun detects an HTML mimetype...">View::slotOpenURLReply</a>(<span class="keyword">const</span> KURL&amp; url, Viewer* currentViewer, BrowserRun::OpeningMode mode)
<a name="l00848"></a>00848 {
<a name="l00849"></a>00849     <span class="keywordflow">switch</span> (mode)
<a name="l00850"></a>00850     {
<a name="l00851"></a>00851         <span class="keywordflow">case</span> BrowserRun::CURRENT_TAB:
<a name="l00852"></a>00852             currentViewer-&gt;openURL(url);
<a name="l00853"></a>00853             <span class="keywordflow">break</span>;
<a name="l00854"></a>00854         <span class="keywordflow">case</span> BrowserRun::NEW_TAB_FOREGROUND:
<a name="l00855"></a>00855         <span class="keywordflow">case</span> BrowserRun::NEW_TAB_BACKGROUND:
<a name="l00856"></a>00856             <a class="code" href="classAkregator_1_1View.html#a5a99328351f0b1d1564d57808ddf711" title="opens a page viewer in a new tab and loads an URL">slotOpenNewTab</a>(url, mode == BrowserRun::NEW_TAB_BACKGROUND);
<a name="l00857"></a>00857             <span class="keywordflow">break</span>;
<a name="l00858"></a>00858         <span class="keywordflow">case</span> BrowserRun::EXTERNAL:
<a name="l00859"></a>00859             Viewer::displayInExternalBrowser(url);
<a name="l00860"></a>00860             <span class="keywordflow">break</span>;
<a name="l00861"></a>00861     }
<a name="l00862"></a>00862 }
<a name="l00863"></a>00863 
<a name="l00864"></a><a class="code" href="classAkregator_1_1View.html#0f44b28e758854b61266a5ff94203196">00864</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#0f44b28e758854b61266a5ff94203196" title="adds a new feed to the feed tree">View::slotFeedAdd</a>()
<a name="l00865"></a>00865 {
<a name="l00866"></a>00866     <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>* group = 0;
<a name="l00867"></a>00867     <span class="keywordflow">if</span> (!m_feedListView-&gt;selectedNode())
<a name="l00868"></a>00868         group = m_feedList-&gt;rootNode(); <span class="comment">// all feeds</span>
<a name="l00869"></a>00869     <span class="keywordflow">else</span>
<a name="l00870"></a>00870     {
<a name="l00871"></a>00871         <span class="comment">//TODO: tag nodes need rework</span>
<a name="l00872"></a>00872         <span class="keywordflow">if</span> ( m_feedListView-&gt;selectedNode()-&gt;isGroup())
<a name="l00873"></a>00873             group = static_cast&lt;Folder*&gt;(m_feedListView-&gt;selectedNode());
<a name="l00874"></a>00874         <span class="keywordflow">else</span>
<a name="l00875"></a>00875             group= m_feedListView-&gt;selectedNode()-&gt;parent();
<a name="l00876"></a>00876 
<a name="l00877"></a>00877     }
<a name="l00878"></a>00878 
<a name="l00879"></a>00879     <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* lastChild = group-&gt;<a class="code" href="classAkregator_1_1Folder.html#60f5dd4a6782561766889d212feb927b" title="returns the (direct) children of this node.">children</a>().last();
<a name="l00880"></a>00880 
<a name="l00881"></a>00881     addFeed(QString::null, lastChild, group, <span class="keyword">false</span>);
<a name="l00882"></a>00882 }
<a name="l00883"></a>00883 
<a name="l00884"></a>00884 <span class="keywordtype">void</span> View::addFeed(<span class="keyword">const</span> QString&amp; url, <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a> *after, <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>* parent, <span class="keywordtype">bool</span> autoExec)
<a name="l00885"></a>00885 {
<a name="l00886"></a>00886 
<a name="l00887"></a>00887     AddFeedDialog *afd = <span class="keyword">new</span> AddFeedDialog( 0, <span class="stringliteral">"add_feed"</span> );
<a name="l00888"></a>00888 
<a name="l00889"></a>00889     afd-&gt;setURL(KURL::decode_string(url));
<a name="l00890"></a>00890 
<a name="l00891"></a>00891     <span class="keywordflow">if</span> (autoExec)
<a name="l00892"></a>00892         afd-&gt;slotOk();
<a name="l00893"></a>00893     <span class="keywordflow">else</span>
<a name="l00894"></a>00894     {
<a name="l00895"></a>00895         <span class="keywordflow">if</span> (afd-&gt;exec() != QDialog::Accepted)
<a name="l00896"></a>00896         {
<a name="l00897"></a>00897             <span class="keyword">delete</span> afd;
<a name="l00898"></a>00898             <span class="keywordflow">return</span>;
<a name="l00899"></a>00899         }
<a name="l00900"></a>00900     }
<a name="l00901"></a>00901 
<a name="l00902"></a>00902     Feed* feed = afd-&gt;feed;
<a name="l00903"></a>00903     <span class="keyword">delete</span> afd;
<a name="l00904"></a>00904 
<a name="l00905"></a>00905     FeedPropertiesDialog *dlg = <span class="keyword">new</span> FeedPropertiesDialog( 0, <span class="stringliteral">"edit_feed"</span> );
<a name="l00906"></a>00906     dlg-&gt;setFeed(feed);
<a name="l00907"></a>00907 
<a name="l00908"></a>00908     dlg-&gt;selectFeedName();
<a name="l00909"></a>00909 
<a name="l00910"></a>00910     <span class="keywordflow">if</span> (!autoExec)
<a name="l00911"></a>00911         <span class="keywordflow">if</span> (dlg-&gt;exec() != QDialog::Accepted)
<a name="l00912"></a>00912         {
<a name="l00913"></a>00913             <span class="keyword">delete</span> feed;
<a name="l00914"></a>00914             <span class="keyword">delete</span> dlg;
<a name="l00915"></a>00915             <span class="keywordflow">return</span>;
<a name="l00916"></a>00916         }
<a name="l00917"></a>00917 
<a name="l00918"></a>00918     <span class="keywordflow">if</span> (!parent)
<a name="l00919"></a>00919         parent = m_feedList-&gt;rootNode();
<a name="l00920"></a>00920 
<a name="l00921"></a>00921     parent-&gt;<a class="code" href="classAkregator_1_1Folder.html#24e0997c19feed2e4581e7b226fbbed5" title="inserts node as child after child node after.">insertChild</a>(feed, after);
<a name="l00922"></a>00922 
<a name="l00923"></a>00923     m_feedListView-&gt;ensureNodeVisible(feed);
<a name="l00924"></a>00924 
<a name="l00925"></a>00925 
<a name="l00926"></a>00926     <span class="keyword">delete</span> dlg;
<a name="l00927"></a>00927 }
<a name="l00928"></a>00928 
<a name="l00929"></a><a class="code" href="classAkregator_1_1View.html#f59c8cc5fc786f20667e15aadd466c17">00929</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#f59c8cc5fc786f20667e15aadd466c17" title="adds a feed group to the feed tree">View::slotFeedAddGroup</a>()
<a name="l00930"></a>00930 {
<a name="l00931"></a>00931     <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* node = m_feedListView-&gt;selectedNode();
<a name="l00932"></a>00932     <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* after = 0;
<a name="l00933"></a>00933 
<a name="l00934"></a>00934     <span class="keywordflow">if</span> (!node)
<a name="l00935"></a>00935         node = m_feedListView-&gt;rootNode();
<a name="l00936"></a>00936 
<a name="l00937"></a>00937     <span class="comment">// if a feed is selected, add group next to it</span>
<a name="l00938"></a>00938     <span class="comment">//TODO: tag nodes need rework</span>
<a name="l00939"></a>00939     <span class="keywordflow">if</span> (!node-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#0f07a1ca8accba641e632ac89c279fa0" title="Helps the rest of the app to decide if node should be handled as group or not.">isGroup</a>())
<a name="l00940"></a>00940     {
<a name="l00941"></a>00941         after = node;
<a name="l00942"></a>00942         node = node-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#badc676b2769b5f3b245a5ba4f12faad" title="Returns the parent node.">parent</a>();
<a name="l00943"></a>00943     }
<a name="l00944"></a>00944 
<a name="l00945"></a>00945     <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>* currentGroup = <span class="keyword">static_cast&lt;</span><a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>*<span class="keyword">&gt;</span> (node);
<a name="l00946"></a>00946 
<a name="l00947"></a>00947     <span class="keywordtype">bool</span> Ok;
<a name="l00948"></a>00948 
<a name="l00949"></a>00949     QString text = KInputDialog::getText(i18n(<span class="stringliteral">"Add Folder"</span>), i18n(<span class="stringliteral">"Folder name:"</span>), <span class="stringliteral">""</span>, &amp;Ok);
<a name="l00950"></a>00950 
<a name="l00951"></a>00951     <span class="keywordflow">if</span> (Ok)
<a name="l00952"></a>00952     {
<a name="l00953"></a>00953         <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>* newGroup = <span class="keyword">new</span> <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>(text);
<a name="l00954"></a>00954         <span class="keywordflow">if</span> (!after)
<a name="l00955"></a>00955             currentGroup-&gt;<a class="code" href="classAkregator_1_1Folder.html#cb5dc675084a9afc5aacd23b7a625eed" title="inserts node as last child">appendChild</a>(newGroup);
<a name="l00956"></a>00956         <span class="keywordflow">else</span>
<a name="l00957"></a>00957             currentGroup-&gt;<a class="code" href="classAkregator_1_1Folder.html#24e0997c19feed2e4581e7b226fbbed5" title="inserts node as child after child node after.">insertChild</a>(newGroup, after);
<a name="l00958"></a>00958 
<a name="l00959"></a>00959         m_feedListView-&gt;ensureNodeVisible(newGroup);
<a name="l00960"></a>00960     }
<a name="l00961"></a>00961 }
<a name="l00962"></a>00962 
<a name="l00963"></a><a class="code" href="classAkregator_1_1View.html#aae936ed3a74371b715693a3ab916e84">00963</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#aae936ed3a74371b715693a3ab916e84" title="removes the currently selected feed (ask for confirmation)">View::slotFeedRemove</a>()
<a name="l00964"></a>00964 {
<a name="l00965"></a>00965     <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* selectedNode = m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode();
<a name="l00966"></a>00966 
<a name="l00967"></a>00967     <span class="comment">// don't delete root element! (safety valve)</span>
<a name="l00968"></a>00968     <span class="keywordflow">if</span> (!selectedNode || selectedNode == m_feedList-&gt;rootNode())
<a name="l00969"></a>00969         <span class="keywordflow">return</span>;
<a name="l00970"></a>00970 
<a name="l00971"></a>00971     m_deleteNodeVisitor-&gt;visit(selectedNode);
<a name="l00972"></a>00972 }
<a name="l00973"></a>00973 
<a name="l00974"></a><a class="code" href="classAkregator_1_1View.html#ceeb16397cb1b6a90e7551039a3625b3">00974</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#ceeb16397cb1b6a90e7551039a3625b3" title="calls the properties dialog for feeds, starts renaming for feed groups">View::slotFeedModify</a>()
<a name="l00975"></a>00975 {
<a name="l00976"></a>00976     <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* node = m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode();
<a name="l00977"></a>00977     <span class="keywordflow">if</span> (node)
<a name="l00978"></a>00978         m_editNodePropertiesVisitor-&gt;visit(node);
<a name="l00979"></a>00979 
<a name="l00980"></a>00980 }
<a name="l00981"></a>00981 
<a name="l00982"></a><a class="code" href="classAkregator_1_1View.html#f6dc7cdaddc5ea21a47b305c70182143">00982</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#f6dc7cdaddc5ea21a47b305c70182143" title="selects the next unread article in the article list">View::slotNextUnreadArticle</a>()
<a name="l00983"></a>00983 {
<a name="l00984"></a>00984     <span class="keywordflow">if</span> (m_viewMode == CombinedView)
<a name="l00985"></a>00985         m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;slotNextUnreadFeed();
<a name="l00986"></a>00986     
<a name="l00987"></a>00987     <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* sel = m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode();
<a name="l00988"></a>00988     <span class="keywordflow">if</span> (sel &amp;&amp; sel-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#b7560da4f68b7b9a3ec9fb975090f58f" title="The unread count, returns the number of new/unread articles in the node (for groups:...">unread</a>() &gt; 0)
<a name="l00989"></a>00989         m_articleList-&gt;slotNextUnreadArticle();
<a name="l00990"></a>00990     <span class="keywordflow">else</span>
<a name="l00991"></a>00991         m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;slotNextUnreadFeed();
<a name="l00992"></a>00992 }
<a name="l00993"></a>00993 
<a name="l00994"></a><a class="code" href="classAkregator_1_1View.html#4ee861cf7ba6fef373da06cc662b0dfb">00994</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#4ee861cf7ba6fef373da06cc662b0dfb" title="selects the previous unread article in the article list">View::slotPrevUnreadArticle</a>()
<a name="l00995"></a>00995 {
<a name="l00996"></a>00996     <span class="keywordflow">if</span> (m_viewMode == CombinedView)
<a name="l00997"></a>00997         m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;slotPrevUnreadFeed();
<a name="l00998"></a>00998     
<a name="l00999"></a>00999     <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* sel = m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode();
<a name="l01000"></a>01000     <span class="keywordflow">if</span> (sel &amp;&amp; sel-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#b7560da4f68b7b9a3ec9fb975090f58f" title="The unread count, returns the number of new/unread articles in the node (for groups:...">unread</a>() &gt; 0)
<a name="l01001"></a>01001         m_articleList-&gt;slotPreviousUnreadArticle();
<a name="l01002"></a>01002     <span class="keywordflow">else</span>
<a name="l01003"></a>01003         m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;slotPrevUnreadFeed();
<a name="l01004"></a>01004 }
<a name="l01005"></a>01005 
<a name="l01006"></a><a class="code" href="classAkregator_1_1View.html#f4e3d512d568bee3f2d76c758318e325">01006</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#f4e3d512d568bee3f2d76c758318e325" title="marks all articles in all feeds in the tree as read">View::slotMarkAllFeedsRead</a>()
<a name="l01007"></a>01007 {
<a name="l01008"></a>01008     m_feedList-&gt;rootNode()-&gt;slotMarkAllArticlesAsRead();
<a name="l01009"></a>01009 }
<a name="l01010"></a>01010 
<a name="l01011"></a><a class="code" href="classAkregator_1_1View.html#b7c02dc7794f947294c4f7a193f43bf2">01011</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#b7c02dc7794f947294c4f7a193f43bf2" title="marks all articles in the currently selected feed as read">View::slotMarkAllRead</a>()
<a name="l01012"></a>01012 {
<a name="l01013"></a>01013     <span class="keywordflow">if</span>(!m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode()) <span class="keywordflow">return</span>;
<a name="l01014"></a>01014     m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode()-&gt;slotMarkAllArticlesAsRead();
<a name="l01015"></a>01015 }
<a name="l01016"></a>01016 
<a name="l01017"></a><a class="code" href="classAkregator_1_1View.html#d3ef562b937096f5f0ac08f118e06d64">01017</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#d3ef562b937096f5f0ac08f118e06d64" title="opens the homepage of the currently selected feed">View::slotOpenHomepage</a>()
<a name="l01018"></a>01018 {
<a name="l01019"></a>01019     <a class="code" href="classAkregator_1_1Feed.html" title="represents a feed">Feed</a>* feed = <span class="keyword">dynamic_cast&lt;</span><a class="code" href="classAkregator_1_1Feed.html" title="represents a feed">Feed</a> *<span class="keyword">&gt;</span>(m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode());
<a name="l01020"></a>01020 
<a name="l01021"></a>01021     <span class="keywordflow">if</span> (!feed)
<a name="l01022"></a>01022         <span class="keywordflow">return</span>;
<a name="l01023"></a>01023 
<a name="l01024"></a>01024     KURL url = KURL(feed-&gt;<a class="code" href="classAkregator_1_1Feed.html#2199fa1b1abb1ccd78083dd6fabb8fe3" title="returns the URL of the HTML page of this feed">htmlUrl</a>())
<a name="l01025"></a>01025 ;
<a name="l01026"></a>01026     <span class="keywordflow">switch</span> (Settings::lMBBehaviour())
<a name="l01027"></a>01027     {
<a name="l01028"></a>01028         <span class="keywordflow">case</span> Settings::EnumLMBBehaviour::OpenInExternalBrowser:
<a name="l01029"></a>01029             slotOpenURL(url, 0, BrowserRun::EXTERNAL);
<a name="l01030"></a>01030             <span class="keywordflow">break</span>;
<a name="l01031"></a>01031         <span class="keywordflow">case</span> Settings::EnumLMBBehaviour::OpenInBackground:
<a name="l01032"></a>01032             slotOpenURL(url, 0, BrowserRun::NEW_TAB_BACKGROUND);
<a name="l01033"></a>01033             <span class="keywordflow">break</span>;
<a name="l01034"></a>01034         <span class="keywordflow">default</span>:
<a name="l01035"></a>01035             slotOpenURL(url, 0, BrowserRun::NEW_TAB_FOREGROUND);
<a name="l01036"></a>01036     }
<a name="l01037"></a>01037 }
<a name="l01038"></a>01038 
<a name="l01039"></a><a class="code" href="classAkregator_1_1View.html#c5fe5db32bff5ce54c2f44e4acc787ab">01039</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#c5fe5db32bff5ce54c2f44e4acc787ab" title="emits signalUnreadCountChanged(int)">View::slotSetTotalUnread</a>()
<a name="l01040"></a>01040 {
<a name="l01041"></a>01041     emit <a class="code" href="classAkregator_1_1View.html#a34ea7e09848d509005e80efe74b25b8" title="emitted when the unread count of &amp;quot;All Feeds&amp;quot; was changed">signalUnreadCountChanged</a>( m_feedList-&gt;rootNode()-&gt;unread() );
<a name="l01042"></a>01042 }
<a name="l01043"></a>01043 
<a name="l01044"></a>01044 <span class="keywordtype">void</span> View::slotDoIntervalFetches()
<a name="l01045"></a>01045 {
<a name="l01046"></a>01046     m_feedList-&gt;rootNode()-&gt;slotAddToFetchQueue(Kernel::self()-&gt;fetchQueue(), <span class="keyword">true</span>);
<a name="l01047"></a>01047 }
<a name="l01048"></a>01048 
<a name="l01049"></a><a class="code" href="classAkregator_1_1View.html#249c67a8f9ccf69558a73f52e1ae09f2">01049</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#249c67a8f9ccf69558a73f52e1ae09f2" title="fetches the currently selected feed">View::slotFetchCurrentFeed</a>()
<a name="l01050"></a>01050 {
<a name="l01051"></a>01051     <span class="keywordflow">if</span> ( !m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode() )
<a name="l01052"></a>01052         <span class="keywordflow">return</span>;
<a name="l01053"></a>01053     m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode()-&gt;slotAddToFetchQueue(Kernel::self()-&gt;fetchQueue());
<a name="l01054"></a>01054 }
<a name="l01055"></a>01055 
<a name="l01056"></a><a class="code" href="classAkregator_1_1View.html#d9ecc39ee3204193d8d082b6fdbffa46">01056</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#d9ecc39ee3204193d8d082b6fdbffa46" title="starts fetching of all feeds in the tree">View::slotFetchAllFeeds</a>()
<a name="l01057"></a>01057 {
<a name="l01058"></a>01058     m_feedList-&gt;rootNode()-&gt;slotAddToFetchQueue(Kernel::self()-&gt;fetchQueue());
<a name="l01059"></a>01059 }
<a name="l01060"></a>01060 
<a name="l01061"></a>01061 <span class="keywordtype">void</span> View::slotFetchingStarted()
<a name="l01062"></a>01062 {
<a name="l01063"></a>01063     m_mainFrame-&gt;setState(Frame::Started);
<a name="l01064"></a>01064     m_actionManager-&gt;<a class="code" href="classAkregator_1_1ActionManagerImpl.html#82a96ac8afc1d81c01fe961a13023bf1">action</a>(<span class="stringliteral">"feed_stop"</span>)-&gt;setEnabled(<span class="keyword">true</span>);
<a name="l01065"></a>01065     m_mainFrame-&gt;setStatusText(i18n(<span class="stringliteral">"Fetching Feeds..."</span>));
<a name="l01066"></a>01066 }
<a name="l01067"></a>01067 
<a name="l01068"></a>01068 <span class="keywordtype">void</span> View::slotFetchingStopped()
<a name="l01069"></a>01069 {
<a name="l01070"></a>01070     m_mainFrame-&gt;setState(Frame::Completed);
<a name="l01071"></a>01071     m_actionManager-&gt;action(<span class="stringliteral">"feed_stop"</span>)-&gt;setEnabled(<span class="keyword">false</span>);
<a name="l01072"></a>01072     m_mainFrame-&gt;setStatusText(QString::null);
<a name="l01073"></a>01073 }
<a name="l01074"></a>01074 
<a name="l01075"></a><a class="code" href="classAkregator_1_1View.html#df813d0f4e22a9b57dc118d7b64340b7">01075</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#df813d0f4e22a9b57dc118d7b64340b7" title="Feed has been fetched, populate article view if needed and update counters.">View::slotFeedFetched</a>(<a class="code" href="classAkregator_1_1Feed.html" title="represents a feed">Feed</a> *feed)
<a name="l01076"></a>01076 {
<a name="l01077"></a>01077     <span class="comment">// iterate through the articles (once again) to do notifications properly</span>
<a name="l01078"></a>01078     <span class="keywordflow">if</span> (feed-&gt;<a class="code" href="classAkregator_1_1Feed.html#7e1bcdaac94fccb89e7e33cf4a62448b" title="Returns a sequence of the articles this node contains.">articles</a>().count() &gt; 0)
<a name="l01079"></a>01079     {
<a name="l01080"></a>01080         QValueList&lt;Article&gt; articles = feed-&gt;<a class="code" href="classAkregator_1_1Feed.html#7e1bcdaac94fccb89e7e33cf4a62448b" title="Returns a sequence of the articles this node contains.">articles</a>();
<a name="l01081"></a>01081         QValueList&lt;Article&gt;::ConstIterator it;
<a name="l01082"></a>01082         QValueList&lt;Article&gt;::ConstIterator end = articles.end();
<a name="l01083"></a>01083         <span class="keywordflow">for</span> (it = articles.begin(); it != end; ++it)
<a name="l01084"></a>01084         {
<a name="l01085"></a>01085             <span class="keywordflow">if</span> ((*it).status()==Article::New &amp;&amp; ((*it).feed()-&gt;useNotification() || Settings::useNotifications()))
<a name="l01086"></a>01086             {
<a name="l01087"></a>01087                 <a class="code" href="classAkregator_1_1NotificationManager.html#ce0606a2f69a9c64eca15707a706241c" title="singleton instance of notification manager">NotificationManager::self</a>()-&gt;<a class="code" href="classAkregator_1_1NotificationManager.html#9a98652fc36c51db3697de12efe54728" title="notifies an article.">slotNotifyArticle</a>(*it);
<a name="l01088"></a>01088             }
<a name="l01089"></a>01089         }
<a name="l01090"></a>01090     }
<a name="l01091"></a>01091 }
<a name="l01092"></a>01092 
<a name="l01093"></a><a class="code" href="classAkregator_1_1View.html#a750ca71d3f4bd16f2a9b55c14135a32">01093</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#a750ca71d3f4bd16f2a9b55c14135a32" title="special behaviour in article list view (TODO: move code there?)">View::slotMouseButtonPressed</a>(<span class="keywordtype">int</span> button, <span class="keyword">const</span> <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a>&amp; article, <span class="keyword">const</span> QPoint &amp;, <span class="keywordtype">int</span>)
<a name="l01094"></a>01094 {
<a name="l01095"></a>01095     <span class="keywordflow">if</span> (button == Qt::MidButton)
<a name="l01096"></a>01096     {
<a name="l01097"></a>01097         KURL link = article.<a class="code" href="classAkregator_1_1Article.html#1ebcbb8d1fc7c89f6936eeb319cfbee0">link</a>();
<a name="l01098"></a>01098         <span class="keywordflow">switch</span> (Settings::mMBBehaviour())
<a name="l01099"></a>01099         {
<a name="l01100"></a>01100             <span class="keywordflow">case</span> Settings::EnumMMBBehaviour::OpenInExternalBrowser:
<a name="l01101"></a>01101                 slotOpenURL(link, 0L, BrowserRun::EXTERNAL);
<a name="l01102"></a>01102                 <span class="keywordflow">break</span>;
<a name="l01103"></a>01103             <span class="keywordflow">case</span> Settings::EnumMMBBehaviour::OpenInBackground:
<a name="l01104"></a>01104                 slotOpenURL(link, 0L, BrowserRun::NEW_TAB_BACKGROUND);
<a name="l01105"></a>01105                 <span class="keywordflow">break</span>;
<a name="l01106"></a>01106             <span class="keywordflow">default</span>:
<a name="l01107"></a>01107                 slotOpenURL(link, 0L, BrowserRun::NEW_TAB_FOREGROUND);
<a name="l01108"></a>01108         }
<a name="l01109"></a>01109     }
<a name="l01110"></a>01110 }
<a name="l01111"></a>01111 
<a name="l01112"></a>01112 <span class="keywordtype">void</span> View::slotAssignTag(<span class="keyword">const</span> Tag&amp; tag, <span class="keywordtype">bool</span> assign)
<a name="l01113"></a>01113 {
<a name="l01114"></a>01114     kdDebug() &lt;&lt; (assign ? <span class="stringliteral">"assigned"</span> : <span class="stringliteral">"removed"</span>) &lt;&lt; <span class="stringliteral">" tag \""</span> &lt;&lt; tag.id() &lt;&lt; <span class="stringliteral">"\""</span> &lt;&lt; endl;
<a name="l01115"></a>01115     QValueList&lt;Article&gt; selectedArticles = m_articleList-&gt;selectedArticles();
<a name="l01116"></a>01116     <span class="keywordflow">for</span> (QValueList&lt;Article&gt;::Iterator it = selectedArticles.begin(); it != selectedArticles.end(); ++it)
<a name="l01117"></a>01117     {
<a name="l01118"></a>01118         <span class="keywordflow">if</span> (assign)
<a name="l01119"></a>01119             (*it).addTag(tag.id());
<a name="l01120"></a>01120         <span class="keywordflow">else</span>
<a name="l01121"></a>01121             (*it).removeTag(tag.id());
<a name="l01122"></a>01122     }
<a name="l01123"></a>01123     updateTagActions();
<a name="l01124"></a>01124 }
<a name="l01125"></a>01125 <span class="comment">/*</span>
<a name="l01126"></a>01126 <span class="comment">void View::slotRemoveTag(const Tag&amp; tag)</span>
<a name="l01127"></a>01127 <span class="comment">{</span>
<a name="l01128"></a>01128 <span class="comment">    kdDebug() &lt;&lt; "remove tag \"" &lt;&lt; tag.id() &lt;&lt; "\" from selected articles" &lt;&lt; endl;</span>
<a name="l01129"></a>01129 <span class="comment">    QValueList&lt;Article&gt; selectedArticles = m_articleList-&gt;selectedArticles();</span>
<a name="l01130"></a>01130 <span class="comment">    for (QValueList&lt;Article&gt;::Iterator it = selectedArticles.begin(); it != selectedArticles.end(); ++it)</span>
<a name="l01131"></a>01131 <span class="comment">        (*it).removeTag(tag.id());</span>
<a name="l01132"></a>01132 <span class="comment"></span>
<a name="l01133"></a>01133 <span class="comment">    updateTagActions();</span>
<a name="l01134"></a>01134 <span class="comment">}</span>
<a name="l01135"></a>01135 <span class="comment">*/</span>
<a name="l01136"></a>01136 <span class="keywordtype">void</span> View::slotNewTag()
<a name="l01137"></a>01137 {
<a name="l01138"></a>01138     Tag tag(KApplication::randomString(8), <span class="stringliteral">"New Tag"</span>);
<a name="l01139"></a>01139     Kernel::self()-&gt;tagSet()-&gt;insert(tag);
<a name="l01140"></a>01140     TagNode* node = m_tagNodeList-&gt;findByTagID(tag.id());
<a name="l01141"></a>01141     <span class="keywordflow">if</span> (node)
<a name="l01142"></a>01142         m_tagNodeListView-&gt;startNodeRenaming(node);
<a name="l01143"></a>01143 }
<a name="l01144"></a>01144 
<a name="l01145"></a>01145 <span class="keywordtype">void</span> View::slotTagCreated(<span class="keyword">const</span> Tag&amp; tag)
<a name="l01146"></a>01146 {
<a name="l01147"></a>01147     <span class="keywordflow">if</span> (m_tagNodeList &amp;&amp; !m_tagNodeList-&gt;containsTagId(tag.id()))
<a name="l01148"></a>01148     {
<a name="l01149"></a>01149         TagNode* tagNode = <span class="keyword">new</span> TagNode(tag, m_feedList-&gt;rootNode());
<a name="l01150"></a>01150         m_tagNodeList-&gt;rootNode()-&gt;appendChild(tagNode);
<a name="l01151"></a>01151     }
<a name="l01152"></a>01152 }
<a name="l01153"></a>01153 
<a name="l01154"></a>01154 <span class="keywordtype">void</span> View::slotTagRemoved(<span class="keyword">const</span> Tag&amp; <span class="comment">/*tag*/</span>)
<a name="l01155"></a>01155 {
<a name="l01156"></a>01156 }
<a name="l01157"></a>01157 
<a name="l01158"></a><a class="code" href="classAkregator_1_1View.html#dcb8e0575e52f966299ca82dbb3ac9c3">01158</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#dcb8e0575e52f966299ca82dbb3ac9c3" title="the article selection has changed">View::slotArticleSelected</a>(<span class="keyword">const</span> <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a>&amp; article)
<a name="l01159"></a>01159 {
<a name="l01160"></a>01160     <span class="keywordflow">if</span> (m_viewMode == CombinedView)
<a name="l01161"></a>01161         <span class="keywordflow">return</span>;
<a name="l01162"></a>01162 
<a name="l01163"></a>01163     m_markReadTimer-&gt;stop();
<a name="l01164"></a>01164 
<a name="l01165"></a>01165     <a class="code" href="classAkregator_1_1Feed.html" title="represents a feed">Feed</a> *feed = article.<a class="code" href="classAkregator_1_1Article.html#503fda89de687ac7c8625b6a74844b9c">feed</a>();
<a name="l01166"></a>01166     <span class="keywordflow">if</span> (!feed)
<a name="l01167"></a>01167         <span class="keywordflow">return</span>;
<a name="l01168"></a>01168 
<a name="l01169"></a>01169     <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a> a(article);
<a name="l01170"></a>01170     <span class="keywordflow">if</span> (a.<a class="code" href="classAkregator_1_1Article.html#88f8693097a22779f8b13b7fa6a11c32">status</a>() != Article::Read)
<a name="l01171"></a>01171     {
<a name="l01172"></a>01172         <span class="keywordtype">int</span> delay;
<a name="l01173"></a>01173 
<a name="l01174"></a>01174         <span class="keywordflow">if</span> ( Settings::useMarkReadDelay() )
<a name="l01175"></a>01175         {
<a name="l01176"></a>01176             delay = Settings::markReadDelay();
<a name="l01177"></a>01177 
<a name="l01178"></a>01178             <span class="keywordflow">if</span> (delay &gt; 0)
<a name="l01179"></a>01179                 m_markReadTimer-&gt;start( delay*1000, <span class="keyword">true</span> );
<a name="l01180"></a>01180             <span class="keywordflow">else</span>
<a name="l01181"></a>01181                 a.<a class="code" href="classAkregator_1_1Article.html#41467ad4c3587ee18884622df7d59776">setStatus</a>(Article::Read);
<a name="l01182"></a>01182         }
<a name="l01183"></a>01183     }
<a name="l01184"></a>01184 
<a name="l01185"></a>01185     KToggleAction*  maai = <span class="keyword">dynamic_cast&lt;</span>KToggleAction*<span class="keyword">&gt;</span>(m_actionManager-&gt;<a class="code" href="classAkregator_1_1ActionManagerImpl.html#82a96ac8afc1d81c01fe961a13023bf1">action</a>(<span class="stringliteral">"article_set_status_important"</span>));
<a name="l01186"></a>01186     maai-&gt;setChecked(a.<a class="code" href="classAkregator_1_1Article.html#78d28aa4fe17bcc75a09a2718ffb97ac" title="if true, the article should be kept even when expired">keep</a>());
<a name="l01187"></a>01187 
<a name="l01188"></a>01188     kdDebug() &lt;&lt; <span class="stringliteral">"selected: "</span> &lt;&lt; a.<a class="code" href="classAkregator_1_1Article.html#7e6dc5cd30979e8e45c54424f0ec1693">guid</a>() &lt;&lt; endl;
<a name="l01189"></a>01189 
<a name="l01190"></a>01190     updateTagActions();
<a name="l01191"></a>01191 
<a name="l01192"></a>01192     m_articleViewer-&gt;<a class="code" href="classAkregator_1_1ArticleViewer.html#967a33bb28464b72aa17af69984e3ca0" title="Show single article (normal view).">slotShowArticle</a>(a);
<a name="l01193"></a>01193 }
<a name="l01194"></a>01194 
<a name="l01195"></a><a class="code" href="classAkregator_1_1View.html#9e057967b1a4fd1dddf483b3ef54889f">01195</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#9e057967b1a4fd1dddf483b3ef54889f" title="opens article of item in external browser">View::slotOpenArticleExternal</a>(<span class="keyword">const</span> <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a>&amp; article, <span class="keyword">const</span> QPoint&amp;, <span class="keywordtype">int</span>)
<a name="l01196"></a>01196 {
<a name="l01197"></a>01197     <span class="keywordflow">if</span> (!article.<a class="code" href="classAkregator_1_1Article.html#bbc089d0e0c6dc49318327adc2a414b4">isNull</a>())
<a name="l01198"></a>01198         Viewer::displayInExternalBrowser(article.<a class="code" href="classAkregator_1_1Article.html#1ebcbb8d1fc7c89f6936eeb319cfbee0">link</a>());
<a name="l01199"></a>01199 }
<a name="l01200"></a>01200 
<a name="l01201"></a>01201 
<a name="l01202"></a><a class="code" href="classAkregator_1_1View.html#2d97c49a7eb4fc1a80d1b5f36ad956e2">01202</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#2d97c49a7eb4fc1a80d1b5f36ad956e2" title="opens current article in new tab, background/foreground depends on settings TODO:...">View::slotOpenCurrentArticle</a>()
<a name="l01203"></a>01203 {
<a name="l01204"></a>01204     <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a> article = m_articleList-&gt;currentArticle();
<a name="l01205"></a>01205 
<a name="l01206"></a>01206     <span class="keywordflow">if</span> (article.<a class="code" href="classAkregator_1_1Article.html#bbc089d0e0c6dc49318327adc2a414b4">isNull</a>())
<a name="l01207"></a>01207         <span class="keywordflow">return</span>;
<a name="l01208"></a>01208 
<a name="l01209"></a>01209     KURL link;
<a name="l01210"></a>01210     <span class="keywordflow">if</span> (article.<a class="code" href="classAkregator_1_1Article.html#1ebcbb8d1fc7c89f6936eeb319cfbee0">link</a>().isValid())
<a name="l01211"></a>01211         link = article.<a class="code" href="classAkregator_1_1Article.html#1ebcbb8d1fc7c89f6936eeb319cfbee0">link</a>();
<a name="l01212"></a>01212     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (article.<a class="code" href="classAkregator_1_1Article.html#20fc99ae341f6d83c6603290e026ace3">guidIsPermaLink</a>())
<a name="l01213"></a>01213         link = KURL(article.<a class="code" href="classAkregator_1_1Article.html#7e6dc5cd30979e8e45c54424f0ec1693">guid</a>());
<a name="l01214"></a>01214     
<a name="l01215"></a>01215     <span class="keywordflow">if</span> (link.isValid()) 
<a name="l01216"></a>01216     {
<a name="l01217"></a>01217         slotOpenURL(link, 0L, BrowserRun::NEW_TAB_FOREGROUND);
<a name="l01218"></a>01218     }
<a name="l01219"></a>01219 }
<a name="l01220"></a>01220 
<a name="l01221"></a><a class="code" href="classAkregator_1_1View.html#35ca324744aa17a5d93addf2a9e4568c">01221</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#35ca324744aa17a5d93addf2a9e4568c" title="opens the current article (currentItem) in external browser TODO: use selected instead...">View::slotOpenCurrentArticleExternal</a>()
<a name="l01222"></a>01222 {
<a name="l01223"></a>01223     <a class="code" href="classAkregator_1_1View.html#9e057967b1a4fd1dddf483b3ef54889f" title="opens article of item in external browser">slotOpenArticleExternal</a>(m_articleList-&gt;currentArticle(), QPoint(), 0);
<a name="l01224"></a>01224 }
<a name="l01225"></a>01225 
<a name="l01226"></a><a class="code" href="classAkregator_1_1View.html#8b874b9677a9234e46ab57565b398bab">01226</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#8b874b9677a9234e46ab57565b398bab" title="opens the current article (currentItem) in background tab TODO: use selected instead...">View::slotOpenCurrentArticleBackgroundTab</a>()
<a name="l01227"></a>01227 {
<a name="l01228"></a>01228     <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a> article = m_articleList-&gt;currentArticle();
<a name="l01229"></a>01229 
<a name="l01230"></a>01230     <span class="keywordflow">if</span> (article.<a class="code" href="classAkregator_1_1Article.html#bbc089d0e0c6dc49318327adc2a414b4">isNull</a>())
<a name="l01231"></a>01231         <span class="keywordflow">return</span>;
<a name="l01232"></a>01232 
<a name="l01233"></a>01233     KURL link;
<a name="l01234"></a>01234 
<a name="l01235"></a>01235     <span class="keywordflow">if</span> (article.<a class="code" href="classAkregator_1_1Article.html#1ebcbb8d1fc7c89f6936eeb319cfbee0">link</a>().isValid())
<a name="l01236"></a>01236         link = article.<a class="code" href="classAkregator_1_1Article.html#1ebcbb8d1fc7c89f6936eeb319cfbee0">link</a>();
<a name="l01237"></a>01237     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (article.<a class="code" href="classAkregator_1_1Article.html#20fc99ae341f6d83c6603290e026ace3">guidIsPermaLink</a>())
<a name="l01238"></a>01238         link = KURL(article.<a class="code" href="classAkregator_1_1Article.html#7e6dc5cd30979e8e45c54424f0ec1693">guid</a>());
<a name="l01239"></a>01239     
<a name="l01240"></a>01240     <span class="keywordflow">if</span> (link.isValid()) 
<a name="l01241"></a>01241     {
<a name="l01242"></a>01242         slotOpenURL(link, 0L, BrowserRun::NEW_TAB_BACKGROUND);
<a name="l01243"></a>01243     }
<a name="l01244"></a>01244 }
<a name="l01245"></a>01245 
<a name="l01246"></a><a class="code" href="classAkregator_1_1View.html#8cd6c15284c6dbf9367dba32ed79222d">01246</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#8cd6c15284c6dbf9367dba32ed79222d" title="copies the link of current article to clipboard">View::slotCopyLinkAddress</a>()
<a name="l01247"></a>01247 {
<a name="l01248"></a>01248     <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a> article = m_articleList-&gt;currentArticle();
<a name="l01249"></a>01249 
<a name="l01250"></a>01250     <span class="keywordflow">if</span>(article.<a class="code" href="classAkregator_1_1Article.html#bbc089d0e0c6dc49318327adc2a414b4">isNull</a>())
<a name="l01251"></a>01251        <span class="keywordflow">return</span>;
<a name="l01252"></a>01252 
<a name="l01253"></a>01253     QString link;
<a name="l01254"></a>01254     <span class="keywordflow">if</span> (article.<a class="code" href="classAkregator_1_1Article.html#1ebcbb8d1fc7c89f6936eeb319cfbee0">link</a>().isValid() || (article.<a class="code" href="classAkregator_1_1Article.html#20fc99ae341f6d83c6603290e026ace3">guidIsPermaLink</a>() &amp;&amp; KURL(article.<a class="code" href="classAkregator_1_1Article.html#7e6dc5cd30979e8e45c54424f0ec1693">guid</a>()).isValid()))
<a name="l01255"></a>01255     {
<a name="l01256"></a>01256         <span class="comment">// in case link isn't valid, fall back to the guid permaLink.</span>
<a name="l01257"></a>01257         <span class="keywordflow">if</span> (article.<a class="code" href="classAkregator_1_1Article.html#1ebcbb8d1fc7c89f6936eeb319cfbee0">link</a>().isValid())
<a name="l01258"></a>01258             link = article.<a class="code" href="classAkregator_1_1Article.html#1ebcbb8d1fc7c89f6936eeb319cfbee0">link</a>().url();
<a name="l01259"></a>01259         <span class="keywordflow">else</span>
<a name="l01260"></a>01260             link = article.<a class="code" href="classAkregator_1_1Article.html#7e6dc5cd30979e8e45c54424f0ec1693">guid</a>();
<a name="l01261"></a>01261         QClipboard *cb = QApplication::clipboard();
<a name="l01262"></a>01262         cb-&gt;setText(link, QClipboard::Clipboard);
<a name="l01263"></a>01263         cb-&gt;setText(link, QClipboard::Selection);
<a name="l01264"></a>01264     }
<a name="l01265"></a>01265 }
<a name="l01266"></a>01266 
<a name="l01267"></a><a class="code" href="classAkregator_1_1View.html#0aa903f500d4d01e41d1ee8ab8d12440">01267</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#0aa903f500d4d01e41d1ee8ab8d12440" title="called when URLs are dropped into the tree view">View::slotFeedURLDropped</a>(KURL::List &amp;urls, <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* after, <a class="code" href="classAkregator_1_1Folder.html" title="Represents a folder (containing feeds and/or other folders).">Folder</a>* parent)
<a name="l01268"></a>01268 {
<a name="l01269"></a>01269     KURL::List::iterator it;
<a name="l01270"></a>01270     <span class="keywordflow">for</span> ( it = urls.begin(); it != urls.end(); ++it )
<a name="l01271"></a>01271     {
<a name="l01272"></a>01272         addFeed((*it).prettyURL(), after, parent, <span class="keyword">false</span>);
<a name="l01273"></a>01273     }
<a name="l01274"></a>01274 }
<a name="l01275"></a>01275 
<a name="l01276"></a><a class="code" href="classAkregator_1_1View.html#cbf8fcbd768cb14ebf906fac81f45bcb">01276</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#cbf8fcbd768cb14ebf906fac81f45bcb" title="toggles the visibility of the filter bar">View::slotToggleShowQuickFilter</a>()
<a name="l01277"></a>01277 {
<a name="l01278"></a>01278     <span class="keywordflow">if</span> ( Settings::showQuickFilter() )
<a name="l01279"></a>01279     {
<a name="l01280"></a>01280         Settings::setShowQuickFilter(<span class="keyword">false</span>);
<a name="l01281"></a>01281         m_searchBar-&gt;slotClearSearch();
<a name="l01282"></a>01282         m_searchBar-&gt;hide();
<a name="l01283"></a>01283     }
<a name="l01284"></a>01284     <span class="keywordflow">else</span>
<a name="l01285"></a>01285     {
<a name="l01286"></a>01286         Settings::setShowQuickFilter(<span class="keyword">true</span>);
<a name="l01287"></a>01287         <span class="keywordflow">if</span> (!m_displayingAboutPage)
<a name="l01288"></a>01288             m_searchBar-&gt;show();
<a name="l01289"></a>01289     }
<a name="l01290"></a>01290 
<a name="l01291"></a>01291 }
<a name="l01292"></a>01292 
<a name="l01293"></a><a class="code" href="classAkregator_1_1View.html#98698cc96d4f83996a096017e1d91558">01293</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#98698cc96d4f83996a096017e1d91558" title="deletes the currently selected article">View::slotArticleDelete</a>()
<a name="l01294"></a>01294 {
<a name="l01295"></a>01295 
<a name="l01296"></a>01296     <span class="keywordflow">if</span> ( m_viewMode == CombinedView )
<a name="l01297"></a>01297         <span class="keywordflow">return</span>;
<a name="l01298"></a>01298 
<a name="l01299"></a>01299     QValueList&lt;Article&gt; articles = m_articleList-&gt;selectedArticles();
<a name="l01300"></a>01300 
<a name="l01301"></a>01301     QString msg;
<a name="l01302"></a>01302     <span class="keywordflow">switch</span> (articles.count())
<a name="l01303"></a>01303     {
<a name="l01304"></a>01304         <span class="keywordflow">case</span> 0:
<a name="l01305"></a>01305             <span class="keywordflow">return</span>;
<a name="l01306"></a>01306         <span class="keywordflow">case</span> 1:
<a name="l01307"></a>01307             msg = i18n(<span class="stringliteral">"&lt;qt&gt;Are you sure you want to delete article &lt;b&gt;%1&lt;/b&gt;?&lt;/qt&gt;"</span>).arg(QStyleSheet::escape(articles.first().title()));
<a name="l01308"></a>01308             <span class="keywordflow">break</span>;
<a name="l01309"></a>01309         <span class="keywordflow">default</span>:
<a name="l01310"></a>01310             msg = i18n(<span class="stringliteral">"&lt;qt&gt;Are you sure you want to delete the selected article?&lt;/qt&gt;"</span>, 
<a name="l01311"></a>01311         <span class="stringliteral">"&lt;qt&gt;Are you sure you want to delete the %n selected articles?&lt;/qt&gt;"</span>,
<a name="l01312"></a>01312         articles.count());
<a name="l01313"></a>01313     }
<a name="l01314"></a>01314 
<a name="l01315"></a>01315     <span class="keywordflow">if</span> (KMessageBox::warningContinueCancel(0, msg, i18n(<span class="stringliteral">"Delete Article"</span>), KStdGuiItem::del()) == KMessageBox::Continue)
<a name="l01316"></a>01316     {
<a name="l01317"></a>01317         <span class="keywordflow">if</span> (m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode())
<a name="l01318"></a>01318             m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode()-&gt;setNotificationMode(<span class="keyword">false</span>);
<a name="l01319"></a>01319 
<a name="l01320"></a>01320         QValueList&lt;Feed*&gt; feeds;
<a name="l01321"></a>01321         <span class="keywordflow">for</span> (QValueList&lt;Article&gt;::Iterator it = articles.begin(); it != articles.end(); ++it)
<a name="l01322"></a>01322         {
<a name="l01323"></a>01323             <a class="code" href="classAkregator_1_1Feed.html" title="represents a feed">Feed</a>* feed = (*it).feed();
<a name="l01324"></a>01324             <span class="keywordflow">if</span> (!feeds.contains(feed))
<a name="l01325"></a>01325                 feeds.append(feed);
<a name="l01326"></a>01326             feed-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#3a19ae67136daa08cdf3b077fef2a2b3">setNotificationMode</a>(<span class="keyword">false</span>);
<a name="l01327"></a>01327             (*it).setDeleted();
<a name="l01328"></a>01328         }
<a name="l01329"></a>01329 
<a name="l01330"></a>01330         <span class="keywordflow">for</span> (QValueList&lt;Feed*&gt;::Iterator it = feeds.begin(); it != feeds.end(); ++it)
<a name="l01331"></a>01331         {
<a name="l01332"></a>01332             (*it)-&gt;setNotificationMode(<span class="keyword">true</span>);
<a name="l01333"></a>01333         }
<a name="l01334"></a>01334 
<a name="l01335"></a>01335         <span class="keywordflow">if</span> (m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode())
<a name="l01336"></a>01336             m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode()-&gt;setNotificationMode(<span class="keyword">true</span>);
<a name="l01337"></a>01337     }
<a name="l01338"></a>01338 }
<a name="l01339"></a>01339 
<a name="l01340"></a>01340 
<a name="l01341"></a><a class="code" href="classAkregator_1_1View.html#7a365bb7cf00c459a7241b7b4eaf0091">01341</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#7a365bb7cf00c459a7241b7b4eaf0091" title="toggles the keep flag of the currently selected article">View::slotArticleToggleKeepFlag</a>(<span class="keywordtype">bool</span> <span class="comment">/*enabled*/</span>)
<a name="l01342"></a>01342 {
<a name="l01343"></a>01343     QValueList&lt;Article&gt; articles = m_articleList-&gt;selectedArticles();
<a name="l01344"></a>01344 
<a name="l01345"></a>01345     <span class="keywordflow">if</span> (articles.isEmpty())
<a name="l01346"></a>01346         <span class="keywordflow">return</span>;
<a name="l01347"></a>01347 
<a name="l01348"></a>01348     <span class="keywordtype">bool</span> allFlagsSet = <span class="keyword">true</span>;
<a name="l01349"></a>01349     <span class="keywordflow">for</span> (QValueList&lt;Article&gt;::Iterator it = articles.begin(); allFlagsSet &amp;&amp; it != articles.end(); ++it)
<a name="l01350"></a>01350         <span class="keywordflow">if</span> (!(*it).keep())
<a name="l01351"></a>01351             allFlagsSet = <span class="keyword">false</span>;
<a name="l01352"></a>01352 
<a name="l01353"></a>01353     <span class="keywordflow">for</span> (QValueList&lt;Article&gt;::Iterator it = articles.begin(); it != articles.end(); ++it)
<a name="l01354"></a>01354         (*it).setKeep(!allFlagsSet);
<a name="l01355"></a>01355 }
<a name="l01356"></a>01356 
<a name="l01357"></a><a class="code" href="classAkregator_1_1View.html#217e6e7bb8cb8c4ec572b7f0f9a76dc2">01357</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#217e6e7bb8cb8c4ec572b7f0f9a76dc2" title="marks the currently selected article as read">View::slotSetSelectedArticleRead</a>()
<a name="l01358"></a>01358 {
<a name="l01359"></a>01359     QValueList&lt;Article&gt; articles = m_articleList-&gt;selectedArticles();
<a name="l01360"></a>01360 
<a name="l01361"></a>01361     <span class="keywordflow">if</span> (articles.isEmpty())
<a name="l01362"></a>01362         <span class="keywordflow">return</span>;
<a name="l01363"></a>01363 
<a name="l01364"></a>01364     <span class="keywordflow">for</span> (QValueList&lt;Article&gt;::Iterator it = articles.begin(); it != articles.end(); ++it)
<a name="l01365"></a>01365         (*it).setStatus(Article::Read);
<a name="l01366"></a>01366 }
<a name="l01367"></a>01367 
<a name="l01368"></a><a class="code" href="classAkregator_1_1View.html#da9f2ebeb3787d4e45e80fa550f6b79a">01368</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#da9f2ebeb3787d4e45e80fa550f6b79a" title="reads the currently selected articles using KTTSD">View::slotTextToSpeechRequest</a>()
<a name="l01369"></a>01369 {
<a name="l01370"></a>01370     <span class="keywordflow">if</span> (m_currentFrame == m_mainFrame)
<a name="l01371"></a>01371     {
<a name="l01372"></a>01372         <span class="keywordflow">if</span> (m_viewMode != CombinedView)
<a name="l01373"></a>01373         {
<a name="l01374"></a>01374             <span class="comment">// in non-combined view, read selected articles</span>
<a name="l01375"></a>01375             SpeechClient::self()-&gt;slotSpeak(m_articleList-&gt;selectedArticles());
<a name="l01376"></a>01376             <span class="comment">// TODO: if article viewer has a selection, read only the selected text?</span>
<a name="l01377"></a>01377         }
<a name="l01378"></a>01378         <span class="keywordflow">else</span>
<a name="l01379"></a>01379         {
<a name="l01380"></a>01380             <span class="keywordflow">if</span> (m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode())
<a name="l01381"></a>01381             {
<a name="l01382"></a>01382                 <span class="comment">//TODO: read articles in current node, respecting quick filter!</span>
<a name="l01383"></a>01383             }
<a name="l01384"></a>01384         }
<a name="l01385"></a>01385     }
<a name="l01386"></a>01386     <span class="keywordflow">else</span>
<a name="l01387"></a>01387     {
<a name="l01388"></a>01388         QString selectedText = <span class="keyword">static_cast&lt;</span>PageViewer *<span class="keyword">&gt;</span>(m_currentFrame-&gt;part())-&gt;selectedText();
<a name="l01389"></a>01389         
<a name="l01390"></a>01390         <span class="keywordflow">if</span> (!selectedText.isEmpty())
<a name="l01391"></a>01391             SpeechClient::self()-&gt;slotSpeak(selectedText, <span class="stringliteral">"en"</span>);
<a name="l01392"></a>01392     }
<a name="l01393"></a>01393 }
<a name="l01394"></a>01394 
<a name="l01395"></a><a class="code" href="classAkregator_1_1View.html#708a18a25f40cb134ac2991df0ea3176">01395</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#708a18a25f40cb134ac2991df0ea3176" title="marks the currently selected article as unread">View::slotSetSelectedArticleUnread</a>()
<a name="l01396"></a>01396 {
<a name="l01397"></a>01397     QValueList&lt;Article&gt; articles = m_articleList-&gt;selectedArticles();
<a name="l01398"></a>01398 
<a name="l01399"></a>01399     <span class="keywordflow">if</span> (articles.isEmpty())
<a name="l01400"></a>01400         <span class="keywordflow">return</span>;
<a name="l01401"></a>01401 
<a name="l01402"></a>01402     <span class="keywordflow">for</span> (QValueList&lt;Article&gt;::Iterator it = articles.begin(); it != articles.end(); ++it)
<a name="l01403"></a>01403         (*it).setStatus(Article::Unread);
<a name="l01404"></a>01404 }
<a name="l01405"></a>01405 
<a name="l01406"></a><a class="code" href="classAkregator_1_1View.html#96122e757ac81f522f1daef4c4ba3ab8">01406</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#96122e757ac81f522f1daef4c4ba3ab8" title="marks the currently selected article as new">View::slotSetSelectedArticleNew</a>()
<a name="l01407"></a>01407 {
<a name="l01408"></a>01408     QValueList&lt;Article&gt; articles = m_articleList-&gt;selectedArticles();
<a name="l01409"></a>01409 
<a name="l01410"></a>01410     <span class="keywordflow">if</span> (articles.isEmpty())
<a name="l01411"></a>01411         <span class="keywordflow">return</span>;
<a name="l01412"></a>01412 
<a name="l01413"></a>01413     <span class="keywordflow">for</span> (QValueList&lt;Article&gt;::Iterator it = articles.begin(); it != articles.end(); ++it)
<a name="l01414"></a>01414         (*it).setStatus(Article::New);
<a name="l01415"></a>01415 }
<a name="l01416"></a>01416 
<a name="l01417"></a><a class="code" href="classAkregator_1_1View.html#39d8c21551313de06b5bb41b486bfd29">01417</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#39d8c21551313de06b5bb41b486bfd29" title="marks the currenctly selected article as read after a user-set delay">View::slotSetCurrentArticleReadDelayed</a>()
<a name="l01418"></a>01418 {
<a name="l01419"></a>01419     <a class="code" href="classAkregator_1_1Article.html" title="A proxy class for RSS::Article with some additional methods to assist sorting.">Article</a> article = m_articleList-&gt;currentArticle();
<a name="l01420"></a>01420 
<a name="l01421"></a>01421     <span class="keywordflow">if</span> (article.<a class="code" href="classAkregator_1_1Article.html#bbc089d0e0c6dc49318327adc2a414b4">isNull</a>())
<a name="l01422"></a>01422         <span class="keywordflow">return</span>;
<a name="l01423"></a>01423 
<a name="l01424"></a>01424     article.<a class="code" href="classAkregator_1_1Article.html#41467ad4c3587ee18884622df7d59776">setStatus</a>(Article::Read);
<a name="l01425"></a>01425 }
<a name="l01426"></a>01426 
<a name="l01427"></a><a class="code" href="classAkregator_1_1View.html#355b13d86ee9a7a735f4c4dda569b03a">01427</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#355b13d86ee9a7a735f4c4dda569b03a" title="displays a URL in the status bar when the user moves the mouse over a link">View::slotMouseOverInfo</a>(<span class="keyword">const</span> KFileItem *kifi)
<a name="l01428"></a>01428 {
<a name="l01429"></a>01429     <span class="keywordflow">if</span> (kifi)
<a name="l01430"></a>01430     {
<a name="l01431"></a>01431         KFileItem *k=(KFileItem*)kifi;
<a name="l01432"></a>01432         m_mainFrame-&gt;setStatusText(k-&gt;url().prettyURL());<span class="comment">//getStatusBarInfo());</span>
<a name="l01433"></a>01433     }
<a name="l01434"></a>01434     <span class="keywordflow">else</span>
<a name="l01435"></a>01435     {
<a name="l01436"></a>01436         m_mainFrame-&gt;setStatusText(QString::null);
<a name="l01437"></a>01437     }
<a name="l01438"></a>01438 }
<a name="l01439"></a>01439 
<a name="l01440"></a><a class="code" href="classAkregator_1_1View.html#d3d897b1845add5b0619fa5f1ca59a1e">01440</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1View.html#d3d897b1845add5b0619fa5f1ca59a1e" title="session management">View::readProperties</a>(KConfig* config)
<a name="l01441"></a>01441 {
<a name="l01442"></a>01442     
<a name="l01443"></a>01443     <span class="keywordflow">if</span> (!Settings::resetQuickFilterOnNodeChange())
<a name="l01444"></a>01444     {
<a name="l01445"></a>01445         m_searchBar-&gt;slotSetText(config-&gt;readEntry(<span class="stringliteral">"searchLine"</span>));
<a name="l01446"></a>01446         <span class="keywordtype">int</span> statusfilter = config-&gt;readNumEntry(<span class="stringliteral">"searchCombo"</span>, -1);
<a name="l01447"></a>01447         <span class="keywordflow">if</span> (statusfilter != -1)
<a name="l01448"></a>01448             m_searchBar-&gt;slotSetStatus(statusfilter);
<a name="l01449"></a>01449     }
<a name="l01450"></a>01450     
<a name="l01451"></a>01451     <span class="keywordtype">int</span> selectedID = config-&gt;readNumEntry(<span class="stringliteral">"selectedNodeID"</span>, -1);
<a name="l01452"></a>01452     <span class="keywordflow">if</span> (selectedID != -1)
<a name="l01453"></a>01453     {
<a name="l01454"></a>01454         <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* selNode = m_feedList-&gt;findByID(selectedID);
<a name="l01455"></a>01455         <span class="keywordflow">if</span> (selNode)
<a name="l01456"></a>01456             m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;setSelectedNode(selNode);
<a name="l01457"></a>01457     }
<a name="l01458"></a>01458 
<a name="l01459"></a>01459     QStringList urls = config-&gt;readListEntry(<span class="stringliteral">"FeedBrowserURLs"</span>);
<a name="l01460"></a>01460     QStringList::ConstIterator it = urls.begin();
<a name="l01461"></a>01461     <span class="keywordflow">for</span> (; it != urls.end(); ++it)
<a name="l01462"></a>01462     {
<a name="l01463"></a>01463         KURL url = KURL::fromPathOrURL(*it);
<a name="l01464"></a>01464         <span class="keywordflow">if</span> (url.isValid())
<a name="l01465"></a>01465             <a class="code" href="classAkregator_1_1View.html#a5a99328351f0b1d1564d57808ddf711" title="opens a page viewer in a new tab and loads an URL">slotOpenNewTab</a>(url, <span class="keyword">true</span>); <span class="comment">// open in background</span>
<a name="l01466"></a>01466     }
<a name="l01467"></a>01467 }
<a name="l01468"></a>01468 
<a name="l01469"></a>01469 <span class="keywordtype">void</span> View::saveProperties(KConfig* config)
<a name="l01470"></a>01470 {
<a name="l01471"></a>01471     <span class="comment">// save filter settings</span>
<a name="l01472"></a>01472     config-&gt;writeEntry(<span class="stringliteral">"searchLine"</span>, m_searchBar-&gt;text());
<a name="l01473"></a>01473     config-&gt;writeEntry(<span class="stringliteral">"searchCombo"</span>, m_searchBar-&gt;status());
<a name="l01474"></a>01474     
<a name="l01475"></a>01475     <a class="code" href="classAkregator_1_1TreeNode.html" title="Abstract base class for all kind of elements in the feed tree, like feeds and feed...">TreeNode</a>* sel = m_listTabWidget-&gt;<a class="code" href="classAkregator_1_1ListTabWidget.html#4f6c0a11fc9ed703136d28cc8b76364f">activeView</a>()-&gt;selectedNode();
<a name="l01476"></a>01476 
<a name="l01477"></a>01477     <span class="keywordflow">if</span> (sel)
<a name="l01478"></a>01478     {
<a name="l01479"></a>01479         config-&gt;writeEntry(<span class="stringliteral">"selectedNodeID"</span>, sel-&gt;<a class="code" href="classAkregator_1_1TreeNode.html#acfc6a524fccd34dfb63fc7afedc5035" title="returns the ID of this node.">id</a>() );
<a name="l01480"></a>01480     }
<a name="l01481"></a>01481 
<a name="l01482"></a>01482     <span class="comment">// save browser URLs</span>
<a name="l01483"></a>01483     QStringList urls;
<a name="l01484"></a>01484     QPtrList&lt;Frame&gt; frames = m_tabs-&gt;frames();
<a name="l01485"></a>01485     QPtrList&lt;Frame&gt;::ConstIterator it = frames.begin();
<a name="l01486"></a>01486     <span class="keywordflow">for</span> (; it != frames.end(); ++it)
<a name="l01487"></a>01487     {
<a name="l01488"></a>01488         Frame *frame = *it;
<a name="l01489"></a>01489         KParts::ReadOnlyPart *part = frame-&gt;part();
<a name="l01490"></a>01490         PageViewer *pageViewer = <span class="keyword">dynamic_cast&lt;</span>PageViewer*<span class="keyword">&gt;</span>(part); <span class="comment">// don't save the ArticleViewer</span>
<a name="l01491"></a>01491         <span class="keywordflow">if</span> (pageViewer)
<a name="l01492"></a>01492         {
<a name="l01493"></a>01493             KURL url = pageViewer-&gt;url();
<a name="l01494"></a>01494             <span class="keywordflow">if</span> (url.isValid())
<a name="l01495"></a>01495                 urls.append(url.prettyURL());
<a name="l01496"></a>01496         }
<a name="l01497"></a>01497     }
<a name="l01498"></a>01498 
<a name="l01499"></a>01499     config-&gt;writeEntry(<span class="stringliteral">"FeedBrowserURLs"</span>, urls);
<a name="l01500"></a>01500 }
<a name="l01501"></a>01501 
<a name="l01502"></a>01502 <span class="keywordtype">void</span> View::connectToFeedList(FeedList* feedList)
<a name="l01503"></a>01503 {
<a name="l01504"></a>01504     connect(feedList-&gt;rootNode(), SIGNAL(signalChanged(TreeNode*)), <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#c5fe5db32bff5ce54c2f44e4acc787ab" title="emits signalUnreadCountChanged(int)">slotSetTotalUnread</a>()));
<a name="l01505"></a>01505     <a class="code" href="classAkregator_1_1View.html#c5fe5db32bff5ce54c2f44e4acc787ab" title="emits signalUnreadCountChanged(int)">slotSetTotalUnread</a>();
<a name="l01506"></a>01506 }
<a name="l01507"></a>01507 
<a name="l01508"></a>01508 <span class="keywordtype">void</span> View::disconnectFromFeedList(FeedList* feedList)
<a name="l01509"></a>01509 {
<a name="l01510"></a>01510     disconnect(feedList-&gt;rootNode(), SIGNAL(signalChanged(TreeNode*)), <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1View.html#c5fe5db32bff5ce54c2f44e4acc787ab" title="emits signalUnreadCountChanged(int)">slotSetTotalUnread</a>()));
<a name="l01511"></a>01511 }
<a name="l01512"></a>01512 
<a name="l01513"></a>01513 <span class="keywordtype">void</span> View::updateTagActions()
<a name="l01514"></a>01514 {
<a name="l01515"></a>01515     QStringList tags;
<a name="l01516"></a>01516 
<a name="l01517"></a>01517     QValueList&lt;Article&gt; selectedArticles = m_articleList-&gt;selectedArticles();
<a name="l01518"></a>01518 
<a name="l01519"></a>01519     <span class="keywordflow">for</span> (QValueList&lt;Article&gt;::ConstIterator it = selectedArticles.begin(); it != selectedArticles.end(); ++it)
<a name="l01520"></a>01520     {
<a name="l01521"></a>01521         QStringList atags = (*it).tags();
<a name="l01522"></a>01522         <span class="keywordflow">for</span> (QStringList::ConstIterator it2 = atags.begin(); it2 != atags.end(); ++it2)
<a name="l01523"></a>01523         {
<a name="l01524"></a>01524             <span class="keywordflow">if</span> (!tags.contains(*it2))
<a name="l01525"></a>01525                 tags += *it2;
<a name="l01526"></a>01526         }
<a name="l01527"></a>01527     }
<a name="l01528"></a>01528     m_actionManager-&gt;slotUpdateTagActions(!selectedArticles.isEmpty(), tags);
<a name="l01529"></a>01529 }
<a name="l01530"></a>01530 
<a name="l01531"></a>01531 } <span class="comment">// namespace Akregator</span>
<a name="l01532"></a>01532 
<a name="l01533"></a>01533 <span class="preprocessor">#include "akregator_view.moc"</span>
</pre></div></div>
    </div></div>


      </td>
  </tr>
  <tr>
    <td valign="top" id="leftmenu" width="25%">
      <a name="navigation"></a>
      <div class="menu_box"><h2>akregator/src</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="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="classAkregator_1_1AboutData.html">akregator::aboutdata</option>,  <option value="classAkregator_1_1ActionManager.html">akregator::actionmanager</option>,  <option value="classAkregator_1_1ActionManagerImpl.html">akregator::actionmanagerimpl</option>,  <option value="classAkregator_1_1Article.html">akregator::article</option>,  <option value="classAkregator_1_1ArticleInterceptor.html">akregator::articleinterceptor</option>,  <option value="classAkregator_1_1ArticleInterceptorManager.html">akregator::articleinterceptormanager</option>,  <option value="classAkregator_1_1ArticleViewer.html">akregator::articleviewer</option>,  <option value="classAkregator_1_1Backend_1_1Category.html">akregator::backend::category</option>,  <option value="classAkregator_1_1Backend_1_1Storage.html">akregator::backend::storage</option>,  <option value="classAkregator_1_1Backend_1_1StorageDummyImpl.html">akregator::backend::storagedummyimpl</option>,  <option value="classAkregator_1_1Feed.html">akregator::feed</option>,  <option value="classAkregator_1_1FeedItem.html">akregator::feeditem</option>,  <option value="classAkregator_1_1FeedList.html">akregator::feedlist</option>,  <option value="classAkregator_1_1Filters_1_1AbstractMatcher.html">akregator::filters::abstractmatcher</option>,  <option value="classAkregator_1_1Filters_1_1ArticleFilter.html">akregator::filters::articlefilter</option>,  <option value="classAkregator_1_1Filters_1_1ArticleMatcher.html">akregator::filters::articlematcher</option>,  <option value="classAkregator_1_1Filters_1_1Criterion.html">akregator::filters::criterion</option>,  <option value="classAkregator_1_1Folder.html">akregator::folder</option>,  <option value="classAkregator_1_1KCursorSaver.html">akregator::kcursorsaver</option>,  <option value="classAkregator_1_1ListTabWidget.html">akregator::listtabwidget</option>,  <option value="classAkregator_1_1MainWindow.html">akregator::mainwindow</option>,  <option value="classAkregator_1_1NotificationManager.html">akregator::notificationmanager</option>,  <option value="classAkregator_1_1Part.html">akregator::part</option>,  <option value="classAkregator_1_1ProgressItemHandler.html">akregator::progressitemhandler</option>,  <option value="classAkregator_1_1ProgressManager.html">akregator::progressmanager</option>,  <option value="classAkregator_1_1SelectNodeDialog.html">akregator::selectnodedialog</option>,  <option value="classAkregator_1_1TagAction.html">akregator::tagaction</option>,  <option value="classAkregator_1_1TagSet.html">akregator::tagset</option>,  <option value="classAkregator_1_1TreeNode.html">akregator::treenode</option>,  <option value="classAkregator_1_1TreeNodeItem.html">akregator::treenodeitem</option>,  <option value="classAkregator_1_1View.html">akregator::view</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>