Sophie

Sophie

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

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_part.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_part.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">                  2005 Frank Osterfeld &lt;frank.osterfeld at kdemail.net&gt;</span>
<a name="l00006"></a>00006 <span class="comment"></span>
<a name="l00007"></a>00007 <span class="comment">    This program is free software; you can redistribute it and/or modify</span>
<a name="l00008"></a>00008 <span class="comment">    it under the terms of the GNU General Public License as published by</span>
<a name="l00009"></a>00009 <span class="comment">    the Free Software Foundation; either version 2 of the License, or</span>
<a name="l00010"></a>00010 <span class="comment">    (at your option) any later version.</span>
<a name="l00011"></a>00011 <span class="comment"></span>
<a name="l00012"></a>00012 <span class="comment">    This program is distributed in the hope that it will be useful,</span>
<a name="l00013"></a>00013 <span class="comment">    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00014"></a>00014 <span class="comment">    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<a name="l00015"></a>00015 <span class="comment">    GNU General Public License for more details.</span>
<a name="l00016"></a>00016 <span class="comment"></span>
<a name="l00017"></a>00017 <span class="comment">    You should have received a copy of the GNU General Public License</span>
<a name="l00018"></a>00018 <span class="comment">    along with this program; if not, write to the Free Software</span>
<a name="l00019"></a>00019 <span class="comment">    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span>
<a name="l00020"></a>00020 <span class="comment"></span>
<a name="l00021"></a>00021 <span class="comment">    As a special exception, permission is given to link this program</span>
<a name="l00022"></a>00022 <span class="comment">    with any edition of Qt, and distribute the resulting executable,</span>
<a name="l00023"></a>00023 <span class="comment">    without including the source code for Qt in the source distribution.</span>
<a name="l00024"></a>00024 <span class="comment">*/</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;dcopclient.h&gt;</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;kaboutdata.h&gt;</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;kaction.h&gt;</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;kactionclasses.h&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;kactioncollection.h&gt;</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include &lt;kapplication.h&gt;</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;kconfig.h&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;kconfigdialog.h&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;kfiledialog.h&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;kglobalsettings.h&gt;</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;khtmldefaults.h&gt;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;kinstance.h&gt;</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include &lt;kmainwindow.h&gt;</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include &lt;kmessagebox.h&gt;</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include &lt;knotifyclient.h&gt;</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;knotifydialog.h&gt;</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include &lt;kpopupmenu.h&gt;</span>
<a name="l00042"></a>00042 <span class="preprocessor">#include &lt;kservice.h&gt;</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include &lt;kstandarddirs.h&gt;</span>
<a name="l00044"></a>00044 <span class="preprocessor">#include &lt;kstdaction.h&gt;</span>
<a name="l00045"></a>00045 <span class="preprocessor">#include &lt;ktempfile.h&gt;</span>
<a name="l00046"></a>00046 <span class="preprocessor">#include &lt;ktrader.h&gt;</span>
<a name="l00047"></a>00047 <span class="preprocessor">#include &lt;kio/netaccess.h&gt;</span>
<a name="l00048"></a>00048 <span class="preprocessor">#include &lt;kparts/browserinterface.h&gt;</span>
<a name="l00049"></a>00049 <span class="preprocessor">#include &lt;kparts/genericfactory.h&gt;</span>
<a name="l00050"></a>00050 <span class="preprocessor">#include &lt;kparts/partmanager.h&gt;</span>
<a name="l00051"></a>00051 
<a name="l00052"></a>00052 <span class="preprocessor">#include &lt;qfile.h&gt;</span>
<a name="l00053"></a>00053 <span class="preprocessor">#include &lt;qobjectlist.h&gt;</span>
<a name="l00054"></a>00054 <span class="preprocessor">#include &lt;qstringlist.h&gt;</span>
<a name="l00055"></a>00055 <span class="preprocessor">#include &lt;qtimer.h&gt;</span>
<a name="l00056"></a>00056 <span class="preprocessor">#include &lt;qwidgetlist.h&gt;</span>
<a name="l00057"></a>00057 <span class="preprocessor">#include &lt;private/qucomextra_p.h&gt;</span>
<a name="l00058"></a>00058 
<a name="l00059"></a>00059 <span class="preprocessor">#include &lt;cerrno&gt;</span>
<a name="l00060"></a>00060 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
<a name="l00061"></a>00061 <span class="preprocessor">#include &lt;signal.h&gt;</span>
<a name="l00062"></a>00062 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00063"></a>00063 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l00064"></a>00064 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
<a name="l00065"></a>00065 
<a name="l00066"></a>00066 <span class="preprocessor">#include "aboutdata.h"</span>
<a name="l00067"></a>00067 <span class="preprocessor">#include "actionmanagerimpl.h"</span>
<a name="l00068"></a>00068 <span class="preprocessor">#include "akregator_part.h"</span>
<a name="l00069"></a>00069 <span class="preprocessor">#include "akregator_view.h"</span>
<a name="l00070"></a>00070 <span class="preprocessor">#include "akregatorconfig.h"</span>
<a name="l00071"></a>00071 <span class="preprocessor">#include "articlefilter.h"</span>
<a name="l00072"></a>00072 <span class="preprocessor">#include "articleinterceptor.h"</span>
<a name="l00073"></a>00073 <span class="preprocessor">#include "configdialog.h"</span>
<a name="l00074"></a>00074 <span class="preprocessor">#include "fetchqueue.h"</span>
<a name="l00075"></a>00075 <span class="preprocessor">#include "frame.h"</span>
<a name="l00076"></a>00076 <span class="preprocessor">#include "article.h"</span>
<a name="l00077"></a>00077 <span class="preprocessor">#include "kernel.h"</span>
<a name="l00078"></a>00078 <span class="preprocessor">#include "kcursorsaver.h"</span>
<a name="l00079"></a>00079 <span class="preprocessor">#include "notificationmanager.h"</span>
<a name="l00080"></a>00080 <span class="preprocessor">#include "pageviewer.h"</span>
<a name="l00081"></a>00081 <span class="preprocessor">#include "plugin.h"</span>
<a name="l00082"></a>00082 <span class="preprocessor">#include "pluginmanager.h"</span>
<a name="l00083"></a>00083 <span class="preprocessor">#include "storage.h"</span>
<a name="l00084"></a>00084 <span class="preprocessor">#include "storagefactory.h"</span>
<a name="l00085"></a>00085 <span class="preprocessor">#include "storagefactorydummyimpl.h"</span>
<a name="l00086"></a>00086 <span class="preprocessor">#include "storagefactoryregistry.h"</span>
<a name="l00087"></a>00087 <span class="preprocessor">#include "speechclient.h"</span>
<a name="l00088"></a>00088 <span class="preprocessor">#include "trayicon.h"</span>
<a name="l00089"></a>00089 <span class="preprocessor">#include "tagset.h"</span>
<a name="l00090"></a>00090 <span class="preprocessor">#include "tag.h"</span>
<a name="l00091"></a>00091 
<a name="l00092"></a>00092 <span class="keyword">namespace </span>Akregator {
<a name="l00093"></a>00093 
<a name="l00094"></a>00094 <span class="keyword">typedef</span> KParts::GenericFactory&lt;Part&gt; AkregatorFactory;
<a name="l00095"></a>00095 K_EXPORT_COMPONENT_FACTORY( libakregatorpart, AkregatorFactory )
<a name="l00096"></a>00096 
<a name="l00097"></a>00097 BrowserExtension::BrowserExtension(Part *p, const <span class="keywordtype">char</span> *name)
<a name="l00098"></a>00098         : KParts::BrowserExtension( p, name )
<a name="l00099"></a>00099 {
<a name="l00100"></a>00100     m_part=p;
<a name="l00101"></a>00101 }
<a name="l00102"></a>00102 
<a name="l00103"></a>00103 <span class="keywordtype">void</span> BrowserExtension::saveSettings()
<a name="l00104"></a>00104 {
<a name="l00105"></a>00105     m_part-&gt;saveSettings();
<a name="l00106"></a>00106 }
<a name="l00107"></a>00107 
<a name="l00108"></a>00108 <span class="keyword">class </span>Part::ApplyFiltersInterceptor : <span class="keyword">public</span> ArticleInterceptor
<a name="l00109"></a>00109 {
<a name="l00110"></a>00110     <span class="keyword">public</span>:
<a name="l00111"></a>00111     <span class="keyword">virtual</span> <span class="keywordtype">void</span> processArticle(Article&amp; article)
<a name="l00112"></a>00112     {
<a name="l00113"></a>00113         Filters::ArticleFilterList list = Kernel::self()-&gt;articleFilterList();
<a name="l00114"></a>00114         <span class="keywordflow">for</span> (Filters::ArticleFilterList::ConstIterator it = list.begin(); it != list.end(); ++it)
<a name="l00115"></a>00115             (*it).applyTo(article);
<a name="l00116"></a>00116     }
<a name="l00117"></a>00117 };
<a name="l00118"></a>00118 
<a name="l00119"></a><a class="code" href="classAkregator_1_1Part.html#2d8071b5860a6244da82d697023bcb85">00119</a> Part::Part( QWidget *parentWidget, <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="comment">/*widgetName*/</span>,
<a name="l00120"></a>00120                               QObject *parent, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> QStringList&amp; )
<a name="l00121"></a>00121     : DCOPObject(<span class="stringliteral">"AkregatorIface"</span>)
<a name="l00122"></a>00122        , MyBasePart(parent, name)
<a name="l00123"></a>00123        , m_standardListLoaded(false)
<a name="l00124"></a>00124        , m_shuttingDown(false)
<a name="l00125"></a>00125        , m_mergedPart(0)
<a name="l00126"></a>00126        , m_view(0)
<a name="l00127"></a>00127        , m_backedUpList(false)
<a name="l00128"></a>00128        , m_storage(0)
<a name="l00129"></a>00129 {
<a name="l00130"></a>00130     <span class="comment">// we need an instance</span>
<a name="l00131"></a>00131     setInstance( AkregatorFactory::instance() );
<a name="l00132"></a>00132 
<a name="l00133"></a>00133     <span class="comment">// start knotifyclient if not already started. makes it work for people who doesn't use full kde, according to kmail devels</span>
<a name="l00134"></a>00134     KNotifyClient::startDaemon();
<a name="l00135"></a>00135 
<a name="l00136"></a>00136     m_standardFeedList = KGlobal::dirs()-&gt;saveLocation(<span class="stringliteral">"data"</span>, <span class="stringliteral">"akregator/data"</span>) + <span class="stringliteral">"/feeds.opml"</span>;
<a name="l00137"></a>00137 
<a name="l00138"></a>00138     m_tagSetPath = KGlobal::dirs()-&gt;saveLocation(<span class="stringliteral">"data"</span>, <span class="stringliteral">"akregator/data"</span>) + <span class="stringliteral">"/tagset.xml"</span>;
<a name="l00139"></a>00139 
<a name="l00140"></a>00140     Backend::StorageFactoryDummyImpl* dummyFactory = <span class="keyword">new</span> Backend::StorageFactoryDummyImpl();
<a name="l00141"></a>00141     Backend::StorageFactoryRegistry::self()-&gt;registerFactory(dummyFactory, dummyFactory-&gt;key());
<a name="l00142"></a>00142     <a class="code" href="classAkregator_1_1Part.html#94633a3f2fa84af900d04ad2315da38d" title="loads all Akregator plugins">loadPlugins</a>(); <span class="comment">// FIXME: also unload them!</span>
<a name="l00143"></a>00143 
<a name="l00144"></a>00144     m_storage = 0;
<a name="l00145"></a>00145     Backend::StorageFactory* factory = Backend::StorageFactoryRegistry::self()-&gt;getFactory(Settings::archiveBackend());
<a name="l00146"></a>00146    
<a name="l00147"></a>00147     QStringList storageParams;
<a name="l00148"></a>00148     
<a name="l00149"></a>00149     storageParams.append(QString(<span class="stringliteral">"taggingEnabled=%1"</span>).arg(Settings::showTaggingGUI() ? <span class="stringliteral">"true"</span> : <span class="stringliteral">"false"</span>));
<a name="l00150"></a>00150     
<a name="l00151"></a>00151     <span class="keywordflow">if</span> (factory != 0)
<a name="l00152"></a>00152     {
<a name="l00153"></a>00153         <span class="keywordflow">if</span> (factory-&gt;allowsMultipleWriteAccess())
<a name="l00154"></a>00154         {
<a name="l00155"></a>00155             m_storage = factory-&gt;createStorage(storageParams);
<a name="l00156"></a>00156         } 
<a name="l00157"></a>00157         <span class="keywordflow">else</span>
<a name="l00158"></a>00158         {
<a name="l00159"></a>00159             <span class="keywordflow">if</span> (tryToLock(factory-&gt;name()))
<a name="l00160"></a>00160                 m_storage = factory-&gt;createStorage(storageParams);
<a name="l00161"></a>00161             <span class="keywordflow">else</span> 
<a name="l00162"></a>00162                 m_storage = dummyFactory-&gt;createStorage(storageParams);
<a name="l00163"></a>00163         }
<a name="l00164"></a>00164     }
<a name="l00165"></a>00165     
<a name="l00166"></a>00166 
<a name="l00167"></a>00167     <span class="keywordflow">if</span> (!m_storage) <span class="comment">// Houston, we have a problem</span>
<a name="l00168"></a>00168     {
<a name="l00169"></a>00169         m_storage = Backend::StorageFactoryRegistry::self()-&gt;getFactory(<span class="stringliteral">"dummy"</span>)-&gt;createStorage(storageParams);
<a name="l00170"></a>00170 
<a name="l00171"></a>00171         KMessageBox::error(parentWidget, i18n(<span class="stringliteral">"Unable to load storage backend plugin \"%1\". No feeds are archived."</span>).arg(Settings::archiveBackend()), i18n(<span class="stringliteral">"Plugin error"</span>) );
<a name="l00172"></a>00172     }
<a name="l00173"></a>00173 
<a name="l00174"></a>00174     Filters::ArticleFilterList list;
<a name="l00175"></a>00175     list.readConfig(Settings::self()-&gt;config());
<a name="l00176"></a>00176     Kernel::self()-&gt;setArticleFilterList(list);
<a name="l00177"></a>00177 
<a name="l00178"></a>00178     m_applyFiltersInterceptor = <span class="keyword">new</span> ApplyFiltersInterceptor();
<a name="l00179"></a>00179     ArticleInterceptorManager::self()-&gt;addInterceptor(m_applyFiltersInterceptor);
<a name="l00180"></a>00180 
<a name="l00181"></a>00181     m_storage-&gt;<a class="code" href="classAkregator_1_1Backend_1_1Storage.html#5a798c33904a577305cd775c85bb7712" title="Open storage and prepare it for work.">open</a>(<span class="keyword">true</span>);
<a name="l00182"></a>00182     Kernel::self()-&gt;setStorage(m_storage);
<a name="l00183"></a>00183     Backend::Storage::setInstance(m_storage); <span class="comment">// TODO: kill this one</span>
<a name="l00184"></a>00184 
<a name="l00185"></a>00185     loadTagSet(m_tagSetPath);
<a name="l00186"></a>00186 
<a name="l00187"></a>00187     m_actionManager = <span class="keyword">new</span> <a class="code" href="classAkregator_1_1ActionManagerImpl.html" title="Akregator-specific implementation of the ActionManager interface.">ActionManagerImpl</a>(<span class="keyword">this</span>);
<a name="l00188"></a>00188     ActionManager::setInstance(m_actionManager);
<a name="l00189"></a>00189 
<a name="l00190"></a>00190     m_view = <span class="keyword">new</span> <a class="code" href="classAkregator_1_1View.html" title="This is the main widget of the view, containing tree view, article list, viewer etc...">Akregator::View</a>(<span class="keyword">this</span>, parentWidget, m_actionManager, <span class="stringliteral">"akregator_view"</span>);
<a name="l00191"></a>00191     m_actionManager-&gt;<a class="code" href="classAkregator_1_1ActionManagerImpl.html#64ab5bf30189c83deb3355d93bf214c9">initView</a>(m_view);
<a name="l00192"></a>00192     m_actionManager-&gt;<a class="code" href="classAkregator_1_1ActionManagerImpl.html#02cc2cd45fd9d95d05f934fd2ba7a164">setTagSet</a>(Kernel::self()-&gt;tagSet());
<a name="l00193"></a>00193 
<a name="l00194"></a>00194     m_extension = <span class="keyword">new</span> BrowserExtension(<span class="keyword">this</span>, <span class="stringliteral">"ak_extension"</span>);
<a name="l00195"></a>00195 
<a name="l00196"></a>00196     connect(m_view, SIGNAL(setWindowCaption(<span class="keyword">const</span> QString&amp;)), <span class="keyword">this</span>, SIGNAL(setWindowCaption(<span class="keyword">const</span> QString&amp;)));
<a name="l00197"></a>00197     connect(m_view, SIGNAL(setStatusBarText(<span class="keyword">const</span> QString&amp;)), <span class="keyword">this</span>, SIGNAL(setStatusBarText(<span class="keyword">const</span> QString&amp;)));
<a name="l00198"></a>00198     connect(m_view, SIGNAL(setProgress(<span class="keywordtype">int</span>)), m_extension, SIGNAL(loadingProgress(<span class="keywordtype">int</span>)));
<a name="l00199"></a>00199     connect(m_view, SIGNAL(signalCanceled(<span class="keyword">const</span> QString&amp;)), <span class="keyword">this</span>, SIGNAL(canceled(<span class="keyword">const</span> QString&amp;)));
<a name="l00200"></a>00200     connect(m_view, SIGNAL(signalStarted(KIO::Job*)), <span class="keyword">this</span>, SIGNAL(started(KIO::Job*)));
<a name="l00201"></a>00201     connect(m_view, SIGNAL(signalCompleted()), <span class="keyword">this</span>, SIGNAL(completed()));
<a name="l00202"></a>00202 
<a name="l00203"></a>00203     <span class="comment">// notify the part that this is our internal widget</span>
<a name="l00204"></a>00204     setWidget(m_view);
<a name="l00205"></a>00205 
<a name="l00206"></a>00206     TrayIcon* trayIcon = <span class="keyword">new</span> TrayIcon( <a class="code" href="classAkregator_1_1Part.html#0e81575429660efcb3d9a1216e11f734" title="FIXME: hack to get the tray icon working.">getMainWindow</a>() );
<a name="l00207"></a>00207     TrayIcon::setInstance(trayIcon);
<a name="l00208"></a>00208     m_actionManager-&gt;<a class="code" href="classAkregator_1_1ActionManagerImpl.html#b12df7b786712b0ca48bb59d2f8ce29a">initTrayIcon</a>(trayIcon);
<a name="l00209"></a>00209 
<a name="l00210"></a>00210     connect(trayIcon, SIGNAL(showPart()), <span class="keyword">this</span>, SIGNAL(showPart()));
<a name="l00211"></a>00211 
<a name="l00212"></a>00212     <span class="keywordflow">if</span> ( <a class="code" href="classAkregator_1_1Part.html#36b5c36254f6a862abcda07fa960b1d3">isTrayIconEnabled</a>() )
<a name="l00213"></a>00213     {
<a name="l00214"></a>00214         trayIcon-&gt;show();
<a name="l00215"></a>00215         <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#6e9b31922584f71f31bed46099249279" title="the widget used for notification, normally either the mainwindow or the tray icon...">setWidget</a>(trayIcon, instance());
<a name="l00216"></a>00216     }
<a name="l00217"></a>00217     <span class="keywordflow">else</span>
<a name="l00218"></a>00218         <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#6e9b31922584f71f31bed46099249279" title="the widget used for notification, normally either the mainwindow or the tray icon...">setWidget</a>(<a class="code" href="classAkregator_1_1Part.html#0e81575429660efcb3d9a1216e11f734" title="FIXME: hack to get the tray icon working.">getMainWindow</a>(), instance());
<a name="l00219"></a>00219 
<a name="l00220"></a>00220     connect( trayIcon, SIGNAL(quitSelected()),
<a name="l00221"></a>00221             kapp, SLOT(quit())) ;
<a name="l00222"></a>00222 
<a name="l00223"></a>00223     connect( m_view, SIGNAL(signalUnreadCountChanged(<span class="keywordtype">int</span>)), trayIcon, SLOT(slotSetUnread(<span class="keywordtype">int</span>)) );
<a name="l00224"></a>00224 
<a name="l00225"></a>00225     connect(kapp, SIGNAL(shutDown()), <span class="keyword">this</span>, SLOT(slotOnShutdown()));
<a name="l00226"></a>00226 
<a name="l00227"></a>00227     m_autosaveTimer = <span class="keyword">new</span> QTimer(<span class="keyword">this</span>);
<a name="l00228"></a>00228     connect(m_autosaveTimer, SIGNAL(timeout()), <span class="keyword">this</span>, SLOT(<a class="code" href="classAkregator_1_1Part.html#3f9a8b27fc285314474e499e0756fe5d" title="Saves the standard feed list to it&amp;#39;s default location.">slotSaveFeedList</a>()));
<a name="l00229"></a>00229     m_autosaveTimer-&gt;start(5*60*1000); <span class="comment">// 5 minutes</span>
<a name="l00230"></a>00230 
<a name="l00231"></a>00231     setXMLFile(<span class="stringliteral">"akregator_part.rc"</span>, <span class="keyword">true</span>);
<a name="l00232"></a>00232 
<a name="l00233"></a>00233     initFonts();
<a name="l00234"></a>00234 
<a name="l00235"></a>00235     RSS::FileRetriever::setUserAgent(QString(<span class="stringliteral">"Akregator/%1; librss/remnants"</span>).arg(AKREGATOR_VERSION));
<a name="l00236"></a>00236 }
<a name="l00237"></a>00237 
<a name="l00238"></a><a class="code" href="classAkregator_1_1Part.html#94633a3f2fa84af900d04ad2315da38d">00238</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1Part.html#94633a3f2fa84af900d04ad2315da38d" title="loads all Akregator plugins">Part::loadPlugins</a>()
<a name="l00239"></a>00239 {
<a name="l00240"></a>00240     <span class="comment">// "[X-KDE-akregator-plugintype] == 'storage'"</span>
<a name="l00241"></a>00241     KTrader::OfferList offers = PluginManager::query();
<a name="l00242"></a>00242 
<a name="l00243"></a>00243     <span class="keywordflow">for</span>( KTrader::OfferList::ConstIterator it = offers.begin(), end = offers.end(); it != end; ++it )
<a name="l00244"></a>00244     {
<a name="l00245"></a>00245         Akregator::Plugin* plugin = PluginManager::createFromService(*it);
<a name="l00246"></a>00246         <span class="keywordflow">if</span> (plugin)
<a name="l00247"></a>00247             plugin-&gt;init();
<a name="l00248"></a>00248     }
<a name="l00249"></a>00249 }
<a name="l00250"></a>00250 
<a name="l00251"></a>00251 <span class="keywordtype">void</span> Part::slotOnShutdown()
<a name="l00252"></a>00252 {
<a name="l00253"></a>00253     m_shuttingDown = <span class="keyword">true</span>;
<a name="l00254"></a>00254     
<a name="l00255"></a>00255     <span class="keyword">const</span> QString lockLocation = locateLocal(<span class="stringliteral">"data"</span>, <span class="stringliteral">"akregator/lock"</span>);
<a name="l00256"></a>00256     KSimpleConfig config(lockLocation);
<a name="l00257"></a>00257     config.writeEntry(<span class="stringliteral">"pid"</span>, -1);
<a name="l00258"></a>00258     config.sync();
<a name="l00259"></a>00259 
<a name="l00260"></a>00260     m_autosaveTimer-&gt;stop();
<a name="l00261"></a>00261     <a class="code" href="classAkregator_1_1Part.html#eb07f8478cba4a18a921594548616c61" title="Used to save settings after changing them from configuration dialog.">saveSettings</a>();
<a name="l00262"></a>00262     <a class="code" href="classAkregator_1_1Part.html#3f9a8b27fc285314474e499e0756fe5d" title="Saves the standard feed list to it&amp;#39;s default location.">slotSaveFeedList</a>();
<a name="l00263"></a>00263     saveTagSet(m_tagSetPath);
<a name="l00264"></a>00264     m_view-&gt;<a class="code" href="classAkregator_1_1View.html#eccae36e202581ba65bed296b693ef98">slotOnShutdown</a>();
<a name="l00265"></a>00265     <span class="comment">//delete m_view;</span>
<a name="l00266"></a>00266     <span class="keyword">delete</span> TrayIcon::getInstance();
<a name="l00267"></a>00267     TrayIcon::setInstance(0L);
<a name="l00268"></a>00268     <span class="keyword">delete</span> m_storage;
<a name="l00269"></a>00269     m_storage = 0;
<a name="l00270"></a>00270     <span class="comment">//delete m_actionManager;</span>
<a name="l00271"></a>00271 }
<a name="l00272"></a>00272 
<a name="l00273"></a>00273 <span class="keywordtype">void</span> Part::slotSettingsChanged()
<a name="l00274"></a>00274 {
<a name="l00275"></a>00275     <a class="code" href="classAkregator_1_1NotificationManager.html#ce0606a2f69a9c64eca15707a706241c" title="singleton instance of notification manager">NotificationManager::self</a>()-&gt;setWidget(<a class="code" href="classAkregator_1_1Part.html#36b5c36254f6a862abcda07fa960b1d3">isTrayIconEnabled</a>() ? TrayIcon::getInstance() : <a class="code" href="classAkregator_1_1Part.html#0e81575429660efcb3d9a1216e11f734" title="FIXME: hack to get the tray icon working.">getMainWindow</a>(), instance());
<a name="l00276"></a>00276 
<a name="l00277"></a>00277     RSS::FileRetriever::setUseCache(Settings::useHTMLCache());
<a name="l00278"></a>00278 
<a name="l00279"></a>00279     QStringList fonts;
<a name="l00280"></a>00280     fonts.append(Settings::standardFont());
<a name="l00281"></a>00281     fonts.append(Settings::fixedFont());
<a name="l00282"></a>00282     fonts.append(Settings::sansSerifFont());
<a name="l00283"></a>00283     fonts.append(Settings::serifFont());
<a name="l00284"></a>00284     fonts.append(Settings::standardFont());
<a name="l00285"></a>00285     fonts.append(Settings::standardFont());
<a name="l00286"></a>00286     fonts.append(<span class="stringliteral">"0"</span>);
<a name="l00287"></a>00287     Settings::setFonts(fonts);
<a name="l00288"></a>00288 
<a name="l00289"></a>00289     <span class="keywordflow">if</span> (Settings::minimumFontSize() &gt; Settings::mediumFontSize())
<a name="l00290"></a>00290         Settings::setMediumFontSize(Settings::minimumFontSize());
<a name="l00291"></a>00291     <a class="code" href="classAkregator_1_1Part.html#eb07f8478cba4a18a921594548616c61" title="Used to save settings after changing them from configuration dialog.">saveSettings</a>();
<a name="l00292"></a>00292     m_view-&gt;slotSettingsChanged();
<a name="l00293"></a>00293     emit signalSettingsChanged();
<a name="l00294"></a>00294 }
<a name="l00295"></a><a class="code" href="classAkregator_1_1Part.html#eb07f8478cba4a18a921594548616c61">00295</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1Part.html#eb07f8478cba4a18a921594548616c61" title="Used to save settings after changing them from configuration dialog.">Part::saveSettings</a>()
<a name="l00296"></a>00296 {
<a name="l00297"></a>00297     Kernel::self()-&gt;articleFilterList().writeConfig(Settings::self()-&gt;config());
<a name="l00298"></a>00298     m_view-&gt;<a class="code" href="classAkregator_1_1View.html#524fa260be510a1de14612f9b76d8f2c" title="saves settings.">saveSettings</a>();
<a name="l00299"></a>00299 }
<a name="l00300"></a>00300 
<a name="l00301"></a><a class="code" href="classAkregator_1_1Part.html#b3ca60608631ee479132ed2413c19c3f">00301</a> <a class="code" href="classAkregator_1_1Part.html#b3ca60608631ee479132ed2413c19c3f" title="Destructor.">Part::~Part</a>()
<a name="l00302"></a>00302 {
<a name="l00303"></a>00303     kdDebug() &lt;&lt; <span class="stringliteral">"Part::~Part() enter"</span> &lt;&lt; endl;
<a name="l00304"></a>00304     <span class="keywordflow">if</span> (!m_shuttingDown)
<a name="l00305"></a>00305         slotOnShutdown();
<a name="l00306"></a>00306     kdDebug() &lt;&lt; <span class="stringliteral">"Part::~Part(): leaving"</span> &lt;&lt; endl;
<a name="l00307"></a>00307     ArticleInterceptorManager::self()-&gt;removeInterceptor(m_applyFiltersInterceptor);
<a name="l00308"></a>00308     <span class="keyword">delete</span> m_applyFiltersInterceptor;
<a name="l00309"></a>00309 }
<a name="l00310"></a>00310 
<a name="l00311"></a><a class="code" href="classAkregator_1_1Part.html#b01bcb0bb5379505b0511d0147c1093b">00311</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1Part.html#b01bcb0bb5379505b0511d0147c1093b" title="This method is called when this app is restored.">Part::readProperties</a>(KConfig* config)
<a name="l00312"></a>00312 {
<a name="l00313"></a>00313     m_backedUpList = <span class="keyword">false</span>;
<a name="l00314"></a>00314     <a class="code" href="classAkregator_1_1Part.html#923a4d42cca7cd990d48979df6978dc5" title="Opens standard feedlist.">openStandardFeedList</a>();
<a name="l00315"></a>00315 
<a name="l00316"></a>00316     <span class="keywordflow">if</span>(m_view)
<a name="l00317"></a>00317         m_view-&gt;<a class="code" href="classAkregator_1_1View.html#d3d897b1845add5b0619fa5f1ca59a1e" title="session management">readProperties</a>(config);
<a name="l00318"></a>00318 }
<a name="l00319"></a>00319 
<a name="l00320"></a><a class="code" href="classAkregator_1_1Part.html#8c59c2eea11098de5d3f2a97f9a964af">00320</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1Part.html#8c59c2eea11098de5d3f2a97f9a964af" title="This method is called when it is time for the app to save its properties for session...">Part::saveProperties</a>(KConfig* config)
<a name="l00321"></a>00321 {
<a name="l00322"></a>00322     <span class="keywordflow">if</span> (m_view)
<a name="l00323"></a>00323     {
<a name="l00324"></a>00324         <a class="code" href="classAkregator_1_1Part.html#3f9a8b27fc285314474e499e0756fe5d" title="Saves the standard feed list to it&amp;#39;s default location.">slotSaveFeedList</a>();
<a name="l00325"></a>00325         m_view-&gt;<a class="code" href="classAkregator_1_1View.html#58c4d771489ecef0e452146a764e08ee">saveProperties</a>(config);
<a name="l00326"></a>00326     }
<a name="l00327"></a>00327 }
<a name="l00328"></a>00328 
<a name="l00329"></a><a class="code" href="classAkregator_1_1Part.html#43a1641a42836ccb31bb92dbd0692fc6">00329</a> <span class="keywordtype">bool</span> <a class="code" href="classAkregator_1_1Part.html#43a1641a42836ccb31bb92dbd0692fc6" title="Opens feedlist.">Part::openURL</a>(<span class="keyword">const</span> KURL&amp; url)
<a name="l00330"></a>00330 {
<a name="l00331"></a>00331     m_file = url.path();
<a name="l00332"></a>00332     <span class="keywordflow">return</span> <a class="code" href="classAkregator_1_1Part.html#0512cca60c2994722f5f230b158a9b9c" title="This must be implemented by each part.">openFile</a>();
<a name="l00333"></a>00333 }
<a name="l00334"></a>00334 
<a name="l00335"></a><a class="code" href="classAkregator_1_1Part.html#923a4d42cca7cd990d48979df6978dc5">00335</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1Part.html#923a4d42cca7cd990d48979df6978dc5" title="Opens standard feedlist.">Part::openStandardFeedList</a>()
<a name="l00336"></a>00336 {
<a name="l00337"></a>00337     <span class="keywordflow">if</span> ( !m_standardFeedList.isEmpty() &amp;&amp; <a class="code" href="classAkregator_1_1Part.html#43a1641a42836ccb31bb92dbd0692fc6" title="Opens feedlist.">openURL</a>(m_standardFeedList) )
<a name="l00338"></a>00338         m_standardListLoaded = <span class="keyword">true</span>;
<a name="l00339"></a>00339 }
<a name="l00340"></a>00340 
<a name="l00341"></a>00341 QDomDocument Part::createDefaultFeedList()
<a name="l00342"></a>00342 {
<a name="l00343"></a>00343     QDomDocument doc;
<a name="l00344"></a>00344     QDomProcessingInstruction z = doc.createProcessingInstruction(<span class="stringliteral">"xml"</span>,<span class="stringliteral">"version=\"1.0\" encoding=\"UTF-8\""</span>);
<a name="l00345"></a>00345     doc.appendChild( z );
<a name="l00346"></a>00346 
<a name="l00347"></a>00347     QDomElement root = doc.createElement( <span class="stringliteral">"opml"</span> );
<a name="l00348"></a>00348     root.setAttribute(<span class="stringliteral">"version"</span>,<span class="stringliteral">"1.0"</span>);
<a name="l00349"></a>00349     doc.appendChild( root );
<a name="l00350"></a>00350 
<a name="l00351"></a>00351     QDomElement head = doc.createElement( <span class="stringliteral">"head"</span> );
<a name="l00352"></a>00352     root.appendChild(head);
<a name="l00353"></a>00353 
<a name="l00354"></a>00354     QDomElement text = doc.createElement( <span class="stringliteral">"text"</span> );
<a name="l00355"></a>00355     text.appendChild(doc.createTextNode(i18n(<span class="stringliteral">"Feeds"</span>)));
<a name="l00356"></a>00356     head.appendChild(text);
<a name="l00357"></a>00357 
<a name="l00358"></a>00358     QDomElement body = doc.createElement( <span class="stringliteral">"body"</span> );
<a name="l00359"></a>00359     root.appendChild(body);
<a name="l00360"></a>00360 
<a name="l00361"></a>00361     QDomElement mainFolder = doc.createElement( <span class="stringliteral">"outline"</span> );
<a name="l00362"></a>00362     mainFolder.setAttribute(<span class="stringliteral">"text"</span>,<span class="stringliteral">"KDE"</span>);
<a name="l00363"></a>00363     body.appendChild(mainFolder);
<a name="l00364"></a>00364 
<a name="l00365"></a>00365     QDomElement ak = doc.createElement( <span class="stringliteral">"outline"</span> );
<a name="l00366"></a>00366     ak.setAttribute(<span class="stringliteral">"text"</span>,i18n(<span class="stringliteral">"Akregator News"</span>));
<a name="l00367"></a>00367     ak.setAttribute(<span class="stringliteral">"xmlUrl"</span>,<span class="stringliteral">"http://akregator.sf.net/rss2.php"</span>);
<a name="l00368"></a>00368     mainFolder.appendChild(ak);
<a name="l00369"></a>00369 
<a name="l00370"></a>00370     QDomElement akb = doc.createElement( <span class="stringliteral">"outline"</span> );
<a name="l00371"></a>00371     akb.setAttribute(<span class="stringliteral">"text"</span>,i18n(<span class="stringliteral">"Akregator Blog"</span>));
<a name="l00372"></a>00372     akb.setAttribute(<span class="stringliteral">"xmlUrl"</span>,<span class="stringliteral">"http://akregator.pwsp.net/blog/?feed=rss2"</span>);
<a name="l00373"></a>00373     mainFolder.appendChild(akb);
<a name="l00374"></a>00374 
<a name="l00375"></a>00375     QDomElement dot = doc.createElement( <span class="stringliteral">"outline"</span> );
<a name="l00376"></a>00376     dot.setAttribute(<span class="stringliteral">"text"</span>,i18n(<span class="stringliteral">"KDE Dot News"</span>));
<a name="l00377"></a>00377     dot.setAttribute(<span class="stringliteral">"xmlUrl"</span>,<span class="stringliteral">"http://www.kde.org/dotkdeorg.rdf"</span>);
<a name="l00378"></a>00378     mainFolder.appendChild(dot);
<a name="l00379"></a>00379 
<a name="l00380"></a>00380     QDomElement plan = doc.createElement( <span class="stringliteral">"outline"</span> );
<a name="l00381"></a>00381     plan.setAttribute(<span class="stringliteral">"text"</span>,i18n(<span class="stringliteral">"Planet KDE"</span>));
<a name="l00382"></a>00382     plan.setAttribute(<span class="stringliteral">"xmlUrl"</span>,<span class="stringliteral">"http://planetkde.org/rss20.xml"</span>);
<a name="l00383"></a>00383     mainFolder.appendChild(plan);
<a name="l00384"></a>00384 
<a name="l00385"></a>00385     QDomElement apps = doc.createElement( <span class="stringliteral">"outline"</span> );
<a name="l00386"></a>00386     apps.setAttribute(<span class="stringliteral">"text"</span>,i18n(<span class="stringliteral">"KDE Apps"</span>));
<a name="l00387"></a>00387     apps.setAttribute(<span class="stringliteral">"xmlUrl"</span>,<span class="stringliteral">"http://www.kde.org/dot/kde-apps-content.rdf"</span>);
<a name="l00388"></a>00388     mainFolder.appendChild(apps);
<a name="l00389"></a>00389 
<a name="l00390"></a>00390     QDomElement look = doc.createElement( <span class="stringliteral">"outline"</span> );
<a name="l00391"></a>00391     look.setAttribute(<span class="stringliteral">"text"</span>,i18n(<span class="stringliteral">"KDE Look"</span>));
<a name="l00392"></a>00392     look.setAttribute(<span class="stringliteral">"xmlUrl"</span>,<span class="stringliteral">"http://www.kde.org/kde-look-content.rdf"</span>);
<a name="l00393"></a>00393     mainFolder.appendChild(look);
<a name="l00394"></a>00394 
<a name="l00395"></a>00395     <span class="keywordflow">return</span> doc;
<a name="l00396"></a>00396 }
<a name="l00397"></a>00397 
<a name="l00398"></a><a class="code" href="classAkregator_1_1Part.html#0512cca60c2994722f5f230b158a9b9c">00398</a> <span class="keywordtype">bool</span> <a class="code" href="classAkregator_1_1Part.html#0512cca60c2994722f5f230b158a9b9c" title="This must be implemented by each part.">Part::openFile</a>()
<a name="l00399"></a>00399 {
<a name="l00400"></a>00400     emit setStatusBarText(i18n(<span class="stringliteral">"Opening Feed List..."</span>) );
<a name="l00401"></a>00401 
<a name="l00402"></a>00402     QString str;
<a name="l00403"></a>00403     <span class="comment">// m_file is always local so we can use QFile on it</span>
<a name="l00404"></a>00404     QFile file(m_file);
<a name="l00405"></a>00405 
<a name="l00406"></a>00406     <span class="keywordtype">bool</span> fileExists = file.exists();
<a name="l00407"></a>00407     QString listBackup = m_storage-&gt;<a class="code" href="classAkregator_1_1Backend_1_1Storage.html#3d7e2b3514f58496e96eade7c7fbf6de">restoreFeedList</a>();
<a name="l00408"></a>00408      
<a name="l00409"></a>00409     QDomDocument doc;
<a name="l00410"></a>00410 
<a name="l00411"></a>00411     <span class="keywordflow">if</span> (!fileExists)
<a name="l00412"></a>00412     {
<a name="l00413"></a>00413         doc = createDefaultFeedList();
<a name="l00414"></a>00414     }
<a name="l00415"></a>00415     <span class="keywordflow">else</span> 
<a name="l00416"></a>00416     {
<a name="l00417"></a>00417         <span class="keywordflow">if</span> (file.open(IO_ReadOnly))
<a name="l00418"></a>00418         {
<a name="l00419"></a>00419             <span class="comment">// Read OPML feeds list and build QDom tree.</span>
<a name="l00420"></a>00420             QTextStream stream(&amp;file);
<a name="l00421"></a>00421             stream.setEncoding(QTextStream::UnicodeUTF8); <span class="comment">// FIXME not all opmls are in utf8</span>
<a name="l00422"></a>00422             str = stream.read();
<a name="l00423"></a>00423             file.close();
<a name="l00424"></a>00424         }
<a name="l00425"></a>00425 
<a name="l00426"></a>00426         <span class="keywordflow">if</span> (!doc.setContent(str))
<a name="l00427"></a>00427         {
<a name="l00428"></a>00428 
<a name="l00429"></a>00429             <span class="keywordflow">if</span> (file.size() &gt; 0) <span class="comment">// don't backup empty files </span>
<a name="l00430"></a>00430             {
<a name="l00431"></a>00431                 QString backup = m_file + <span class="stringliteral">"-backup."</span> +  QString::number(QDateTime::currentDateTime().toTime_t());
<a name="l00432"></a>00432         
<a name="l00433"></a>00433                 copyFile(backup);
<a name="l00434"></a>00434         
<a name="l00435"></a>00435                 KMessageBox::error(m_view, i18n(<span class="stringliteral">"&lt;qt&gt;The standard feed list is corrupted (invalid XML). A backup was created:&lt;p&gt;&lt;b&gt;%2&lt;/b&gt;&lt;/p&gt;&lt;/qt&gt;"</span>).arg(backup), i18n(<span class="stringliteral">"XML Parsing Error"</span>) );
<a name="l00436"></a>00436             }
<a name="l00437"></a>00437 
<a name="l00438"></a>00438             <span class="keywordflow">if</span> (!doc.setContent(listBackup))
<a name="l00439"></a>00439                 doc = createDefaultFeedList();
<a name="l00440"></a>00440         }
<a name="l00441"></a>00441     }
<a name="l00442"></a>00442 
<a name="l00443"></a>00443     <span class="keywordflow">if</span> (!m_view-&gt;<a class="code" href="classAkregator_1_1View.html#2f6eb960fdea851e5522a28f54d922b7" title="Parse OPML presentation of feeds and read in articles archive, if present.">loadFeeds</a>(doc))
<a name="l00444"></a>00444     {
<a name="l00445"></a>00445         <span class="keywordflow">if</span> (file.size() &gt; 0) <span class="comment">// don't backup empty files </span>
<a name="l00446"></a>00446         {
<a name="l00447"></a>00447             QString backup = m_file + <span class="stringliteral">"-backup."</span> +  QString::number(QDateTime::currentDateTime().toTime_t());
<a name="l00448"></a>00448             copyFile(backup);
<a name="l00449"></a>00449 
<a name="l00450"></a>00450             KMessageBox::error(m_view, i18n(<span class="stringliteral">"&lt;qt&gt;The standard feed list is corrupted (no valid OPML). A backup was created:&lt;p&gt;&lt;b&gt;%2&lt;/b&gt;&lt;/p&gt;&lt;/qt&gt;"</span>).arg(backup), i18n(<span class="stringliteral">"OPML Parsing Error"</span>) );
<a name="l00451"></a>00451         }
<a name="l00452"></a>00452         m_view-&gt;<a class="code" href="classAkregator_1_1View.html#2f6eb960fdea851e5522a28f54d922b7" title="Parse OPML presentation of feeds and read in articles archive, if present.">loadFeeds</a>(createDefaultFeedList());
<a name="l00453"></a>00453     }
<a name="l00454"></a>00454 
<a name="l00455"></a>00455     emit setStatusBarText(QString::null);
<a name="l00456"></a>00456     
<a name="l00457"></a>00457 
<a name="l00458"></a>00458     <span class="keywordflow">if</span>( Settings::markAllFeedsReadOnStartup() )
<a name="l00459"></a>00459         m_view-&gt;<a class="code" href="classAkregator_1_1View.html#f4e3d512d568bee3f2d76c758318e325" title="marks all articles in all feeds in the tree as read">slotMarkAllFeedsRead</a>();
<a name="l00460"></a>00460 
<a name="l00461"></a>00461     <span class="keywordflow">if</span> (Settings::fetchOnStartup())
<a name="l00462"></a>00462             m_view-&gt;<a class="code" href="classAkregator_1_1View.html#d9ecc39ee3204193d8d082b6fdbffa46" title="starts fetching of all feeds in the tree">slotFetchAllFeeds</a>();
<a name="l00463"></a>00463 
<a name="l00464"></a>00464     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00465"></a>00465 }
<a name="l00466"></a>00466 
<a name="l00467"></a><a class="code" href="classAkregator_1_1Part.html#3f9a8b27fc285314474e499e0756fe5d">00467</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1Part.html#3f9a8b27fc285314474e499e0756fe5d" title="Saves the standard feed list to it&amp;#39;s default location.">Part::slotSaveFeedList</a>()
<a name="l00468"></a>00468 {
<a name="l00469"></a>00469     <span class="comment">// don't save to the standard feed list, when it wasn't completely loaded before</span>
<a name="l00470"></a>00470     <span class="keywordflow">if</span> (!m_standardListLoaded)
<a name="l00471"></a>00471         <span class="keywordflow">return</span>;
<a name="l00472"></a>00472 
<a name="l00473"></a>00473     <span class="comment">// the first time we overwrite the feed list, we create a backup</span>
<a name="l00474"></a>00474     <span class="keywordflow">if</span> (!m_backedUpList)
<a name="l00475"></a>00475     {
<a name="l00476"></a>00476         QString backup = m_file + <span class="stringliteral">"~"</span>;
<a name="l00477"></a>00477 
<a name="l00478"></a>00478         <span class="keywordflow">if</span> (copyFile(backup))
<a name="l00479"></a>00479             m_backedUpList = <span class="keyword">true</span>;
<a name="l00480"></a>00480     }
<a name="l00481"></a>00481 
<a name="l00482"></a>00482     QString xmlStr = m_view-&gt;<a class="code" href="classAkregator_1_1View.html#62e6a6a32a5ce89b98b467b511492d39">feedListToOPML</a>().toString();
<a name="l00483"></a>00483     m_storage-&gt;<a class="code" href="classAkregator_1_1Backend_1_1Storage.html#7f975545e8a3fceec82a5c584e08c9bc" title="stores the feed list in the storage backend.">storeFeedList</a>(xmlStr);
<a name="l00484"></a>00484 
<a name="l00485"></a>00485     QFile file(m_file);
<a name="l00486"></a>00486     <span class="keywordflow">if</span> (file.open(IO_WriteOnly) == <span class="keyword">false</span>)
<a name="l00487"></a>00487     {
<a name="l00488"></a>00488         <span class="comment">//FIXME: allow to save the feedlist into different location -tpr 20041118</span>
<a name="l00489"></a>00489         KMessageBox::error(m_view, i18n(<span class="stringliteral">"Access denied: cannot save feed list (%1)"</span>).arg(m_file), i18n(<span class="stringliteral">"Write error"</span>) );
<a name="l00490"></a>00490         <span class="keywordflow">return</span>;
<a name="l00491"></a>00491     }
<a name="l00492"></a>00492 
<a name="l00493"></a>00493     <span class="comment">// use QTextStream to dump the text to the file</span>
<a name="l00494"></a>00494     QTextStream stream(&amp;file);
<a name="l00495"></a>00495     stream.setEncoding(QTextStream::UnicodeUTF8);
<a name="l00496"></a>00496 
<a name="l00497"></a>00497     <span class="comment">// Write OPML data file.</span>
<a name="l00498"></a>00498     <span class="comment">// Archive data files are saved elsewhere.</span>
<a name="l00499"></a>00499 
<a name="l00500"></a>00500     stream &lt;&lt; xmlStr &lt;&lt; endl;
<a name="l00501"></a>00501 
<a name="l00502"></a>00502     file.close();
<a name="l00503"></a>00503 }
<a name="l00504"></a>00504 
<a name="l00505"></a><a class="code" href="classAkregator_1_1Part.html#36b5c36254f6a862abcda07fa960b1d3">00505</a> <span class="keywordtype">bool</span> <a class="code" href="classAkregator_1_1Part.html#36b5c36254f6a862abcda07fa960b1d3">Part::isTrayIconEnabled</a>()<span class="keyword"> const</span>
<a name="l00506"></a>00506 <span class="keyword"></span>{
<a name="l00507"></a>00507     <span class="keywordflow">return</span> Settings::showTrayIcon();
<a name="l00508"></a>00508 }
<a name="l00509"></a>00509 
<a name="l00510"></a><a class="code" href="classAkregator_1_1Part.html#28339e454f049229ae862f9b62f77b4b">00510</a> <span class="keywordtype">bool</span> <a class="code" href="classAkregator_1_1Part.html#28339e454f049229ae862f9b62f77b4b" title="merges a nested part&amp;#39;s GUI into the gui of this part">Part::mergePart</a>(KParts::Part* part)
<a name="l00511"></a>00511 {
<a name="l00512"></a>00512     <span class="keywordflow">if</span> (part != m_mergedPart)
<a name="l00513"></a>00513     {
<a name="l00514"></a>00514         <span class="keywordflow">if</span> (!factory())
<a name="l00515"></a>00515         {
<a name="l00516"></a>00516           <span class="keywordflow">if</span> (m_mergedPart)
<a name="l00517"></a>00517             removeChildClient(m_mergedPart);
<a name="l00518"></a>00518           <span class="keywordflow">else</span>
<a name="l00519"></a>00519             insertChildClient(part);
<a name="l00520"></a>00520         }
<a name="l00521"></a>00521         <span class="keywordflow">else</span>
<a name="l00522"></a>00522         {
<a name="l00523"></a>00523           <span class="keywordflow">if</span> (m_mergedPart) {
<a name="l00524"></a>00524             factory()-&gt;removeClient(m_mergedPart);
<a name="l00525"></a>00525             <span class="keywordflow">if</span> (childClients()-&gt;containsRef(m_mergedPart))
<a name="l00526"></a>00526               removeChildClient(m_mergedPart);
<a name="l00527"></a>00527           }
<a name="l00528"></a>00528           <span class="keywordflow">if</span> (part)
<a name="l00529"></a>00529             factory()-&gt;addClient(part);
<a name="l00530"></a>00530         }
<a name="l00531"></a>00531 
<a name="l00532"></a>00532         m_mergedPart = part;
<a name="l00533"></a>00533     }
<a name="l00534"></a>00534     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00535"></a>00535 }
<a name="l00536"></a>00536 
<a name="l00537"></a><a class="code" href="classAkregator_1_1Part.html#0e81575429660efcb3d9a1216e11f734">00537</a> QWidget* <a class="code" href="classAkregator_1_1Part.html#0e81575429660efcb3d9a1216e11f734" title="FIXME: hack to get the tray icon working.">Part::getMainWindow</a>()
<a name="l00538"></a>00538 {
<a name="l00539"></a>00539     <span class="comment">// this is a dirty fix to get the main window used for the tray icon</span>
<a name="l00540"></a>00540     
<a name="l00541"></a>00541     QWidgetList *l = kapp-&gt;topLevelWidgets();
<a name="l00542"></a>00542     QWidgetListIt it( *l );
<a name="l00543"></a>00543     QWidget *wid;
<a name="l00544"></a>00544 
<a name="l00545"></a>00545     <span class="comment">// check if there is an akregator main window</span>
<a name="l00546"></a>00546     <span class="keywordflow">while</span> ( (wid = it.current()) != 0 )
<a name="l00547"></a>00547     {
<a name="l00548"></a>00548         ++it;
<a name="l00549"></a>00549         <span class="comment">//kdDebug() &lt;&lt; "win name: " &lt;&lt; wid-&gt;name() &lt;&lt; endl;</span>
<a name="l00550"></a>00550         <span class="keywordflow">if</span> (QString(wid-&gt;name()) == <span class="stringliteral">"akregator_mainwindow"</span>)
<a name="l00551"></a>00551         {
<a name="l00552"></a>00552             <span class="keyword">delete</span> l;
<a name="l00553"></a>00553             <span class="keywordflow">return</span> wid;
<a name="l00554"></a>00554         }
<a name="l00555"></a>00555     }
<a name="l00556"></a>00556     <span class="comment">// if not, check for kontact main window</span>
<a name="l00557"></a>00557     QWidgetListIt it2( *l );
<a name="l00558"></a>00558     <span class="keywordflow">while</span> ( (wid = it2.current()) != 0 )
<a name="l00559"></a>00559     {
<a name="l00560"></a>00560         ++it2;
<a name="l00561"></a>00561         <span class="keywordflow">if</span> (QString(wid-&gt;name()).startsWith(<span class="stringliteral">"kontact-mainwindow"</span>))
<a name="l00562"></a>00562         {
<a name="l00563"></a>00563             <span class="keyword">delete</span> l;
<a name="l00564"></a>00564             <span class="keywordflow">return</span> wid;
<a name="l00565"></a>00565         }
<a name="l00566"></a>00566     }
<a name="l00567"></a>00567     <span class="keyword">delete</span> l;
<a name="l00568"></a>00568     <span class="keywordflow">return</span> 0;
<a name="l00569"></a>00569 }
<a name="l00570"></a>00570 
<a name="l00571"></a>00571 <span class="keywordtype">void</span> Part::loadTagSet(<span class="keyword">const</span> QString&amp; path)
<a name="l00572"></a>00572 {
<a name="l00573"></a>00573     QDomDocument doc;
<a name="l00574"></a>00574 
<a name="l00575"></a>00575     QFile file(path);
<a name="l00576"></a>00576     <span class="keywordflow">if</span> (file.open(IO_ReadOnly))
<a name="l00577"></a>00577     {
<a name="l00578"></a>00578         doc.setContent(file.readAll());
<a name="l00579"></a>00579         file.close();
<a name="l00580"></a>00580     }
<a name="l00581"></a>00581     <span class="comment">// if we can't load the tagset from the xml file, check for the backup in the backend</span>
<a name="l00582"></a>00582     <span class="keywordflow">if</span> (doc.isNull())
<a name="l00583"></a>00583     {
<a name="l00584"></a>00584         doc.setContent(m_storage-&gt;restoreTagSet());
<a name="l00585"></a>00585     }
<a name="l00586"></a>00586 
<a name="l00587"></a>00587     <span class="keywordflow">if</span> (!doc.isNull())
<a name="l00588"></a>00588     {
<a name="l00589"></a>00589         Kernel::self()-&gt;tagSet()-&gt;readFromXML(doc);
<a name="l00590"></a>00590     }
<a name="l00591"></a>00591     <span class="keywordflow">else</span>
<a name="l00592"></a>00592     {
<a name="l00593"></a>00593         Kernel::self()-&gt;tagSet()-&gt;insert(Tag(<span class="stringliteral">"http://akregator.sf.net/tags/Interesting"</span>, i18n(<span class="stringliteral">"Interesting"</span>)));
<a name="l00594"></a>00594     }
<a name="l00595"></a>00595 }
<a name="l00596"></a>00596 
<a name="l00597"></a>00597 <span class="keywordtype">void</span> Part::saveTagSet(<span class="keyword">const</span> QString&amp; path)
<a name="l00598"></a>00598 {
<a name="l00599"></a>00599     QString xmlStr = Kernel::self()-&gt;tagSet()-&gt;toXML().toString();
<a name="l00600"></a>00600 
<a name="l00601"></a>00601     m_storage-&gt;storeTagSet(xmlStr);
<a name="l00602"></a>00602     
<a name="l00603"></a>00603     QFile file(path);
<a name="l00604"></a>00604     
<a name="l00605"></a>00605     <span class="keywordflow">if</span> ( file.open(IO_WriteOnly) )
<a name="l00606"></a>00606     {
<a name="l00607"></a>00607 
<a name="l00608"></a>00608         QTextStream stream(&amp;file);
<a name="l00609"></a>00609         stream.setEncoding(QTextStream::UnicodeUTF8);
<a name="l00610"></a>00610         stream &lt;&lt; xmlStr &lt;&lt; <span class="stringliteral">"\n"</span>;
<a name="l00611"></a>00611         file.close();
<a name="l00612"></a>00612     }
<a name="l00613"></a>00613 }
<a name="l00614"></a>00614 
<a name="l00615"></a>00615 <span class="keywordtype">void</span> Part::importFile(<span class="keyword">const</span> KURL&amp; url)
<a name="l00616"></a>00616 {
<a name="l00617"></a>00617     QString filename;
<a name="l00618"></a>00618 
<a name="l00619"></a>00619     <span class="keywordtype">bool</span> isRemote = <span class="keyword">false</span>;
<a name="l00620"></a>00620 
<a name="l00621"></a>00621     <span class="keywordflow">if</span> (url.isLocalFile())
<a name="l00622"></a>00622         filename = url.path();
<a name="l00623"></a>00623     <span class="keywordflow">else</span>
<a name="l00624"></a>00624     {
<a name="l00625"></a>00625         isRemote = <span class="keyword">true</span>;
<a name="l00626"></a>00626 
<a name="l00627"></a>00627         <span class="keywordflow">if</span> (!KIO::NetAccess::download(url, filename, m_view) )
<a name="l00628"></a>00628         {
<a name="l00629"></a>00629             KMessageBox::error(m_view, KIO::NetAccess::lastErrorString() );
<a name="l00630"></a>00630             <span class="keywordflow">return</span>;
<a name="l00631"></a>00631         }
<a name="l00632"></a>00632     }
<a name="l00633"></a>00633 
<a name="l00634"></a>00634     QFile file(filename);
<a name="l00635"></a>00635     <span class="keywordflow">if</span> (file.open(IO_ReadOnly))
<a name="l00636"></a>00636     {
<a name="l00637"></a>00637         <span class="comment">// Read OPML feeds list and build QDom tree.</span>
<a name="l00638"></a>00638         QDomDocument doc;
<a name="l00639"></a>00639         <span class="keywordflow">if</span> (doc.setContent(file.readAll()))
<a name="l00640"></a>00640             m_view-&gt;importFeeds(doc);
<a name="l00641"></a>00641         <span class="keywordflow">else</span>
<a name="l00642"></a>00642             KMessageBox::error(m_view, i18n(<span class="stringliteral">"Could not import the file %1 (no valid OPML)"</span>).arg(filename), i18n(<span class="stringliteral">"OPML Parsing Error"</span>) );
<a name="l00643"></a>00643     }
<a name="l00644"></a>00644     <span class="keywordflow">else</span>
<a name="l00645"></a>00645         KMessageBox::error(m_view, i18n(<span class="stringliteral">"The file %1 could not be read, check if it exists or if it is readable for the current user."</span>).arg(filename), i18n(<span class="stringliteral">"Read Error"</span>));
<a name="l00646"></a>00646 
<a name="l00647"></a>00647     <span class="keywordflow">if</span> (isRemote)
<a name="l00648"></a>00648         KIO::NetAccess::removeTempFile(filename);
<a name="l00649"></a>00649 }
<a name="l00650"></a>00650 
<a name="l00651"></a>00651 <span class="keywordtype">void</span> Part::exportFile(<span class="keyword">const</span> KURL&amp; url)
<a name="l00652"></a>00652 {
<a name="l00653"></a>00653     <span class="keywordflow">if</span> (url.isLocalFile())
<a name="l00654"></a>00654     {
<a name="l00655"></a>00655         QFile file(url.path());
<a name="l00656"></a>00656 
<a name="l00657"></a>00657         <span class="keywordflow">if</span> ( file.exists() &amp;&amp;
<a name="l00658"></a>00658                 KMessageBox::questionYesNo(m_view,
<a name="l00659"></a>00659             i18n(<span class="stringliteral">"The file %1 already exists; do you want to overwrite it?"</span>).arg(file.name()),
<a name="l00660"></a>00660             i18n(<span class="stringliteral">"Export"</span>),
<a name="l00661"></a>00661             i18n(<span class="stringliteral">"Overwrite"</span>),
<a name="l00662"></a>00662             KStdGuiItem::cancel()) == KMessageBox::No )
<a name="l00663"></a>00663             <span class="keywordflow">return</span>;
<a name="l00664"></a>00664 
<a name="l00665"></a>00665         <span class="keywordflow">if</span> ( !file.open(IO_WriteOnly) )
<a name="l00666"></a>00666         {
<a name="l00667"></a>00667             KMessageBox::error(m_view, i18n(<span class="stringliteral">"Access denied: cannot write to file %1"</span>).arg(file.name()), i18n(<span class="stringliteral">"Write Error"</span>) );
<a name="l00668"></a>00668             <span class="keywordflow">return</span>;
<a name="l00669"></a>00669         }
<a name="l00670"></a>00670 
<a name="l00671"></a>00671         QTextStream stream(&amp;file);
<a name="l00672"></a>00672         stream.setEncoding(QTextStream::UnicodeUTF8);
<a name="l00673"></a>00673 
<a name="l00674"></a>00674         stream &lt;&lt; m_view-&gt;feedListToOPML().toString() &lt;&lt; <span class="stringliteral">"\n"</span>;
<a name="l00675"></a>00675         file.close();
<a name="l00676"></a>00676     }
<a name="l00677"></a>00677     <span class="keywordflow">else</span>
<a name="l00678"></a>00678     {
<a name="l00679"></a>00679         KTempFile tmpfile;
<a name="l00680"></a>00680         tmpfile.setAutoDelete(<span class="keyword">true</span>);
<a name="l00681"></a>00681 
<a name="l00682"></a>00682         QTextStream stream(tmpfile.file());
<a name="l00683"></a>00683         stream.setEncoding(QTextStream::UnicodeUTF8);
<a name="l00684"></a>00684 
<a name="l00685"></a>00685         stream &lt;&lt; m_view-&gt;feedListToOPML().toString() &lt;&lt; <span class="stringliteral">"\n"</span>;
<a name="l00686"></a>00686         tmpfile.close();
<a name="l00687"></a>00687 
<a name="l00688"></a>00688         <span class="keywordflow">if</span> (!KIO::NetAccess::upload(tmpfile.name(), url, m_view))
<a name="l00689"></a>00689             KMessageBox::error(m_view, KIO::NetAccess::lastErrorString() );
<a name="l00690"></a>00690     }
<a name="l00691"></a>00691 }
<a name="l00692"></a>00692 
<a name="l00693"></a>00693 <span class="keywordtype">void</span> Part::fileImport()
<a name="l00694"></a>00694 {
<a name="l00695"></a>00695     KURL url = KFileDialog::getOpenURL( QString::null,
<a name="l00696"></a>00696                         <span class="stringliteral">"*.opml *.xml|"</span> + i18n(<span class="stringliteral">"OPML Outlines (*.opml, *.xml)"</span>)
<a name="l00697"></a>00697                         +<span class="stringliteral">"\n*|"</span> + i18n(<span class="stringliteral">"All Files"</span>) );
<a name="l00698"></a>00698 
<a name="l00699"></a>00699     <span class="keywordflow">if</span> (!url.isEmpty())
<a name="l00700"></a>00700         importFile(url);
<a name="l00701"></a>00701 }
<a name="l00702"></a>00702 
<a name="l00703"></a>00703     <span class="keywordtype">void</span> Part::fileExport()
<a name="l00704"></a>00704 {
<a name="l00705"></a>00705     KURL url= KFileDialog::getSaveURL( QString::null,
<a name="l00706"></a>00706                         <span class="stringliteral">"*.opml *.xml|"</span> + i18n(<span class="stringliteral">"OPML Outlines (*.opml, *.xml)"</span>)
<a name="l00707"></a>00707                         +<span class="stringliteral">"\n*|"</span> + i18n(<span class="stringliteral">"All Files"</span>) );
<a name="l00708"></a>00708 
<a name="l00709"></a>00709     <span class="keywordflow">if</span> ( !url.isEmpty() )
<a name="l00710"></a>00710         exportFile(url);
<a name="l00711"></a>00711 }
<a name="l00712"></a>00712 
<a name="l00713"></a>00713 <span class="keywordtype">void</span> Part::fileGetFeeds()
<a name="l00714"></a>00714 {
<a name="l00715"></a>00715     <span class="comment">/*GetFeeds *gf = new GetFeeds();</span>
<a name="l00716"></a>00716 <span class="comment">    gf-&gt;show();*/</span>
<a name="l00717"></a>00717      <span class="comment">//KNS::DownloadDialog::open("akregator/feeds", i18n("Get New Feeds"));</span>
<a name="l00718"></a>00718 }
<a name="l00719"></a>00719 
<a name="l00720"></a>00720 <span class="keywordtype">void</span> Part::fileSendArticle(<span class="keywordtype">bool</span> attach)
<a name="l00721"></a>00721 {
<a name="l00722"></a>00722     <span class="comment">// FIXME: you have to open article to tab to be able to send...</span>
<a name="l00723"></a>00723     QString title, text;
<a name="l00724"></a>00724 
<a name="l00725"></a>00725     text = m_view-&gt;currentFrame()-&gt;part()-&gt;url().prettyURL();
<a name="l00726"></a>00726     <span class="keywordflow">if</span>(text.isEmpty() || text.isNull())
<a name="l00727"></a>00727         <span class="keywordflow">return</span>;
<a name="l00728"></a>00728 
<a name="l00729"></a>00729     title = m_view-&gt;currentFrame()-&gt;title();
<a name="l00730"></a>00730 
<a name="l00731"></a>00731     <span class="keywordflow">if</span>(attach) {
<a name="l00732"></a>00732         kapp-&gt;invokeMailer(<span class="stringliteral">""</span>,
<a name="l00733"></a>00733                            <span class="stringliteral">""</span>,
<a name="l00734"></a>00734                            <span class="stringliteral">""</span>,
<a name="l00735"></a>00735                            title,
<a name="l00736"></a>00736                            text,
<a name="l00737"></a>00737                            <span class="stringliteral">""</span>,
<a name="l00738"></a>00738                            text);
<a name="l00739"></a>00739     }
<a name="l00740"></a>00740     <span class="keywordflow">else</span> {
<a name="l00741"></a>00741         kapp-&gt;invokeMailer(<span class="stringliteral">""</span>,
<a name="l00742"></a>00742                            <span class="stringliteral">""</span>,
<a name="l00743"></a>00743                            <span class="stringliteral">""</span>,
<a name="l00744"></a>00744                            title,
<a name="l00745"></a>00745                            text);
<a name="l00746"></a>00746     }
<a name="l00747"></a>00747 }
<a name="l00748"></a>00748 
<a name="l00749"></a><a class="code" href="classAkregator_1_1Part.html#2b02987a8ddd628acf27c86ce5cd94ae">00749</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1Part.html#2b02987a8ddd628acf27c86ce5cd94ae" title="Fetch all feeds in the feed tree.">Part::fetchAllFeeds</a>()
<a name="l00750"></a>00750 {
<a name="l00751"></a>00751     m_view-&gt;<a class="code" href="classAkregator_1_1View.html#d9ecc39ee3204193d8d082b6fdbffa46" title="starts fetching of all feeds in the tree">slotFetchAllFeeds</a>();
<a name="l00752"></a>00752 }
<a name="l00753"></a>00753 
<a name="l00754"></a>00754 <span class="keywordtype">void</span> Part::fetchFeedUrl(<span class="keyword">const</span> QString&amp;s)
<a name="l00755"></a>00755 {
<a name="l00756"></a>00756     kdDebug() &lt;&lt; <span class="stringliteral">"fetchFeedURL=="</span> &lt;&lt; s &lt;&lt; endl;
<a name="l00757"></a>00757 }
<a name="l00758"></a>00758 
<a name="l00759"></a><a class="code" href="classAkregator_1_1Part.html#5c33de8e72169afca4075a364d490600">00759</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1Part.html#5c33de8e72169afca4075a364d490600" title="Add a feed to a group.">Part::addFeedsToGroup</a>(<span class="keyword">const</span> QStringList&amp; urls, <span class="keyword">const</span> QString&amp; group)
<a name="l00760"></a>00760 {
<a name="l00761"></a>00761     <span class="keywordflow">for</span> (QStringList::ConstIterator it = urls.begin(); it != urls.end(); ++it)
<a name="l00762"></a>00762     {
<a name="l00763"></a>00763         kdDebug() &lt;&lt; <span class="stringliteral">"Akregator::Part::addFeedToGroup adding feed with URL "</span> &lt;&lt; *it &lt;&lt; <span class="stringliteral">" to group "</span> &lt;&lt; group &lt;&lt; endl;
<a name="l00764"></a>00764         m_view-&gt;<a class="code" href="classAkregator_1_1View.html#8cf27876e35bf3f5cd865a6e80eb2788" title="Add a feed to a group.">addFeedToGroup</a>(*it, group);
<a name="l00765"></a>00765     }
<a name="l00766"></a>00766     <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#ae95ea64a6f5e5e3fcd5812a564a95e0" title="notifies the addition of feeds (used when added via DCOP or command line)">slotNotifyFeeds</a>(urls);
<a name="l00767"></a>00767 }
<a name="l00768"></a>00768 
<a name="l00769"></a>00769 <span class="keywordtype">void</span> Part::addFeed()
<a name="l00770"></a>00770 {
<a name="l00771"></a>00771     m_view-&gt;<a class="code" href="classAkregator_1_1View.html#0f44b28e758854b61266a5ff94203196" title="adds a new feed to the feed tree">slotFeedAdd</a>();
<a name="l00772"></a>00772 }
<a name="l00773"></a>00773 
<a name="l00774"></a><a class="code" href="classAkregator_1_1Part.html#881b9c33124cea4cb906e6032d73d455">00774</a> KAboutData *<a class="code" href="classAkregator_1_1Part.html#881b9c33124cea4cb906e6032d73d455" title="Create KAboutData for this KPart.">Part::createAboutData</a>()
<a name="l00775"></a>00775 {
<a name="l00776"></a>00776     <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classAkregator_1_1AboutData.html">Akregator::AboutData</a>;
<a name="l00777"></a>00777 }
<a name="l00778"></a>00778 
<a name="l00779"></a>00779 <span class="keywordtype">void</span> Part::showKNotifyOptions()
<a name="l00780"></a>00780 {
<a name="l00781"></a>00781     KAboutData* about = <span class="keyword">new</span> <a class="code" href="classAkregator_1_1AboutData.html">Akregator::AboutData</a>;
<a name="l00782"></a>00782     KNotifyDialog::configure(m_view, <span class="stringliteral">"akregator_knotify_config"</span>, about);
<a name="l00783"></a>00783     <span class="keyword">delete</span> about;
<a name="l00784"></a>00784 }
<a name="l00785"></a>00785 
<a name="l00786"></a><a class="code" href="classAkregator_1_1Part.html#f20b9c0c9bea013612130769eedf06d7">00786</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1Part.html#f20b9c0c9bea013612130769eedf06d7" title="Shows configuration dialog.">Part::showOptions</a>()
<a name="l00787"></a>00787 {
<a name="l00788"></a>00788     <span class="keywordflow">if</span> ( KConfigDialog::showDialog( <span class="stringliteral">"settings"</span> ) )
<a name="l00789"></a>00789         <span class="keywordflow">return</span>;
<a name="l00790"></a>00790 
<a name="l00791"></a>00791     KConfigDialog* dialog = <span class="keyword">new</span> ConfigDialog( m_view, <span class="stringliteral">"settings"</span>, Settings::self() );
<a name="l00792"></a>00792 
<a name="l00793"></a>00793     connect( dialog, SIGNAL(settingsChanged()),
<a name="l00794"></a>00794              <span class="keyword">this</span>, SLOT(slotSettingsChanged()) );
<a name="l00795"></a>00795     connect( dialog, SIGNAL(settingsChanged()),
<a name="l00796"></a>00796              TrayIcon::getInstance(), SLOT(settingsChanged()) );
<a name="l00797"></a>00797 
<a name="l00798"></a>00798     dialog-&gt;show();
<a name="l00799"></a>00799 }
<a name="l00800"></a>00800 
<a name="l00801"></a><a class="code" href="classAkregator_1_1Part.html#13411f82fda0c59de3a9fc608ec747b6">00801</a> <span class="keywordtype">void</span> <a class="code" href="classAkregator_1_1Part.html#13411f82fda0c59de3a9fc608ec747b6" title="reimplemented to load/unload the merged parts on selection/deselection">Part::partActivateEvent</a>(KParts::PartActivateEvent* event)
<a name="l00802"></a>00802 {
<a name="l00803"></a>00803     <span class="keywordflow">if</span> (factory() &amp;&amp; m_mergedPart)
<a name="l00804"></a>00804     {
<a name="l00805"></a>00805         <span class="keywordflow">if</span> (event-&gt;activated())
<a name="l00806"></a>00806             factory()-&gt;addClient(m_mergedPart);
<a name="l00807"></a>00807         <span class="keywordflow">else</span>
<a name="l00808"></a>00808             factory()-&gt;removeClient(m_mergedPart);
<a name="l00809"></a>00809     }
<a name="l00810"></a>00810 
<a name="l00811"></a>00811     MyBasePart::partActivateEvent(event);
<a name="l00812"></a>00812 }
<a name="l00813"></a>00813 
<a name="l00814"></a>00814 KParts::Part* Part::hitTest(QWidget *widget, <span class="keyword">const</span> QPoint &amp;globalPos)
<a name="l00815"></a>00815 {
<a name="l00816"></a>00816     <span class="keywordtype">bool</span> child = <span class="keyword">false</span>;
<a name="l00817"></a>00817     QWidget *me = this-&gt;widget();
<a name="l00818"></a>00818     <span class="keywordflow">while</span> (widget) {
<a name="l00819"></a>00819         <span class="keywordflow">if</span> (widget == me) {
<a name="l00820"></a>00820             child = <span class="keyword">true</span>;
<a name="l00821"></a>00821             <span class="keywordflow">break</span>;
<a name="l00822"></a>00822         }
<a name="l00823"></a>00823         <span class="keywordflow">if</span> (!widget) {
<a name="l00824"></a>00824             <span class="keywordflow">break</span>;
<a name="l00825"></a>00825         }
<a name="l00826"></a>00826         widget = widget-&gt;parentWidget();
<a name="l00827"></a>00827     }
<a name="l00828"></a>00828     <span class="keywordflow">if</span> (m_view &amp;&amp; m_view-&gt;currentFrame() &amp;&amp; child) {
<a name="l00829"></a>00829         <span class="keywordflow">return</span> m_view-&gt;currentFrame()-&gt;part();
<a name="l00830"></a>00830     } <span class="keywordflow">else</span> {
<a name="l00831"></a>00831         <span class="keywordflow">return</span> MyBasePart::hitTest(widget, globalPos);
<a name="l00832"></a>00832     }
<a name="l00833"></a>00833 }
<a name="l00834"></a>00834 
<a name="l00835"></a>00835 <span class="keywordtype">void</span> Part::initFonts()
<a name="l00836"></a>00836 {
<a name="l00837"></a>00837     QStringList fonts = Settings::fonts();
<a name="l00838"></a>00838     <span class="keywordflow">if</span> (fonts.isEmpty())
<a name="l00839"></a>00839     {
<a name="l00840"></a>00840         fonts.append(KGlobalSettings::generalFont().family());
<a name="l00841"></a>00841         fonts.append(KGlobalSettings::fixedFont().family());
<a name="l00842"></a>00842         fonts.append(KGlobalSettings::generalFont().family());
<a name="l00843"></a>00843         fonts.append(KGlobalSettings::generalFont().family());
<a name="l00844"></a>00844         fonts.append(<span class="stringliteral">"0"</span>);
<a name="l00845"></a>00845     }
<a name="l00846"></a>00846     Settings::setFonts(fonts);
<a name="l00847"></a>00847     <span class="keywordflow">if</span> (Settings::standardFont().isEmpty())
<a name="l00848"></a>00848         Settings::setStandardFont(fonts[0]);
<a name="l00849"></a>00849     <span class="keywordflow">if</span> (Settings::fixedFont().isEmpty())
<a name="l00850"></a>00850         Settings::setFixedFont(fonts[1]);
<a name="l00851"></a>00851     <span class="keywordflow">if</span> (Settings::sansSerifFont().isEmpty())
<a name="l00852"></a>00852         Settings::setSansSerifFont(fonts[2]);
<a name="l00853"></a>00853     <span class="keywordflow">if</span> (Settings::serifFont().isEmpty())
<a name="l00854"></a>00854         Settings::setSerifFont(fonts[3]);
<a name="l00855"></a>00855 
<a name="l00856"></a>00856     KConfig* conf = Settings::self()-&gt;config();
<a name="l00857"></a>00857     conf-&gt;setGroup(<span class="stringliteral">"HTML Settings"</span>);
<a name="l00858"></a>00858 
<a name="l00859"></a>00859     KConfig konq(<span class="stringliteral">"konquerorrc"</span>, <span class="keyword">true</span>, <span class="keyword">false</span>);
<a name="l00860"></a>00860     konq.setGroup(<span class="stringliteral">"HTML Settings"</span>);
<a name="l00861"></a>00861 
<a name="l00862"></a>00862     <span class="keywordflow">if</span> (!conf-&gt;hasKey(<span class="stringliteral">"MinimumFontSize"</span>))
<a name="l00863"></a>00863     {
<a name="l00864"></a>00864         <span class="keywordtype">int</span> minfs;
<a name="l00865"></a>00865         <span class="keywordflow">if</span> (konq.hasKey(<span class="stringliteral">"MinimumFontSize"</span>))
<a name="l00866"></a>00866             minfs = konq.readNumEntry(<span class="stringliteral">"MinimumFontSize"</span>);
<a name="l00867"></a>00867         <span class="keywordflow">else</span>
<a name="l00868"></a>00868             minfs = KGlobalSettings::generalFont().pointSize();
<a name="l00869"></a>00869         kdDebug() &lt;&lt; <span class="stringliteral">"Part::initFonts(): set MinimumFontSize to "</span> &lt;&lt; minfs &lt;&lt; endl;
<a name="l00870"></a>00870         Settings::setMinimumFontSize(minfs);
<a name="l00871"></a>00871     }
<a name="l00872"></a>00872 
<a name="l00873"></a>00873     <span class="keywordflow">if</span> (!conf-&gt;hasKey(<span class="stringliteral">"MediumFontSize"</span>))
<a name="l00874"></a>00874     {
<a name="l00875"></a>00875         <span class="keywordtype">int</span> medfs;
<a name="l00876"></a>00876         <span class="keywordflow">if</span> (konq.hasKey(<span class="stringliteral">"MediumFontSize"</span>))
<a name="l00877"></a>00877             medfs = konq.readNumEntry(<span class="stringliteral">"MediumFontSize"</span>);
<a name="l00878"></a>00878         <span class="keywordflow">else</span>
<a name="l00879"></a>00879             medfs = KGlobalSettings::generalFont().pointSize();
<a name="l00880"></a>00880         kdDebug() &lt;&lt; <span class="stringliteral">"Part::initFonts(): set MediumFontSize to "</span> &lt;&lt; medfs &lt;&lt; endl;
<a name="l00881"></a>00881         Settings::setMediumFontSize(medfs);
<a name="l00882"></a>00882     }
<a name="l00883"></a>00883 
<a name="l00884"></a>00884     <span class="keywordflow">if</span> (!conf-&gt;hasKey(<span class="stringliteral">"UnderlineLinks"</span>))
<a name="l00885"></a>00885     {
<a name="l00886"></a>00886         <span class="keywordtype">bool</span> underline = <span class="keyword">true</span>;
<a name="l00887"></a>00887         <span class="keywordflow">if</span> (konq.hasKey(<span class="stringliteral">"UnderlineLinks"</span>))
<a name="l00888"></a>00888             underline = konq.readBoolEntry(<span class="stringliteral">"UnderlineLinks"</span>);
<a name="l00889"></a>00889 
<a name="l00890"></a>00890         kdDebug() &lt;&lt; <span class="stringliteral">"Part::initFonts(): set UnderlineLinks to "</span> &lt;&lt; underline &lt;&lt; endl;
<a name="l00891"></a>00891         Settings::setUnderlineLinks(underline);
<a name="l00892"></a>00892     }
<a name="l00893"></a>00893 
<a name="l00894"></a>00894 }
<a name="l00895"></a>00895 
<a name="l00896"></a>00896 <span class="keywordtype">bool</span> Part::copyFile(<span class="keyword">const</span> QString&amp; backup)
<a name="l00897"></a>00897 {
<a name="l00898"></a>00898     QFile file(m_file);
<a name="l00899"></a>00899 
<a name="l00900"></a>00900     <span class="keywordflow">if</span> (file.open(IO_ReadOnly))
<a name="l00901"></a>00901     {
<a name="l00902"></a>00902         QFile backupFile(backup);
<a name="l00903"></a>00903         <span class="keywordflow">if</span> (backupFile.open(IO_WriteOnly))
<a name="l00904"></a>00904         {
<a name="l00905"></a>00905             QTextStream in(&amp;file);
<a name="l00906"></a>00906             QTextStream out(&amp;backupFile);
<a name="l00907"></a>00907             <span class="keywordflow">while</span> (!in.atEnd())
<a name="l00908"></a>00908                 out &lt;&lt; in.readLine();
<a name="l00909"></a>00909             backupFile.close();
<a name="l00910"></a>00910             file.close();
<a name="l00911"></a>00911             <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00912"></a>00912         }
<a name="l00913"></a>00913         <span class="keywordflow">else</span>
<a name="l00914"></a>00914         {
<a name="l00915"></a>00915             file.close();
<a name="l00916"></a>00916             <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00917"></a>00917         }
<a name="l00918"></a>00918     }
<a name="l00919"></a>00919     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00920"></a>00920 }
<a name="l00921"></a>00921 
<a name="l00922"></a>00922 <span class="keyword">static</span> QString getMyHostName()
<a name="l00923"></a>00923 {
<a name="l00924"></a>00924     <span class="keywordtype">char</span> hostNameC[256];
<a name="l00925"></a>00925     <span class="comment">// null terminate this C string</span>
<a name="l00926"></a>00926     hostNameC[255] = 0;
<a name="l00927"></a>00927     <span class="comment">// set the string to 0 length if gethostname fails</span>
<a name="l00928"></a>00928     <span class="keywordflow">if</span>(gethostname(hostNameC, 255))
<a name="l00929"></a>00929         hostNameC[0] = 0;
<a name="l00930"></a>00930     <span class="keywordflow">return</span> QString::fromLocal8Bit(hostNameC);
<a name="l00931"></a>00931 }
<a name="l00932"></a>00932 
<a name="l00933"></a>00933 <span class="comment">// taken from KMail</span>
<a name="l00934"></a>00934 <span class="keywordtype">bool</span> Part::tryToLock(<span class="keyword">const</span> QString&amp; backendName)
<a name="l00935"></a>00935 {
<a name="l00936"></a>00936 <span class="comment">// Check and create a lock file to prevent concurrent access to metakit archive</span>
<a name="l00937"></a>00937     QString appName = kapp-&gt;instanceName();
<a name="l00938"></a>00938     <span class="keywordflow">if</span> ( appName.isEmpty() )
<a name="l00939"></a>00939         appName = <span class="stringliteral">"akregator"</span>;
<a name="l00940"></a>00940 
<a name="l00941"></a>00941     QString programName;
<a name="l00942"></a>00942     <span class="keyword">const</span> KAboutData *about = kapp-&gt;aboutData();
<a name="l00943"></a>00943     <span class="keywordflow">if</span> ( about )
<a name="l00944"></a>00944         programName = about-&gt;programName();
<a name="l00945"></a>00945     <span class="keywordflow">if</span> ( programName.isEmpty() )
<a name="l00946"></a>00946         programName = i18n(<span class="stringliteral">"Akregator"</span>);
<a name="l00947"></a>00947 
<a name="l00948"></a>00948     QString lockLocation = locateLocal(<span class="stringliteral">"data"</span>, <span class="stringliteral">"akregator/lock"</span>);
<a name="l00949"></a>00949     KSimpleConfig config(lockLocation);
<a name="l00950"></a>00950     <span class="keywordtype">int</span> oldPid = config.readNumEntry(<span class="stringliteral">"pid"</span>, -1);
<a name="l00951"></a>00951     <span class="keyword">const</span> QString oldHostName = config.readEntry(<span class="stringliteral">"hostname"</span>);
<a name="l00952"></a>00952     <span class="keyword">const</span> QString oldAppName = config.readEntry( <span class="stringliteral">"appName"</span>, appName );
<a name="l00953"></a>00953     <span class="keyword">const</span> QString oldProgramName = config.readEntry( <span class="stringliteral">"programName"</span>, programName );
<a name="l00954"></a>00954     <span class="keyword">const</span> QString hostName = getMyHostName();
<a name="l00955"></a>00955     <span class="keywordtype">bool</span> first_instance = <span class="keyword">false</span>;
<a name="l00956"></a>00956     <span class="keywordflow">if</span> ( oldPid == -1 )
<a name="l00957"></a>00957         first_instance = <span class="keyword">true</span>;
<a name="l00958"></a>00958   <span class="comment">// check if the lock file is stale by trying to see if</span>
<a name="l00959"></a>00959   <span class="comment">// the other pid is currently running.</span>
<a name="l00960"></a>00960   <span class="comment">// Not 100% correct but better safe than sorry</span>
<a name="l00961"></a>00961     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (hostName == oldHostName &amp;&amp; oldPid != getpid()) {
<a name="l00962"></a>00962         <span class="keywordflow">if</span> ( kill(oldPid, 0) == -1 )
<a name="l00963"></a>00963             first_instance = ( errno == ESRCH );
<a name="l00964"></a>00964     }
<a name="l00965"></a>00965 
<a name="l00966"></a>00966     <span class="keywordflow">if</span> ( !first_instance )
<a name="l00967"></a>00967     {
<a name="l00968"></a>00968         QString msg;
<a name="l00969"></a>00969         <span class="keywordflow">if</span> ( oldHostName == hostName ) 
<a name="l00970"></a>00970         {
<a name="l00971"></a>00971             <span class="comment">// this can only happen if the user is running this application on</span>
<a name="l00972"></a>00972             <span class="comment">// different displays on the same machine. All other cases will be</span>
<a name="l00973"></a>00973             <span class="comment">// taken care of by KUniqueApplication()</span>
<a name="l00974"></a>00974             <span class="keywordflow">if</span> ( oldAppName == appName )
<a name="l00975"></a>00975                 msg = i18n(<span class="stringliteral">"&lt;qt&gt;%1 already seems to be running on another display on "</span>
<a name="l00976"></a>00976                         <span class="stringliteral">"this machine. &lt;b&gt;Running %2 more than once is not supported "</span>
<a name="l00977"></a>00977                         <span class="stringliteral">"by the %3 backend and "</span>
<a name="l00978"></a>00978                         <span class="stringliteral">"can cause the loss of archived articles and crashes at startup.&lt;/b&gt; "</span>
<a name="l00979"></a>00979                         <span class="stringliteral">"You should disable the archive for now "</span>
<a name="l00980"></a>00980                         <span class="stringliteral">"unless you are sure that %2 is not already running.&lt;/qt&gt;"</span>)
<a name="l00981"></a>00981                         .arg( programName, programName, backendName );
<a name="l00982"></a>00982               <span class="comment">// QString::arg( st ) only replaces the first occurrence of %1</span>
<a name="l00983"></a>00983               <span class="comment">// with st while QString::arg( s1, s2 ) replacess all occurrences</span>
<a name="l00984"></a>00984               <span class="comment">// of %1 with s1 and all occurrences of %2 with s2. So don't</span>
<a name="l00985"></a>00985               <span class="comment">// even think about changing the above to .arg( programName ).</span>
<a name="l00986"></a>00986             <span class="keywordflow">else</span>
<a name="l00987"></a>00987                 msg = i18n(<span class="stringliteral">"&lt;qt&gt;%1 seems to be running on another display on this "</span>
<a name="l00988"></a>00988                         <span class="stringliteral">"machine. &lt;b&gt;Running %1 and %2 at the same "</span>
<a name="l00989"></a>00989                         <span class="stringliteral">"time is not supported by the %3 backend and can cause "</span>
<a name="l00990"></a>00990                         <span class="stringliteral">"the loss of archived articles and crashes at startup.&lt;/b&gt; "</span>
<a name="l00991"></a>00991                         <span class="stringliteral">"You should disable the archive for now "</span>
<a name="l00992"></a>00992                         <span class="stringliteral">"unless you are sure that %2 is not already running.&lt;/qt&gt;"</span>)
<a name="l00993"></a>00993                         .arg( oldProgramName, programName, backendName );
<a name="l00994"></a>00994         }
<a name="l00995"></a>00995         <span class="keywordflow">else</span>
<a name="l00996"></a>00996         {
<a name="l00997"></a>00997             <span class="keywordflow">if</span> ( oldAppName == appName )
<a name="l00998"></a>00998                 msg = i18n(<span class="stringliteral">"&lt;qt&gt;%1 already seems to be running on %2. &lt;b&gt;Running %1 more "</span>
<a name="l00999"></a>00999                         <span class="stringliteral">"than once is not supported by the %3 backend and can cause "</span>
<a name="l01000"></a>01000                         <span class="stringliteral">"the loss of archived articles and crashes at startup.&lt;/b&gt; "</span>
<a name="l01001"></a>01001                         <span class="stringliteral">"You should disable the archive for now "</span>
<a name="l01002"></a>01002                         <span class="stringliteral">"unless you are sure that it is "</span>
<a name="l01003"></a>01003                         <span class="stringliteral">"not already running on %2.&lt;/qt&gt;"</span>)
<a name="l01004"></a>01004                         .arg( programName, oldHostName, backendName );
<a name="l01005"></a>01005             <span class="keywordflow">else</span>
<a name="l01006"></a>01006                 msg = i18n(<span class="stringliteral">"&lt;qt&gt;%1 seems to be running on %3. &lt;b&gt;Running %1 and %2 at the "</span>
<a name="l01007"></a>01007                         <span class="stringliteral">"same time is not supported by the %4 backend and can cause "</span>
<a name="l01008"></a>01008                         <span class="stringliteral">"the loss of archived articles and crashes at startup.&lt;/b&gt; "</span>
<a name="l01009"></a>01009                         <span class="stringliteral">"You should disable the archive for now "</span>
<a name="l01010"></a>01010                         <span class="stringliteral">"unless you are sure that %1 is "</span>
<a name="l01011"></a>01011                         <span class="stringliteral">"not running on %3.&lt;/qt&gt;"</span>)
<a name="l01012"></a>01012                         .arg( oldProgramName, programName, oldHostName, backendName );
<a name="l01013"></a>01013         }
<a name="l01014"></a>01014 
<a name="l01015"></a>01015         KCursorSaver idle( KBusyPtr::idle() );
<a name="l01016"></a>01016         <span class="keywordflow">if</span> ( KMessageBox::No ==
<a name="l01017"></a>01017              KMessageBox::warningYesNo( 0, msg, QString::null,
<a name="l01018"></a>01018                                         i18n(<span class="stringliteral">"Force Access"</span>),
<a name="l01019"></a>01019                                         i18n(<span class="stringliteral">"Disable Archive"</span>)) )
<a name="l01020"></a>01020                                         {
<a name="l01021"></a>01021                                             <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01022"></a>01022                                         }
<a name="l01023"></a>01023     }
<a name="l01024"></a>01024 
<a name="l01025"></a>01025     config.writeEntry(<span class="stringliteral">"pid"</span>, getpid());
<a name="l01026"></a>01026     config.writeEntry(<span class="stringliteral">"hostname"</span>, hostName);
<a name="l01027"></a>01027     config.writeEntry( <span class="stringliteral">"appName"</span>, appName );
<a name="l01028"></a>01028     config.writeEntry( <span class="stringliteral">"programName"</span>, programName );
<a name="l01029"></a>01029     config.sync();
<a name="l01030"></a>01030     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01031"></a>01031 }
<a name="l01032"></a>01032 
<a name="l01033"></a>01033 
<a name="l01034"></a>01034 } <span class="comment">// namespace Akregator</span>
<a name="l01035"></a>01035 <span class="preprocessor">#include "akregator_part.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>