Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 1f9eb832ba1e4b88d9a5c2b384813bb4 > files > 5068

kdelibs3-apidocs-3.5.10-31.fc15.noarch.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>kio/kfile: kpropertiesdialog.cpp Source File (kio/kfile)</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" />



</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>

  <div id="nav_header_title" align="left">KDE 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_right" style="text-align: left;">
/ <a href="../../..">API Reference</a>
 / <a href="../../html/index.html">kio</a> / <a href=".">kfile</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;">
    <a name="content"></a>


<!-- Generated by Doxygen 1.7.4 -->
<div class="header">
  <div class="headertitle">
<div class="title">kpropertiesdialog.cpp</div>  </div>
</div>
<div class="contents">
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* This file is part of the KDE project</span>
<a name="l00002"></a>00002 <span class="comment"></span>
<a name="l00003"></a>00003 <span class="comment">   Copyright (C) 1998, 1999 Torben Weis &lt;weis@kde.org&gt;</span>
<a name="l00004"></a>00004 <span class="comment">   Copyright (c) 1999, 2000 Preston Brown &lt;pbrown@kde.org&gt;</span>
<a name="l00005"></a>00005 <span class="comment">   Copyright (c) 2000 Simon Hausmann &lt;hausmann@kde.org&gt;</span>
<a name="l00006"></a>00006 <span class="comment">   Copyright (c) 2000 David Faure &lt;faure@kde.org&gt;</span>
<a name="l00007"></a>00007 <span class="comment">   Copyright (c) 2003 Waldo Bastian &lt;bastian@kde.org&gt;</span>
<a name="l00008"></a>00008 <span class="comment"></span>
<a name="l00009"></a>00009 <span class="comment">   This library is free software; you can redistribute it and/or</span>
<a name="l00010"></a>00010 <span class="comment">   modify it under the terms of the GNU Library General Public</span>
<a name="l00011"></a>00011 <span class="comment">   License as published by the Free Software Foundation; either</span>
<a name="l00012"></a>00012 <span class="comment">   version 2 of the License, or (at your option) any later version.</span>
<a name="l00013"></a>00013 <span class="comment"></span>
<a name="l00014"></a>00014 <span class="comment">   This library is distributed in the hope that it will be useful,</span>
<a name="l00015"></a>00015 <span class="comment">   but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00016"></a>00016 <span class="comment">   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<a name="l00017"></a>00017 <span class="comment">   Library General Public License for more details.</span>
<a name="l00018"></a>00018 <span class="comment"></span>
<a name="l00019"></a>00019 <span class="comment">   You should have received a copy of the GNU Library General Public License</span>
<a name="l00020"></a>00020 <span class="comment">   along with this library; see the file COPYING.LIB.  If not, write to</span>
<a name="l00021"></a>00021 <span class="comment">   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,</span>
<a name="l00022"></a>00022 <span class="comment">   Boston, MA 02110-1301, USA.</span>
<a name="l00023"></a>00023 <span class="comment">*/</span>
<a name="l00024"></a>00024 
<a name="l00025"></a>00025 <span class="comment">/*</span>
<a name="l00026"></a>00026 <span class="comment"> * kpropertiesdialog.cpp</span>
<a name="l00027"></a>00027 <span class="comment"> * View/Edit Properties of files, locally or remotely</span>
<a name="l00028"></a>00028 <span class="comment"> *</span>
<a name="l00029"></a>00029 <span class="comment"> * some FilePermissionsPropsPlugin-changes by</span>
<a name="l00030"></a>00030 <span class="comment"> *  Henner Zeller &lt;zeller@think.de&gt;</span>
<a name="l00031"></a>00031 <span class="comment"> * some layout management by</span>
<a name="l00032"></a>00032 <span class="comment"> *  Bertrand Leconte &lt;B.Leconte@mail.dotcom.fr&gt;</span>
<a name="l00033"></a>00033 <span class="comment"> * the rest of the layout management, bug fixes, adaptation to libkio,</span>
<a name="l00034"></a>00034 <span class="comment"> * template feature by</span>
<a name="l00035"></a>00035 <span class="comment"> *  David Faure &lt;faure@kde.org&gt;</span>
<a name="l00036"></a>00036 <span class="comment"> * More layout, cleanups, and fixes by</span>
<a name="l00037"></a>00037 <span class="comment"> *  Preston Brown &lt;pbrown@kde.org&gt;</span>
<a name="l00038"></a>00038 <span class="comment"> * Plugin capability, cleanups and port to KDialogBase by</span>
<a name="l00039"></a>00039 <span class="comment"> *  Simon Hausmann &lt;hausmann@kde.org&gt;</span>
<a name="l00040"></a>00040 <span class="comment"> * KDesktopPropsPlugin by</span>
<a name="l00041"></a>00041 <span class="comment"> *  Waldo Bastian &lt;bastian@kde.org&gt;</span>
<a name="l00042"></a>00042 <span class="comment"> */</span>
<a name="l00043"></a>00043 
<a name="l00044"></a>00044 <span class="preprocessor">#include &lt;config.h&gt;</span>
<a name="l00045"></a>00045 <span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {
<a name="l00046"></a>00046 <span class="preprocessor">#include &lt;pwd.h&gt;</span>
<a name="l00047"></a>00047 <span class="preprocessor">#include &lt;grp.h&gt;</span>
<a name="l00048"></a>00048 <span class="preprocessor">#include &lt;time.h&gt;</span>
<a name="l00049"></a>00049 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
<a name="l00050"></a>00050 }
<a name="l00051"></a>00051 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
<a name="l00052"></a>00052 <span class="preprocessor">#include &lt;errno.h&gt;</span>
<a name="l00053"></a>00053 <span class="preprocessor">#include &lt;assert.h&gt;</span>
<a name="l00054"></a>00054 <span class="preprocessor">#include &lt;algorithm&gt;</span>
<a name="l00055"></a>00055 <span class="preprocessor">#include &lt;functional&gt;</span>
<a name="l00056"></a>00056 
<a name="l00057"></a>00057 <span class="preprocessor">#include &lt;qfile.h&gt;</span>
<a name="l00058"></a>00058 <span class="preprocessor">#include &lt;qdir.h&gt;</span>
<a name="l00059"></a>00059 <span class="preprocessor">#include &lt;qlabel.h&gt;</span>
<a name="l00060"></a>00060 <span class="preprocessor">#include &lt;qpushbutton.h&gt;</span>
<a name="l00061"></a>00061 <span class="preprocessor">#include &lt;qcheckbox.h&gt;</span>
<a name="l00062"></a>00062 <span class="preprocessor">#include &lt;qstrlist.h&gt;</span>
<a name="l00063"></a>00063 <span class="preprocessor">#include &lt;qstringlist.h&gt;</span>
<a name="l00064"></a>00064 <span class="preprocessor">#include &lt;qtextstream.h&gt;</span>
<a name="l00065"></a>00065 <span class="preprocessor">#include &lt;qpainter.h&gt;</span>
<a name="l00066"></a>00066 <span class="preprocessor">#include &lt;qlayout.h&gt;</span>
<a name="l00067"></a>00067 <span class="preprocessor">#include &lt;qcombobox.h&gt;</span>
<a name="l00068"></a>00068 <span class="preprocessor">#include &lt;qgroupbox.h&gt;</span>
<a name="l00069"></a>00069 <span class="preprocessor">#include &lt;qwhatsthis.h&gt;</span>
<a name="l00070"></a>00070 <span class="preprocessor">#include &lt;qtooltip.h&gt;</span>
<a name="l00071"></a>00071 <span class="preprocessor">#include &lt;qstyle.h&gt;</span>
<a name="l00072"></a>00072 <span class="preprocessor">#include &lt;qprogressbar.h&gt;</span>
<a name="l00073"></a>00073 <span class="preprocessor">#include &lt;qvbox.h&gt;</span>
<a name="l00074"></a>00074 <span class="preprocessor">#include &lt;qvaluevector.h&gt;</span>
<a name="l00075"></a>00075 
<a name="l00076"></a>00076 <span class="preprocessor">#ifdef USE_POSIX_ACL</span>
<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {
<a name="l00078"></a>00078 <span class="preprocessor">#include &lt;sys/param.h&gt;</span>
<a name="l00079"></a>00079 <span class="preprocessor">#ifdef HAVE_SYS_MOUNT_H</span>
<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/mount.h&gt;</span>
<a name="l00081"></a>00081 <span class="preprocessor">#endif</span>
<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#ifdef HAVE_SYS_XATTR_H</span>
<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/xattr.h&gt;</span>
<a name="l00084"></a>00084 <span class="preprocessor">#endif</span>
<a name="l00085"></a>00085 <span class="preprocessor"></span>}
<a name="l00086"></a>00086 <span class="preprocessor">#endif</span>
<a name="l00087"></a>00087 <span class="preprocessor"></span>
<a name="l00088"></a>00088 <span class="preprocessor">#include &lt;kapplication.h&gt;</span>
<a name="l00089"></a>00089 <span class="preprocessor">#include &lt;kdialog.h&gt;</span>
<a name="l00090"></a>00090 <span class="preprocessor">#include &lt;kdirsize.h&gt;</span>
<a name="l00091"></a>00091 <span class="preprocessor">#include &lt;kdirwatch.h&gt;</span>
<a name="l00092"></a>00092 <span class="preprocessor">#include &lt;kdirnotify_stub.h&gt;</span>
<a name="l00093"></a>00093 <span class="preprocessor">#include &lt;kdiskfreesp.h&gt;</span>
<a name="l00094"></a>00094 <span class="preprocessor">#include &lt;kdebug.h&gt;</span>
<a name="l00095"></a>00095 <span class="preprocessor">#include &lt;kdesktopfile.h&gt;</span>
<a name="l00096"></a>00096 <span class="preprocessor">#include &lt;kicondialog.h&gt;</span>
<a name="l00097"></a>00097 <span class="preprocessor">#include &lt;kurl.h&gt;</span>
<a name="l00098"></a>00098 <span class="preprocessor">#include &lt;kurlrequester.h&gt;</span>
<a name="l00099"></a>00099 <span class="preprocessor">#include &lt;klocale.h&gt;</span>
<a name="l00100"></a>00100 <span class="preprocessor">#include &lt;kglobal.h&gt;</span>
<a name="l00101"></a>00101 <span class="preprocessor">#include &lt;kglobalsettings.h&gt;</span>
<a name="l00102"></a>00102 <span class="preprocessor">#include &lt;kstandarddirs.h&gt;</span>
<a name="l00103"></a>00103 <span class="preprocessor">#include &lt;kio/job.h&gt;</span>
<a name="l00104"></a>00104 <span class="preprocessor">#include &lt;kio/chmodjob.h&gt;</span>
<a name="l00105"></a>00105 <span class="preprocessor">#include &lt;kio/renamedlg.h&gt;</span>
<a name="l00106"></a>00106 <span class="preprocessor">#include &lt;kio/netaccess.h&gt;</span>
<a name="l00107"></a>00107 <span class="preprocessor">#include &lt;kio/kservicetypefactory.h&gt;</span>
<a name="l00108"></a>00108 <span class="preprocessor">#include &lt;kfiledialog.h&gt;</span>
<a name="l00109"></a>00109 <span class="preprocessor">#include &lt;kmimetype.h&gt;</span>
<a name="l00110"></a>00110 <span class="preprocessor">#include &lt;kmountpoint.h&gt;</span>
<a name="l00111"></a>00111 <span class="preprocessor">#include &lt;kiconloader.h&gt;</span>
<a name="l00112"></a>00112 <span class="preprocessor">#include &lt;kmessagebox.h&gt;</span>
<a name="l00113"></a>00113 <span class="preprocessor">#include &lt;kservice.h&gt;</span>
<a name="l00114"></a>00114 <span class="preprocessor">#include &lt;kcompletion.h&gt;</span>
<a name="l00115"></a>00115 <span class="preprocessor">#include &lt;klineedit.h&gt;</span>
<a name="l00116"></a>00116 <span class="preprocessor">#include &lt;kseparator.h&gt;</span>
<a name="l00117"></a>00117 <span class="preprocessor">#include &lt;ksqueezedtextlabel.h&gt;</span>
<a name="l00118"></a>00118 <span class="preprocessor">#include &lt;klibloader.h&gt;</span>
<a name="l00119"></a>00119 <span class="preprocessor">#include &lt;ktrader.h&gt;</span>
<a name="l00120"></a>00120 <span class="preprocessor">#include &lt;kparts/componentfactory.h&gt;</span>
<a name="l00121"></a>00121 <span class="preprocessor">#include &lt;kmetaprops.h&gt;</span>
<a name="l00122"></a>00122 <span class="preprocessor">#include &lt;kpreviewprops.h&gt;</span>
<a name="l00123"></a>00123 <span class="preprocessor">#include &lt;kprocess.h&gt;</span>
<a name="l00124"></a>00124 <span class="preprocessor">#include &lt;krun.h&gt;</span>
<a name="l00125"></a>00125 <span class="preprocessor">#include &lt;klistview.h&gt;</span>
<a name="l00126"></a>00126 <span class="preprocessor">#include &lt;kacl.h&gt;</span>
<a name="l00127"></a>00127 <span class="preprocessor">#include &quot;kfilesharedlg.h&quot;</span>
<a name="l00128"></a>00128 
<a name="l00129"></a>00129 <span class="preprocessor">#include &quot;kpropertiesdesktopbase.h&quot;</span>
<a name="l00130"></a>00130 <span class="preprocessor">#include &quot;kpropertiesdesktopadvbase.h&quot;</span>
<a name="l00131"></a>00131 <span class="preprocessor">#include &quot;kpropertiesmimetypebase.h&quot;</span>
<a name="l00132"></a>00132 <span class="preprocessor">#ifdef USE_POSIX_ACL</span>
<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor">#include &quot;kacleditwidget.h&quot;</span>
<a name="l00134"></a>00134 <span class="preprocessor">#endif</span>
<a name="l00135"></a>00135 <span class="preprocessor"></span>
<a name="l00136"></a>00136 <span class="preprocessor">#include &quot;kpropertiesdialog.h&quot;</span>
<a name="l00137"></a>00137 
<a name="l00138"></a>00138 <span class="preprocessor">#ifdef Q_WS_WIN</span>
<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor"># include &lt;win32_utils.h&gt;</span>
<a name="l00140"></a>00140 <span class="preprocessor">#endif</span>
<a name="l00141"></a>00141 <span class="preprocessor"></span>
<a name="l00142"></a>00142 <span class="keyword">static</span> <a class="codeRef" href="qstring.html">QString</a> nameFromFileName(<a class="codeRef" href="qstring.html">QString</a> nameStr)
<a name="l00143"></a>00143 {
<a name="l00144"></a>00144    <span class="keywordflow">if</span> ( nameStr.<a class="codeRef" href="qstring.html#endsWith">endsWith</a>(<span class="stringliteral">&quot;.desktop&quot;</span>) )
<a name="l00145"></a>00145       nameStr.<a class="codeRef" href="qstring.html#truncate">truncate</a>( nameStr.<a class="codeRef" href="qstring.html#length">length</a>() - 8 );
<a name="l00146"></a>00146    <span class="keywordflow">if</span> ( nameStr.<a class="codeRef" href="qstring.html#endsWith">endsWith</a>(<span class="stringliteral">&quot;.kdelnk&quot;</span>) )
<a name="l00147"></a>00147       nameStr.<a class="codeRef" href="qstring.html#truncate">truncate</a>( nameStr.<a class="codeRef" href="qstring.html#length">length</a>() - 7 );
<a name="l00148"></a>00148    <span class="comment">// Make it human-readable (%2F =&gt; &#39;/&#39;, ...)</span>
<a name="l00149"></a>00149    nameStr = KIO::decodeFileName( nameStr );
<a name="l00150"></a>00150    <span class="keywordflow">return</span> nameStr;
<a name="l00151"></a>00151 }
<a name="l00152"></a>00152 
<a name="l00153"></a>00153 mode_t KFilePermissionsPropsPlugin::fperm[3][4] = {
<a name="l00154"></a>00154         {S_IRUSR, S_IWUSR, S_IXUSR, S_ISUID},
<a name="l00155"></a>00155         {S_IRGRP, S_IWGRP, S_IXGRP, S_ISGID},
<a name="l00156"></a>00156         {S_IROTH, S_IWOTH, S_IXOTH, S_ISVTX}
<a name="l00157"></a>00157     };
<a name="l00158"></a>00158 
<a name="l00159"></a>00159 <span class="keyword">class </span>KPropertiesDialog::KPropertiesDialogPrivate
<a name="l00160"></a>00160 {
<a name="l00161"></a>00161 <span class="keyword">public</span>:
<a name="l00162"></a>00162   KPropertiesDialogPrivate()
<a name="l00163"></a>00163   {
<a name="l00164"></a>00164     m_aborted = <span class="keyword">false</span>;
<a name="l00165"></a>00165     fileSharePage = 0;
<a name="l00166"></a>00166   }
<a name="l00167"></a>00167   ~KPropertiesDialogPrivate()
<a name="l00168"></a>00168   {
<a name="l00169"></a>00169   }
<a name="l00170"></a>00170   <span class="keywordtype">bool</span> m_aborted:1;
<a name="l00171"></a>00171   <a class="codeRef" href="qwidget.html">QWidget</a>* fileSharePage;
<a name="l00172"></a>00172 };
<a name="l00173"></a>00173 
<a name="l00174"></a><a class="code" href="classKPropertiesDialog.html#a1c11179efa2e4f62bb91c8faa1f77a38">00174</a> <a class="code" href="classKPropertiesDialog.html#a1c11179efa2e4f62bb91c8faa1f77a38" title="Brings up a Properties dialog, as shown above.">KPropertiesDialog::KPropertiesDialog</a> (KFileItem* item,
<a name="l00175"></a>00175                                       <a class="codeRef" href="qwidget.html">QWidget</a>* parent, <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
<a name="l00176"></a>00176                                       <span class="keywordtype">bool</span> modal, <span class="keywordtype">bool</span> autoShow)
<a name="l00177"></a>00177   : KDialogBase (KDialogBase::Tabbed, i18n( <span class="stringliteral">&quot;Properties for %1&quot;</span> ).arg(KIO::decodeFileName(item-&gt;url().fileName())),
<a name="l00178"></a>00178                  KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
<a name="l00179"></a>00179                  parent, name, modal)
<a name="l00180"></a>00180 {
<a name="l00181"></a>00181   d = <span class="keyword">new</span> KPropertiesDialogPrivate;
<a name="l00182"></a>00182   assert( item );
<a name="l00183"></a>00183   m_items.append( <span class="keyword">new</span> KFileItem(*item) ); <span class="comment">// deep copy</span>
<a name="l00184"></a>00184 
<a name="l00185"></a>00185   m_singleUrl = item-&gt;url();
<a name="l00186"></a>00186   assert(!m_singleUrl.isEmpty());
<a name="l00187"></a>00187 
<a name="l00188"></a>00188   init (modal, autoShow);
<a name="l00189"></a>00189 }
<a name="l00190"></a>00190 
<a name="l00191"></a><a class="code" href="classKPropertiesDialog.html#a99a5a1af92ef6b2d33990b30e2314075">00191</a> <a class="code" href="classKPropertiesDialog.html#a1c11179efa2e4f62bb91c8faa1f77a38" title="Brings up a Properties dialog, as shown above.">KPropertiesDialog::KPropertiesDialog</a> (<span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; title,
<a name="l00192"></a>00192                                       <a class="codeRef" href="qwidget.html">QWidget</a>* parent, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">bool</span> modal)
<a name="l00193"></a>00193   : KDialogBase (KDialogBase::Tabbed, i18n (<span class="stringliteral">&quot;Properties for %1&quot;</span>).arg(title),
<a name="l00194"></a>00194                  KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
<a name="l00195"></a>00195                  parent, name, modal)
<a name="l00196"></a>00196 {
<a name="l00197"></a>00197   d = <span class="keyword">new</span> KPropertiesDialogPrivate;
<a name="l00198"></a>00198 
<a name="l00199"></a>00199   init (modal, <span class="keyword">false</span>);
<a name="l00200"></a>00200 }
<a name="l00201"></a>00201 
<a name="l00202"></a><a class="code" href="classKPropertiesDialog.html#ad3065ec562f8327d8277621764c6b4d3">00202</a> <a class="code" href="classKPropertiesDialog.html#a1c11179efa2e4f62bb91c8faa1f77a38" title="Brings up a Properties dialog, as shown above.">KPropertiesDialog::KPropertiesDialog</a> (KFileItemList _items,
<a name="l00203"></a>00203                                       <a class="codeRef" href="qwidget.html">QWidget</a>* parent, <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
<a name="l00204"></a>00204                                       <span class="keywordtype">bool</span> modal, <span class="keywordtype">bool</span> autoShow)
<a name="l00205"></a>00205   : KDialogBase (KDialogBase::Tabbed,
<a name="l00206"></a>00206                  <span class="comment">// TODO: replace &lt;never used&gt; with &quot;Properties for 1 item&quot;. It&#39;s very confusing how it has to be translated otherwise</span>
<a name="l00207"></a>00207                  <span class="comment">// (empty translation before the &quot;\n&quot; is not allowed by msgfmt...)</span>
<a name="l00208"></a>00208          _items.count()&gt;1 ? i18n( <span class="stringliteral">&quot;&lt;never used&gt;&quot;</span>,<span class="stringliteral">&quot;Properties for %n Selected Items&quot;</span>,_items.count()) :
<a name="l00209"></a>00209          i18n( <span class="stringliteral">&quot;Properties for %1&quot;</span> ).arg(KIO::decodeFileName(_items.first()-&gt;url().fileName())),
<a name="l00210"></a>00210                  KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
<a name="l00211"></a>00211                  parent, name, modal)
<a name="l00212"></a>00212 {
<a name="l00213"></a>00213   d = <span class="keyword">new</span> KPropertiesDialogPrivate;
<a name="l00214"></a>00214 
<a name="l00215"></a>00215   assert( !_items.isEmpty() );
<a name="l00216"></a>00216   m_singleUrl = _items.first()-&gt;url();
<a name="l00217"></a>00217   assert(!m_singleUrl.isEmpty());
<a name="l00218"></a>00218 
<a name="l00219"></a>00219   KFileItemListIterator it ( _items );
<a name="l00220"></a>00220   <span class="comment">// Deep copy</span>
<a name="l00221"></a>00221   <span class="keywordflow">for</span> ( ; it.current(); ++it )
<a name="l00222"></a>00222       m_items.append( <span class="keyword">new</span> KFileItem( **it ) );
<a name="l00223"></a>00223 
<a name="l00224"></a>00224   init (modal, autoShow);
<a name="l00225"></a>00225 }
<a name="l00226"></a>00226 
<a name="l00227"></a>00227 <span class="preprocessor">#ifndef KDE_NO_COMPAT</span>
<a name="l00228"></a><a class="code" href="classKPropertiesDialog.html#aa2804772d67ed91fdfcafe2fcb160fb1">00228</a> <span class="preprocessor"></span><a class="code" href="classKPropertiesDialog.html#a1c11179efa2e4f62bb91c8faa1f77a38" title="Brings up a Properties dialog, as shown above.">KPropertiesDialog::KPropertiesDialog</a> (<span class="keyword">const</span> KURL&amp; _url, mode_t <span class="comment">/* _mode is now unused */</span>,
<a name="l00229"></a>00229                                       <a class="codeRef" href="qwidget.html">QWidget</a>* parent, <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
<a name="l00230"></a>00230                                       <span class="keywordtype">bool</span> modal, <span class="keywordtype">bool</span> autoShow)
<a name="l00231"></a>00231   : KDialogBase (KDialogBase::Tabbed,
<a name="l00232"></a>00232          i18n( <span class="stringliteral">&quot;Properties for %1&quot;</span> ).arg(KIO::decodeFileName(_url.fileName())),
<a name="l00233"></a>00233                  KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
<a name="l00234"></a>00234                  parent, name, modal),
<a name="l00235"></a>00235   m_singleUrl( _url )
<a name="l00236"></a>00236 {
<a name="l00237"></a>00237   d = <span class="keyword">new</span> KPropertiesDialogPrivate;
<a name="l00238"></a>00238 
<a name="l00239"></a>00239   KIO::UDSEntry entry;
<a name="l00240"></a>00240 
<a name="l00241"></a>00241   KIO::NetAccess::stat(_url, entry, parent);
<a name="l00242"></a>00242 
<a name="l00243"></a>00243   m_items.append( <span class="keyword">new</span> KFileItem( entry, _url ) );
<a name="l00244"></a>00244   init (modal, autoShow);
<a name="l00245"></a>00245 }
<a name="l00246"></a>00246 <span class="preprocessor">#endif</span>
<a name="l00247"></a>00247 <span class="preprocessor"></span>
<a name="l00248"></a><a class="code" href="classKPropertiesDialog.html#af3be2d3670ea26208cb46b7df6c6b551">00248</a> <a class="code" href="classKPropertiesDialog.html#a1c11179efa2e4f62bb91c8faa1f77a38" title="Brings up a Properties dialog, as shown above.">KPropertiesDialog::KPropertiesDialog</a> (<span class="keyword">const</span> KURL&amp; _url,
<a name="l00249"></a>00249                                       <a class="codeRef" href="qwidget.html">QWidget</a>* parent, <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
<a name="l00250"></a>00250                                       <span class="keywordtype">bool</span> modal, <span class="keywordtype">bool</span> autoShow)
<a name="l00251"></a>00251   : KDialogBase (KDialogBase::Tabbed,
<a name="l00252"></a>00252          i18n( <span class="stringliteral">&quot;Properties for %1&quot;</span> ).arg(KIO::decodeFileName(_url.fileName())),
<a name="l00253"></a>00253                  KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
<a name="l00254"></a>00254                  parent, name, modal),
<a name="l00255"></a>00255   m_singleUrl( _url )
<a name="l00256"></a>00256 {
<a name="l00257"></a>00257   d = <span class="keyword">new</span> KPropertiesDialogPrivate;
<a name="l00258"></a>00258 
<a name="l00259"></a>00259   KIO::UDSEntry entry;
<a name="l00260"></a>00260 
<a name="l00261"></a>00261   KIO::NetAccess::stat(_url, entry, parent);
<a name="l00262"></a>00262 
<a name="l00263"></a>00263   m_items.append( <span class="keyword">new</span> KFileItem( entry, _url ) );
<a name="l00264"></a>00264   init (modal, autoShow);
<a name="l00265"></a>00265 }
<a name="l00266"></a>00266 
<a name="l00267"></a><a class="code" href="classKPropertiesDialog.html#aef405042e036f943754db49327922861">00267</a> <a class="code" href="classKPropertiesDialog.html#a1c11179efa2e4f62bb91c8faa1f77a38" title="Brings up a Properties dialog, as shown above.">KPropertiesDialog::KPropertiesDialog</a> (<span class="keyword">const</span> KURL&amp; _tempUrl, <span class="keyword">const</span> KURL&amp; _currentDir,
<a name="l00268"></a>00268                                       <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; _defaultName,
<a name="l00269"></a>00269                                       <a class="codeRef" href="qwidget.html">QWidget</a>* parent, <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
<a name="l00270"></a>00270                                       <span class="keywordtype">bool</span> modal, <span class="keywordtype">bool</span> autoShow)
<a name="l00271"></a>00271   : KDialogBase (KDialogBase::Tabbed,
<a name="l00272"></a>00272          i18n( <span class="stringliteral">&quot;Properties for %1&quot;</span> ).arg(KIO::decodeFileName(_tempUrl.fileName())),
<a name="l00273"></a>00273                  KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
<a name="l00274"></a>00274                  parent, name, modal),
<a name="l00275"></a>00275 
<a name="l00276"></a>00276   m_singleUrl( _tempUrl ),
<a name="l00277"></a>00277   m_defaultName( _defaultName ),
<a name="l00278"></a>00278   m_currentDir( _currentDir )
<a name="l00279"></a>00279 {
<a name="l00280"></a>00280   d = <span class="keyword">new</span> KPropertiesDialogPrivate;
<a name="l00281"></a>00281 
<a name="l00282"></a>00282   assert(!m_singleUrl.isEmpty());
<a name="l00283"></a>00283 
<a name="l00284"></a>00284   <span class="comment">// Create the KFileItem for the _template_ file, in order to read from it.</span>
<a name="l00285"></a>00285   m_items.append( <span class="keyword">new</span> KFileItem( KFileItem::Unknown, KFileItem::Unknown, m_singleUrl ) );
<a name="l00286"></a>00286   init (modal, autoShow);
<a name="l00287"></a>00287 }
<a name="l00288"></a>00288 
<a name="l00289"></a><a class="code" href="classKPropertiesDialog.html#a0f8ac6e772afe95ddcf852785aa73283">00289</a> <span class="keywordtype">bool</span> <a class="code" href="classKPropertiesDialog.html#a0f8ac6e772afe95ddcf852785aa73283" title="Immediately displays a Properties dialog using constructor with the same parameters.">KPropertiesDialog::showDialog</a>(KFileItem* item, <a class="codeRef" href="qwidget.html">QWidget</a>* parent,
<a name="l00290"></a>00290                                    <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">bool</span> modal)
<a name="l00291"></a>00291 {
<a name="l00292"></a>00292 <span class="preprocessor">#ifdef Q_WS_WIN</span>
<a name="l00293"></a>00293 <span class="preprocessor"></span>  <a class="codeRef" href="qstring.html">QString</a> localPath = item-&gt;localPath();
<a name="l00294"></a>00294   <span class="keywordflow">if</span> (!localPath.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>())
<a name="l00295"></a>00295     <span class="keywordflow">return</span> showWin32FilePropertyDialog(localPath);
<a name="l00296"></a>00296 <span class="preprocessor">#endif</span>
<a name="l00297"></a>00297 <span class="preprocessor"></span>  <span class="keyword">new</span> <a class="code" href="classKPropertiesDialog.html#a1c11179efa2e4f62bb91c8faa1f77a38" title="Brings up a Properties dialog, as shown above.">KPropertiesDialog</a>(item, parent, name, modal);
<a name="l00298"></a>00298   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00299"></a>00299 }
<a name="l00300"></a>00300 
<a name="l00301"></a><a class="code" href="classKPropertiesDialog.html#abc9d4f38a17264afea5f7a7adb466cef">00301</a> <span class="keywordtype">bool</span> <a class="code" href="classKPropertiesDialog.html#a0f8ac6e772afe95ddcf852785aa73283" title="Immediately displays a Properties dialog using constructor with the same parameters.">KPropertiesDialog::showDialog</a>(<span class="keyword">const</span> KURL&amp; _url, <a class="codeRef" href="qwidget.html">QWidget</a>* parent,
<a name="l00302"></a>00302                                    <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">bool</span> modal)
<a name="l00303"></a>00303 {
<a name="l00304"></a>00304 <span class="preprocessor">#ifdef Q_WS_WIN</span>
<a name="l00305"></a>00305 <span class="preprocessor"></span>  <span class="keywordflow">if</span> (_url.isLocalFile())
<a name="l00306"></a>00306     <span class="keywordflow">return</span> showWin32FilePropertyDialog( _url.path() );
<a name="l00307"></a>00307 <span class="preprocessor">#endif</span>
<a name="l00308"></a>00308 <span class="preprocessor"></span>  <span class="keyword">new</span> <a class="code" href="classKPropertiesDialog.html#a1c11179efa2e4f62bb91c8faa1f77a38" title="Brings up a Properties dialog, as shown above.">KPropertiesDialog</a>(_url, parent, name, modal);
<a name="l00309"></a>00309   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00310"></a>00310 }
<a name="l00311"></a>00311 
<a name="l00312"></a><a class="code" href="classKPropertiesDialog.html#a35da7fdac81cf353a882ea0ebdd096ef">00312</a> <span class="keywordtype">bool</span> <a class="code" href="classKPropertiesDialog.html#a0f8ac6e772afe95ddcf852785aa73283" title="Immediately displays a Properties dialog using constructor with the same parameters.">KPropertiesDialog::showDialog</a>(<span class="keyword">const</span> KFileItemList&amp; _items, <a class="codeRef" href="qwidget.html">QWidget</a>* parent,
<a name="l00313"></a>00313                                    <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">bool</span> modal)
<a name="l00314"></a>00314 {
<a name="l00315"></a>00315   <span class="keywordflow">if</span> (_items.count()==1)
<a name="l00316"></a>00316     <span class="keywordflow">return</span> <a class="code" href="classKPropertiesDialog.html#a0f8ac6e772afe95ddcf852785aa73283" title="Immediately displays a Properties dialog using constructor with the same parameters.">KPropertiesDialog::showDialog</a>(_items.getFirst(), parent, name, modal);
<a name="l00317"></a>00317   <span class="keyword">new</span> <a class="code" href="classKPropertiesDialog.html#a1c11179efa2e4f62bb91c8faa1f77a38" title="Brings up a Properties dialog, as shown above.">KPropertiesDialog</a>(_items, parent, name, modal);
<a name="l00318"></a>00318   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00319"></a>00319 }
<a name="l00320"></a>00320 
<a name="l00321"></a>00321 <span class="keywordtype">void</span> KPropertiesDialog::init (<span class="keywordtype">bool</span> modal, <span class="keywordtype">bool</span> autoShow)
<a name="l00322"></a>00322 {
<a name="l00323"></a>00323   m_pageList.<a class="codeRef" href="qptrlist.html#setAutoDelete">setAutoDelete</a>( <span class="keyword">true</span> );
<a name="l00324"></a>00324   m_items.setAutoDelete( <span class="keyword">true</span> );
<a name="l00325"></a>00325 
<a name="l00326"></a>00326   insertPages();
<a name="l00327"></a>00327 
<a name="l00328"></a>00328   <span class="keywordflow">if</span> (autoShow)
<a name="l00329"></a>00329     {
<a name="l00330"></a>00330       <span class="keywordflow">if</span> (!modal)
<a name="l00331"></a>00331         show();
<a name="l00332"></a>00332       <span class="keywordflow">else</span>
<a name="l00333"></a>00333         exec();
<a name="l00334"></a>00334     }
<a name="l00335"></a>00335 }
<a name="l00336"></a>00336 
<a name="l00337"></a><a class="code" href="classKPropertiesDialog.html#a46f87f554cb37f8b88b138573dd2b539">00337</a> <span class="keywordtype">void</span> <a class="code" href="classKPropertiesDialog.html#a46f87f554cb37f8b88b138573dd2b539" title="Shows the page that was previously set by setFileSharingPage(), or does nothing if no page was set ye...">KPropertiesDialog::showFileSharingPage</a>()
<a name="l00338"></a>00338 {
<a name="l00339"></a>00339   <span class="keywordflow">if</span> (d-&gt;fileSharePage) {
<a name="l00340"></a>00340      showPage( pageIndex( d-&gt;fileSharePage));
<a name="l00341"></a>00341   }
<a name="l00342"></a>00342 }
<a name="l00343"></a>00343 
<a name="l00344"></a><a class="code" href="classKPropertiesDialog.html#a5aaf5d03c8c311bce0d0b71ffff5e586">00344</a> <span class="keywordtype">void</span> <a class="code" href="classKPropertiesDialog.html#a5aaf5d03c8c311bce0d0b71ffff5e586" title="Sets the file sharing page.">KPropertiesDialog::setFileSharingPage</a>(<a class="codeRef" href="qwidget.html">QWidget</a>* page) {
<a name="l00345"></a>00345   d-&gt;fileSharePage = page;
<a name="l00346"></a>00346 }
<a name="l00347"></a>00347 
<a name="l00348"></a>00348 
<a name="l00349"></a><a class="code" href="classKPropertiesDialog.html#a26e3281f71d6ab7bbbcc03a557c5b791">00349</a> <span class="keywordtype">void</span> <a class="code" href="classKPropertiesDialog.html#a26e3281f71d6ab7bbbcc03a557c5b791" title="Call this to make the filename lineedit readonly, to prevent the user from renaming the file...">KPropertiesDialog::setFileNameReadOnly</a>( <span class="keywordtype">bool</span> ro )
<a name="l00350"></a>00350 {
<a name="l00351"></a>00351     <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a> *it;
<a name="l00352"></a>00352 
<a name="l00353"></a>00353     <span class="keywordflow">for</span> ( it=m_pageList.<a class="codeRef" href="qptrlist.html#first">first</a>(); it != 0L; it=m_pageList.<a class="codeRef" href="qptrlist.html#next">next</a>() )
<a name="l00354"></a>00354     {
<a name="l00355"></a>00355         <a class="code" href="classKFilePropsPlugin.html" title="&#39;General&#39; plugin This plugin displays the name of the file, its size and access times.">KFilePropsPlugin</a>* plugin = <span class="keyword">dynamic_cast&lt;</span><a class="code" href="classKFilePropsPlugin.html" title="&#39;General&#39; plugin This plugin displays the name of the file, its size and access times.">KFilePropsPlugin</a>*<span class="keyword">&gt;</span>(it);
<a name="l00356"></a>00356         <span class="keywordflow">if</span> ( plugin ) {
<a name="l00357"></a>00357             plugin-&gt;setFileNameReadOnly( ro );
<a name="l00358"></a>00358             <span class="keywordflow">break</span>;
<a name="l00359"></a>00359         }
<a name="l00360"></a>00360     }
<a name="l00361"></a>00361 }
<a name="l00362"></a>00362 
<a name="l00363"></a>00363 <span class="keywordtype">void</span> KPropertiesDialog::slotStatResult( KIO::Job * )
<a name="l00364"></a>00364 {
<a name="l00365"></a>00365 }
<a name="l00366"></a>00366 
<a name="l00367"></a><a class="code" href="classKPropertiesDialog.html#aca767c3e7a17995b1b7a07eed1a9b15a">00367</a> <a class="code" href="classKPropertiesDialog.html#aca767c3e7a17995b1b7a07eed1a9b15a" title="Cleans up the properties dialog and frees any associated resources, including the dialog itself...">KPropertiesDialog::~KPropertiesDialog</a>()
<a name="l00368"></a>00368 {
<a name="l00369"></a>00369   m_pageList.<a class="codeRef" href="qptrlist.html#clear">clear</a>();
<a name="l00370"></a>00370   <span class="keyword">delete</span> d;
<a name="l00371"></a>00371 }
<a name="l00372"></a>00372 
<a name="l00373"></a><a class="code" href="classKPropertiesDialog.html#a0c65bc7f29308405f7f9dde77c8f6fdf">00373</a> <span class="keywordtype">void</span> <a class="code" href="classKPropertiesDialog.html#a0c65bc7f29308405f7f9dde77c8f6fdf" title="Adds a &quot;3rd party&quot; properties plugin to the dialog.">KPropertiesDialog::insertPlugin</a> (<a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a>* plugin)
<a name="l00374"></a>00374 {
<a name="l00375"></a>00375   connect (plugin, SIGNAL (changed ()),
<a name="l00376"></a>00376            plugin, SLOT (setDirty ()));
<a name="l00377"></a>00377 
<a name="l00378"></a>00378   m_pageList.<a class="codeRef" href="qptrlist.html#append">append</a> (plugin);
<a name="l00379"></a>00379 }
<a name="l00380"></a>00380 
<a name="l00381"></a><a class="code" href="classKPropertiesDialog.html#af1705a23123e4bf98d274cf647b5c413">00381</a> <span class="keywordtype">bool</span> <a class="code" href="classKPropertiesDialog.html#af1705a23123e4bf98d274cf647b5c413" title="Determine whether there are any property pages available for the given file items.">KPropertiesDialog::canDisplay</a>( KFileItemList _items )
<a name="l00382"></a>00382 {
<a name="l00383"></a>00383   <span class="comment">// TODO: cache the result of those calls. Currently we parse .desktop files far too many times</span>
<a name="l00384"></a>00384   <span class="keywordflow">return</span> <a class="code" href="classKFilePropsPlugin.html#a3e3d1f7eade99e76cbaab017b6f62e5d" title="Tests whether the files specified by _items need a &#39;General&#39; plugin.">KFilePropsPlugin::supports</a>( _items ) ||
<a name="l00385"></a>00385          <a class="code" href="classKFilePermissionsPropsPlugin.html#ae1800d8c4c9dd56c50c532117895acb4" title="Tests whether the file specified by _items needs a &#39;Permissions&#39; plugin.">KFilePermissionsPropsPlugin::supports</a>( _items ) ||
<a name="l00386"></a>00386          KDesktopPropsPlugin::supports( _items ) ||
<a name="l00387"></a>00387          KBindingPropsPlugin::supports( _items ) ||
<a name="l00388"></a>00388          KURLPropsPlugin::supports( _items ) ||
<a name="l00389"></a>00389          KDevicePropsPlugin::supports( _items ) ||
<a name="l00390"></a>00390          <a class="code" href="classKFileMetaPropsPlugin.html#a65e73bc476c67fd6736329437f27204f" title="Tests whether the file specified by _items has a &#39;MetaInfo&#39; plugin.">KFileMetaPropsPlugin::supports</a>( _items ) ||
<a name="l00391"></a>00391          <a class="code" href="classKPreviewPropsPlugin.html#ae32ca21994d9479cb61ef74c73ee681d" title="Tests whether a preview for the first item should be shown.">KPreviewPropsPlugin::supports</a>( _items );
<a name="l00392"></a>00392 }
<a name="l00393"></a>00393 
<a name="l00394"></a><a class="code" href="classKPropertiesDialog.html#aaae2a60507ae331b4226440cae8e87c0">00394</a> <span class="keywordtype">void</span> <a class="code" href="classKPropertiesDialog.html#aaae2a60507ae331b4226440cae8e87c0" title="Called when the user presses &#39;Ok&#39;.">KPropertiesDialog::slotOk</a>()
<a name="l00395"></a>00395 {
<a name="l00396"></a>00396   <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a> *page;
<a name="l00397"></a>00397   d-&gt;m_aborted = <span class="keyword">false</span>;
<a name="l00398"></a>00398 
<a name="l00399"></a>00399   <a class="code" href="classKFilePropsPlugin.html" title="&#39;General&#39; plugin This plugin displays the name of the file, its size and access times.">KFilePropsPlugin</a> * filePropsPlugin = 0L;
<a name="l00400"></a>00400   <span class="keywordflow">if</span> ( m_pageList.<a class="codeRef" href="qptrlist.html#first">first</a>()-&gt;isA(<span class="stringliteral">&quot;KFilePropsPlugin&quot;</span>) )
<a name="l00401"></a>00401     filePropsPlugin = static_cast&lt;KFilePropsPlugin *&gt;(m_pageList.<a class="codeRef" href="qptrlist.html#first">first</a>());
<a name="l00402"></a>00402 
<a name="l00403"></a>00403   <span class="comment">// If any page is dirty, then set the main one (KFilePropsPlugin) as</span>
<a name="l00404"></a>00404   <span class="comment">// dirty too. This is what makes it possible to save changes to a global</span>
<a name="l00405"></a>00405   <span class="comment">// desktop file into a local one. In other cases, it doesn&#39;t hurt.</span>
<a name="l00406"></a>00406   <span class="keywordflow">for</span> ( page = m_pageList.<a class="codeRef" href="qptrlist.html#first">first</a>(); page != 0L; page = m_pageList.<a class="codeRef" href="qptrlist.html#next">next</a>() )
<a name="l00407"></a>00407     <span class="keywordflow">if</span> ( page-&gt;isDirty() &amp;&amp; filePropsPlugin )
<a name="l00408"></a>00408     {
<a name="l00409"></a>00409         filePropsPlugin-&gt;setDirty();
<a name="l00410"></a>00410         <span class="keywordflow">break</span>;
<a name="l00411"></a>00411     }
<a name="l00412"></a>00412 
<a name="l00413"></a>00413   <span class="comment">// Apply the changes in the _normal_ order of the tabs now</span>
<a name="l00414"></a>00414   <span class="comment">// This is because in case of renaming a file, KFilePropsPlugin will call</span>
<a name="l00415"></a>00415   <span class="comment">// KPropertiesDialog::rename, so other tab will be ok with whatever order</span>
<a name="l00416"></a>00416   <span class="comment">// BUT for file copied from templates, we need to do the renaming first !</span>
<a name="l00417"></a>00417   <span class="keywordflow">for</span> ( page = m_pageList.<a class="codeRef" href="qptrlist.html#first">first</a>(); page != 0L &amp;&amp; !d-&gt;m_aborted; page = m_pageList.<a class="codeRef" href="qptrlist.html#next">next</a>() )
<a name="l00418"></a>00418     <span class="keywordflow">if</span> ( page-&gt;isDirty() )
<a name="l00419"></a>00419     {
<a name="l00420"></a>00420       kdDebug( 250 ) &lt;&lt; <span class="stringliteral">&quot;applying changes for &quot;</span> &lt;&lt; page-&gt;<a class="codeRef" href="qobject.html#className">className</a>() &lt;&lt; endl;
<a name="l00421"></a>00421       page-&gt;<a class="code" href="classKPropsDlgPlugin.html#ac1e2d1cbaf76527cbe55d56dd564b4a1" title="Applies all changes to the file.">applyChanges</a>();
<a name="l00422"></a>00422       <span class="comment">// applyChanges may change d-&gt;m_aborted.</span>
<a name="l00423"></a>00423     }
<a name="l00424"></a>00424     <span class="keywordflow">else</span>
<a name="l00425"></a>00425       kdDebug( 250 ) &lt;&lt; <span class="stringliteral">&quot;skipping page &quot;</span> &lt;&lt; page-&gt;<a class="codeRef" href="qobject.html#className">className</a>() &lt;&lt; endl;
<a name="l00426"></a>00426 
<a name="l00427"></a>00427   <span class="keywordflow">if</span> ( !d-&gt;m_aborted &amp;&amp; filePropsPlugin )
<a name="l00428"></a>00428     filePropsPlugin-&gt;<a class="code" href="classKFilePropsPlugin.html#af27e92932409445d46ea8eb498342167" title="Called after all plugins applied their changes.">postApplyChanges</a>();
<a name="l00429"></a>00429 
<a name="l00430"></a>00430   <span class="keywordflow">if</span> ( !d-&gt;m_aborted )
<a name="l00431"></a>00431   {
<a name="l00432"></a>00432     emit <a class="code" href="classKPropertiesDialog.html#a002caea780eff767f828a71bb55ee552" title="This signal is emitted when the properties changes are applied (for example, with the OK button)...">applied</a>();
<a name="l00433"></a>00433     emit <a class="code" href="classKPropertiesDialog.html#a76ed20d12e74a6fd141cace53a2e5fcf" title="This signal is emitted when the Properties Dialog is closed (for example, with OK or Cancel buttons)...">propertiesClosed</a>();
<a name="l00434"></a>00434     deleteLater();
<a name="l00435"></a>00435     accept();
<a name="l00436"></a>00436   } <span class="comment">// else, keep dialog open for user to fix the problem.</span>
<a name="l00437"></a>00437 }
<a name="l00438"></a>00438 
<a name="l00439"></a><a class="code" href="classKPropertiesDialog.html#a4481db1837bd6687fb78b0f2b24b8ce2">00439</a> <span class="keywordtype">void</span> <a class="code" href="classKPropertiesDialog.html#a4481db1837bd6687fb78b0f2b24b8ce2" title="Called when the user presses &#39;Cancel&#39;.">KPropertiesDialog::slotCancel</a>()
<a name="l00440"></a>00440 {
<a name="l00441"></a>00441   emit <a class="code" href="classKPropertiesDialog.html#aef0dc3f68709df24ca0a63f42b4c7c25" title="This signal is emitted when the properties changes are aborted (for example, with the Cancel button)...">canceled</a>();
<a name="l00442"></a>00442   emit <a class="code" href="classKPropertiesDialog.html#a76ed20d12e74a6fd141cace53a2e5fcf" title="This signal is emitted when the Properties Dialog is closed (for example, with OK or Cancel buttons)...">propertiesClosed</a>();
<a name="l00443"></a>00443 
<a name="l00444"></a>00444   deleteLater();
<a name="l00445"></a>00445   done( Rejected );
<a name="l00446"></a>00446 }
<a name="l00447"></a>00447 
<a name="l00448"></a>00448 <span class="keywordtype">void</span> KPropertiesDialog::insertPages()
<a name="l00449"></a>00449 {
<a name="l00450"></a>00450   <span class="keywordflow">if</span> (m_items.isEmpty())
<a name="l00451"></a>00451     <span class="keywordflow">return</span>;
<a name="l00452"></a>00452 
<a name="l00453"></a>00453   <span class="keywordflow">if</span> ( <a class="code" href="classKFilePropsPlugin.html#a3e3d1f7eade99e76cbaab017b6f62e5d" title="Tests whether the files specified by _items need a &#39;General&#39; plugin.">KFilePropsPlugin::supports</a>( m_items ) )
<a name="l00454"></a>00454   {
<a name="l00455"></a>00455     <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a> *p = <span class="keyword">new</span> <a class="code" href="classKFilePropsPlugin.html" title="&#39;General&#39; plugin This plugin displays the name of the file, its size and access times.">KFilePropsPlugin</a>( <span class="keyword">this</span> );
<a name="l00456"></a>00456     <a class="code" href="classKPropertiesDialog.html#a0c65bc7f29308405f7f9dde77c8f6fdf" title="Adds a &quot;3rd party&quot; properties plugin to the dialog.">insertPlugin</a> (p);
<a name="l00457"></a>00457   }
<a name="l00458"></a>00458 
<a name="l00459"></a>00459   <span class="keywordflow">if</span> ( <a class="code" href="classKFilePermissionsPropsPlugin.html#ae1800d8c4c9dd56c50c532117895acb4" title="Tests whether the file specified by _items needs a &#39;Permissions&#39; plugin.">KFilePermissionsPropsPlugin::supports</a>( m_items ) )
<a name="l00460"></a>00460   {
<a name="l00461"></a>00461     <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a> *p = <span class="keyword">new</span> <a class="code" href="classKFilePermissionsPropsPlugin.html" title="&#39;Permissions&#39; plugin In this plugin you can modify permissions and change the owner of a file...">KFilePermissionsPropsPlugin</a>( <span class="keyword">this</span> );
<a name="l00462"></a>00462     <a class="code" href="classKPropertiesDialog.html#a0c65bc7f29308405f7f9dde77c8f6fdf" title="Adds a &quot;3rd party&quot; properties plugin to the dialog.">insertPlugin</a> (p);
<a name="l00463"></a>00463   }
<a name="l00464"></a>00464 
<a name="l00465"></a>00465   <span class="keywordflow">if</span> ( KDesktopPropsPlugin::supports( m_items ) )
<a name="l00466"></a>00466   {
<a name="l00467"></a>00467     <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a> *p = <span class="keyword">new</span> <a class="code" href="classKDesktopPropsPlugin.html" title="Used to edit the files containing [Desktop Entry] Type=Application.">KDesktopPropsPlugin</a>( <span class="keyword">this</span> );
<a name="l00468"></a>00468     <a class="code" href="classKPropertiesDialog.html#a0c65bc7f29308405f7f9dde77c8f6fdf" title="Adds a &quot;3rd party&quot; properties plugin to the dialog.">insertPlugin</a> (p);
<a name="l00469"></a>00469   }
<a name="l00470"></a>00470 
<a name="l00471"></a>00471   <span class="keywordflow">if</span> ( KBindingPropsPlugin::supports( m_items ) )
<a name="l00472"></a>00472   {
<a name="l00473"></a>00473     <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a> *p = <span class="keyword">new</span> <a class="code" href="classKBindingPropsPlugin.html" title="Used to edit the files containing [Desktop Entry] Type=MimeType.">KBindingPropsPlugin</a>( <span class="keyword">this</span> );
<a name="l00474"></a>00474     <a class="code" href="classKPropertiesDialog.html#a0c65bc7f29308405f7f9dde77c8f6fdf" title="Adds a &quot;3rd party&quot; properties plugin to the dialog.">insertPlugin</a> (p);
<a name="l00475"></a>00475   }
<a name="l00476"></a>00476 
<a name="l00477"></a>00477   <span class="keywordflow">if</span> ( KURLPropsPlugin::supports( m_items ) )
<a name="l00478"></a>00478   {
<a name="l00479"></a>00479     <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a> *p = <span class="keyword">new</span> <a class="code" href="classKURLPropsPlugin.html" title="Used to edit the files containing [Desktop Entry] URL=....">KURLPropsPlugin</a>( <span class="keyword">this</span> );
<a name="l00480"></a>00480     <a class="code" href="classKPropertiesDialog.html#a0c65bc7f29308405f7f9dde77c8f6fdf" title="Adds a &quot;3rd party&quot; properties plugin to the dialog.">insertPlugin</a> (p);
<a name="l00481"></a>00481   }
<a name="l00482"></a>00482 
<a name="l00483"></a>00483   <span class="keywordflow">if</span> ( KDevicePropsPlugin::supports( m_items ) )
<a name="l00484"></a>00484   {
<a name="l00485"></a>00485     <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a> *p = <span class="keyword">new</span> <a class="code" href="classKDevicePropsPlugin.html" title="Properties plugin for device .desktop files.">KDevicePropsPlugin</a>( <span class="keyword">this</span> );
<a name="l00486"></a>00486     <a class="code" href="classKPropertiesDialog.html#a0c65bc7f29308405f7f9dde77c8f6fdf" title="Adds a &quot;3rd party&quot; properties plugin to the dialog.">insertPlugin</a> (p);
<a name="l00487"></a>00487   }
<a name="l00488"></a>00488 
<a name="l00489"></a>00489   <span class="keywordflow">if</span> ( <a class="code" href="classKFileMetaPropsPlugin.html#a65e73bc476c67fd6736329437f27204f" title="Tests whether the file specified by _items has a &#39;MetaInfo&#39; plugin.">KFileMetaPropsPlugin::supports</a>( m_items ) )
<a name="l00490"></a>00490   {
<a name="l00491"></a>00491     <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a> *p = <span class="keyword">new</span> <a class="code" href="classKFileMetaPropsPlugin.html">KFileMetaPropsPlugin</a>( <span class="keyword">this</span> );
<a name="l00492"></a>00492     <a class="code" href="classKPropertiesDialog.html#a0c65bc7f29308405f7f9dde77c8f6fdf" title="Adds a &quot;3rd party&quot; properties plugin to the dialog.">insertPlugin</a> (p);
<a name="l00493"></a>00493   }
<a name="l00494"></a>00494 
<a name="l00495"></a>00495   <span class="keywordflow">if</span> ( <a class="code" href="classKPreviewPropsPlugin.html#ae32ca21994d9479cb61ef74c73ee681d" title="Tests whether a preview for the first item should be shown.">KPreviewPropsPlugin::supports</a>( m_items ) )
<a name="l00496"></a>00496   {
<a name="l00497"></a>00497     <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a> *p = <span class="keyword">new</span> <a class="code" href="classKPreviewPropsPlugin.html">KPreviewPropsPlugin</a>( <span class="keyword">this</span> );
<a name="l00498"></a>00498     <a class="code" href="classKPropertiesDialog.html#a0c65bc7f29308405f7f9dde77c8f6fdf" title="Adds a &quot;3rd party&quot; properties plugin to the dialog.">insertPlugin</a> (p);
<a name="l00499"></a>00499   }
<a name="l00500"></a>00500 
<a name="l00501"></a>00501   <span class="keywordflow">if</span> ( kapp-&gt;authorizeKAction(<span class="stringliteral">&quot;sharefile&quot;</span>) &amp;&amp;
<a name="l00502"></a>00502        KFileSharePropsPlugin::supports( m_items ) )
<a name="l00503"></a>00503   {
<a name="l00504"></a>00504     <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a> *p = <span class="keyword">new</span> <a class="code" href="classKFileSharePropsPlugin.html" title="This plugin provides a page to KPropsDlg, showing the &quot;file sharing&quot; options.">KFileSharePropsPlugin</a>( <span class="keyword">this</span> );
<a name="l00505"></a>00505     <a class="code" href="classKPropertiesDialog.html#a0c65bc7f29308405f7f9dde77c8f6fdf" title="Adds a &quot;3rd party&quot; properties plugin to the dialog.">insertPlugin</a> (p);
<a name="l00506"></a>00506   }
<a name="l00507"></a>00507 
<a name="l00508"></a>00508   <span class="comment">//plugins</span>
<a name="l00509"></a>00509 
<a name="l00510"></a>00510   <span class="keywordflow">if</span> ( m_items.count() != 1 )
<a name="l00511"></a>00511     <span class="keywordflow">return</span>;
<a name="l00512"></a>00512 
<a name="l00513"></a>00513   KFileItem *<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a> = m_items.first();
<a name="l00514"></a>00514   <a class="codeRef" href="qstring.html">QString</a> mimetype = item-&gt;mimetype();
<a name="l00515"></a>00515 
<a name="l00516"></a>00516   <span class="keywordflow">if</span> ( mimetype.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() )
<a name="l00517"></a>00517     <span class="keywordflow">return</span>;
<a name="l00518"></a>00518 
<a name="l00519"></a>00519   <a class="codeRef" href="qstring.html">QString</a> query = <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(
<a name="l00520"></a>00520       <span class="stringliteral">&quot;(&#39;KPropsDlg/Plugin&#39; in ServiceTypes) and &quot;</span>
<a name="l00521"></a>00521       <span class="stringliteral">&quot;((not exist [X-KDE-Protocol]) or &quot;</span>
<a name="l00522"></a>00522       <span class="stringliteral">&quot; ([X-KDE-Protocol] == &#39;%1&#39;  )   )&quot;</span>          ).arg(item-&gt;url().protocol());
<a name="l00523"></a>00523 
<a name="l00524"></a>00524   kdDebug( 250 ) &lt;&lt; <span class="stringliteral">&quot;trader query: &quot;</span> &lt;&lt; query &lt;&lt; endl;
<a name="l00525"></a>00525   KTrader::OfferList offers = KTrader::self()-&gt;query( mimetype, query );
<a name="l00526"></a>00526   KTrader::OfferList::ConstIterator it = offers.begin();
<a name="l00527"></a>00527   KTrader::OfferList::ConstIterator end = offers.end();
<a name="l00528"></a>00528   <span class="keywordflow">for</span> (; it != end; ++it )
<a name="l00529"></a>00529   {
<a name="l00530"></a>00530     <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a> *plugin = KParts::ComponentFactory
<a name="l00531"></a>00531         ::createInstanceFromLibrary&lt;KPropsDlgPlugin&gt;( (*it)-&gt;library().local8Bit().data(),
<a name="l00532"></a>00532                                                       <span class="keyword">this</span>,
<a name="l00533"></a>00533                                                       (*it)-&gt;name().latin1() );
<a name="l00534"></a>00534     <span class="keywordflow">if</span> ( !plugin )
<a name="l00535"></a>00535         <span class="keywordflow">continue</span>;
<a name="l00536"></a>00536 
<a name="l00537"></a>00537     <a class="code" href="classKPropertiesDialog.html#a0c65bc7f29308405f7f9dde77c8f6fdf" title="Adds a &quot;3rd party&quot; properties plugin to the dialog.">insertPlugin</a>( plugin );
<a name="l00538"></a>00538   }
<a name="l00539"></a>00539 }
<a name="l00540"></a>00540 
<a name="l00541"></a><a class="code" href="classKPropertiesDialog.html#a44cb58947aaa81a32f1a653112dde229">00541</a> <span class="keywordtype">void</span> <a class="code" href="classKPropertiesDialog.html#a44cb58947aaa81a32f1a653112dde229" title="Updates the item URL (either called by rename or because a global apps/mimelnk desktop file is being ...">KPropertiesDialog::updateUrl</a>( <span class="keyword">const</span> KURL&amp; _newUrl )
<a name="l00542"></a>00542 {
<a name="l00543"></a>00543   Q_ASSERT( m_items.count() == 1 );
<a name="l00544"></a>00544   kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;KPropertiesDialog::updateUrl (pre)&quot;</span> &lt;&lt; _newUrl.url() &lt;&lt; endl;
<a name="l00545"></a>00545   KURL newUrl = _newUrl;
<a name="l00546"></a>00546   emit <a class="code" href="classKPropertiesDialog.html#ad2ac09167f99cb97e105dec1bb81703e" title="Emitted before changes to oldUrl are saved as newUrl.">saveAs</a>(m_singleUrl, newUrl);
<a name="l00547"></a>00547   kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;KPropertiesDialog::updateUrl (post)&quot;</span> &lt;&lt; newUrl.url() &lt;&lt; endl;
<a name="l00548"></a>00548 
<a name="l00549"></a>00549   m_singleUrl = newUrl;
<a name="l00550"></a>00550   m_items.first()-&gt;setURL( newUrl );
<a name="l00551"></a>00551   assert(!m_singleUrl.isEmpty());
<a name="l00552"></a>00552   <span class="comment">// If we have an Desktop page, set it dirty, so that a full file is saved locally</span>
<a name="l00553"></a>00553   <span class="comment">// Same for a URL page (because of the Name= hack)</span>
<a name="l00554"></a>00554   <span class="keywordflow">for</span> ( <a class="codeRef" href="qptrlistiterator.html">QPtrListIterator&lt;KPropsDlgPlugin&gt;</a> it(m_pageList); it.<a class="codeRef" href="qptrlistiterator.html#current">current</a>(); ++it )
<a name="l00555"></a>00555    <span class="keywordflow">if</span> ( it.current()-&gt;isA(<span class="stringliteral">&quot;KExecPropsPlugin&quot;</span>) || <span class="comment">// KDE4 remove me</span>
<a name="l00556"></a>00556         it.current()-&gt;isA(<span class="stringliteral">&quot;KURLPropsPlugin&quot;</span>) ||
<a name="l00557"></a>00557         it.current()-&gt;isA(<span class="stringliteral">&quot;KDesktopPropsPlugin&quot;</span>))
<a name="l00558"></a>00558    {
<a name="l00559"></a>00559      <span class="comment">//kdDebug(250) &lt;&lt; &quot;Setting page dirty&quot; &lt;&lt; endl;</span>
<a name="l00560"></a>00560      it.current()-&gt;setDirty();
<a name="l00561"></a>00561      <span class="keywordflow">break</span>;
<a name="l00562"></a>00562    }
<a name="l00563"></a>00563 }
<a name="l00564"></a>00564 
<a name="l00565"></a><a class="code" href="classKPropertiesDialog.html#adf86c06051ecc55dfd631c6757a82460">00565</a> <span class="keywordtype">void</span> <a class="code" href="classKPropertiesDialog.html#adf86c06051ecc55dfd631c6757a82460" title="Renames the item to the specified name.">KPropertiesDialog::rename</a>( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; _name )
<a name="l00566"></a>00566 {
<a name="l00567"></a>00567   Q_ASSERT( m_items.count() == 1 );
<a name="l00568"></a>00568   kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;KPropertiesDialog::rename &quot;</span> &lt;&lt; _name &lt;&lt; endl;
<a name="l00569"></a>00569   KURL newUrl;
<a name="l00570"></a>00570   <span class="comment">// if we&#39;re creating from a template : use currentdir</span>
<a name="l00571"></a>00571   <span class="keywordflow">if</span> ( !m_currentDir.isEmpty() )
<a name="l00572"></a>00572   {
<a name="l00573"></a>00573     newUrl = m_currentDir;
<a name="l00574"></a>00574     newUrl.addPath( _name );
<a name="l00575"></a>00575   }
<a name="l00576"></a>00576   <span class="keywordflow">else</span>
<a name="l00577"></a>00577   {
<a name="l00578"></a>00578     <a class="codeRef" href="qstring.html">QString</a> tmpurl = m_singleUrl.url();
<a name="l00579"></a>00579     <span class="keywordflow">if</span> ( tmpurl.<a class="codeRef" href="qstring.html#at">at</a>(tmpurl.<a class="codeRef" href="qstring.html#length">length</a>() - 1) == <span class="charliteral">&#39;/&#39;</span>)
<a name="l00580"></a>00580       <span class="comment">// It&#39;s a directory, so strip the trailing slash first</span>
<a name="l00581"></a>00581       tmpurl.<a class="codeRef" href="qstring.html#truncate">truncate</a>( tmpurl.<a class="codeRef" href="qstring.html#length">length</a>() - 1);
<a name="l00582"></a>00582     newUrl = tmpurl;
<a name="l00583"></a>00583     newUrl.setFileName( _name );
<a name="l00584"></a>00584   }
<a name="l00585"></a>00585   <a class="code" href="classKPropertiesDialog.html#a44cb58947aaa81a32f1a653112dde229" title="Updates the item URL (either called by rename or because a global apps/mimelnk desktop file is being ...">updateUrl</a>( newUrl );
<a name="l00586"></a>00586 }
<a name="l00587"></a>00587 
<a name="l00588"></a><a class="code" href="classKPropertiesDialog.html#a6193a34255bae07ec1573943cfb68bf1">00588</a> <span class="keywordtype">void</span> <a class="code" href="classKPropertiesDialog.html#a6193a34255bae07ec1573943cfb68bf1" title="To abort applying changes.">KPropertiesDialog::abortApplying</a>()
<a name="l00589"></a>00589 {
<a name="l00590"></a>00590   d-&gt;m_aborted = <span class="keyword">true</span>;
<a name="l00591"></a>00591 }
<a name="l00592"></a>00592 
<a name="l00593"></a>00593 <span class="keyword">class </span>KPropsDlgPlugin::KPropsDlgPluginPrivate
<a name="l00594"></a>00594 {
<a name="l00595"></a>00595 <span class="keyword">public</span>:
<a name="l00596"></a>00596   KPropsDlgPluginPrivate()
<a name="l00597"></a>00597   {
<a name="l00598"></a>00598   }
<a name="l00599"></a>00599   ~KPropsDlgPluginPrivate()
<a name="l00600"></a>00600   {
<a name="l00601"></a>00601   }
<a name="l00602"></a>00602 
<a name="l00603"></a>00603   <span class="keywordtype">bool</span> m_bDirty;
<a name="l00604"></a>00604 };
<a name="l00605"></a>00605 
<a name="l00606"></a><a class="code" href="classKPropsDlgPlugin.html#a98d1c8f87e2119c9e1f11c9bafa06da1">00606</a> <a class="code" href="classKPropsDlgPlugin.html#a98d1c8f87e2119c9e1f11c9bafa06da1" title="Constructor To insert tabs into the properties dialog, use the add methods provided by KDialogBase (t...">KPropsDlgPlugin::KPropsDlgPlugin</a>( <a class="code" href="classKPropertiesDialog.html" title="The main properties dialog class.">KPropertiesDialog</a> *_props )
<a name="l00607"></a>00607 : <a class="codeRef" href="qobject.html">QObject</a>( _props, 0L )
<a name="l00608"></a>00608 {
<a name="l00609"></a>00609   d = <span class="keyword">new</span> KPropsDlgPluginPrivate;
<a name="l00610"></a>00610   <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a> = _props;
<a name="l00611"></a>00611   fontHeight = 2*<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;fontMetrics().height();
<a name="l00612"></a>00612   d-&gt;m_bDirty = <span class="keyword">false</span>;
<a name="l00613"></a>00613 }
<a name="l00614"></a>00614 
<a name="l00615"></a>00615 KPropsDlgPlugin::~KPropsDlgPlugin()
<a name="l00616"></a>00616 {
<a name="l00617"></a>00617   <span class="keyword">delete</span> d;
<a name="l00618"></a>00618 }
<a name="l00619"></a>00619 
<a name="l00620"></a><a class="code" href="classKPropsDlgPlugin.html#ad29f1d332d93035d3ae2278ba25b2803">00620</a> <span class="keywordtype">bool</span> <a class="code" href="classKPropsDlgPlugin.html#ad29f1d332d93035d3ae2278ba25b2803" title="Convenience method for most ::supports methods.">KPropsDlgPlugin::isDesktopFile</a>( KFileItem * _item )
<a name="l00621"></a>00621 {
<a name="l00622"></a>00622   <span class="comment">// only local files</span>
<a name="l00623"></a>00623   <span class="keywordtype">bool</span> isLocal;
<a name="l00624"></a>00624   KURL url = _item-&gt;mostLocalURL( isLocal );
<a name="l00625"></a>00625   <span class="keywordflow">if</span> ( !isLocal )
<a name="l00626"></a>00626     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00627"></a>00627 
<a name="l00628"></a>00628   <span class="comment">// only regular files</span>
<a name="l00629"></a>00629   <span class="keywordflow">if</span> ( !S_ISREG( _item-&gt;mode() ) )
<a name="l00630"></a>00630     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00631"></a>00631 
<a name="l00632"></a>00632   <a class="codeRef" href="qstring.html">QString</a> t( url.path() );
<a name="l00633"></a>00633 
<a name="l00634"></a>00634   <span class="comment">// only if readable</span>
<a name="l00635"></a>00635   FILE *f = fopen( <a class="codeRef" href="qfile.html#encodeName">QFile::encodeName</a>(t), <span class="stringliteral">&quot;r&quot;</span> );
<a name="l00636"></a>00636   <span class="keywordflow">if</span> ( f == 0L )
<a name="l00637"></a>00637     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00638"></a>00638   fclose(f);
<a name="l00639"></a>00639 
<a name="l00640"></a>00640   <span class="comment">// return true if desktop file</span>
<a name="l00641"></a>00641   <span class="keywordflow">return</span> ( _item-&gt;mimetype() == <span class="stringliteral">&quot;application/x-desktop&quot;</span> );
<a name="l00642"></a>00642 }
<a name="l00643"></a>00643 
<a name="l00644"></a>00644 <span class="keywordtype">void</span> KPropsDlgPlugin::setDirty( <span class="keywordtype">bool</span> b )
<a name="l00645"></a>00645 {
<a name="l00646"></a>00646   d-&gt;m_bDirty = b;
<a name="l00647"></a>00647 }
<a name="l00648"></a>00648 
<a name="l00649"></a>00649 <span class="keywordtype">void</span> KPropsDlgPlugin::setDirty()
<a name="l00650"></a>00650 {
<a name="l00651"></a>00651   d-&gt;m_bDirty = <span class="keyword">true</span>;
<a name="l00652"></a>00652 }
<a name="l00653"></a>00653 
<a name="l00654"></a>00654 <span class="keywordtype">bool</span> KPropsDlgPlugin::isDirty()<span class="keyword"> const</span>
<a name="l00655"></a>00655 <span class="keyword"></span>{
<a name="l00656"></a>00656   <span class="keywordflow">return</span> d-&gt;m_bDirty;
<a name="l00657"></a>00657 }
<a name="l00658"></a>00658 
<a name="l00659"></a><a class="code" href="classKPropsDlgPlugin.html#ac1e2d1cbaf76527cbe55d56dd564b4a1">00659</a> <span class="keywordtype">void</span> <a class="code" href="classKPropsDlgPlugin.html#ac1e2d1cbaf76527cbe55d56dd564b4a1" title="Applies all changes to the file.">KPropsDlgPlugin::applyChanges</a>()
<a name="l00660"></a>00660 {
<a name="l00661"></a>00661   kdWarning(250) &lt;&lt; <span class="stringliteral">&quot;applyChanges() not implemented in page !&quot;</span> &lt;&lt; endl;
<a name="l00662"></a>00662 }
<a name="l00663"></a>00663 
<a name="l00665"></a>00665 
<a name="l00666"></a>00666 <span class="keyword">class </span>KFilePropsPlugin::KFilePropsPluginPrivate
<a name="l00667"></a>00667 {
<a name="l00668"></a>00668 <span class="keyword">public</span>:
<a name="l00669"></a>00669   KFilePropsPluginPrivate()
<a name="l00670"></a>00670   {
<a name="l00671"></a>00671     dirSizeJob = 0L;
<a name="l00672"></a>00672     dirSizeUpdateTimer = 0L;
<a name="l00673"></a>00673     m_lined = 0;
<a name="l00674"></a>00674     m_freeSpaceLabel = 0;
<a name="l00675"></a>00675   }
<a name="l00676"></a>00676   ~KFilePropsPluginPrivate()
<a name="l00677"></a>00677   {
<a name="l00678"></a>00678     <span class="keywordflow">if</span> ( dirSizeJob )
<a name="l00679"></a>00679       dirSizeJob-&gt;kill();
<a name="l00680"></a>00680   }
<a name="l00681"></a>00681 
<a name="l00682"></a>00682   <a class="code" href="classKDirSize.html" title="Computes a directory size (similar to &quot;du&quot;, but doesn&#39;t give the same results since we simply sum u...">KDirSize</a> * dirSizeJob;
<a name="l00683"></a>00683   <a class="codeRef" href="qtimer.html">QTimer</a> *dirSizeUpdateTimer;
<a name="l00684"></a>00684   <a class="codeRef" href="qframe.html">QFrame</a> *m_frame;
<a name="l00685"></a>00685   <span class="keywordtype">bool</span> bMultiple;
<a name="l00686"></a>00686   <span class="keywordtype">bool</span> bIconChanged;
<a name="l00687"></a>00687   <span class="keywordtype">bool</span> bKDesktopMode;
<a name="l00688"></a>00688   <span class="keywordtype">bool</span> bDesktopFile;
<a name="l00689"></a>00689   <a class="codeRef" href="qlabel.html">QLabel</a> *m_freeSpaceLabel;
<a name="l00690"></a>00690   <a class="codeRef" href="qstring.html">QString</a> mimeType;
<a name="l00691"></a>00691   <a class="codeRef" href="qstring.html">QString</a> oldFileName;
<a name="l00692"></a>00692   KLineEdit* m_lined;
<a name="l00693"></a>00693 };
<a name="l00694"></a>00694 
<a name="l00695"></a><a class="code" href="classKFilePropsPlugin.html#a5e7d8cfaefd4e49992dc849f7ed6a632">00695</a> <a class="code" href="classKFilePropsPlugin.html#a5e7d8cfaefd4e49992dc849f7ed6a632" title="Constructor.">KFilePropsPlugin::KFilePropsPlugin</a>( <a class="code" href="classKPropertiesDialog.html" title="The main properties dialog class.">KPropertiesDialog</a> *_props )
<a name="l00696"></a>00696   : <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a>( _props )
<a name="l00697"></a>00697 {
<a name="l00698"></a>00698   d = <span class="keyword">new</span> KFilePropsPluginPrivate;
<a name="l00699"></a>00699   d-&gt;bMultiple = (<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>().count() &gt; 1);
<a name="l00700"></a>00700   d-&gt;bIconChanged = <span class="keyword">false</span>;
<a name="l00701"></a>00701   d-&gt;bKDesktopMode = (<a class="codeRef" href="qcstring.html">QCString</a>(qApp-&gt;name()) == <span class="stringliteral">&quot;kdesktop&quot;</span>); <span class="comment">// nasty heh?</span>
<a name="l00702"></a>00702   d-&gt;bDesktopFile = <a class="code" href="classKFilePropsPlugin.html#a3e3d1f7eade99e76cbaab017b6f62e5d" title="Tests whether the files specified by _items need a &#39;General&#39; plugin.">KDesktopPropsPlugin::supports</a>(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>());
<a name="l00703"></a>00703   kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;KFilePropsPlugin::KFilePropsPlugin bMultiple=&quot;</span> &lt;&lt; d-&gt;bMultiple &lt;&lt; endl;
<a name="l00704"></a>00704 
<a name="l00705"></a>00705   <span class="comment">// We set this data from the first item, and we&#39;ll</span>
<a name="l00706"></a>00706   <span class="comment">// check that the other items match against it, resetting when not.</span>
<a name="l00707"></a>00707   <span class="keywordtype">bool</span> isLocal;
<a name="l00708"></a>00708   KFileItem * item = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a>();
<a name="l00709"></a>00709   KURL url = item-&gt;mostLocalURL( isLocal );
<a name="l00710"></a>00710   <span class="keywordtype">bool</span> isReallyLocal = item-&gt;url().isLocalFile();
<a name="l00711"></a>00711   <span class="keywordtype">bool</span> bDesktopFile = <a class="code" href="classKPropsDlgPlugin.html#ad29f1d332d93035d3ae2278ba25b2803" title="Convenience method for most ::supports methods.">isDesktopFile</a>(item);
<a name="l00712"></a>00712   kdDebug() &lt;&lt; <span class="stringliteral">&quot;url=&quot;</span> &lt;&lt; url &lt;&lt; <span class="stringliteral">&quot; bDesktopFile=&quot;</span> &lt;&lt; bDesktopFile &lt;&lt; <span class="stringliteral">&quot; isLocal=&quot;</span> &lt;&lt; isLocal &lt;&lt; <span class="stringliteral">&quot; isReallyLocal=&quot;</span> &lt;&lt; isReallyLocal &lt;&lt; endl;
<a name="l00713"></a>00713   mode_t mode = item-&gt;mode();
<a name="l00714"></a>00714   <span class="keywordtype">bool</span> hasDirs = item-&gt;isDir() &amp;&amp; !item-&gt;isLink();
<a name="l00715"></a>00715   <span class="keywordtype">bool</span> hasRoot = url.path() == <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;/&quot;</span>);
<a name="l00716"></a>00716   <a class="codeRef" href="qstring.html">QString</a> iconStr = KMimeType::iconForURL(url, mode);
<a name="l00717"></a>00717   <a class="codeRef" href="qstring.html">QString</a> directory = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().directory();
<a name="l00718"></a>00718   <a class="codeRef" href="qstring.html">QString</a> protocol = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().protocol();
<a name="l00719"></a>00719   <a class="codeRef" href="qstring.html">QString</a> mimeComment = item-&gt;mimeComment();
<a name="l00720"></a>00720   d-&gt;mimeType = item-&gt;mimetype();
<a name="l00721"></a>00721   <span class="keywordtype">bool</span> hasTotalSize;
<a name="l00722"></a>00722   KIO::filesize_t totalSize = item-&gt;size(hasTotalSize);
<a name="l00723"></a>00723   <a class="codeRef" href="qstring.html">QString</a> magicMimeComment;
<a name="l00724"></a>00724   <span class="keywordflow">if</span> ( isLocal ) {
<a name="l00725"></a>00725       KMimeType::Ptr magicMimeType = KMimeType::findByFileContent( url.path() );
<a name="l00726"></a>00726       <span class="keywordflow">if</span> ( magicMimeType-&gt;name() != KMimeType::defaultMimeType() )
<a name="l00727"></a>00727           magicMimeComment = magicMimeType-&gt;comment();
<a name="l00728"></a>00728   }
<a name="l00729"></a>00729 
<a name="l00730"></a>00730   <span class="comment">// Those things only apply to &#39;single file&#39; mode</span>
<a name="l00731"></a>00731   <a class="codeRef" href="qstring.html">QString</a> filename = QString::null;
<a name="l00732"></a>00732   <span class="keywordtype">bool</span> isTrash = <span class="keyword">false</span>;
<a name="l00733"></a>00733   <span class="keywordtype">bool</span> isDevice = <span class="keyword">false</span>;
<a name="l00734"></a>00734   m_bFromTemplate = <span class="keyword">false</span>;
<a name="l00735"></a>00735 
<a name="l00736"></a>00736   <span class="comment">// And those only to &#39;multiple&#39; mode</span>
<a name="l00737"></a>00737   uint iDirCount = hasDirs ? 1 : 0;
<a name="l00738"></a>00738   uint iFileCount = 1-iDirCount;
<a name="l00739"></a>00739 
<a name="l00740"></a>00740   d-&gt;m_frame = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;addPage (i18n(<span class="stringliteral">&quot;&amp;General&quot;</span>));
<a name="l00741"></a>00741 
<a name="l00742"></a>00742   <a class="codeRef" href="qvboxlayout.html">QVBoxLayout</a> *vbl = <span class="keyword">new</span> <a class="codeRef" href="qvboxlayout.html">QVBoxLayout</a>( d-&gt;m_frame, 0,
<a name="l00743"></a>00743                                       KDialog::spacingHint(), <span class="stringliteral">&quot;vbl&quot;</span>);
<a name="l00744"></a>00744   <a class="codeRef" href="qgridlayout.html">QGridLayout</a> *grid = <span class="keyword">new</span> <a class="codeRef" href="qgridlayout.html">QGridLayout</a>(0, 3); <span class="comment">// unknown rows</span>
<a name="l00745"></a>00745   grid-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(0, 0);
<a name="l00746"></a>00746   grid-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(1, 0);
<a name="l00747"></a>00747   grid-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(2, 1);
<a name="l00748"></a>00748   grid-&gt;<a class="codeRef" href="qgridlayout.html#addColSpacing">addColSpacing</a>(1, KDialog::spacingHint());
<a name="l00749"></a>00749   vbl-&gt;addLayout(grid);
<a name="l00750"></a>00750   <span class="keywordtype">int</span> curRow = 0;
<a name="l00751"></a>00751 
<a name="l00752"></a>00752   <span class="keywordflow">if</span> ( !d-&gt;bMultiple )
<a name="l00753"></a>00753   {
<a name="l00754"></a>00754     <a class="codeRef" href="qstring.html">QString</a> path;
<a name="l00755"></a>00755     <span class="keywordflow">if</span> ( !m_bFromTemplate ) {
<a name="l00756"></a>00756       isTrash = ( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().protocol().find( <span class="stringliteral">&quot;trash&quot;</span>, 0, <span class="keyword">false</span>)==0 );
<a name="l00757"></a>00757       <span class="keywordflow">if</span> ( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().protocol().find(<span class="stringliteral">&quot;device&quot;</span>, 0, <span class="keyword">false</span>)==0)
<a name="l00758"></a>00758             isDevice = <span class="keyword">true</span>;
<a name="l00759"></a>00759       <span class="comment">// Extract the full name, but without file: for local files</span>
<a name="l00760"></a>00760       <span class="keywordflow">if</span> ( isReallyLocal )
<a name="l00761"></a>00761         path = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path();
<a name="l00762"></a>00762       <span class="keywordflow">else</span>
<a name="l00763"></a>00763         path = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().prettyURL();
<a name="l00764"></a>00764     } <span class="keywordflow">else</span> {
<a name="l00765"></a>00765       path = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a3ecaeeb9e95db28fbb9ef5c629b4c4c0" title="If the dialog is being built from a template, this method returns the current directory.">currentDir</a>().path(1) + <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#acb28cff7d887a493d44533e9ee487451" title="If the dialog is being built from a template, this method returns the default name.">defaultName</a>();
<a name="l00766"></a>00766       directory = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a3ecaeeb9e95db28fbb9ef5c629b4c4c0" title="If the dialog is being built from a template, this method returns the current directory.">currentDir</a>().prettyURL();
<a name="l00767"></a>00767     }
<a name="l00768"></a>00768 
<a name="l00769"></a>00769     <span class="keywordflow">if</span> (KExecPropsPlugin::supports(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>()) || <span class="comment">// KDE4 remove me</span>
<a name="l00770"></a>00770         d-&gt;bDesktopFile ||
<a name="l00771"></a>00771         KBindingPropsPlugin::supports(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>())) {
<a name="l00772"></a>00772       determineRelativePath( path );
<a name="l00773"></a>00773     }
<a name="l00774"></a>00774 
<a name="l00775"></a>00775     <span class="comment">// Extract the file name only</span>
<a name="l00776"></a>00776     filename = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#acb28cff7d887a493d44533e9ee487451" title="If the dialog is being built from a template, this method returns the default name.">defaultName</a>();
<a name="l00777"></a>00777     <span class="keywordflow">if</span> ( filename.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() ) { <span class="comment">// no template</span>
<a name="l00778"></a>00778       filename = item-&gt;name(); <span class="comment">// this gives support for UDS_NAME, e.g. for kio_trash or kio_system</span>
<a name="l00779"></a>00779     } <span class="keywordflow">else</span> {
<a name="l00780"></a>00780       m_bFromTemplate = <span class="keyword">true</span>;
<a name="l00781"></a>00781       setDirty(); <span class="comment">// to enforce that the copy happens</span>
<a name="l00782"></a>00782     }
<a name="l00783"></a>00783     d-&gt;oldFileName = filename;
<a name="l00784"></a>00784 
<a name="l00785"></a>00785     <span class="comment">// Make it human-readable</span>
<a name="l00786"></a>00786     filename = nameFromFileName( filename );
<a name="l00787"></a>00787 
<a name="l00788"></a>00788     <span class="keywordflow">if</span> ( d-&gt;bKDesktopMode &amp;&amp; d-&gt;bDesktopFile ) {
<a name="l00789"></a>00789         KDesktopFile config( url.path(), <span class="keyword">true</span> <span class="comment">/* readonly */</span> );
<a name="l00790"></a>00790         <span class="keywordflow">if</span> ( config.hasKey( <span class="stringliteral">&quot;Name&quot;</span> ) ) {
<a name="l00791"></a>00791             filename = config.readName();
<a name="l00792"></a>00792         }
<a name="l00793"></a>00793     }
<a name="l00794"></a>00794 
<a name="l00795"></a>00795     oldName = filename;
<a name="l00796"></a>00796   }
<a name="l00797"></a>00797   <span class="keywordflow">else</span>
<a name="l00798"></a>00798   {
<a name="l00799"></a>00799     <span class="comment">// Multiple items: see what they have in common</span>
<a name="l00800"></a>00800     KFileItemList items = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>();
<a name="l00801"></a>00801     KFileItemListIterator it( items );
<a name="l00802"></a>00802     <span class="keywordflow">for</span> ( ++it <span class="comment">/*no need to check the first one again*/</span> ; it.current(); ++it )
<a name="l00803"></a>00803     {
<a name="l00804"></a>00804       KURL url = (*it)-&gt;url();
<a name="l00805"></a>00805       kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;KFilePropsPlugin::KFilePropsPlugin &quot;</span> &lt;&lt; url.prettyURL() &lt;&lt; endl;
<a name="l00806"></a>00806       <span class="comment">// The list of things we check here should match the variables defined</span>
<a name="l00807"></a>00807       <span class="comment">// at the beginning of this method.</span>
<a name="l00808"></a>00808       <span class="keywordflow">if</span> ( url.isLocalFile() != isLocal )
<a name="l00809"></a>00809         isLocal = <span class="keyword">false</span>; <span class="comment">// not all local</span>
<a name="l00810"></a>00810       <span class="keywordflow">if</span> ( bDesktopFile &amp;&amp; <a class="code" href="classKPropsDlgPlugin.html#ad29f1d332d93035d3ae2278ba25b2803" title="Convenience method for most ::supports methods.">isDesktopFile</a>(*it) != bDesktopFile )
<a name="l00811"></a>00811         bDesktopFile = <span class="keyword">false</span>; <span class="comment">// not all desktop files</span>
<a name="l00812"></a>00812       <span class="keywordflow">if</span> ( (*it)-&gt;mode() != mode )
<a name="l00813"></a>00813         mode = (mode_t)0;
<a name="l00814"></a>00814       <span class="keywordflow">if</span> ( KMimeType::iconForURL(url, mode) != iconStr )
<a name="l00815"></a>00815         iconStr = <span class="stringliteral">&quot;kmultiple&quot;</span>;
<a name="l00816"></a>00816       <span class="keywordflow">if</span> ( url.directory() != directory )
<a name="l00817"></a>00817         directory = QString::null;
<a name="l00818"></a>00818       <span class="keywordflow">if</span> ( url.protocol() != protocol )
<a name="l00819"></a>00819         protocol = QString::null;
<a name="l00820"></a>00820       <span class="keywordflow">if</span> ( !mimeComment.<a class="codeRef" href="qstring.html#isNull">isNull</a>() &amp;&amp; (*it)-&gt;mimeComment() != mimeComment )
<a name="l00821"></a>00821         mimeComment = QString::null;
<a name="l00822"></a>00822       <span class="keywordflow">if</span> ( isLocal &amp;&amp; !magicMimeComment.<a class="codeRef" href="qstring.html#isNull">isNull</a>() ) {
<a name="l00823"></a>00823           KMimeType::Ptr magicMimeType = KMimeType::findByFileContent( url.path() );
<a name="l00824"></a>00824           <span class="keywordflow">if</span> ( magicMimeType-&gt;comment() != magicMimeComment )
<a name="l00825"></a>00825               magicMimeComment = QString::null;
<a name="l00826"></a>00826       }
<a name="l00827"></a>00827 
<a name="l00828"></a>00828       <span class="keywordflow">if</span> ( url.path() == <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;/&quot;</span>) )
<a name="l00829"></a>00829         hasRoot = <span class="keyword">true</span>;
<a name="l00830"></a>00830       <span class="keywordflow">if</span> ( (*it)-&gt;isDir() &amp;&amp; !(*it)-&gt;isLink() )
<a name="l00831"></a>00831       {
<a name="l00832"></a>00832         iDirCount++;
<a name="l00833"></a>00833         hasDirs = <span class="keyword">true</span>;
<a name="l00834"></a>00834       }
<a name="l00835"></a>00835       <span class="keywordflow">else</span>
<a name="l00836"></a>00836       {
<a name="l00837"></a>00837         iFileCount++;
<a name="l00838"></a>00838     <span class="keywordtype">bool</span> hasSize;
<a name="l00839"></a>00839         totalSize += (*it)-&gt;size(hasSize);
<a name="l00840"></a>00840     hasTotalSize = hasTotalSize || hasSize;
<a name="l00841"></a>00841       }
<a name="l00842"></a>00842     }
<a name="l00843"></a>00843   }
<a name="l00844"></a>00844 
<a name="l00845"></a>00845   <span class="keywordflow">if</span> (!isReallyLocal &amp;&amp; !protocol.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>())
<a name="l00846"></a>00846   {
<a name="l00847"></a>00847     directory += <span class="charliteral">&#39; &#39;</span>;
<a name="l00848"></a>00848     directory += <span class="charliteral">&#39;(&#39;</span>;
<a name="l00849"></a>00849     directory += protocol;
<a name="l00850"></a>00850     directory += <span class="charliteral">&#39;)&#39;</span>;
<a name="l00851"></a>00851   }
<a name="l00852"></a>00852 
<a name="l00853"></a>00853   <span class="keywordflow">if</span> ( !isDevice &amp;&amp; !isTrash &amp;&amp; (bDesktopFile || S_ISDIR(mode)) &amp;&amp; !d-&gt;bMultiple <span class="comment">/*not implemented for multiple*/</span> )
<a name="l00854"></a>00854   {
<a name="l00855"></a>00855     <a class="code" href="classKIconButton.html" title="A pushbutton for choosing an icon.">KIconButton</a> *iconButton = <span class="keyword">new</span> <a class="code" href="classKIconButton.html" title="A pushbutton for choosing an icon.">KIconButton</a>( d-&gt;m_frame );
<a name="l00856"></a>00856     <span class="keywordtype">int</span> bsize = 66 + 2 * iconButton-&gt;style().pixelMetric(QStyle::PM_ButtonMargin);
<a name="l00857"></a>00857     iconButton-&gt;setFixedSize(bsize, bsize);
<a name="l00858"></a>00858     iconButton-&gt;<a class="code" href="classKIconButton.html#afb6286f6ae9944ea9d903f5862981731" title="Sets the size of the icon to be shown / selected.">setIconSize</a>(48);
<a name="l00859"></a>00859     iconButton-&gt;<a class="code" href="classKIconButton.html#a45011737fe7e884d78132a2a56135b85" title="Sets a strict icon size policy for allowed icons.">setStrictIconSize</a>(<span class="keyword">false</span>);
<a name="l00860"></a>00860     <span class="comment">// This works for everything except Device icons on unmounted devices</span>
<a name="l00861"></a>00861     <span class="comment">// So we have to really open .desktop files</span>
<a name="l00862"></a>00862     <a class="codeRef" href="qstring.html">QString</a> iconStr = KMimeType::findByURL( url, mode )-&gt;icon( url, isLocal );
<a name="l00863"></a>00863     <span class="keywordflow">if</span> ( bDesktopFile &amp;&amp; isLocal )
<a name="l00864"></a>00864     {
<a name="l00865"></a>00865       KDesktopFile config( url.path(), true );
<a name="l00866"></a>00866       config.setDesktopGroup();
<a name="l00867"></a>00867       iconStr = config.readEntry( <span class="stringliteral">&quot;Icon&quot;</span> );
<a name="l00868"></a>00868       <span class="keywordflow">if</span> ( config.hasDeviceType() )
<a name="l00869"></a>00869     iconButton-&gt;<a class="code" href="classKIconButton.html#aae3658de70b382a4deda28fd020d76dc" title="Sets the icon group and context.">setIconType</a>( KIcon::Desktop, KIcon::Device );
<a name="l00870"></a>00870       <span class="keywordflow">else</span>
<a name="l00871"></a>00871     iconButton-&gt;<a class="code" href="classKIconButton.html#aae3658de70b382a4deda28fd020d76dc" title="Sets the icon group and context.">setIconType</a>( KIcon::Desktop, KIcon::Application );
<a name="l00872"></a>00872     } <span class="keywordflow">else</span>
<a name="l00873"></a>00873       iconButton-&gt;<a class="code" href="classKIconButton.html#aae3658de70b382a4deda28fd020d76dc" title="Sets the icon group and context.">setIconType</a>( KIcon::Desktop, KIcon::FileSystem );
<a name="l00874"></a>00874     iconButton-&gt;<a class="code" href="classKIconButton.html#a31714c65560fdfc8200a8ce8da2e18de" title="Sets the button&#39;s initial icon.">setIcon</a>(iconStr);
<a name="l00875"></a>00875     iconArea = iconButton;
<a name="l00876"></a>00876     <a class="codeRef" href="qobject.html#connect">connect</a>( iconButton, SIGNAL( iconChanged(<a class="codeRef" href="qstring.html">QString</a>) ),
<a name="l00877"></a>00877              <span class="keyword">this</span>, SLOT( slotIconChanged() ) );
<a name="l00878"></a>00878   } <span class="keywordflow">else</span> {
<a name="l00879"></a>00879     <a class="codeRef" href="qlabel.html">QLabel</a> *iconLabel = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame );
<a name="l00880"></a>00880     <span class="keywordtype">int</span> bsize = 66 + 2 * iconLabel-&gt;style().pixelMetric(QStyle::PM_ButtonMargin);
<a name="l00881"></a>00881     iconLabel-&gt;setFixedSize(bsize, bsize);
<a name="l00882"></a>00882     iconLabel-&gt;<a class="codeRef" href="qlabel.html#setPixmap">setPixmap</a>( KGlobal::iconLoader()-&gt;loadIcon( iconStr, KIcon::Desktop, 48) );
<a name="l00883"></a>00883     iconArea = iconLabel;
<a name="l00884"></a>00884   }
<a name="l00885"></a>00885   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(iconArea, curRow, 0, AlignLeft);
<a name="l00886"></a>00886 
<a name="l00887"></a>00887   <span class="keywordflow">if</span> (d-&gt;bMultiple || isTrash || isDevice || hasRoot)
<a name="l00888"></a>00888   {
<a name="l00889"></a>00889     <a class="codeRef" href="qlabel.html">QLabel</a> *lab = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(d-&gt;m_frame );
<a name="l00890"></a>00890     <span class="keywordflow">if</span> ( d-&gt;bMultiple )
<a name="l00891"></a>00891       lab-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( KIO::itemsSummaryString( iFileCount + iDirCount, iFileCount, iDirCount, 0, <span class="keyword">false</span> ) );
<a name="l00892"></a>00892     <span class="keywordflow">else</span>
<a name="l00893"></a>00893       lab-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( filename );
<a name="l00894"></a>00894     nameArea = lab;
<a name="l00895"></a>00895   } <span class="keywordflow">else</span>
<a name="l00896"></a>00896   {
<a name="l00897"></a>00897     d-&gt;m_lined = <span class="keyword">new</span> KLineEdit( d-&gt;m_frame );
<a name="l00898"></a>00898     d-&gt;m_lined-&gt;setText(filename);
<a name="l00899"></a>00899     nameArea = d-&gt;m_lined;
<a name="l00900"></a>00900     d-&gt;m_lined-&gt;setFocus();
<a name="l00901"></a>00901 
<a name="l00902"></a>00902     <span class="comment">// Enhanced rename: Don&#39;t highlight the file extension.</span>
<a name="l00903"></a>00903     <a class="codeRef" href="qstring.html">QString</a> pattern;
<a name="l00904"></a>00904     KServiceTypeFactory::self()-&gt;findFromPattern( filename, &amp;pattern );
<a name="l00905"></a>00905     <span class="keywordflow">if</span> (!pattern.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() &amp;&amp; pattern.<a class="codeRef" href="qstring.html#at">at</a>(0)==<span class="charliteral">&#39;*&#39;</span> &amp;&amp; pattern.<a class="codeRef" href="qstring.html#find">find</a>(<span class="charliteral">&#39;*&#39;</span>,1)==-1)
<a name="l00906"></a>00906       d-&gt;m_lined-&gt;setSelection(0, filename.<a class="codeRef" href="qstring.html#length">length</a>()-pattern.<a class="codeRef" href="qstring.html#stripWhiteSpace">stripWhiteSpace</a>().length()+1);
<a name="l00907"></a>00907     <span class="keywordflow">else</span>
<a name="l00908"></a>00908     {
<a name="l00909"></a>00909       <span class="keywordtype">int</span> lastDot = filename.<a class="codeRef" href="qstring.html#findRev">findRev</a>(<span class="charliteral">&#39;.&#39;</span>);
<a name="l00910"></a>00910       <span class="keywordflow">if</span> (lastDot &gt; 0)
<a name="l00911"></a>00911         d-&gt;m_lined-&gt;setSelection(0, lastDot);
<a name="l00912"></a>00912     }
<a name="l00913"></a>00913 
<a name="l00914"></a>00914     <a class="codeRef" href="qobject.html#connect">connect</a>( d-&gt;m_lined, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l00915"></a>00915              <span class="keyword">this</span>, SLOT( nameFileChanged(<span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ) );
<a name="l00916"></a>00916   }
<a name="l00917"></a>00917 
<a name="l00918"></a>00918   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(nameArea, curRow++, 2);
<a name="l00919"></a>00919 
<a name="l00920"></a>00920   KSeparator* sep = <span class="keyword">new</span> KSeparator( KSeparator::HLine, d-&gt;m_frame);
<a name="l00921"></a>00921   grid-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCellWidget">addMultiCellWidget</a>(sep, curRow, curRow, 0, 2);
<a name="l00922"></a>00922   ++curRow;
<a name="l00923"></a>00923 
<a name="l00924"></a>00924   <a class="codeRef" href="qlabel.html">QLabel</a> *l;
<a name="l00925"></a>00925   <span class="keywordflow">if</span> ( !mimeComment.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() &amp;&amp; !isDevice &amp;&amp; !isTrash)
<a name="l00926"></a>00926   {
<a name="l00927"></a>00927     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Type:&quot;</span>), d-&gt;m_frame );
<a name="l00928"></a>00928 
<a name="l00929"></a>00929     grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow, 0);
<a name="l00930"></a>00930 
<a name="l00931"></a>00931     <a class="codeRef" href="qhbox.html">QHBox</a> *box = <span class="keyword">new</span> <a class="codeRef" href="qhbox.html">QHBox</a>(d-&gt;m_frame);
<a name="l00932"></a>00932     box-&gt;<a class="codeRef" href="qhbox.html#setSpacing">setSpacing</a>(20);
<a name="l00933"></a>00933     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(mimeComment, box );
<a name="l00934"></a>00934 
<a name="l00935"></a>00935 <span class="preprocessor">#ifdef Q_WS_X11</span>
<a name="l00936"></a>00936 <span class="preprocessor"></span>    <span class="comment">//TODO: wrap for win32 or mac?</span>
<a name="l00937"></a>00937     <a class="codeRef" href="qpushbutton.html">QPushButton</a> *button = <span class="keyword">new</span> <a class="codeRef" href="qpushbutton.html">QPushButton</a>(box);
<a name="l00938"></a>00938 
<a name="l00939"></a>00939     <a class="codeRef" href="qiconset.html">QIconSet</a> iconSet = SmallIconSet(<a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;configure&quot;</span>));
<a name="l00940"></a>00940     <a class="codeRef" href="qpixmap.html">QPixmap</a> pixMap = iconSet.<a class="codeRef" href="qiconset.html#pixmap">pixmap</a>( QIconSet::Small, QIconSet::Normal );
<a name="l00941"></a>00941     button-&gt;<a class="codeRef" href="qpushbutton.html#setIconSet">setIconSet</a>( iconSet );
<a name="l00942"></a>00942     button-&gt;setFixedSize( pixMap.<a class="codeRef" href="qpixmap.html#width">width</a>()+8, pixMap.<a class="codeRef" href="qpixmap.html#height">height</a>()+8 );
<a name="l00943"></a>00943     <span class="keywordflow">if</span> ( d-&gt;mimeType == KMimeType::defaultMimeType() )
<a name="l00944"></a>00944        <a class="codeRef" href="qtooltip.html#add">QToolTip::add</a>(button, i18n(<span class="stringliteral">&quot;Create new file type&quot;</span>));
<a name="l00945"></a>00945     <span class="keywordflow">else</span>
<a name="l00946"></a>00946        <a class="codeRef" href="qtooltip.html#add">QToolTip::add</a>(button, i18n(<span class="stringliteral">&quot;Edit file type&quot;</span>));
<a name="l00947"></a>00947 
<a name="l00948"></a>00948     <a class="codeRef" href="qobject.html#connect">connect</a>( button, SIGNAL( clicked() ), SLOT( slotEditFileType() ));
<a name="l00949"></a>00949 
<a name="l00950"></a>00950     <span class="keywordflow">if</span> (!kapp-&gt;authorizeKAction(<span class="stringliteral">&quot;editfiletype&quot;</span>))
<a name="l00951"></a>00951        button-&gt;hide();
<a name="l00952"></a>00952 <span class="preprocessor">#endif</span>
<a name="l00953"></a>00953 <span class="preprocessor"></span>
<a name="l00954"></a>00954     grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(box, curRow++, 2);
<a name="l00955"></a>00955   }
<a name="l00956"></a>00956 
<a name="l00957"></a>00957   <span class="keywordflow">if</span> ( !magicMimeComment.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() &amp;&amp; magicMimeComment != mimeComment )
<a name="l00958"></a>00958   {
<a name="l00959"></a>00959     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Contents:&quot;</span>), d-&gt;m_frame );
<a name="l00960"></a>00960     grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow, 0);
<a name="l00961"></a>00961 
<a name="l00962"></a>00962     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(magicMimeComment, d-&gt;m_frame );
<a name="l00963"></a>00963     grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow++, 2);
<a name="l00964"></a>00964   }
<a name="l00965"></a>00965 
<a name="l00966"></a>00966   <span class="keywordflow">if</span> ( !directory.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() )
<a name="l00967"></a>00967   {
<a name="l00968"></a>00968     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Location:&quot;</span>), d-&gt;m_frame );
<a name="l00969"></a>00969     grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow, 0);
<a name="l00970"></a>00970 
<a name="l00971"></a>00971     l = <span class="keyword">new</span> KSqueezedTextLabel( d-&gt;m_frame );
<a name="l00972"></a>00972     l-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( directory );
<a name="l00973"></a>00973     grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow++, 2);
<a name="l00974"></a>00974   }
<a name="l00975"></a>00975 
<a name="l00976"></a>00976   <span class="keywordflow">if</span>( hasDirs || hasTotalSize ) {
<a name="l00977"></a>00977     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Size:&quot;</span>), d-&gt;m_frame );
<a name="l00978"></a>00978     grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow, 0);
<a name="l00979"></a>00979 
<a name="l00980"></a>00980     m_sizeLabel = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame );
<a name="l00981"></a>00981     grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>( m_sizeLabel, curRow++, 2 );
<a name="l00982"></a>00982   } <span class="keywordflow">else</span> {
<a name="l00983"></a>00983     m_sizeLabel = 0;
<a name="l00984"></a>00984   }
<a name="l00985"></a>00985 
<a name="l00986"></a>00986   <span class="keywordflow">if</span> ( !hasDirs ) <span class="comment">// Only files [and symlinks]</span>
<a name="l00987"></a>00987   {
<a name="l00988"></a>00988     <span class="keywordflow">if</span>(hasTotalSize) {
<a name="l00989"></a>00989       m_sizeLabel-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>(KIO::convertSizeWithBytes(totalSize));
<a name="l00990"></a>00990     }
<a name="l00991"></a>00991 
<a name="l00992"></a>00992     m_sizeDetermineButton = 0L;
<a name="l00993"></a>00993     m_sizeStopButton = 0L;
<a name="l00994"></a>00994   }
<a name="l00995"></a>00995   <span class="keywordflow">else</span> <span class="comment">// Directory</span>
<a name="l00996"></a>00996   {
<a name="l00997"></a>00997     <a class="codeRef" href="qhboxlayout.html">QHBoxLayout</a> * sizelay = <span class="keyword">new</span> <a class="codeRef" href="qhboxlayout.html">QHBoxLayout</a>(KDialog::spacingHint());
<a name="l00998"></a>00998     grid-&gt;<a class="codeRef" href="qgridlayout.html#addLayout">addLayout</a>( sizelay, curRow++, 2 );
<a name="l00999"></a>00999 
<a name="l01000"></a>01000     <span class="comment">// buttons</span>
<a name="l01001"></a>01001     m_sizeDetermineButton = <span class="keyword">new</span> <a class="codeRef" href="qpushbutton.html">QPushButton</a>( i18n(<span class="stringliteral">&quot;Calculate&quot;</span>), d-&gt;m_frame );
<a name="l01002"></a>01002     m_sizeStopButton = <span class="keyword">new</span> <a class="codeRef" href="qpushbutton.html">QPushButton</a>( i18n(<span class="stringliteral">&quot;Stop&quot;</span>), d-&gt;m_frame );
<a name="l01003"></a>01003     <a class="codeRef" href="qobject.html#connect">connect</a>( m_sizeDetermineButton, SIGNAL( clicked() ), <span class="keyword">this</span>, SLOT( slotSizeDetermine() ) );
<a name="l01004"></a>01004     <a class="codeRef" href="qobject.html#connect">connect</a>( m_sizeStopButton, SIGNAL( clicked() ), <span class="keyword">this</span>, SLOT( slotSizeStop() ) );
<a name="l01005"></a>01005     sizelay-&gt;addWidget(m_sizeDetermineButton, 0);
<a name="l01006"></a>01006     sizelay-&gt;addWidget(m_sizeStopButton, 0);
<a name="l01007"></a>01007     sizelay-&gt;addStretch(10); <span class="comment">// so that the buttons don&#39;t grow horizontally</span>
<a name="l01008"></a>01008 
<a name="l01009"></a>01009     <span class="comment">// auto-launch for local dirs only, and not for &#39;/&#39;</span>
<a name="l01010"></a>01010     <span class="keywordflow">if</span> ( isLocal &amp;&amp; !hasRoot )
<a name="l01011"></a>01011     {
<a name="l01012"></a>01012       m_sizeDetermineButton-&gt;<a class="codeRef" href="qpushbutton.html#setText">setText</a>( i18n(<span class="stringliteral">&quot;Refresh&quot;</span>) );
<a name="l01013"></a>01013       slotSizeDetermine();
<a name="l01014"></a>01014     }
<a name="l01015"></a>01015     <span class="keywordflow">else</span>
<a name="l01016"></a>01016       m_sizeStopButton-&gt;setEnabled( <span class="keyword">false</span> );
<a name="l01017"></a>01017   }
<a name="l01018"></a>01018 
<a name="l01019"></a>01019   <span class="keywordflow">if</span> (!d-&gt;bMultiple &amp;&amp; item-&gt;isLink()) {
<a name="l01020"></a>01020     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Points to:&quot;</span>), d-&gt;m_frame );
<a name="l01021"></a>01021     grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow, 0);
<a name="l01022"></a>01022 
<a name="l01023"></a>01023     l = <span class="keyword">new</span> KSqueezedTextLabel(item-&gt;linkDest(), d-&gt;m_frame );
<a name="l01024"></a>01024     grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow++, 2);
<a name="l01025"></a>01025   }
<a name="l01026"></a>01026 
<a name="l01027"></a>01027   <span class="keywordflow">if</span> (!d-&gt;bMultiple) <span class="comment">// Dates for multiple don&#39;t make much sense...</span>
<a name="l01028"></a>01028   {
<a name="l01029"></a>01029     <a class="codeRef" href="qdatetime.html">QDateTime</a> dt;
<a name="l01030"></a>01030     <span class="keywordtype">bool</span> hasTime;
<a name="l01031"></a>01031     time_t tim = item-&gt;<a class="codeRef" href="qdatetime.html#time">time</a>(KIO::UDS_CREATION_TIME, hasTime);
<a name="l01032"></a>01032     <span class="keywordflow">if</span> ( hasTime )
<a name="l01033"></a>01033     {
<a name="l01034"></a>01034       l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Created:&quot;</span>), d-&gt;m_frame );
<a name="l01035"></a>01035       grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow, 0);
<a name="l01036"></a>01036 
<a name="l01037"></a>01037       dt.<a class="codeRef" href="qdatetime.html#setTime_t">setTime_t</a>( tim );
<a name="l01038"></a>01038       l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(KGlobal::locale()-&gt;formatDateTime(dt), d-&gt;m_frame );
<a name="l01039"></a>01039       grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow++, 2);
<a name="l01040"></a>01040     }
<a name="l01041"></a>01041 
<a name="l01042"></a>01042     tim = item-&gt;time(KIO::UDS_MODIFICATION_TIME, hasTime);
<a name="l01043"></a>01043     <span class="keywordflow">if</span> ( hasTime )
<a name="l01044"></a>01044     {
<a name="l01045"></a>01045       l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Modified:&quot;</span>), d-&gt;m_frame );
<a name="l01046"></a>01046       grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow, 0);
<a name="l01047"></a>01047 
<a name="l01048"></a>01048       dt.<a class="codeRef" href="qdatetime.html#setTime_t">setTime_t</a>( tim );
<a name="l01049"></a>01049       l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(KGlobal::locale()-&gt;formatDateTime(dt), d-&gt;m_frame );
<a name="l01050"></a>01050       grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow++, 2);
<a name="l01051"></a>01051     }
<a name="l01052"></a>01052 
<a name="l01053"></a>01053     tim = item-&gt;time(KIO::UDS_ACCESS_TIME, hasTime);
<a name="l01054"></a>01054     <span class="keywordflow">if</span> ( hasTime )
<a name="l01055"></a>01055     {
<a name="l01056"></a>01056       l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Accessed:&quot;</span>), d-&gt;m_frame );
<a name="l01057"></a>01057       grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow, 0);
<a name="l01058"></a>01058 
<a name="l01059"></a>01059       dt.<a class="codeRef" href="qdatetime.html#setTime_t">setTime_t</a>( tim );
<a name="l01060"></a>01060       l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(KGlobal::locale()-&gt;formatDateTime(dt), d-&gt;m_frame );
<a name="l01061"></a>01061       grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow++, 2);
<a name="l01062"></a>01062     }
<a name="l01063"></a>01063   }
<a name="l01064"></a>01064 
<a name="l01065"></a>01065   <span class="keywordflow">if</span> ( isLocal &amp;&amp; hasDirs )  <span class="comment">// only for directories</span>
<a name="l01066"></a>01066   {
<a name="l01067"></a>01067     sep = <span class="keyword">new</span> KSeparator( KSeparator::HLine, d-&gt;m_frame);
<a name="l01068"></a>01068     grid-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCellWidget">addMultiCellWidget</a>(sep, curRow, curRow, 0, 2);
<a name="l01069"></a>01069     ++curRow;
<a name="l01070"></a>01070 
<a name="l01071"></a>01071     <a class="codeRef" href="qstring.html">QString</a> mountPoint = KIO::findPathMountPoint( url.path() );
<a name="l01072"></a>01072 
<a name="l01073"></a>01073     <span class="keywordflow">if</span> (mountPoint != <span class="stringliteral">&quot;/&quot;</span>)
<a name="l01074"></a>01074     {
<a name="l01075"></a>01075         l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Mounted on:&quot;</span>), d-&gt;m_frame );
<a name="l01076"></a>01076         grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow, 0);
<a name="l01077"></a>01077 
<a name="l01078"></a>01078         l = <span class="keyword">new</span> KSqueezedTextLabel( mountPoint, d-&gt;m_frame );
<a name="l01079"></a>01079         grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>( l, curRow++, 2 );
<a name="l01080"></a>01080     }
<a name="l01081"></a>01081 
<a name="l01082"></a>01082     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Free disk space:&quot;</span>), d-&gt;m_frame );
<a name="l01083"></a>01083     grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, curRow, 0);
<a name="l01084"></a>01084 
<a name="l01085"></a>01085     d-&gt;m_freeSpaceLabel = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame );
<a name="l01086"></a>01086     grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>( d-&gt;m_freeSpaceLabel, curRow++, 2 );
<a name="l01087"></a>01087 
<a name="l01088"></a>01088     <a class="code" href="classKDiskFreeSp.html" title="This class parses the output of &quot;df&quot; to find the disk usage information for a given partition (mount ...">KDiskFreeSp</a> * job = <span class="keyword">new</span> <a class="code" href="classKDiskFreeSp.html" title="This class parses the output of &quot;df&quot; to find the disk usage information for a given partition (mount ...">KDiskFreeSp</a>;
<a name="l01089"></a>01089     <a class="codeRef" href="qobject.html#connect">connect</a>( job, SIGNAL( foundMountPoint( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;,
<a name="l01090"></a>01090              <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;, <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; ) ),
<a name="l01091"></a>01091              <span class="keyword">this</span>, SLOT( slotFoundMountPoint( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;,
<a name="l01092"></a>01092           <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;, <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; ) ) );
<a name="l01093"></a>01093     job-&gt;<a class="code" href="classKDiskFreeSp.html#a42e93d7340696d23f2c2e3bd47275e24" title="Call this to fire a search on the disk usage information for mountPoint.">readDF</a>( mountPoint );
<a name="l01094"></a>01094   }
<a name="l01095"></a>01095 
<a name="l01096"></a>01096   vbl-&gt;addStretch(1);
<a name="l01097"></a>01097 }
<a name="l01098"></a>01098 
<a name="l01099"></a>01099 <span class="comment">// QString KFilePropsPlugin::tabName () const</span>
<a name="l01100"></a>01100 <span class="comment">// {</span>
<a name="l01101"></a>01101 <span class="comment">//   return i18n (&quot;&amp;General&quot;);</span>
<a name="l01102"></a>01102 <span class="comment">// }</span>
<a name="l01103"></a>01103 
<a name="l01104"></a>01104 <span class="keywordtype">void</span> KFilePropsPlugin::setFileNameReadOnly( <span class="keywordtype">bool</span> ro )
<a name="l01105"></a>01105 {
<a name="l01106"></a>01106   <span class="keywordflow">if</span> ( d-&gt;m_lined )
<a name="l01107"></a>01107   {
<a name="l01108"></a>01108     d-&gt;m_lined-&gt;setReadOnly( ro );
<a name="l01109"></a>01109     <span class="keywordflow">if</span> (ro)
<a name="l01110"></a>01110     {
<a name="l01111"></a>01111        <span class="comment">// Don&#39;t put the initial focus on the line edit when it is ro</span>
<a name="l01112"></a>01112        <a class="codeRef" href="qpushbutton.html">QPushButton</a> *button = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;actionButton(KDialogBase::Ok);
<a name="l01113"></a>01113        <span class="keywordflow">if</span> (button)
<a name="l01114"></a>01114           button-&gt;setFocus();
<a name="l01115"></a>01115     }
<a name="l01116"></a>01116   }
<a name="l01117"></a>01117 }
<a name="l01118"></a>01118 
<a name="l01119"></a>01119 <span class="keywordtype">void</span> KFilePropsPlugin::slotEditFileType()
<a name="l01120"></a>01120 {
<a name="l01121"></a>01121 <span class="preprocessor">#ifdef Q_WS_X11</span>
<a name="l01122"></a>01122 <span class="preprocessor"></span>  <a class="codeRef" href="qstring.html">QString</a> mime;
<a name="l01123"></a>01123   <span class="keywordflow">if</span> ( d-&gt;mimeType == KMimeType::defaultMimeType() ) {
<a name="l01124"></a>01124     <span class="keywordtype">int</span> pos = d-&gt;oldFileName.findRev( <span class="charliteral">&#39;.&#39;</span> );
<a name="l01125"></a>01125     <span class="keywordflow">if</span> ( pos != -1 )
<a name="l01126"></a>01126     mime = <span class="stringliteral">&quot;*&quot;</span> + d-&gt;oldFileName.mid(pos);
<a name="l01127"></a>01127     <span class="keywordflow">else</span>
<a name="l01128"></a>01128     mime = <span class="stringliteral">&quot;*&quot;</span>;
<a name="l01129"></a>01129   }
<a name="l01130"></a>01130   <span class="keywordflow">else</span>
<a name="l01131"></a>01131     mime = d-&gt;mimeType;
<a name="l01132"></a>01132     <span class="comment">//TODO: wrap for win32 or mac?</span>
<a name="l01133"></a>01133   <a class="codeRef" href="qstring.html">QString</a> keditfiletype = <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;keditfiletype&quot;</span>);
<a name="l01134"></a>01134   KRun::runCommand( keditfiletype
<a name="l01135"></a>01135                     + <span class="stringliteral">&quot; --parent &quot;</span> + <a class="codeRef" href="qstring.html#number">QString::number</a>( (ulong)<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;topLevelWidget()-&gt;winId())
<a name="l01136"></a>01136                     + <span class="stringliteral">&quot; &quot;</span> + KProcess::quote(mime),
<a name="l01137"></a>01137                     keditfiletype, keditfiletype <span class="comment">/*unused*/</span>);
<a name="l01138"></a>01138 <span class="preprocessor">#endif</span>
<a name="l01139"></a>01139 <span class="preprocessor"></span>}
<a name="l01140"></a>01140 
<a name="l01141"></a>01141 <span class="keywordtype">void</span> KFilePropsPlugin::slotIconChanged()
<a name="l01142"></a>01142 {
<a name="l01143"></a>01143   d-&gt;bIconChanged = <span class="keyword">true</span>;
<a name="l01144"></a>01144   emit <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>();
<a name="l01145"></a>01145 }
<a name="l01146"></a>01146 
<a name="l01147"></a>01147 <span class="keywordtype">void</span> KFilePropsPlugin::nameFileChanged(<span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp;text )
<a name="l01148"></a>01148 {
<a name="l01149"></a>01149   <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;enableButtonOK(!text.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>());
<a name="l01150"></a>01150   emit <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>();
<a name="l01151"></a>01151 }
<a name="l01152"></a>01152 
<a name="l01153"></a>01153 <span class="keywordtype">void</span> KFilePropsPlugin::determineRelativePath( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; path )
<a name="l01154"></a>01154 {
<a name="l01155"></a>01155     <span class="comment">// now let&#39;s make it relative</span>
<a name="l01156"></a>01156     <a class="codeRef" href="qstringlist.html">QStringList</a> dirs;
<a name="l01157"></a>01157     <span class="keywordflow">if</span> (KBindingPropsPlugin::supports(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>()))
<a name="l01158"></a>01158     {
<a name="l01159"></a>01159        m_sRelativePath =KGlobal::dirs()-&gt;relativeLocation(<span class="stringliteral">&quot;mime&quot;</span>, path);
<a name="l01160"></a>01160        <span class="keywordflow">if</span> (m_sRelativePath.<a class="codeRef" href="qstring.html#startsWith">startsWith</a>(<span class="stringliteral">&quot;/&quot;</span>))
<a name="l01161"></a>01161           m_sRelativePath = QString::null;
<a name="l01162"></a>01162     }
<a name="l01163"></a>01163     <span class="keywordflow">else</span>
<a name="l01164"></a>01164     {
<a name="l01165"></a>01165        m_sRelativePath =KGlobal::dirs()-&gt;relativeLocation(<span class="stringliteral">&quot;apps&quot;</span>, path);
<a name="l01166"></a>01166        <span class="keywordflow">if</span> (m_sRelativePath.<a class="codeRef" href="qstring.html#startsWith">startsWith</a>(<span class="stringliteral">&quot;/&quot;</span>))
<a name="l01167"></a>01167        {
<a name="l01168"></a>01168           m_sRelativePath =KGlobal::dirs()-&gt;relativeLocation(<span class="stringliteral">&quot;xdgdata-apps&quot;</span>, path);
<a name="l01169"></a>01169           <span class="keywordflow">if</span> (m_sRelativePath.<a class="codeRef" href="qstring.html#startsWith">startsWith</a>(<span class="stringliteral">&quot;/&quot;</span>))
<a name="l01170"></a>01170              m_sRelativePath = QString::null;
<a name="l01171"></a>01171           <span class="keywordflow">else</span>
<a name="l01172"></a>01172              m_sRelativePath = path;
<a name="l01173"></a>01173        }
<a name="l01174"></a>01174     }
<a name="l01175"></a>01175     <span class="keywordflow">if</span> ( m_sRelativePath.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() )
<a name="l01176"></a>01176     {
<a name="l01177"></a>01177       <span class="keywordflow">if</span> (KBindingPropsPlugin::supports(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>()))
<a name="l01178"></a>01178         kdWarning(250) &lt;&lt; <span class="stringliteral">&quot;Warning : editing a mimetype file out of the mimetype dirs!&quot;</span> &lt;&lt; endl;
<a name="l01179"></a>01179     }
<a name="l01180"></a>01180 }
<a name="l01181"></a>01181 
<a name="l01182"></a>01182 <span class="keywordtype">void</span> KFilePropsPlugin::slotFoundMountPoint( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp;,
<a name="l01183"></a>01183                         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kBSize,
<a name="l01184"></a>01184                         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="comment">/*kBUsed*/</span>,
<a name="l01185"></a>01185                         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kBAvail )
<a name="l01186"></a>01186 {
<a name="l01187"></a>01187     d-&gt;m_freeSpaceLabel-&gt;setText(
<a name="l01188"></a>01188     <span class="comment">// xgettext:no-c-format  --  Don&#39;t warn about translating the %1 out of %2 part.</span>
<a name="l01189"></a>01189     i18n(<span class="stringliteral">&quot;Available space out of total partition size (percent used)&quot;</span>, <span class="stringliteral">&quot;%1 out of %2 (%3% used)&quot;</span>)
<a name="l01190"></a>01190     .arg(KIO::convertSizeFromKB(kBAvail))
<a name="l01191"></a>01191     .arg(KIO::convertSizeFromKB(kBSize))
<a name="l01192"></a>01192     .arg( 100 - (<span class="keywordtype">int</span>)(100.0 * kBAvail / kBSize) ));
<a name="l01193"></a>01193 }
<a name="l01194"></a>01194 
<a name="l01195"></a>01195 <span class="comment">// attention: copy&amp;paste below, due to compiler bug</span>
<a name="l01196"></a>01196 <span class="comment">// it doesn&#39;t like those unsigned long parameters -- unsigned long&amp; are ok :-/</span>
<a name="l01197"></a>01197 <span class="keywordtype">void</span> KFilePropsPlugin::slotFoundMountPoint( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; kBSize,
<a name="l01198"></a>01198                         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; <span class="comment">/*kBUsed*/</span>,
<a name="l01199"></a>01199                         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; kBAvail,
<a name="l01200"></a>01200                         <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; )
<a name="l01201"></a>01201 {
<a name="l01202"></a>01202     d-&gt;m_freeSpaceLabel-&gt;setText(
<a name="l01203"></a>01203     <span class="comment">// xgettext:no-c-format  --  Don&#39;t warn about translating the %1 out of %2 part.</span>
<a name="l01204"></a>01204     i18n(<span class="stringliteral">&quot;Available space out of total partition size (percent used)&quot;</span>, <span class="stringliteral">&quot;%1 out of %2 (%3% used)&quot;</span>)
<a name="l01205"></a>01205     .arg(KIO::convertSizeFromKB(kBAvail))
<a name="l01206"></a>01206     .arg(KIO::convertSizeFromKB(kBSize))
<a name="l01207"></a>01207     .arg( 100 - (<span class="keywordtype">int</span>)(100.0 * kBAvail / kBSize) ));
<a name="l01208"></a>01208 }
<a name="l01209"></a>01209 
<a name="l01210"></a>01210 <span class="keywordtype">void</span> KFilePropsPlugin::slotDirSizeUpdate()
<a name="l01211"></a>01211 {
<a name="l01212"></a>01212     KIO::filesize_t totalSize = d-&gt;dirSizeJob-&gt;totalSize();
<a name="l01213"></a>01213     KIO::filesize_t totalFiles = d-&gt;dirSizeJob-&gt;totalFiles();
<a name="l01214"></a>01214          KIO::filesize_t totalSubdirs = d-&gt;dirSizeJob-&gt;totalSubdirs();
<a name="l01215"></a>01215     m_sizeLabel-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( i18n(<span class="stringliteral">&quot;Calculating... %1 (%2)\n%3, %4&quot;</span>)
<a name="l01216"></a>01216               .arg(KIO::convertSize(totalSize))
<a name="l01217"></a>01217                          .arg(KGlobal::locale()-&gt;formatNumber(totalSize, 0))
<a name="l01218"></a>01218         .arg(i18n(<span class="stringliteral">&quot;1 file&quot;</span>,<span class="stringliteral">&quot;%n files&quot;</span>,totalFiles))
<a name="l01219"></a>01219         .arg(i18n(<span class="stringliteral">&quot;1 sub-folder&quot;</span>,<span class="stringliteral">&quot;%n sub-folders&quot;</span>,totalSubdirs)));
<a name="l01220"></a>01220 }
<a name="l01221"></a>01221 
<a name="l01222"></a>01222 <span class="keywordtype">void</span> KFilePropsPlugin::slotDirSizeFinished( KIO::Job * job )
<a name="l01223"></a>01223 {
<a name="l01224"></a>01224   <span class="keywordflow">if</span> (job-&gt;error())
<a name="l01225"></a>01225     m_sizeLabel-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( job-&gt;errorString() );
<a name="l01226"></a>01226   <span class="keywordflow">else</span>
<a name="l01227"></a>01227   {
<a name="l01228"></a>01228     KIO::filesize_t totalSize = <span class="keyword">static_cast&lt;</span><a class="code" href="classKDirSize.html" title="Computes a directory size (similar to &quot;du&quot;, but doesn&#39;t give the same results since we simply sum u...">KDirSize</a>*<span class="keyword">&gt;</span>(job)-&gt;totalSize();
<a name="l01229"></a>01229     KIO::filesize_t totalFiles = <span class="keyword">static_cast&lt;</span><a class="code" href="classKDirSize.html" title="Computes a directory size (similar to &quot;du&quot;, but doesn&#39;t give the same results since we simply sum u...">KDirSize</a>*<span class="keyword">&gt;</span>(job)-&gt;totalFiles();
<a name="l01230"></a>01230     KIO::filesize_t totalSubdirs = <span class="keyword">static_cast&lt;</span><a class="code" href="classKDirSize.html" title="Computes a directory size (similar to &quot;du&quot;, but doesn&#39;t give the same results since we simply sum u...">KDirSize</a>*<span class="keyword">&gt;</span>(job)-&gt;totalSubdirs();
<a name="l01231"></a>01231     m_sizeLabel-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;%1 (%2)\n%3, %4&quot;</span>)
<a name="l01232"></a>01232               .arg(KIO::convertSize(totalSize))
<a name="l01233"></a>01233               .arg(KGlobal::locale()-&gt;formatNumber(totalSize, 0))
<a name="l01234"></a>01234         .arg(i18n(<span class="stringliteral">&quot;1 file&quot;</span>,<span class="stringliteral">&quot;%n files&quot;</span>,totalFiles))
<a name="l01235"></a>01235         .arg(i18n(<span class="stringliteral">&quot;1 sub-folder&quot;</span>,<span class="stringliteral">&quot;%n sub-folders&quot;</span>,totalSubdirs)));
<a name="l01236"></a>01236   }
<a name="l01237"></a>01237   m_sizeStopButton-&gt;setEnabled(<span class="keyword">false</span>);
<a name="l01238"></a>01238   <span class="comment">// just in case you change something and try again :)</span>
<a name="l01239"></a>01239   m_sizeDetermineButton-&gt;<a class="codeRef" href="qpushbutton.html#setText">setText</a>( i18n(<span class="stringliteral">&quot;Refresh&quot;</span>) );
<a name="l01240"></a>01240   m_sizeDetermineButton-&gt;setEnabled(<span class="keyword">true</span>);
<a name="l01241"></a>01241   d-&gt;dirSizeJob = 0L;
<a name="l01242"></a>01242   <span class="keyword">delete</span> d-&gt;dirSizeUpdateTimer;
<a name="l01243"></a>01243   d-&gt;dirSizeUpdateTimer = 0L;
<a name="l01244"></a>01244 }
<a name="l01245"></a>01245 
<a name="l01246"></a>01246 <span class="keywordtype">void</span> KFilePropsPlugin::slotSizeDetermine()
<a name="l01247"></a>01247 {
<a name="l01248"></a>01248   m_sizeLabel-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( i18n(<span class="stringliteral">&quot;Calculating...&quot;</span>) );
<a name="l01249"></a>01249   kdDebug(250) &lt;&lt; <span class="stringliteral">&quot; KFilePropsPlugin::slotSizeDetermine() properties-&gt;item()=&quot;</span> &lt;&lt;  <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a>() &lt;&lt; endl;
<a name="l01250"></a>01250   kdDebug(250) &lt;&lt; <span class="stringliteral">&quot; URL=&quot;</span> &lt;&lt; <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a>()-&gt;url().url() &lt;&lt; endl;
<a name="l01251"></a>01251   d-&gt;dirSizeJob = <a class="code" href="classKDirSize.html#ab241bbebf94cb610b70c6a16052eb51f" title="Asynchronous method.">KDirSize::dirSizeJob</a>( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>() );
<a name="l01252"></a>01252   d-&gt;dirSizeUpdateTimer = <span class="keyword">new</span> <a class="codeRef" href="qtimer.html">QTimer</a>(<span class="keyword">this</span>);
<a name="l01253"></a>01253   <a class="codeRef" href="qobject.html#connect">connect</a>( d-&gt;dirSizeUpdateTimer, SIGNAL( timeout() ),
<a name="l01254"></a>01254            SLOT( slotDirSizeUpdate() ) );
<a name="l01255"></a>01255   d-&gt;dirSizeUpdateTimer-&gt;start(500);
<a name="l01256"></a>01256   <a class="codeRef" href="qobject.html#connect">connect</a>( d-&gt;dirSizeJob, SIGNAL( result( KIO::Job * ) ),
<a name="l01257"></a>01257            SLOT( slotDirSizeFinished( KIO::Job * ) ) );
<a name="l01258"></a>01258   m_sizeStopButton-&gt;setEnabled(<span class="keyword">true</span>);
<a name="l01259"></a>01259   m_sizeDetermineButton-&gt;setEnabled(<span class="keyword">false</span>);
<a name="l01260"></a>01260 
<a name="l01261"></a>01261   <span class="comment">// also update the &quot;Free disk space&quot; display</span>
<a name="l01262"></a>01262   <span class="keywordflow">if</span> ( d-&gt;m_freeSpaceLabel )
<a name="l01263"></a>01263   {
<a name="l01264"></a>01264     <span class="keywordtype">bool</span> isLocal;
<a name="l01265"></a>01265     KFileItem * item = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a>();
<a name="l01266"></a>01266     KURL url = item-&gt;mostLocalURL( isLocal );
<a name="l01267"></a>01267     <a class="codeRef" href="qstring.html">QString</a> mountPoint = KIO::findPathMountPoint( url.path() );
<a name="l01268"></a>01268 
<a name="l01269"></a>01269     <a class="code" href="classKDiskFreeSp.html" title="This class parses the output of &quot;df&quot; to find the disk usage information for a given partition (mount ...">KDiskFreeSp</a> * job = <span class="keyword">new</span> <a class="code" href="classKDiskFreeSp.html" title="This class parses the output of &quot;df&quot; to find the disk usage information for a given partition (mount ...">KDiskFreeSp</a>;
<a name="l01270"></a>01270     <a class="codeRef" href="qobject.html#connect">connect</a>( job, SIGNAL( foundMountPoint( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;,
<a name="l01271"></a>01271              <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;, <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; ) ),
<a name="l01272"></a>01272              <span class="keyword">this</span>, SLOT( slotFoundMountPoint( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;,
<a name="l01273"></a>01273           <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;, <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; ) ) );
<a name="l01274"></a>01274     job-&gt;readDF( mountPoint );
<a name="l01275"></a>01275   }
<a name="l01276"></a>01276 }
<a name="l01277"></a>01277 
<a name="l01278"></a>01278 <span class="keywordtype">void</span> KFilePropsPlugin::slotSizeStop()
<a name="l01279"></a>01279 {
<a name="l01280"></a>01280   <span class="keywordflow">if</span> ( d-&gt;dirSizeJob )
<a name="l01281"></a>01281   {
<a name="l01282"></a>01282     m_sizeLabel-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( i18n(<span class="stringliteral">&quot;Stopped&quot;</span>) );
<a name="l01283"></a>01283     d-&gt;dirSizeJob-&gt;kill();
<a name="l01284"></a>01284     d-&gt;dirSizeJob = 0;
<a name="l01285"></a>01285   }
<a name="l01286"></a>01286   <span class="keywordflow">if</span> ( d-&gt;dirSizeUpdateTimer )
<a name="l01287"></a>01287     d-&gt;dirSizeUpdateTimer-&gt;stop();
<a name="l01288"></a>01288 
<a name="l01289"></a>01289   m_sizeStopButton-&gt;setEnabled(<span class="keyword">false</span>);
<a name="l01290"></a>01290   m_sizeDetermineButton-&gt;setEnabled(<span class="keyword">true</span>);
<a name="l01291"></a>01291 }
<a name="l01292"></a>01292 
<a name="l01293"></a>01293 KFilePropsPlugin::~KFilePropsPlugin()
<a name="l01294"></a>01294 {
<a name="l01295"></a>01295   <span class="keyword">delete</span> d;
<a name="l01296"></a>01296 }
<a name="l01297"></a>01297 
<a name="l01298"></a><a class="code" href="classKFilePropsPlugin.html#a3e3d1f7eade99e76cbaab017b6f62e5d">01298</a> <span class="keywordtype">bool</span> <a class="code" href="classKFilePropsPlugin.html#a3e3d1f7eade99e76cbaab017b6f62e5d" title="Tests whether the files specified by _items need a &#39;General&#39; plugin.">KFilePropsPlugin::supports</a>( KFileItemList <span class="comment">/*_items*/</span> )
<a name="l01299"></a>01299 {
<a name="l01300"></a>01300   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01301"></a>01301 }
<a name="l01302"></a>01302 
<a name="l01303"></a>01303 <span class="comment">// Don&#39;t do this at home</span>
<a name="l01304"></a>01304 <span class="keywordtype">void</span> qt_enter_modal( <a class="codeRef" href="qwidget.html">QWidget</a> *widget );
<a name="l01305"></a>01305 <span class="keywordtype">void</span> qt_leave_modal( <a class="codeRef" href="qwidget.html">QWidget</a> *widget );
<a name="l01306"></a>01306 
<a name="l01307"></a><a class="code" href="classKFilePropsPlugin.html#ae5a886d5dfa186234e6f8946a92af067">01307</a> <span class="keywordtype">void</span> <a class="code" href="classKFilePropsPlugin.html#ae5a886d5dfa186234e6f8946a92af067" title="Applies all changes made.">KFilePropsPlugin::applyChanges</a>()
<a name="l01308"></a>01308 {
<a name="l01309"></a>01309   <span class="keywordflow">if</span> ( d-&gt;dirSizeJob )
<a name="l01310"></a>01310     slotSizeStop();
<a name="l01311"></a>01311 
<a name="l01312"></a>01312   kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;KFilePropsPlugin::applyChanges&quot;</span> &lt;&lt; endl;
<a name="l01313"></a>01313 
<a name="l01314"></a>01314   <span class="keywordflow">if</span> (nameArea-&gt;inherits(<span class="stringliteral">&quot;QLineEdit&quot;</span>))
<a name="l01315"></a>01315   {
<a name="l01316"></a>01316     <a class="codeRef" href="qstring.html">QString</a> n = ((<a class="codeRef" href="qlineedit.html">QLineEdit</a> *) nameArea)-&gt;text();
<a name="l01317"></a>01317     <span class="comment">// Remove trailing spaces (#4345)</span>
<a name="l01318"></a>01318     <span class="keywordflow">while</span> ( n[n.<a class="codeRef" href="qstring.html#length">length</a>()-1].isSpace() )
<a name="l01319"></a>01319       n.<a class="codeRef" href="qstring.html#truncate">truncate</a>( n.<a class="codeRef" href="qstring.html#length">length</a>() - 1 );
<a name="l01320"></a>01320     <span class="keywordflow">if</span> ( n.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() )
<a name="l01321"></a>01321     {
<a name="l01322"></a>01322       KMessageBox::sorry( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>, i18n(<span class="stringliteral">&quot;The new file name is empty.&quot;</span>));
<a name="l01323"></a>01323       <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a6193a34255bae07ec1573943cfb68bf1" title="To abort applying changes.">abortApplying</a>();
<a name="l01324"></a>01324       <span class="keywordflow">return</span>;
<a name="l01325"></a>01325     }
<a name="l01326"></a>01326 
<a name="l01327"></a>01327     <span class="comment">// Do we need to rename the file ?</span>
<a name="l01328"></a>01328     kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;oldname = &quot;</span> &lt;&lt; oldName &lt;&lt; endl;
<a name="l01329"></a>01329     kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;newname = &quot;</span> &lt;&lt; n &lt;&lt; endl;
<a name="l01330"></a>01330     <span class="keywordflow">if</span> ( oldName != n || m_bFromTemplate ) { <span class="comment">// true for any from-template file</span>
<a name="l01331"></a>01331       KIO::Job * job = 0L;
<a name="l01332"></a>01332       KURL oldurl = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>();
<a name="l01333"></a>01333 
<a name="l01334"></a>01334       <a class="codeRef" href="qstring.html">QString</a> newFileName = KIO::encodeFileName(n);
<a name="l01335"></a>01335       <span class="keywordflow">if</span> (d-&gt;bDesktopFile &amp;&amp; !newFileName.<a class="codeRef" href="qstring.html#endsWith">endsWith</a>(<span class="stringliteral">&quot;.desktop&quot;</span>) &amp;&amp; !newFileName.<a class="codeRef" href="qstring.html#endsWith">endsWith</a>(<span class="stringliteral">&quot;.kdelnk&quot;</span>))
<a name="l01336"></a>01336          newFileName += <span class="stringliteral">&quot;.desktop&quot;</span>;
<a name="l01337"></a>01337 
<a name="l01338"></a>01338       <span class="comment">// Tell properties. Warning, this changes the result of properties-&gt;kurl() !</span>
<a name="l01339"></a>01339       <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#adf86c06051ecc55dfd631c6757a82460" title="Renames the item to the specified name.">rename</a>( newFileName );
<a name="l01340"></a>01340 
<a name="l01341"></a>01341       <span class="comment">// Update also relative path (for apps and mimetypes)</span>
<a name="l01342"></a>01342       <span class="keywordflow">if</span> ( !m_sRelativePath.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() )
<a name="l01343"></a>01343         determineRelativePath( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path() );
<a name="l01344"></a>01344 
<a name="l01345"></a>01345       kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;New URL = &quot;</span> &lt;&lt; <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().url() &lt;&lt; endl;
<a name="l01346"></a>01346       kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;old = &quot;</span> &lt;&lt; oldurl.url() &lt;&lt; endl;
<a name="l01347"></a>01347 
<a name="l01348"></a>01348       <span class="comment">// Don&#39;t remove the template !!</span>
<a name="l01349"></a>01349       <span class="keywordflow">if</span> ( !m_bFromTemplate ) <span class="comment">// (normal renaming)</span>
<a name="l01350"></a>01350         job = KIO::move( oldurl, <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>() );
<a name="l01351"></a>01351       <span class="keywordflow">else</span> <span class="comment">// Copying a template</span>
<a name="l01352"></a>01352         job = KIO::copy( oldurl, <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>() );
<a name="l01353"></a>01353 
<a name="l01354"></a>01354       <a class="codeRef" href="qobject.html#connect">connect</a>( job, SIGNAL( result( KIO::Job * ) ),
<a name="l01355"></a>01355                SLOT( slotCopyFinished( KIO::Job * ) ) );
<a name="l01356"></a>01356       <a class="codeRef" href="qobject.html#connect">connect</a>( job, SIGNAL( renamed( KIO::Job *, <span class="keyword">const</span> KURL &amp;, <span class="keyword">const</span> KURL &amp; ) ),
<a name="l01357"></a>01357                SLOT( slotFileRenamed( KIO::Job *, <span class="keyword">const</span> KURL &amp;, <span class="keyword">const</span> KURL &amp; ) ) );
<a name="l01358"></a>01358       <span class="comment">// wait for job</span>
<a name="l01359"></a>01359       <a class="codeRef" href="qwidget.html">QWidget</a> dummy(0,0,WType_Dialog|WShowModal);
<a name="l01360"></a>01360       qt_enter_modal(&amp;dummy);
<a name="l01361"></a>01361       qApp-&gt;enter_loop();
<a name="l01362"></a>01362       qt_leave_modal(&amp;dummy);
<a name="l01363"></a>01363       <span class="keywordflow">return</span>;
<a name="l01364"></a>01364     }
<a name="l01365"></a>01365     <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a44cb58947aaa81a32f1a653112dde229" title="Updates the item URL (either called by rename or because a global apps/mimelnk desktop file is being ...">updateUrl</a>(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>());
<a name="l01366"></a>01366     <span class="comment">// Update also relative path (for apps and mimetypes)</span>
<a name="l01367"></a>01367     <span class="keywordflow">if</span> ( !m_sRelativePath.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() )
<a name="l01368"></a>01368       determineRelativePath( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path() );
<a name="l01369"></a>01369   }
<a name="l01370"></a>01370 
<a name="l01371"></a>01371   <span class="comment">// No job, keep going</span>
<a name="l01372"></a>01372   slotCopyFinished( 0L );
<a name="l01373"></a>01373 }
<a name="l01374"></a>01374 
<a name="l01375"></a>01375 <span class="keywordtype">void</span> KFilePropsPlugin::slotCopyFinished( KIO::Job * job )
<a name="l01376"></a>01376 {
<a name="l01377"></a>01377   kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;KFilePropsPlugin::slotCopyFinished&quot;</span> &lt;&lt; endl;
<a name="l01378"></a>01378   <span class="keywordflow">if</span> (job)
<a name="l01379"></a>01379   {
<a name="l01380"></a>01380     <span class="comment">// allow apply() to return</span>
<a name="l01381"></a>01381     qApp-&gt;exit_loop();
<a name="l01382"></a>01382     <span class="keywordflow">if</span> ( job-&gt;error() )
<a name="l01383"></a>01383     {
<a name="l01384"></a>01384         job-&gt;showErrorDialog( d-&gt;m_frame );
<a name="l01385"></a>01385         <span class="comment">// Didn&#39;t work. Revert the URL to the old one</span>
<a name="l01386"></a>01386         <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a44cb58947aaa81a32f1a653112dde229" title="Updates the item URL (either called by rename or because a global apps/mimelnk desktop file is being ...">updateUrl</a>( static_cast&lt;KIO::CopyJob*&gt;(job)-&gt;srcURLs().first() );
<a name="l01387"></a>01387         <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a6193a34255bae07ec1573943cfb68bf1" title="To abort applying changes.">abortApplying</a>(); <span class="comment">// Don&#39;t apply the changes to the wrong file !</span>
<a name="l01388"></a>01388         <span class="keywordflow">return</span>;
<a name="l01389"></a>01389     }
<a name="l01390"></a>01390   }
<a name="l01391"></a>01391 
<a name="l01392"></a>01392   assert( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a>() );
<a name="l01393"></a>01393   assert( !<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a>()-&gt;url().isEmpty() );
<a name="l01394"></a>01394 
<a name="l01395"></a>01395   <span class="comment">// Save the file where we can -&gt; usually in ~/.kde/...</span>
<a name="l01396"></a>01396   <span class="keywordflow">if</span> (KBindingPropsPlugin::supports(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>()) &amp;&amp; !m_sRelativePath.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>())
<a name="l01397"></a>01397   {
<a name="l01398"></a>01398     KURL newURL;
<a name="l01399"></a>01399     newURL.setPath( locateLocal(<span class="stringliteral">&quot;mime&quot;</span>, m_sRelativePath) );
<a name="l01400"></a>01400     <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a44cb58947aaa81a32f1a653112dde229" title="Updates the item URL (either called by rename or because a global apps/mimelnk desktop file is being ...">updateUrl</a>( newURL );
<a name="l01401"></a>01401   }
<a name="l01402"></a>01402   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d-&gt;bDesktopFile &amp;&amp; !m_sRelativePath.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>())
<a name="l01403"></a>01403   {
<a name="l01404"></a>01404     kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;KFilePropsPlugin::slotCopyFinished &quot;</span> &lt;&lt; m_sRelativePath &lt;&lt; endl;
<a name="l01405"></a>01405     KURL newURL;
<a name="l01406"></a>01406     newURL.setPath( KDesktopFile::locateLocal(m_sRelativePath) );
<a name="l01407"></a>01407     kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;KFilePropsPlugin::slotCopyFinished path=&quot;</span> &lt;&lt; newURL.path() &lt;&lt; endl;
<a name="l01408"></a>01408     <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a44cb58947aaa81a32f1a653112dde229" title="Updates the item URL (either called by rename or because a global apps/mimelnk desktop file is being ...">updateUrl</a>( newURL );
<a name="l01409"></a>01409   }
<a name="l01410"></a>01410 
<a name="l01411"></a>01411   <span class="keywordflow">if</span> ( d-&gt;bKDesktopMode &amp;&amp; d-&gt;bDesktopFile ) {
<a name="l01412"></a>01412       <span class="comment">// Renamed? Update Name field</span>
<a name="l01413"></a>01413       <span class="keywordflow">if</span> ( d-&gt;oldFileName != <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().fileName() || m_bFromTemplate ) {
<a name="l01414"></a>01414           KDesktopFile config( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path() );
<a name="l01415"></a>01415           <a class="codeRef" href="qstring.html">QString</a> nameStr = nameFromFileName(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().fileName());
<a name="l01416"></a>01416           config.writeEntry( <span class="stringliteral">&quot;Name&quot;</span>, nameStr );
<a name="l01417"></a>01417           config.writeEntry( <span class="stringliteral">&quot;Name&quot;</span>, nameStr, <span class="keyword">true</span>, <span class="keyword">false</span>, <span class="keyword">true</span> );
<a name="l01418"></a>01418       }
<a name="l01419"></a>01419   }
<a name="l01420"></a>01420 }
<a name="l01421"></a>01421 
<a name="l01422"></a>01422 <span class="keywordtype">void</span> KFilePropsPlugin::applyIconChanges()
<a name="l01423"></a>01423 {
<a name="l01424"></a>01424   <a class="code" href="classKIconButton.html" title="A pushbutton for choosing an icon.">KIconButton</a> *iconButton = ::qt_cast&lt;<a class="code" href="classKIconButton.html" title="A pushbutton for choosing an icon.">KIconButton</a> *&gt;( iconArea );
<a name="l01425"></a>01425   <span class="keywordflow">if</span> ( !iconButton || !d-&gt;bIconChanged )
<a name="l01426"></a>01426     <span class="keywordflow">return</span>;
<a name="l01427"></a>01427   <span class="comment">// handle icon changes - only local files (or pseudo-local) for now</span>
<a name="l01428"></a>01428   <span class="comment">// TODO: Use KTempFile and KIO::file_copy with overwrite = true</span>
<a name="l01429"></a>01429   KURL url = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>();
<a name="l01430"></a>01430   url = KIO::NetAccess::mostLocalURL( url, <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a> );
<a name="l01431"></a>01431   <span class="keywordflow">if</span> (url.isLocalFile()) {
<a name="l01432"></a>01432     <a class="codeRef" href="qstring.html">QString</a> path;
<a name="l01433"></a>01433 
<a name="l01434"></a>01434     <span class="keywordflow">if</span> (S_ISDIR(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a>()-&gt;mode()))
<a name="l01435"></a>01435     {
<a name="l01436"></a>01436       path = url.path(1) + <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;.directory&quot;</span>);
<a name="l01437"></a>01437       <span class="comment">// don&#39;t call updateUrl because the other tabs (i.e. permissions)</span>
<a name="l01438"></a>01438       <span class="comment">// apply to the directory, not the .directory file.</span>
<a name="l01439"></a>01439     }
<a name="l01440"></a>01440     <span class="keywordflow">else</span>
<a name="l01441"></a>01441       path = url.path();
<a name="l01442"></a>01442 
<a name="l01443"></a>01443     <span class="comment">// Get the default image</span>
<a name="l01444"></a>01444     <a class="codeRef" href="qstring.html">QString</a> str = KMimeType::findByURL( url,
<a name="l01445"></a>01445                                         <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a>()-&gt;mode(),
<a name="l01446"></a>01446                                         true )-&gt;KServiceType::icon();
<a name="l01447"></a>01447     <span class="comment">// Is it another one than the default ?</span>
<a name="l01448"></a>01448     <a class="codeRef" href="qstring.html">QString</a> sIcon;
<a name="l01449"></a>01449     <span class="keywordflow">if</span> ( str != iconButton-&gt;icon() )
<a name="l01450"></a>01450       sIcon = iconButton-&gt;icon();
<a name="l01451"></a>01451     <span class="comment">// (otherwise write empty value)</span>
<a name="l01452"></a>01452 
<a name="l01453"></a>01453     kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;**&quot;</span> &lt;&lt; path &lt;&lt; <span class="stringliteral">&quot;**&quot;</span> &lt;&lt; endl;
<a name="l01454"></a>01454     <a class="codeRef" href="qfile.html">QFile</a> f( path );
<a name="l01455"></a>01455 
<a name="l01456"></a>01456     <span class="comment">// If default icon and no .directory file -&gt; don&#39;t create one</span>
<a name="l01457"></a>01457     <span class="keywordflow">if</span> ( !sIcon.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() || f.exists() )
<a name="l01458"></a>01458     {
<a name="l01459"></a>01459         <span class="keywordflow">if</span> ( !f.open( IO_ReadWrite ) ) {
<a name="l01460"></a>01460           KMessageBox::sorry( 0, i18n(<span class="stringliteral">&quot;&lt;qt&gt;Could not save properties. You do not &quot;</span>
<a name="l01461"></a>01461                       <span class="stringliteral">&quot;have sufficient access to write to &lt;b&gt;%1&lt;/b&gt;.&lt;/qt&gt;&quot;</span>).arg(path));
<a name="l01462"></a>01462           <span class="keywordflow">return</span>;
<a name="l01463"></a>01463         }
<a name="l01464"></a>01464         f.close();
<a name="l01465"></a>01465 
<a name="l01466"></a>01466         KDesktopFile cfg(path);
<a name="l01467"></a>01467         kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;sIcon = &quot;</span> &lt;&lt; (sIcon) &lt;&lt; endl;
<a name="l01468"></a>01468         kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;str = &quot;</span> &lt;&lt; (str) &lt;&lt; endl;
<a name="l01469"></a>01469         cfg.writeEntry( <span class="stringliteral">&quot;Icon&quot;</span>, sIcon );
<a name="l01470"></a>01470         cfg.sync();
<a name="l01471"></a>01471     }
<a name="l01472"></a>01472   }
<a name="l01473"></a>01473 }
<a name="l01474"></a>01474 
<a name="l01475"></a>01475 <span class="keywordtype">void</span> KFilePropsPlugin::slotFileRenamed( KIO::Job *, <span class="keyword">const</span> KURL &amp;, <span class="keyword">const</span> KURL &amp; newUrl )
<a name="l01476"></a>01476 {
<a name="l01477"></a>01477   <span class="comment">// This is called in case of an existing local file during the copy/move operation,</span>
<a name="l01478"></a>01478   <span class="comment">// if the user chooses Rename.</span>
<a name="l01479"></a>01479   <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a44cb58947aaa81a32f1a653112dde229" title="Updates the item URL (either called by rename or because a global apps/mimelnk desktop file is being ...">updateUrl</a>( newUrl );
<a name="l01480"></a>01480 }
<a name="l01481"></a>01481 
<a name="l01482"></a><a class="code" href="classKFilePropsPlugin.html#af27e92932409445d46ea8eb498342167">01482</a> <span class="keywordtype">void</span> <a class="code" href="classKFilePropsPlugin.html#af27e92932409445d46ea8eb498342167" title="Called after all plugins applied their changes.">KFilePropsPlugin::postApplyChanges</a>()
<a name="l01483"></a>01483 {
<a name="l01484"></a>01484   <span class="comment">// Save the icon only after applying the permissions changes (#46192)</span>
<a name="l01485"></a>01485   applyIconChanges();
<a name="l01486"></a>01486 
<a name="l01487"></a>01487   KURL::List lst;
<a name="l01488"></a>01488   KFileItemList items = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>();
<a name="l01489"></a>01489   <span class="keywordflow">for</span> ( KFileItemListIterator it( items ); it.current(); ++it )
<a name="l01490"></a>01490     lst.append((*it)-&gt;url());
<a name="l01491"></a>01491   KDirNotify_stub allDirNotify(<span class="stringliteral">&quot;*&quot;</span>, <span class="stringliteral">&quot;KDirNotify*&quot;</span>);
<a name="l01492"></a>01492   allDirNotify.FilesChanged( lst );
<a name="l01493"></a>01493 }
<a name="l01494"></a>01494 
<a name="l01495"></a>01495 <span class="keyword">class </span>KFilePermissionsPropsPlugin::KFilePermissionsPropsPluginPrivate
<a name="l01496"></a>01496 {
<a name="l01497"></a>01497 <span class="keyword">public</span>:
<a name="l01498"></a>01498   KFilePermissionsPropsPluginPrivate()
<a name="l01499"></a>01499   {
<a name="l01500"></a>01500   }
<a name="l01501"></a>01501   ~KFilePermissionsPropsPluginPrivate()
<a name="l01502"></a>01502   {
<a name="l01503"></a>01503   }
<a name="l01504"></a>01504 
<a name="l01505"></a>01505   <a class="codeRef" href="qframe.html">QFrame</a> *m_frame;
<a name="l01506"></a>01506   <a class="codeRef" href="qcheckbox.html">QCheckBox</a> *cbRecursive;
<a name="l01507"></a>01507   <a class="codeRef" href="qlabel.html">QLabel</a> *explanationLabel;
<a name="l01508"></a>01508   <a class="codeRef" href="qcombobox.html">QComboBox</a> *ownerPermCombo, *groupPermCombo, *othersPermCombo;
<a name="l01509"></a>01509   <a class="codeRef" href="qcheckbox.html">QCheckBox</a> *extraCheckbox;
<a name="l01510"></a>01510   mode_t partialPermissions;
<a name="l01511"></a>01511   KFilePermissionsPropsPlugin::PermissionsMode pmode;
<a name="l01512"></a>01512   <span class="keywordtype">bool</span> canChangePermissions;
<a name="l01513"></a>01513   <span class="keywordtype">bool</span> isIrregular;
<a name="l01514"></a>01514   <span class="keywordtype">bool</span> hasExtendedACL;
<a name="l01515"></a>01515   KACL extendedACL;
<a name="l01516"></a>01516   KACL defaultACL;
<a name="l01517"></a>01517   <span class="keywordtype">bool</span> fileSystemSupportsACLs;
<a name="l01518"></a>01518 };
<a name="l01519"></a>01519 
<a name="l01520"></a>01520 <span class="preprocessor">#define UniOwner    (S_IRUSR|S_IWUSR|S_IXUSR)</span>
<a name="l01521"></a>01521 <span class="preprocessor"></span><span class="preprocessor">#define UniGroup    (S_IRGRP|S_IWGRP|S_IXGRP)</span>
<a name="l01522"></a>01522 <span class="preprocessor"></span><span class="preprocessor">#define UniOthers   (S_IROTH|S_IWOTH|S_IXOTH)</span>
<a name="l01523"></a>01523 <span class="preprocessor"></span><span class="preprocessor">#define UniRead     (S_IRUSR|S_IRGRP|S_IROTH)</span>
<a name="l01524"></a>01524 <span class="preprocessor"></span><span class="preprocessor">#define UniWrite    (S_IWUSR|S_IWGRP|S_IWOTH)</span>
<a name="l01525"></a>01525 <span class="preprocessor"></span><span class="preprocessor">#define UniExec     (S_IXUSR|S_IXGRP|S_IXOTH)</span>
<a name="l01526"></a>01526 <span class="preprocessor"></span><span class="preprocessor">#define UniSpecial  (S_ISUID|S_ISGID|S_ISVTX)</span>
<a name="l01527"></a>01527 <span class="preprocessor"></span>
<a name="l01528"></a>01528 <span class="comment">// synced with PermissionsTarget</span>
<a name="l01529"></a>01529 <span class="keyword">const</span> mode_t KFilePermissionsPropsPlugin::permissionsMasks[3] = {UniOwner, UniGroup, UniOthers};
<a name="l01530"></a>01530 <span class="keyword">const</span> mode_t KFilePermissionsPropsPlugin::standardPermissions[4] = { 0, UniRead, UniRead|UniWrite, (mode_t)-1 };
<a name="l01531"></a>01531 
<a name="l01532"></a>01532 <span class="comment">// synced with PermissionsMode and standardPermissions</span>
<a name="l01533"></a>01533 <span class="keyword">const</span> <span class="keywordtype">char</span> *KFilePermissionsPropsPlugin::permissionsTexts[4][4] = {
<a name="l01534"></a>01534   { I18N_NOOP(<span class="stringliteral">&quot;Forbidden&quot;</span>),
<a name="l01535"></a>01535     I18N_NOOP(<span class="stringliteral">&quot;Can Read&quot;</span>),
<a name="l01536"></a>01536     I18N_NOOP(<span class="stringliteral">&quot;Can Read &amp; Write&quot;</span>),
<a name="l01537"></a>01537     0 },
<a name="l01538"></a>01538   { I18N_NOOP(<span class="stringliteral">&quot;Forbidden&quot;</span>),
<a name="l01539"></a>01539     I18N_NOOP(<span class="stringliteral">&quot;Can View Content&quot;</span>),
<a name="l01540"></a>01540     I18N_NOOP(<span class="stringliteral">&quot;Can View &amp; Modify Content&quot;</span>),
<a name="l01541"></a>01541     0 },
<a name="l01542"></a>01542   { 0, 0, 0, 0}, <span class="comment">// no texts for links</span>
<a name="l01543"></a>01543   { I18N_NOOP(<span class="stringliteral">&quot;Forbidden&quot;</span>),
<a name="l01544"></a>01544     I18N_NOOP(<span class="stringliteral">&quot;Can View Content &amp; Read&quot;</span>),
<a name="l01545"></a>01545     I18N_NOOP(<span class="stringliteral">&quot;Can View/Read &amp; Modify/Write&quot;</span>),
<a name="l01546"></a>01546     0 }
<a name="l01547"></a>01547 };
<a name="l01548"></a>01548 
<a name="l01549"></a>01549 
<a name="l01550"></a><a class="code" href="classKFilePermissionsPropsPlugin.html#a37ea054f4a627a74642b4705c85ef4f0">01550</a> <a class="code" href="classKFilePermissionsPropsPlugin.html#a37ea054f4a627a74642b4705c85ef4f0" title="Constructor.">KFilePermissionsPropsPlugin::KFilePermissionsPropsPlugin</a>( <a class="code" href="classKPropertiesDialog.html" title="The main properties dialog class.">KPropertiesDialog</a> *_props )
<a name="l01551"></a>01551   : <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a>( _props )
<a name="l01552"></a>01552 {
<a name="l01553"></a>01553   d = <span class="keyword">new</span> KFilePermissionsPropsPluginPrivate;
<a name="l01554"></a>01554   d-&gt;cbRecursive = 0L;
<a name="l01555"></a>01555   grpCombo = 0L; grpEdit = 0;
<a name="l01556"></a>01556   usrEdit = 0L;
<a name="l01557"></a>01557   <a class="codeRef" href="qstring.html">QString</a> path = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path(-1);
<a name="l01558"></a>01558   <a class="codeRef" href="qstring.html">QString</a> fname = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().fileName();
<a name="l01559"></a>01559   <span class="keywordtype">bool</span> isLocal = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().isLocalFile();
<a name="l01560"></a>01560   <span class="keywordtype">bool</span> isTrash = ( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().protocol().find(<span class="stringliteral">&quot;trash&quot;</span>, 0, <span class="keyword">false</span>)==0 );
<a name="l01561"></a>01561   <span class="keywordtype">bool</span> IamRoot = (geteuid() == 0);
<a name="l01562"></a>01562 
<a name="l01563"></a>01563   KFileItem * item = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a>();
<a name="l01564"></a>01564   <span class="keywordtype">bool</span> isLink = item-&gt;isLink();
<a name="l01565"></a>01565   <span class="keywordtype">bool</span> isDir = item-&gt;isDir(); <span class="comment">// all dirs</span>
<a name="l01566"></a>01566   <span class="keywordtype">bool</span> hasDir = item-&gt;isDir(); <span class="comment">// at least one dir</span>
<a name="l01567"></a>01567   permissions = item-&gt;permissions(); <span class="comment">// common permissions to all files</span>
<a name="l01568"></a>01568   d-&gt;partialPermissions = permissions; <span class="comment">// permissions that only some files have (at first we take everything)</span>
<a name="l01569"></a>01569   d-&gt;isIrregular = isIrregular(permissions, isDir, isLink);
<a name="l01570"></a>01570   strOwner = item-&gt;user();
<a name="l01571"></a>01571   strGroup = item-&gt;group();
<a name="l01572"></a>01572   d-&gt;hasExtendedACL = item-&gt;ACL().isExtended() || item-&gt;defaultACL().isValid();
<a name="l01573"></a>01573   d-&gt;extendedACL = item-&gt;ACL();
<a name="l01574"></a>01574   d-&gt;defaultACL = item-&gt;defaultACL();
<a name="l01575"></a>01575   d-&gt;fileSystemSupportsACLs = <span class="keyword">false</span>;
<a name="l01576"></a>01576 
<a name="l01577"></a>01577   <span class="keywordflow">if</span> ( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>().count() &gt; 1 )
<a name="l01578"></a>01578   {
<a name="l01579"></a>01579     <span class="comment">// Multiple items: see what they have in common</span>
<a name="l01580"></a>01580     KFileItemList items = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>();
<a name="l01581"></a>01581     KFileItemListIterator it( items );
<a name="l01582"></a>01582     <span class="keywordflow">for</span> ( ++it <span class="comment">/*no need to check the first one again*/</span> ; it.current(); ++it )
<a name="l01583"></a>01583     {
<a name="l01584"></a>01584       <span class="keywordflow">if</span> (!d-&gt;isIrregular)
<a name="l01585"></a>01585         d-&gt;isIrregular |= isIrregular((*it)-&gt;permissions(),
<a name="l01586"></a>01586                                       (*it)-&gt;isDir() == isDir,
<a name="l01587"></a>01587                                       (*it)-&gt;isLink() == isLink);
<a name="l01588"></a>01588       d-&gt;hasExtendedACL = d-&gt;hasExtendedACL || (*it)-&gt;hasExtendedACL();
<a name="l01589"></a>01589       <span class="keywordflow">if</span> ( (*it)-&gt;isLink() != isLink )
<a name="l01590"></a>01590         isLink = <span class="keyword">false</span>;
<a name="l01591"></a>01591       <span class="keywordflow">if</span> ( (*it)-&gt;isDir() != isDir )
<a name="l01592"></a>01592         isDir = <span class="keyword">false</span>;
<a name="l01593"></a>01593       hasDir |= (*it)-&gt;isDir();
<a name="l01594"></a>01594       <span class="keywordflow">if</span> ( (*it)-&gt;permissions() != permissions )
<a name="l01595"></a>01595       {
<a name="l01596"></a>01596         permissions &amp;= (*it)-&gt;permissions();
<a name="l01597"></a>01597         d-&gt;partialPermissions |= (*it)-&gt;permissions();
<a name="l01598"></a>01598       }
<a name="l01599"></a>01599       <span class="keywordflow">if</span> ( (*it)-&gt;user() != strOwner )
<a name="l01600"></a>01600         strOwner = QString::null;
<a name="l01601"></a>01601       <span class="keywordflow">if</span> ( (*it)-&gt;group() != strGroup )
<a name="l01602"></a>01602         strGroup = QString::null;
<a name="l01603"></a>01603     }
<a name="l01604"></a>01604   }
<a name="l01605"></a>01605 
<a name="l01606"></a>01606   <span class="keywordflow">if</span> (isLink)
<a name="l01607"></a>01607     d-&gt;pmode = PermissionsOnlyLinks;
<a name="l01608"></a>01608   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isDir)
<a name="l01609"></a>01609     d-&gt;pmode = PermissionsOnlyDirs;
<a name="l01610"></a>01610   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (hasDir)
<a name="l01611"></a>01611     d-&gt;pmode = PermissionsMixed;
<a name="l01612"></a>01612   <span class="keywordflow">else</span>
<a name="l01613"></a>01613     d-&gt;pmode = PermissionsOnlyFiles;
<a name="l01614"></a>01614 
<a name="l01615"></a>01615   <span class="comment">// keep only what&#39;s not in the common permissions</span>
<a name="l01616"></a>01616   d-&gt;partialPermissions = d-&gt;partialPermissions &amp; ~permissions;
<a name="l01617"></a>01617 
<a name="l01618"></a>01618   <span class="keywordtype">bool</span> isMyFile = <span class="keyword">false</span>;
<a name="l01619"></a>01619 
<a name="l01620"></a>01620   <span class="keywordflow">if</span> (isLocal &amp;&amp; !strOwner.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>()) { <span class="comment">// local files, and all owned by the same person</span>
<a name="l01621"></a>01621     <span class="keyword">struct </span>passwd *myself = getpwuid( geteuid() );
<a name="l01622"></a>01622     <span class="keywordflow">if</span> ( myself != 0L )
<a name="l01623"></a>01623     {
<a name="l01624"></a>01624       isMyFile = (strOwner == <a class="codeRef" href="qstring.html#fromLocal8Bit">QString::fromLocal8Bit</a>(myself-&gt;pw_name));
<a name="l01625"></a>01625     } <span class="keywordflow">else</span>
<a name="l01626"></a>01626       kdWarning() &lt;&lt; <span class="stringliteral">&quot;I don&#39;t exist ?! geteuid=&quot;</span> &lt;&lt; geteuid() &lt;&lt; endl;
<a name="l01627"></a>01627   } <span class="keywordflow">else</span> {
<a name="l01628"></a>01628     <span class="comment">//We don&#39;t know, for remote files, if they are ours or not.</span>
<a name="l01629"></a>01629     <span class="comment">//So we let the user change permissions, and</span>
<a name="l01630"></a>01630     <span class="comment">//KIO::chmod will tell, if he had no right to do it.</span>
<a name="l01631"></a>01631     isMyFile = <span class="keyword">true</span>;
<a name="l01632"></a>01632   }
<a name="l01633"></a>01633 
<a name="l01634"></a>01634   d-&gt;canChangePermissions = (isMyFile || IamRoot) &amp;&amp; (!isLink);
<a name="l01635"></a>01635 
<a name="l01636"></a>01636 
<a name="l01637"></a>01637   <span class="comment">// create GUI</span>
<a name="l01638"></a>01638 
<a name="l01639"></a>01639   d-&gt;m_frame = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;addPage(i18n(<span class="stringliteral">&quot;&amp;Permissions&quot;</span>));
<a name="l01640"></a>01640 
<a name="l01641"></a>01641   <a class="codeRef" href="qboxlayout.html">QBoxLayout</a> *box = <span class="keyword">new</span> <a class="codeRef" href="qvboxlayout.html">QVBoxLayout</a>( d-&gt;m_frame, 0, KDialog::spacingHint() );
<a name="l01642"></a>01642 
<a name="l01643"></a>01643   <a class="codeRef" href="qwidget.html">QWidget</a> *l;
<a name="l01644"></a>01644   <a class="codeRef" href="qlabel.html">QLabel</a> *lbl;
<a name="l01645"></a>01645   <a class="codeRef" href="qgroupbox.html">QGroupBox</a> *gb;
<a name="l01646"></a>01646   <a class="codeRef" href="qgridlayout.html">QGridLayout</a> *gl;
<a name="l01647"></a>01647   <a class="codeRef" href="qpushbutton.html">QPushButton</a>* pbAdvancedPerm = 0;
<a name="l01648"></a>01648 
<a name="l01649"></a>01649   <span class="comment">/* Group: Access Permissions */</span>
<a name="l01650"></a>01650   gb = <span class="keyword">new</span> <a class="codeRef" href="qgroupbox.html">QGroupBox</a> ( 0, Qt::Vertical, i18n(<span class="stringliteral">&quot;Access Permissions&quot;</span>), d-&gt;m_frame );
<a name="l01651"></a>01651   gb-&gt;layout()-&gt;setSpacing(KDialog::spacingHint());
<a name="l01652"></a>01652   gb-&gt;layout()-&gt;setMargin(KDialog::marginHint());
<a name="l01653"></a>01653   box-&gt;<a class="codeRef" href="qboxlayout.html#addWidget">addWidget</a> (gb);
<a name="l01654"></a>01654 
<a name="l01655"></a>01655   gl = <span class="keyword">new</span> <a class="codeRef" href="qgridlayout.html">QGridLayout</a> (gb-&gt;layout(), 7, 2);
<a name="l01656"></a>01656   gl-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(1, 1);
<a name="l01657"></a>01657 
<a name="l01658"></a>01658   l = d-&gt;explanationLabel = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( <span class="stringliteral">&quot;&quot;</span>, gb );
<a name="l01659"></a>01659   <span class="keywordflow">if</span> (isLink)
<a name="l01660"></a>01660     d-&gt;explanationLabel-&gt;setText(i18n(<span class="stringliteral">&quot;This file is a link and does not have permissions.&quot;</span>,
<a name="l01661"></a>01661                       <span class="stringliteral">&quot;All files are links and do not have permissions.&quot;</span>,
<a name="l01662"></a>01662                       <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>().count()));
<a name="l01663"></a>01663   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!d-&gt;canChangePermissions)
<a name="l01664"></a>01664     d-&gt;explanationLabel-&gt;setText(i18n(<span class="stringliteral">&quot;Only the owner can change permissions.&quot;</span>));
<a name="l01665"></a>01665   gl-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCellWidget">addMultiCellWidget</a>(l, 0, 0, 0, 1);
<a name="l01666"></a>01666 
<a name="l01667"></a>01667   lbl = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;O&amp;wner:&quot;</span>), gb);
<a name="l01668"></a>01668   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(lbl, 1, 0);
<a name="l01669"></a>01669   l = d-&gt;ownerPermCombo = <span class="keyword">new</span> <a class="codeRef" href="qcombobox.html">QComboBox</a>(gb);
<a name="l01670"></a>01670   lbl-&gt;<a class="codeRef" href="qlabel.html#setBuddy">setBuddy</a>(l);
<a name="l01671"></a>01671   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 1, 1);
<a name="l01672"></a>01672   <a class="codeRef" href="qobject.html#connect">connect</a>(l, SIGNAL( highlighted(<span class="keywordtype">int</span>) ), <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ));
<a name="l01673"></a>01673   <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(l, i18n(<span class="stringliteral">&quot;Specifies the actions that the owner is allowed to do.&quot;</span>));
<a name="l01674"></a>01674 
<a name="l01675"></a>01675   lbl = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Gro&amp;up:&quot;</span>), gb);
<a name="l01676"></a>01676   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(lbl, 2, 0);
<a name="l01677"></a>01677   l = d-&gt;groupPermCombo = <span class="keyword">new</span> <a class="codeRef" href="qcombobox.html">QComboBox</a>(gb);
<a name="l01678"></a>01678   lbl-&gt;<a class="codeRef" href="qlabel.html#setBuddy">setBuddy</a>(l);
<a name="l01679"></a>01679   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 2, 1);
<a name="l01680"></a>01680   <a class="codeRef" href="qobject.html#connect">connect</a>(l, SIGNAL( highlighted(<span class="keywordtype">int</span>) ), <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ));
<a name="l01681"></a>01681   <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(l, i18n(<span class="stringliteral">&quot;Specifies the actions that the members of the group are allowed to do.&quot;</span>));
<a name="l01682"></a>01682 
<a name="l01683"></a>01683   lbl = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;O&amp;thers:&quot;</span>), gb);
<a name="l01684"></a>01684   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(lbl, 3, 0);
<a name="l01685"></a>01685   l = d-&gt;othersPermCombo = <span class="keyword">new</span> <a class="codeRef" href="qcombobox.html">QComboBox</a>(gb);
<a name="l01686"></a>01686   lbl-&gt;<a class="codeRef" href="qlabel.html#setBuddy">setBuddy</a>(l);
<a name="l01687"></a>01687   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 3, 1);
<a name="l01688"></a>01688   <a class="codeRef" href="qobject.html#connect">connect</a>(l, SIGNAL( highlighted(<span class="keywordtype">int</span>) ), <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ));
<a name="l01689"></a>01689   <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(l, i18n(<span class="stringliteral">&quot;Specifies the actions that all users, who are neither &quot;</span>
<a name="l01690"></a>01690               <span class="stringliteral">&quot;owner nor in the group, are allowed to do.&quot;</span>));
<a name="l01691"></a>01691 
<a name="l01692"></a>01692   <span class="keywordflow">if</span> (!isLink) {
<a name="l01693"></a>01693     l = d-&gt;extraCheckbox = <span class="keyword">new</span> <a class="codeRef" href="qcheckbox.html">QCheckBox</a>(hasDir ?
<a name="l01694"></a>01694                      i18n(<span class="stringliteral">&quot;Only own&amp;er can rename and delete folder content&quot;</span>) :
<a name="l01695"></a>01695                      i18n(<span class="stringliteral">&quot;Is &amp;executable&quot;</span>),
<a name="l01696"></a>01696                      gb );
<a name="l01697"></a>01697     <a class="codeRef" href="qobject.html#connect">connect</a>( d-&gt;extraCheckbox, SIGNAL( clicked() ), <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l01698"></a>01698     gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 4, 1);
<a name="l01699"></a>01699     <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(l, hasDir ? i18n(<span class="stringliteral">&quot;Enable this option to allow only the folder&#39;s owner to &quot;</span>
<a name="l01700"></a>01700                      <span class="stringliteral">&quot;delete or rename the contained files and folders. Other &quot;</span>
<a name="l01701"></a>01701                      <span class="stringliteral">&quot;users can only add new files, which requires the &#39;Modify &quot;</span>
<a name="l01702"></a>01702                      <span class="stringliteral">&quot;Content&#39; permission.&quot;</span>)
<a name="l01703"></a>01703             : i18n(<span class="stringliteral">&quot;Enable this option to mark the file as executable. This only makes &quot;</span>
<a name="l01704"></a>01704                <span class="stringliteral">&quot;sense for programs and scripts. It is required when you want to &quot;</span>
<a name="l01705"></a>01705                <span class="stringliteral">&quot;execute them.&quot;</span>));
<a name="l01706"></a>01706 
<a name="l01707"></a>01707     <a class="codeRef" href="qlayoutitem.html">QLayoutItem</a> *spacer = <span class="keyword">new</span> <a class="codeRef" href="qspaceritem.html">QSpacerItem</a>(0, 20, QSizePolicy::Minimum, QSizePolicy::Expanding);
<a name="l01708"></a>01708     gl-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCell">addMultiCell</a>(spacer, 5, 5, 0, 1);
<a name="l01709"></a>01709 
<a name="l01710"></a>01710     pbAdvancedPerm = <span class="keyword">new</span> <a class="codeRef" href="qpushbutton.html">QPushButton</a>(i18n(<span class="stringliteral">&quot;A&amp;dvanced Permissions&quot;</span>), gb);
<a name="l01711"></a>01711     gl-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCellWidget">addMultiCellWidget</a>(pbAdvancedPerm, 6, 6, 0, 1, AlignRight);
<a name="l01712"></a>01712     <a class="codeRef" href="qobject.html#connect">connect</a>(pbAdvancedPerm, SIGNAL( clicked() ), <span class="keyword">this</span>, SLOT( slotShowAdvancedPermissions() ));
<a name="l01713"></a>01713   }
<a name="l01714"></a>01714   <span class="keywordflow">else</span>
<a name="l01715"></a>01715     d-&gt;extraCheckbox = 0;
<a name="l01716"></a>01716 
<a name="l01717"></a>01717 
<a name="l01718"></a>01718   <span class="comment">/**** Group: Ownership ****/</span>
<a name="l01719"></a>01719   gb = <span class="keyword">new</span> <a class="codeRef" href="qgroupbox.html">QGroupBox</a> ( 0, Qt::Vertical, i18n(<span class="stringliteral">&quot;Ownership&quot;</span>), d-&gt;m_frame );
<a name="l01720"></a>01720   gb-&gt;layout()-&gt;setSpacing(KDialog::spacingHint());
<a name="l01721"></a>01721   gb-&gt;layout()-&gt;setMargin(KDialog::marginHint());
<a name="l01722"></a>01722   box-&gt;<a class="codeRef" href="qboxlayout.html#addWidget">addWidget</a> (gb);
<a name="l01723"></a>01723 
<a name="l01724"></a>01724   gl = <span class="keyword">new</span> <a class="codeRef" href="qgridlayout.html">QGridLayout</a> (gb-&gt;layout(), 4, 3);
<a name="l01725"></a>01725   gl-&gt;<a class="codeRef" href="qgridlayout.html#addRowSpacing">addRowSpacing</a>(0, 10);
<a name="l01726"></a>01726 
<a name="l01727"></a>01727   <span class="comment">/*** Set Owner ***/</span>
<a name="l01728"></a>01728   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;User:&quot;</span>), gb );
<a name="l01729"></a>01729   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a> (l, 1, 0);
<a name="l01730"></a>01730 
<a name="l01731"></a>01731   <span class="comment">/* GJ: Don&#39;t autocomplete more than 1000 users. This is a kind of random</span>
<a name="l01732"></a>01732 <span class="comment">   * value. Huge sites having 10.000+ user have a fair chance of using NIS,</span>
<a name="l01733"></a>01733 <span class="comment">   * (possibly) making this unacceptably slow.</span>
<a name="l01734"></a>01734 <span class="comment">   * OTOH, it is nice to offer this functionality for the standard user.</span>
<a name="l01735"></a>01735 <span class="comment">   */</span>
<a name="l01736"></a>01736   <span class="keywordtype">int</span> i, maxEntries = 1000;
<a name="l01737"></a>01737   <span class="keyword">struct </span>passwd *user;
<a name="l01738"></a>01738   <span class="keyword">struct </span>group *ge;
<a name="l01739"></a>01739 
<a name="l01740"></a>01740   <span class="comment">/* File owner: For root, offer a KLineEdit with autocompletion.</span>
<a name="l01741"></a>01741 <span class="comment">   * For a user, who can never chown() a file, offer a QLabel.</span>
<a name="l01742"></a>01742 <span class="comment">   */</span>
<a name="l01743"></a>01743   <span class="keywordflow">if</span> (IamRoot &amp;&amp; isLocal)
<a name="l01744"></a>01744   {
<a name="l01745"></a>01745     usrEdit = <span class="keyword">new</span> KLineEdit( gb );
<a name="l01746"></a>01746     KCompletion *kcom = usrEdit-&gt;completionObject();
<a name="l01747"></a>01747     kcom-&gt;setOrder(KCompletion::Sorted);
<a name="l01748"></a>01748     setpwent();
<a name="l01749"></a>01749     <span class="keywordflow">for</span> (i=0; ((user = getpwent()) != 0L) &amp;&amp; (i &lt; maxEntries); i++)
<a name="l01750"></a>01750       kcom-&gt;addItem(<a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(user-&gt;pw_name));
<a name="l01751"></a>01751     endpwent();
<a name="l01752"></a>01752     usrEdit-&gt;setCompletionMode((i &lt; maxEntries) ? KGlobalSettings::CompletionAuto :
<a name="l01753"></a>01753                                KGlobalSettings::CompletionNone);
<a name="l01754"></a>01754     usrEdit-&gt;setText(strOwner);
<a name="l01755"></a>01755     gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(usrEdit, 1, 1);
<a name="l01756"></a>01756     <a class="codeRef" href="qobject.html#connect">connect</a>( usrEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l01757"></a>01757              <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l01758"></a>01758   }
<a name="l01759"></a>01759   <span class="keywordflow">else</span>
<a name="l01760"></a>01760   {
<a name="l01761"></a>01761     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(strOwner, gb);
<a name="l01762"></a>01762     gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 1, 1);
<a name="l01763"></a>01763   }
<a name="l01764"></a>01764 
<a name="l01765"></a>01765   <span class="comment">/*** Set Group ***/</span>
<a name="l01766"></a>01766 
<a name="l01767"></a>01767   <a class="codeRef" href="qstringlist.html">QStringList</a> groupList;
<a name="l01768"></a>01768   <a class="codeRef" href="qcstring.html">QCString</a> strUser;
<a name="l01769"></a>01769   user = getpwuid(geteuid());
<a name="l01770"></a>01770   <span class="keywordflow">if</span> (user != 0L)
<a name="l01771"></a>01771     strUser = user-&gt;pw_name;
<a name="l01772"></a>01772 
<a name="l01773"></a>01773 <span class="preprocessor">#ifdef Q_OS_UNIX</span>
<a name="l01774"></a>01774 <span class="preprocessor"></span>  setgrent();
<a name="l01775"></a>01775   <span class="keywordflow">for</span> (i=0; ((ge = getgrent()) != 0L) &amp;&amp; (i &lt; maxEntries); i++)
<a name="l01776"></a>01776   {
<a name="l01777"></a>01777     <span class="keywordflow">if</span> (IamRoot)
<a name="l01778"></a>01778       groupList += <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(ge-&gt;gr_name);
<a name="l01779"></a>01779     <span class="keywordflow">else</span>
<a name="l01780"></a>01780     {
<a name="l01781"></a>01781       <span class="comment">/* pick the groups to which the user belongs */</span>
<a name="l01782"></a>01782       <span class="keywordtype">char</span> ** members = ge-&gt;gr_mem;
<a name="l01783"></a>01783       <span class="keywordtype">char</span> * member;
<a name="l01784"></a>01784       <span class="keywordflow">while</span> ((member = *members) != 0L) {
<a name="l01785"></a>01785         <span class="keywordflow">if</span> (strUser == member) {
<a name="l01786"></a>01786           groupList += <a class="codeRef" href="qstring.html#fromLocal8Bit">QString::fromLocal8Bit</a>(ge-&gt;gr_name);
<a name="l01787"></a>01787           <span class="keywordflow">break</span>;
<a name="l01788"></a>01788         }
<a name="l01789"></a>01789         ++members;
<a name="l01790"></a>01790       }
<a name="l01791"></a>01791     }
<a name="l01792"></a>01792   }
<a name="l01793"></a>01793   endgrent();
<a name="l01794"></a>01794 <span class="preprocessor">#endif //Q_OS_UNIX</span>
<a name="l01795"></a>01795 <span class="preprocessor"></span>
<a name="l01796"></a>01796   <span class="comment">/* add the effective Group to the list .. */</span>
<a name="l01797"></a>01797   ge = getgrgid (getegid());
<a name="l01798"></a>01798   <span class="keywordflow">if</span> (ge) {
<a name="l01799"></a>01799     <a class="codeRef" href="qstring.html">QString</a> <a class="codeRef" href="qobject.html#name">name</a> = <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(ge-&gt;gr_name);
<a name="l01800"></a>01800     <span class="keywordflow">if</span> (name.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>())
<a name="l01801"></a>01801       name.<a class="codeRef" href="qstring.html#setNum">setNum</a>(ge-&gt;gr_gid);
<a name="l01802"></a>01802     <span class="keywordflow">if</span> (groupList.find(name) == groupList.end())
<a name="l01803"></a>01803       groupList += name;
<a name="l01804"></a>01804   }
<a name="l01805"></a>01805 
<a name="l01806"></a>01806   <span class="keywordtype">bool</span> isMyGroup = groupList.contains(strGroup);
<a name="l01807"></a>01807 
<a name="l01808"></a>01808   <span class="comment">/* add the group the file currently belongs to ..</span>
<a name="l01809"></a>01809 <span class="comment">   * .. if its not there already</span>
<a name="l01810"></a>01810 <span class="comment">   */</span>
<a name="l01811"></a>01811   <span class="keywordflow">if</span> (!isMyGroup)
<a name="l01812"></a>01812     groupList += strGroup;
<a name="l01813"></a>01813 
<a name="l01814"></a>01814   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Group:&quot;</span>), gb );
<a name="l01815"></a>01815   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a> (l, 2, 0);
<a name="l01816"></a>01816 
<a name="l01817"></a>01817   <span class="comment">/* Set group: if possible to change:</span>
<a name="l01818"></a>01818 <span class="comment">   * - Offer a KLineEdit for root, since he can change to any group.</span>
<a name="l01819"></a>01819 <span class="comment">   * - Offer a QComboBox for a normal user, since he can change to a fixed</span>
<a name="l01820"></a>01820 <span class="comment">   *   (small) set of groups only.</span>
<a name="l01821"></a>01821 <span class="comment">   * If not changeable: offer a QLabel.</span>
<a name="l01822"></a>01822 <span class="comment">   */</span>
<a name="l01823"></a>01823   <span class="keywordflow">if</span> (IamRoot &amp;&amp; isLocal)
<a name="l01824"></a>01824   {
<a name="l01825"></a>01825     grpEdit = <span class="keyword">new</span> KLineEdit(gb);
<a name="l01826"></a>01826     KCompletion *kcom = <span class="keyword">new</span> KCompletion;
<a name="l01827"></a>01827     kcom-&gt;setItems(groupList);
<a name="l01828"></a>01828     grpEdit-&gt;setCompletionObject(kcom, <span class="keyword">true</span>);
<a name="l01829"></a>01829     grpEdit-&gt;setAutoDeleteCompletionObject( <span class="keyword">true</span> );
<a name="l01830"></a>01830     grpEdit-&gt;setCompletionMode(KGlobalSettings::CompletionAuto);
<a name="l01831"></a>01831     grpEdit-&gt;setText(strGroup);
<a name="l01832"></a>01832     gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(grpEdit, 2, 1);
<a name="l01833"></a>01833     <a class="codeRef" href="qobject.html#connect">connect</a>( grpEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l01834"></a>01834              <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l01835"></a>01835   }
<a name="l01836"></a>01836   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((groupList.count() &gt; 1) &amp;&amp; isMyFile &amp;&amp; isLocal)
<a name="l01837"></a>01837   {
<a name="l01838"></a>01838     grpCombo = <span class="keyword">new</span> <a class="codeRef" href="qcombobox.html">QComboBox</a>(gb, <span class="stringliteral">&quot;combogrouplist&quot;</span>);
<a name="l01839"></a>01839     grpCombo-&gt;<a class="codeRef" href="qcombobox.html#insertStringList">insertStringList</a>(groupList);
<a name="l01840"></a>01840     grpCombo-&gt;<a class="codeRef" href="qcombobox.html#setCurrentItem">setCurrentItem</a>(groupList.findIndex(strGroup));
<a name="l01841"></a>01841     gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(grpCombo, 2, 1);
<a name="l01842"></a>01842     <a class="codeRef" href="qobject.html#connect">connect</a>( grpCombo, SIGNAL( activated( <span class="keywordtype">int</span> ) ),
<a name="l01843"></a>01843              <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l01844"></a>01844   }
<a name="l01845"></a>01845   <span class="keywordflow">else</span>
<a name="l01846"></a>01846   {
<a name="l01847"></a>01847     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(strGroup, gb);
<a name="l01848"></a>01848     gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 2, 1);
<a name="l01849"></a>01849   }
<a name="l01850"></a>01850 
<a name="l01851"></a>01851   gl-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(2, 10);
<a name="l01852"></a>01852 
<a name="l01853"></a>01853   <span class="comment">// &quot;Apply recursive&quot; checkbox</span>
<a name="l01854"></a>01854   <span class="keywordflow">if</span> ( hasDir &amp;&amp; !isLink &amp;&amp; !isTrash  )
<a name="l01855"></a>01855   {
<a name="l01856"></a>01856       d-&gt;cbRecursive = <span class="keyword">new</span> <a class="codeRef" href="qcheckbox.html">QCheckBox</a>( i18n(<span class="stringliteral">&quot;Apply changes to all subfolders and their contents&quot;</span>), d-&gt;m_frame );
<a name="l01857"></a>01857       <a class="codeRef" href="qobject.html#connect">connect</a>( d-&gt;cbRecursive, SIGNAL( clicked() ), <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l01858"></a>01858       box-&gt;<a class="codeRef" href="qboxlayout.html#addWidget">addWidget</a>( d-&gt;cbRecursive );
<a name="l01859"></a>01859   }
<a name="l01860"></a>01860 
<a name="l01861"></a>01861   updateAccessControls();
<a name="l01862"></a>01862 
<a name="l01863"></a>01863 
<a name="l01864"></a>01864   <span class="keywordflow">if</span> ( isTrash || !d-&gt;canChangePermissions )
<a name="l01865"></a>01865   {
<a name="l01866"></a>01866       <span class="comment">//don&#39;t allow to change properties for file into trash</span>
<a name="l01867"></a>01867       enableAccessControls(<span class="keyword">false</span>);
<a name="l01868"></a>01868       <span class="keywordflow">if</span> ( pbAdvancedPerm  &amp;&amp; !d-&gt;hasExtendedACL )
<a name="l01869"></a>01869           pbAdvancedPerm-&gt;setEnabled(<span class="keyword">false</span>);
<a name="l01870"></a>01870   }
<a name="l01871"></a>01871 
<a name="l01872"></a>01872   box-&gt;<a class="codeRef" href="qboxlayout.html#addStretch">addStretch</a> (10);
<a name="l01873"></a>01873 }
<a name="l01874"></a>01874 
<a name="l01875"></a>01875 <span class="preprocessor">#ifdef USE_POSIX_ACL</span>
<a name="l01876"></a>01876 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">bool</span> fileSystemSupportsACL( <span class="keyword">const</span> <a class="codeRef" href="qcstring.html">QCString</a>&amp; pathCString )
<a name="l01877"></a>01877 {
<a name="l01878"></a>01878     <span class="keywordtype">bool</span> fileSystemSupportsACLs = <span class="keyword">false</span>;
<a name="l01879"></a>01879 <span class="preprocessor">#ifdef Q_OS_FREEBSD</span>
<a name="l01880"></a>01880 <span class="preprocessor"></span>    <span class="keyword">struct </span>statfs buf;
<a name="l01881"></a>01881     fileSystemSupportsACLs = ( statfs( pathCString.data(), &amp;buf ) == 0 ) &amp;&amp; ( buf.f_flags &amp; MNT_ACLS );
<a name="l01882"></a>01882 <span class="preprocessor">#else</span>
<a name="l01883"></a>01883 <span class="preprocessor"></span>    fileSystemSupportsACLs =
<a name="l01884"></a>01884       getxattr( pathCString.data(), <span class="stringliteral">&quot;system.posix_acl_access&quot;</span>, NULL, 0 ) &gt;= 0 || errno == ENODATA;
<a name="l01885"></a>01885 <span class="preprocessor">#endif</span>
<a name="l01886"></a>01886 <span class="preprocessor"></span>    <span class="keywordflow">return</span> fileSystemSupportsACLs;
<a name="l01887"></a>01887 }
<a name="l01888"></a>01888 <span class="preprocessor">#endif</span>
<a name="l01889"></a>01889 <span class="preprocessor"></span>
<a name="l01890"></a>01890 
<a name="l01891"></a>01891 <span class="keywordtype">void</span> KFilePermissionsPropsPlugin::slotShowAdvancedPermissions() {
<a name="l01892"></a>01892 
<a name="l01893"></a>01893   <span class="keywordtype">bool</span> isDir = (d-&gt;pmode == PermissionsOnlyDirs) || (d-&gt;pmode == PermissionsMixed);
<a name="l01894"></a>01894   KDialogBase dlg(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>, 0, <span class="keyword">true</span>, i18n(<span class="stringliteral">&quot;Advanced Permissions&quot;</span>),
<a name="l01895"></a>01895           KDialogBase::Ok|KDialogBase::Cancel);
<a name="l01896"></a>01896 
<a name="l01897"></a>01897   <a class="codeRef" href="qlabel.html">QLabel</a> *l, *cl[3];
<a name="l01898"></a>01898   <a class="codeRef" href="qgroupbox.html">QGroupBox</a> *gb;
<a name="l01899"></a>01899   <a class="codeRef" href="qgridlayout.html">QGridLayout</a> *gl;
<a name="l01900"></a>01900 
<a name="l01901"></a>01901   <a class="codeRef" href="qvbox.html">QVBox</a> *mainVBox = dlg.makeVBoxMainWidget();
<a name="l01902"></a>01902 
<a name="l01903"></a>01903   <span class="comment">// Group: Access Permissions</span>
<a name="l01904"></a>01904   gb = <span class="keyword">new</span> <a class="codeRef" href="qgroupbox.html">QGroupBox</a> ( 0, Qt::Vertical, i18n(<span class="stringliteral">&quot;Access Permissions&quot;</span>), mainVBox );
<a name="l01905"></a>01905   gb-&gt;layout()-&gt;setSpacing(KDialog::spacingHint());
<a name="l01906"></a>01906   gb-&gt;layout()-&gt;setMargin(KDialog::marginHint());
<a name="l01907"></a>01907 
<a name="l01908"></a>01908   gl = <span class="keyword">new</span> <a class="codeRef" href="qgridlayout.html">QGridLayout</a> (gb-&gt;layout(), 6, 6);
<a name="l01909"></a>01909   gl-&gt;<a class="codeRef" href="qgridlayout.html#addRowSpacing">addRowSpacing</a>(0, 10);
<a name="l01910"></a>01910 
<a name="l01911"></a>01911   <a class="codeRef" href="qvaluevector.html">QValueVector&lt;QWidget*&gt;</a> theNotSpecials;
<a name="l01912"></a>01912 
<a name="l01913"></a>01913   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Class&quot;</span>), gb );
<a name="l01914"></a>01914   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 1, 0);
<a name="l01915"></a>01915   theNotSpecials.<a class="codeRef" href="qvaluevector.html#append">append</a>( l );
<a name="l01916"></a>01916 
<a name="l01917"></a>01917   <span class="keywordflow">if</span> (isDir)
<a name="l01918"></a>01918     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Show\nEntries&quot;</span>), gb );
<a name="l01919"></a>01919   <span class="keywordflow">else</span>
<a name="l01920"></a>01920     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Read&quot;</span>), gb );
<a name="l01921"></a>01921   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a> (l, 1, 1);
<a name="l01922"></a>01922   theNotSpecials.<a class="codeRef" href="qvaluevector.html#append">append</a>( l );
<a name="l01923"></a>01923   <a class="codeRef" href="qstring.html">QString</a> readWhatsThis;
<a name="l01924"></a>01924   <span class="keywordflow">if</span> (isDir)
<a name="l01925"></a>01925     readWhatsThis = i18n(<span class="stringliteral">&quot;This flag allows viewing the content of the folder.&quot;</span>);
<a name="l01926"></a>01926   <span class="keywordflow">else</span>
<a name="l01927"></a>01927     readWhatsThis = i18n(<span class="stringliteral">&quot;The Read flag allows viewing the content of the file.&quot;</span>);
<a name="l01928"></a>01928   <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(l, readWhatsThis);
<a name="l01929"></a>01929 
<a name="l01930"></a>01930   <span class="keywordflow">if</span> (isDir)
<a name="l01931"></a>01931     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Write\nEntries&quot;</span>), gb );
<a name="l01932"></a>01932   <span class="keywordflow">else</span>
<a name="l01933"></a>01933     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Write&quot;</span>), gb );
<a name="l01934"></a>01934   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a> (l, 1, 2);
<a name="l01935"></a>01935   theNotSpecials.<a class="codeRef" href="qvaluevector.html#append">append</a>( l );
<a name="l01936"></a>01936   <a class="codeRef" href="qstring.html">QString</a> writeWhatsThis;
<a name="l01937"></a>01937   <span class="keywordflow">if</span> (isDir)
<a name="l01938"></a>01938     writeWhatsThis = i18n(<span class="stringliteral">&quot;This flag allows adding, renaming and deleting of files. &quot;</span>
<a name="l01939"></a>01939               <span class="stringliteral">&quot;Note that deleting and renaming can be limited using the Sticky flag.&quot;</span>);
<a name="l01940"></a>01940   <span class="keywordflow">else</span>
<a name="l01941"></a>01941     writeWhatsThis = i18n(<span class="stringliteral">&quot;The Write flag allows modifying the content of the file.&quot;</span>);
<a name="l01942"></a>01942   <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(l, writeWhatsThis);
<a name="l01943"></a>01943 
<a name="l01944"></a>01944   <a class="codeRef" href="qstring.html">QString</a> execWhatsThis;
<a name="l01945"></a>01945   <span class="keywordflow">if</span> (isDir) {
<a name="l01946"></a>01946     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Enter folder&quot;</span>, <span class="stringliteral">&quot;Enter&quot;</span>), gb );
<a name="l01947"></a>01947     execWhatsThis = i18n(<span class="stringliteral">&quot;Enable this flag to allow entering the folder.&quot;</span>);
<a name="l01948"></a>01948   }
<a name="l01949"></a>01949   <span class="keywordflow">else</span> {
<a name="l01950"></a>01950     l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Exec&quot;</span>), gb );
<a name="l01951"></a>01951     execWhatsThis = i18n(<span class="stringliteral">&quot;Enable this flag to allow executing the file as a program.&quot;</span>);
<a name="l01952"></a>01952   }
<a name="l01953"></a>01953   <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(l, execWhatsThis);
<a name="l01954"></a>01954   theNotSpecials.<a class="codeRef" href="qvaluevector.html#append">append</a>( l );
<a name="l01955"></a>01955   <span class="comment">// GJ: Add space between normal and special modes</span>
<a name="l01956"></a>01956   <a class="codeRef" href="qsize.html">QSize</a> size = l-&gt;sizeHint();
<a name="l01957"></a>01957   size.<a class="codeRef" href="qsize.html#setWidth">setWidth</a>(size.<a class="codeRef" href="qsize.html#width">width</a>() + 15);
<a name="l01958"></a>01958   l-&gt;setFixedSize(size);
<a name="l01959"></a>01959   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a> (l, 1, 3);
<a name="l01960"></a>01960 
<a name="l01961"></a>01961   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Special&quot;</span>), gb );
<a name="l01962"></a>01962   gl-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCellWidget">addMultiCellWidget</a>(l, 1, 1, 4, 5);
<a name="l01963"></a>01963   <a class="codeRef" href="qstring.html">QString</a> specialWhatsThis;
<a name="l01964"></a>01964   <span class="keywordflow">if</span> (isDir)
<a name="l01965"></a>01965     specialWhatsThis = i18n(<span class="stringliteral">&quot;Special flag. Valid for the whole folder, the exact &quot;</span>
<a name="l01966"></a>01966                 <span class="stringliteral">&quot;meaning of the flag can be seen in the right hand column.&quot;</span>);
<a name="l01967"></a>01967   <span class="keywordflow">else</span>
<a name="l01968"></a>01968     specialWhatsThis = i18n(<span class="stringliteral">&quot;Special flag. The exact meaning of the flag can be seen &quot;</span>
<a name="l01969"></a>01969                 <span class="stringliteral">&quot;in the right hand column.&quot;</span>);
<a name="l01970"></a>01970   <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(l, specialWhatsThis);
<a name="l01971"></a>01971 
<a name="l01972"></a>01972   cl[0] = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;User&quot;</span>), gb );
<a name="l01973"></a>01973   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a> (cl[0], 2, 0);
<a name="l01974"></a>01974   theNotSpecials.<a class="codeRef" href="qvaluevector.html#append">append</a>( cl[0] );
<a name="l01975"></a>01975 
<a name="l01976"></a>01976   cl[1] = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Group&quot;</span>), gb );
<a name="l01977"></a>01977   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a> (cl[1], 3, 0);
<a name="l01978"></a>01978   theNotSpecials.<a class="codeRef" href="qvaluevector.html#append">append</a>( cl[1] );
<a name="l01979"></a>01979 
<a name="l01980"></a>01980   cl[2] = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Others&quot;</span>), gb );
<a name="l01981"></a>01981   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a> (cl[2], 4, 0);
<a name="l01982"></a>01982   theNotSpecials.<a class="codeRef" href="qvaluevector.html#append">append</a>( cl[2] );
<a name="l01983"></a>01983 
<a name="l01984"></a>01984   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Set UID&quot;</span>), gb);
<a name="l01985"></a>01985   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 2, 5);
<a name="l01986"></a>01986   <a class="codeRef" href="qstring.html">QString</a> setUidWhatsThis;
<a name="l01987"></a>01987   <span class="keywordflow">if</span> (isDir)
<a name="l01988"></a>01988     setUidWhatsThis = i18n(<span class="stringliteral">&quot;If this flag is set, the owner of this folder will be &quot;</span>
<a name="l01989"></a>01989                <span class="stringliteral">&quot;the owner of all new files.&quot;</span>);
<a name="l01990"></a>01990   <span class="keywordflow">else</span>
<a name="l01991"></a>01991     setUidWhatsThis = i18n(<span class="stringliteral">&quot;If this file is an executable and the flag is set, it will &quot;</span>
<a name="l01992"></a>01992                <span class="stringliteral">&quot;be executed with the permissions of the owner.&quot;</span>);
<a name="l01993"></a>01993   <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(l, setUidWhatsThis);
<a name="l01994"></a>01994 
<a name="l01995"></a>01995   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Set GID&quot;</span>), gb);
<a name="l01996"></a>01996   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 3, 5);
<a name="l01997"></a>01997   <a class="codeRef" href="qstring.html">QString</a> setGidWhatsThis;
<a name="l01998"></a>01998   <span class="keywordflow">if</span> (isDir)
<a name="l01999"></a>01999     setGidWhatsThis = i18n(<span class="stringliteral">&quot;If this flag is set, the group of this folder will be &quot;</span>
<a name="l02000"></a>02000                <span class="stringliteral">&quot;set for all new files.&quot;</span>);
<a name="l02001"></a>02001   <span class="keywordflow">else</span>
<a name="l02002"></a>02002     setGidWhatsThis = i18n(<span class="stringliteral">&quot;If this file is an executable and the flag is set, it will &quot;</span>
<a name="l02003"></a>02003                <span class="stringliteral">&quot;be executed with the permissions of the group.&quot;</span>);
<a name="l02004"></a>02004   <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(l, setGidWhatsThis);
<a name="l02005"></a>02005 
<a name="l02006"></a>02006   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;File permission&quot;</span>, <span class="stringliteral">&quot;Sticky&quot;</span>), gb);
<a name="l02007"></a>02007   gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 4, 5);
<a name="l02008"></a>02008   <a class="codeRef" href="qstring.html">QString</a> stickyWhatsThis;
<a name="l02009"></a>02009   <span class="keywordflow">if</span> (isDir)
<a name="l02010"></a>02010     stickyWhatsThis = i18n(<span class="stringliteral">&quot;If the Sticky flag is set on a folder, only the owner &quot;</span>
<a name="l02011"></a>02011                <span class="stringliteral">&quot;and root can delete or rename files. Otherwise everybody &quot;</span>
<a name="l02012"></a>02012                <span class="stringliteral">&quot;with write permissions can do this.&quot;</span>);
<a name="l02013"></a>02013   <span class="keywordflow">else</span>
<a name="l02014"></a>02014     stickyWhatsThis = i18n(<span class="stringliteral">&quot;The Sticky flag on a file is ignored on Linux, but may &quot;</span>
<a name="l02015"></a>02015                <span class="stringliteral">&quot;be used on some systems&quot;</span>);
<a name="l02016"></a>02016   <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(l, stickyWhatsThis);
<a name="l02017"></a>02017 
<a name="l02018"></a>02018   mode_t aPermissions, aPartialPermissions;
<a name="l02019"></a>02019   mode_t dummy1, dummy2;
<a name="l02020"></a>02020 
<a name="l02021"></a>02021   <span class="keywordflow">if</span> (!d-&gt;isIrregular) {
<a name="l02022"></a>02022     <span class="keywordflow">switch</span> (d-&gt;pmode) {
<a name="l02023"></a>02023     <span class="keywordflow">case</span> PermissionsOnlyFiles:
<a name="l02024"></a>02024       getPermissionMasks(aPartialPermissions,
<a name="l02025"></a>02025              dummy1,
<a name="l02026"></a>02026              aPermissions,
<a name="l02027"></a>02027              dummy2);
<a name="l02028"></a>02028       <span class="keywordflow">break</span>;
<a name="l02029"></a>02029     <span class="keywordflow">case</span> PermissionsOnlyDirs:
<a name="l02030"></a>02030     <span class="keywordflow">case</span> PermissionsMixed:
<a name="l02031"></a>02031       getPermissionMasks(dummy1,
<a name="l02032"></a>02032              aPartialPermissions,
<a name="l02033"></a>02033              dummy2,
<a name="l02034"></a>02034              aPermissions);
<a name="l02035"></a>02035       <span class="keywordflow">break</span>;
<a name="l02036"></a>02036     <span class="keywordflow">case</span> PermissionsOnlyLinks:
<a name="l02037"></a>02037       aPermissions = UniRead | UniWrite | UniExec | UniSpecial;
<a name="l02038"></a>02038       aPartialPermissions = 0;
<a name="l02039"></a>02039       <span class="keywordflow">break</span>;
<a name="l02040"></a>02040     }
<a name="l02041"></a>02041   }
<a name="l02042"></a>02042   <span class="keywordflow">else</span> {
<a name="l02043"></a>02043     aPermissions = permissions;
<a name="l02044"></a>02044     aPartialPermissions = d-&gt;partialPermissions;
<a name="l02045"></a>02045   }
<a name="l02046"></a>02046 
<a name="l02047"></a>02047   <span class="comment">// Draw Checkboxes</span>
<a name="l02048"></a>02048   <a class="codeRef" href="qcheckbox.html">QCheckBox</a> *cba[3][4];
<a name="l02049"></a>02049   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> row = 0; row &lt; 3 ; ++row) {
<a name="l02050"></a>02050     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> col = 0; col &lt; 4; ++col) {
<a name="l02051"></a>02051       <a class="codeRef" href="qcheckbox.html">QCheckBox</a> *cb = <span class="keyword">new</span> <a class="codeRef" href="qcheckbox.html">QCheckBox</a>( gb );
<a name="l02052"></a>02052       <span class="keywordflow">if</span> ( col != 3 ) theNotSpecials.<a class="codeRef" href="qvaluevector.html#append">append</a>( cb );
<a name="l02053"></a>02053       cba[row][col] = cb;
<a name="l02054"></a>02054       cb-&gt;<a class="codeRef" href="qcheckbox.html#setChecked">setChecked</a>(aPermissions &amp; fperm[row][col]);
<a name="l02055"></a>02055       <span class="keywordflow">if</span> ( aPartialPermissions &amp; fperm[row][col] )
<a name="l02056"></a>02056       {
<a name="l02057"></a>02057         cb-&gt;<a class="codeRef" href="qcheckbox.html#setTristate">setTristate</a>();
<a name="l02058"></a>02058         cb-&gt;<a class="codeRef" href="qcheckbox.html#setNoChange">setNoChange</a>();
<a name="l02059"></a>02059       }
<a name="l02060"></a>02060       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d-&gt;cbRecursive &amp;&amp; d-&gt;cbRecursive-&gt;isChecked())
<a name="l02061"></a>02061     cb-&gt;<a class="codeRef" href="qcheckbox.html#setTristate">setTristate</a>();
<a name="l02062"></a>02062 
<a name="l02063"></a>02063       cb-&gt;setEnabled( d-&gt;canChangePermissions );
<a name="l02064"></a>02064       gl-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a> (cb, row+2, col+1);
<a name="l02065"></a>02065       <span class="keywordflow">switch</span>(col) {
<a name="l02066"></a>02066       <span class="keywordflow">case</span> 0:
<a name="l02067"></a>02067     <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(cb, readWhatsThis);
<a name="l02068"></a>02068     <span class="keywordflow">break</span>;
<a name="l02069"></a>02069       <span class="keywordflow">case</span> 1:
<a name="l02070"></a>02070     <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(cb, writeWhatsThis);
<a name="l02071"></a>02071     <span class="keywordflow">break</span>;
<a name="l02072"></a>02072       <span class="keywordflow">case</span> 2:
<a name="l02073"></a>02073     <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(cb, execWhatsThis);
<a name="l02074"></a>02074     <span class="keywordflow">break</span>;
<a name="l02075"></a>02075       <span class="keywordflow">case</span> 3:
<a name="l02076"></a>02076     <span class="keywordflow">switch</span>(row) {
<a name="l02077"></a>02077     <span class="keywordflow">case</span> 0:
<a name="l02078"></a>02078       <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(cb, setUidWhatsThis);
<a name="l02079"></a>02079       <span class="keywordflow">break</span>;
<a name="l02080"></a>02080     <span class="keywordflow">case</span> 1:
<a name="l02081"></a>02081       <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(cb, setGidWhatsThis);
<a name="l02082"></a>02082       <span class="keywordflow">break</span>;
<a name="l02083"></a>02083     <span class="keywordflow">case</span> 2:
<a name="l02084"></a>02084       <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(cb, stickyWhatsThis);
<a name="l02085"></a>02085       <span class="keywordflow">break</span>;
<a name="l02086"></a>02086     }
<a name="l02087"></a>02087     <span class="keywordflow">break</span>;
<a name="l02088"></a>02088       }
<a name="l02089"></a>02089     }
<a name="l02090"></a>02090   }
<a name="l02091"></a>02091   gl-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(6, 10);
<a name="l02092"></a>02092 
<a name="l02093"></a>02093 <span class="preprocessor">#ifdef USE_POSIX_ACL</span>
<a name="l02094"></a>02094 <span class="preprocessor"></span>  KACLEditWidget *extendedACLs = 0;
<a name="l02095"></a>02095 
<a name="l02096"></a>02096   <span class="comment">// FIXME make it work with partial entries</span>
<a name="l02097"></a>02097   <span class="keywordflow">if</span> ( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>().count() == 1 ) {
<a name="l02098"></a>02098       <a class="codeRef" href="qcstring.html">QCString</a> pathCString = <a class="codeRef" href="qfile.html#encodeName">QFile::encodeName</a>( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a>()-&gt;url().path() );
<a name="l02099"></a>02099       d-&gt;fileSystemSupportsACLs = fileSystemSupportsACL( pathCString );
<a name="l02100"></a>02100   }
<a name="l02101"></a>02101   <span class="keywordflow">if</span> ( d-&gt;fileSystemSupportsACLs  ) {
<a name="l02102"></a>02102     std::for_each( theNotSpecials.<a class="codeRef" href="qvaluevector.html#begin">begin</a>(), theNotSpecials.<a class="codeRef" href="qvaluevector.html#end">end</a>(), std::mem_fun( &amp;<a class="codeRef" href="qwidget.html#hide">QWidget::hide</a> ) );
<a name="l02103"></a>02103     extendedACLs = <span class="keyword">new</span> KACLEditWidget( mainVBox );
<a name="l02104"></a>02104     <span class="keywordflow">if</span> ( d-&gt;extendedACL.isValid() &amp;&amp; d-&gt;extendedACL.isExtended() )
<a name="l02105"></a>02105       extendedACLs-&gt;setACL( d-&gt;extendedACL );
<a name="l02106"></a>02106     <span class="keywordflow">else</span>
<a name="l02107"></a>02107       extendedACLs-&gt;setACL( KACL( aPermissions ) );
<a name="l02108"></a>02108 
<a name="l02109"></a>02109     <span class="keywordflow">if</span> ( d-&gt;defaultACL.isValid() )
<a name="l02110"></a>02110       extendedACLs-&gt;setDefaultACL( d-&gt;defaultACL );
<a name="l02111"></a>02111 
<a name="l02112"></a>02112     <span class="keywordflow">if</span> ( <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>().first()-&gt;isDir() )
<a name="l02113"></a>02113       extendedACLs-&gt;setAllowDefaults( <span class="keyword">true</span> );
<a name="l02114"></a>02114     <span class="keywordflow">if</span> ( !d-&gt;canChangePermissions )
<a name="l02115"></a>02115       extendedACLs-&gt;setReadOnly( <span class="keyword">true</span> );
<a name="l02116"></a>02116 
<a name="l02117"></a>02117   }
<a name="l02118"></a>02118 <span class="preprocessor">#endif</span>
<a name="l02119"></a>02119 <span class="preprocessor"></span>  <span class="keywordflow">if</span> (dlg.exec() != KDialogBase::Accepted)
<a name="l02120"></a>02120     <span class="keywordflow">return</span>;
<a name="l02121"></a>02121 
<a name="l02122"></a>02122   mode_t andPermissions = mode_t(~0);
<a name="l02123"></a>02123   mode_t orPermissions = 0;
<a name="l02124"></a>02124   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> row = 0; row &lt; 3; ++row)
<a name="l02125"></a>02125     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> col = 0; col &lt; 4; ++col) {
<a name="l02126"></a>02126       <span class="keywordflow">switch</span> (cba[row][col]-&gt;state())
<a name="l02127"></a>02127       {
<a name="l02128"></a>02128       <span class="keywordflow">case</span> QCheckBox::On:
<a name="l02129"></a>02129     orPermissions |= fperm[row][col];
<a name="l02130"></a>02130     <span class="comment">//fall through</span>
<a name="l02131"></a>02131       <span class="keywordflow">case</span> QCheckBox::Off:
<a name="l02132"></a>02132     andPermissions &amp;= ~fperm[row][col];
<a name="l02133"></a>02133     <span class="keywordflow">break</span>;
<a name="l02134"></a>02134       <span class="keywordflow">default</span>: <span class="comment">// NoChange</span>
<a name="l02135"></a>02135     <span class="keywordflow">break</span>;
<a name="l02136"></a>02136       }
<a name="l02137"></a>02137     }
<a name="l02138"></a>02138 
<a name="l02139"></a>02139   d-&gt;isIrregular = <span class="keyword">false</span>;
<a name="l02140"></a>02140   KFileItemList items = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>();
<a name="l02141"></a>02141   <span class="keywordflow">for</span> (KFileItemListIterator it(items); it.current(); ++it) {
<a name="l02142"></a>02142     <span class="keywordflow">if</span> (isIrregular(((*it)-&gt;permissions() &amp; andPermissions) | orPermissions,
<a name="l02143"></a>02143             (*it)-&gt;isDir(), (*it)-&gt;isLink())) {
<a name="l02144"></a>02144       d-&gt;isIrregular = <span class="keyword">true</span>;
<a name="l02145"></a>02145       <span class="keywordflow">break</span>;
<a name="l02146"></a>02146     }
<a name="l02147"></a>02147   }
<a name="l02148"></a>02148 
<a name="l02149"></a>02149   permissions = orPermissions;
<a name="l02150"></a>02150   d-&gt;partialPermissions = andPermissions;
<a name="l02151"></a>02151 
<a name="l02152"></a>02152 <span class="preprocessor">#ifdef USE_POSIX_ACL</span>
<a name="l02153"></a>02153 <span class="preprocessor"></span>  <span class="comment">// override with the acls, if present</span>
<a name="l02154"></a>02154   <span class="keywordflow">if</span> ( extendedACLs ) {
<a name="l02155"></a>02155     d-&gt;extendedACL = extendedACLs-&gt;getACL();
<a name="l02156"></a>02156     d-&gt;defaultACL = extendedACLs-&gt;getDefaultACL();
<a name="l02157"></a>02157     d-&gt;hasExtendedACL = d-&gt;extendedACL.isExtended() || d-&gt;defaultACL.isValid();
<a name="l02158"></a>02158     permissions = d-&gt;extendedACL.basePermissions();
<a name="l02159"></a>02159     permissions |= ( andPermissions | orPermissions ) &amp; ( S_ISUID|S_ISGID|S_ISVTX );
<a name="l02160"></a>02160   }
<a name="l02161"></a>02161 <span class="preprocessor">#endif</span>
<a name="l02162"></a>02162 <span class="preprocessor"></span>
<a name="l02163"></a>02163   updateAccessControls();
<a name="l02164"></a>02164   emit <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>();
<a name="l02165"></a>02165 }
<a name="l02166"></a>02166 
<a name="l02167"></a>02167 <span class="comment">// QString KFilePermissionsPropsPlugin::tabName () const</span>
<a name="l02168"></a>02168 <span class="comment">// {</span>
<a name="l02169"></a>02169 <span class="comment">//   return i18n (&quot;&amp;Permissions&quot;);</span>
<a name="l02170"></a>02170 <span class="comment">// }</span>
<a name="l02171"></a>02171 
<a name="l02172"></a>02172 KFilePermissionsPropsPlugin::~KFilePermissionsPropsPlugin()
<a name="l02173"></a>02173 {
<a name="l02174"></a>02174   <span class="keyword">delete</span> d;
<a name="l02175"></a>02175 }
<a name="l02176"></a>02176 
<a name="l02177"></a><a class="code" href="classKFilePermissionsPropsPlugin.html#ae1800d8c4c9dd56c50c532117895acb4">02177</a> <span class="keywordtype">bool</span> <a class="code" href="classKFilePermissionsPropsPlugin.html#ae1800d8c4c9dd56c50c532117895acb4" title="Tests whether the file specified by _items needs a &#39;Permissions&#39; plugin.">KFilePermissionsPropsPlugin::supports</a>( KFileItemList _items )
<a name="l02178"></a>02178 {
<a name="l02179"></a>02179   KFileItemList::const_iterator it = _items.constBegin();
<a name="l02180"></a>02180   <span class="keywordflow">for</span> ( ; it != _items.constEnd(); ++it ) {
<a name="l02181"></a>02181     KFileItem *item = *it;
<a name="l02182"></a>02182     <span class="keywordflow">if</span>( !item-&gt;user().isEmpty() || !item-&gt;group().isEmpty() )
<a name="l02183"></a>02183       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02184"></a>02184   }
<a name="l02185"></a>02185   <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02186"></a>02186 }
<a name="l02187"></a>02187 
<a name="l02188"></a>02188 <span class="comment">// sets a combo box in the Access Control frame</span>
<a name="l02189"></a>02189 <span class="keywordtype">void</span> KFilePermissionsPropsPlugin::setComboContent(<a class="codeRef" href="qcombobox.html">QComboBox</a> *combo, PermissionsTarget target,
<a name="l02190"></a>02190                           mode_t permissions, mode_t partial) {
<a name="l02191"></a>02191   combo-&gt;<a class="codeRef" href="qcombobox.html#clear">clear</a>();
<a name="l02192"></a>02192   <span class="keywordflow">if</span> (d-&gt;pmode == PermissionsOnlyLinks) {
<a name="l02193"></a>02193     combo-&gt;<a class="codeRef" href="qcombobox.html#insertItem">insertItem</a>(i18n(<span class="stringliteral">&quot;Link&quot;</span>));
<a name="l02194"></a>02194     combo-&gt;<a class="codeRef" href="qcombobox.html#setCurrentItem">setCurrentItem</a>(0);
<a name="l02195"></a>02195     <span class="keywordflow">return</span>;
<a name="l02196"></a>02196   }
<a name="l02197"></a>02197 
<a name="l02198"></a>02198   mode_t tMask = permissionsMasks[target];
<a name="l02199"></a>02199   <span class="keywordtype">int</span> textIndex;
<a name="l02200"></a>02200   <span class="keywordflow">for</span> (textIndex = 0; standardPermissions[textIndex] != (mode_t)-1; textIndex++)
<a name="l02201"></a>02201     <span class="keywordflow">if</span> ((standardPermissions[textIndex]&amp;tMask) == (permissions&amp;tMask&amp;(UniRead|UniWrite)))
<a name="l02202"></a>02202       <span class="keywordflow">break</span>;
<a name="l02203"></a>02203   Q_ASSERT(standardPermissions[textIndex] != (mode_t)-1); <span class="comment">// must not happen, would be irreglar</span>
<a name="l02204"></a>02204 
<a name="l02205"></a>02205   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; permissionsTexts[(int)d-&gt;pmode][i]; i++)
<a name="l02206"></a>02206     combo-&gt;<a class="codeRef" href="qcombobox.html#insertItem">insertItem</a>(i18n(permissionsTexts[(<span class="keywordtype">int</span>)d-&gt;pmode][i]));
<a name="l02207"></a>02207 
<a name="l02208"></a>02208   <span class="keywordflow">if</span> (partial &amp; tMask &amp; ~UniExec) {
<a name="l02209"></a>02209     combo-&gt;<a class="codeRef" href="qcombobox.html#insertItem">insertItem</a>(i18n(<span class="stringliteral">&quot;Varying (No Change)&quot;</span>));
<a name="l02210"></a>02210     combo-&gt;<a class="codeRef" href="qcombobox.html#setCurrentItem">setCurrentItem</a>(3);
<a name="l02211"></a>02211   }
<a name="l02212"></a>02212   <span class="keywordflow">else</span>
<a name="l02213"></a>02213     combo-&gt;<a class="codeRef" href="qcombobox.html#setCurrentItem">setCurrentItem</a>(textIndex);
<a name="l02214"></a>02214 }
<a name="l02215"></a>02215 
<a name="l02216"></a>02216 <span class="comment">// permissions are irregular if they cant be displayed in a combo box.</span>
<a name="l02217"></a>02217 <span class="keywordtype">bool</span> KFilePermissionsPropsPlugin::isIrregular(mode_t permissions, <span class="keywordtype">bool</span> isDir, <span class="keywordtype">bool</span> isLink) {
<a name="l02218"></a>02218   <span class="keywordflow">if</span> (isLink)                             <span class="comment">// links are always ok</span>
<a name="l02219"></a>02219     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02220"></a>02220 
<a name="l02221"></a>02221   mode_t p = permissions;
<a name="l02222"></a>02222   <span class="keywordflow">if</span> (p &amp; (S_ISUID | S_ISGID))  <span class="comment">// setuid/setgid -&gt; irregular</span>
<a name="l02223"></a>02223     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02224"></a>02224   <span class="keywordflow">if</span> (isDir) {
<a name="l02225"></a>02225     p &amp;= ~S_ISVTX;          <span class="comment">// ignore sticky on dirs</span>
<a name="l02226"></a>02226 
<a name="l02227"></a>02227     <span class="comment">// check supported flag combinations</span>
<a name="l02228"></a>02228     mode_t p0 = p &amp; UniOwner;
<a name="l02229"></a>02229     <span class="keywordflow">if</span> ((p0 != 0) &amp;&amp; (p0 != (S_IRUSR | S_IXUSR)) &amp;&amp; (p0 != UniOwner))
<a name="l02230"></a>02230       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02231"></a>02231     p0 = p &amp; UniGroup;
<a name="l02232"></a>02232     <span class="keywordflow">if</span> ((p0 != 0) &amp;&amp; (p0 != (S_IRGRP | S_IXGRP)) &amp;&amp; (p0 != UniGroup))
<a name="l02233"></a>02233       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02234"></a>02234     p0 = p &amp; UniOthers;
<a name="l02235"></a>02235     <span class="keywordflow">if</span> ((p0 != 0) &amp;&amp; (p0 != (S_IROTH | S_IXOTH)) &amp;&amp; (p0 != UniOthers))
<a name="l02236"></a>02236       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02237"></a>02237     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02238"></a>02238   }
<a name="l02239"></a>02239   <span class="keywordflow">if</span> (p &amp; S_ISVTX) <span class="comment">// sticky on file -&gt; irregular</span>
<a name="l02240"></a>02240     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02241"></a>02241 
<a name="l02242"></a>02242   <span class="comment">// check supported flag combinations</span>
<a name="l02243"></a>02243   mode_t p0 = p &amp; UniOwner;
<a name="l02244"></a>02244   <span class="keywordtype">bool</span> usrXPossible = !p0; <span class="comment">// true if this file could be an executable</span>
<a name="l02245"></a>02245   <span class="keywordflow">if</span> (p0 &amp; S_IXUSR) {
<a name="l02246"></a>02246     <span class="keywordflow">if</span> ((p0 == S_IXUSR) || (p0 == (S_IWUSR | S_IXUSR)))
<a name="l02247"></a>02247       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02248"></a>02248     usrXPossible = <span class="keyword">true</span>;
<a name="l02249"></a>02249   }
<a name="l02250"></a>02250   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p0 == S_IWUSR)
<a name="l02251"></a>02251     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02252"></a>02252 
<a name="l02253"></a>02253   p0 = p &amp; UniGroup;
<a name="l02254"></a>02254   <span class="keywordtype">bool</span> grpXPossible = !p0; <span class="comment">// true if this file could be an executable</span>
<a name="l02255"></a>02255   <span class="keywordflow">if</span> (p0 &amp; S_IXGRP) {
<a name="l02256"></a>02256     <span class="keywordflow">if</span> ((p0 == S_IXGRP) || (p0 == (S_IWGRP | S_IXGRP)))
<a name="l02257"></a>02257       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02258"></a>02258     grpXPossible = <span class="keyword">true</span>;
<a name="l02259"></a>02259   }
<a name="l02260"></a>02260   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p0 == S_IWGRP)
<a name="l02261"></a>02261     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02262"></a>02262   <span class="keywordflow">if</span> (p0 == 0)
<a name="l02263"></a>02263     grpXPossible = <span class="keyword">true</span>;
<a name="l02264"></a>02264 
<a name="l02265"></a>02265   p0 = p &amp; UniOthers;
<a name="l02266"></a>02266   <span class="keywordtype">bool</span> othXPossible = !p0; <span class="comment">// true if this file could be an executable</span>
<a name="l02267"></a>02267   <span class="keywordflow">if</span> (p0 &amp; S_IXOTH) {
<a name="l02268"></a>02268     <span class="keywordflow">if</span> ((p0 == S_IXOTH) || (p0 == (S_IWOTH | S_IXOTH)))
<a name="l02269"></a>02269       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02270"></a>02270     othXPossible = <span class="keyword">true</span>;
<a name="l02271"></a>02271   }
<a name="l02272"></a>02272   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p0 == S_IWOTH)
<a name="l02273"></a>02273     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02274"></a>02274 
<a name="l02275"></a>02275   <span class="comment">// check that there either all targets are executable-compatible, or none</span>
<a name="l02276"></a>02276   <span class="keywordflow">return</span> (p &amp; UniExec) &amp;&amp; !(usrXPossible &amp;&amp; grpXPossible &amp;&amp; othXPossible);
<a name="l02277"></a>02277 }
<a name="l02278"></a>02278 
<a name="l02279"></a>02279 <span class="comment">// enables/disabled the widgets in the Access Control frame</span>
<a name="l02280"></a>02280 <span class="keywordtype">void</span> KFilePermissionsPropsPlugin::enableAccessControls(<span class="keywordtype">bool</span> enable) {
<a name="l02281"></a>02281     d-&gt;ownerPermCombo-&gt;setEnabled(enable);
<a name="l02282"></a>02282     d-&gt;groupPermCombo-&gt;setEnabled(enable);
<a name="l02283"></a>02283     d-&gt;othersPermCombo-&gt;setEnabled(enable);
<a name="l02284"></a>02284     <span class="keywordflow">if</span> (d-&gt;extraCheckbox)
<a name="l02285"></a>02285       d-&gt;extraCheckbox-&gt;setEnabled(enable);
<a name="l02286"></a>02286         <span class="keywordflow">if</span> ( d-&gt;cbRecursive )
<a name="l02287"></a>02287             d-&gt;cbRecursive-&gt;setEnabled(enable);
<a name="l02288"></a>02288 }
<a name="l02289"></a>02289 
<a name="l02290"></a>02290 <span class="comment">// updates all widgets in the Access Control frame</span>
<a name="l02291"></a>02291 <span class="keywordtype">void</span> KFilePermissionsPropsPlugin::updateAccessControls() {
<a name="l02292"></a>02292   setComboContent(d-&gt;ownerPermCombo, PermissionsOwner,
<a name="l02293"></a>02293           permissions, d-&gt;partialPermissions);
<a name="l02294"></a>02294   setComboContent(d-&gt;groupPermCombo, PermissionsGroup,
<a name="l02295"></a>02295           permissions, d-&gt;partialPermissions);
<a name="l02296"></a>02296   setComboContent(d-&gt;othersPermCombo, PermissionsOthers,
<a name="l02297"></a>02297           permissions, d-&gt;partialPermissions);
<a name="l02298"></a>02298 
<a name="l02299"></a>02299   <span class="keywordflow">switch</span>(d-&gt;pmode) {
<a name="l02300"></a>02300   <span class="keywordflow">case</span> PermissionsOnlyLinks:
<a name="l02301"></a>02301     enableAccessControls(<span class="keyword">false</span>);
<a name="l02302"></a>02302     <span class="keywordflow">break</span>;
<a name="l02303"></a>02303   <span class="keywordflow">case</span> PermissionsOnlyFiles:
<a name="l02304"></a>02304     enableAccessControls(d-&gt;canChangePermissions &amp;&amp; !d-&gt;isIrregular &amp;&amp; !d-&gt;hasExtendedACL);
<a name="l02305"></a>02305     <span class="keywordflow">if</span> (d-&gt;canChangePermissions)
<a name="l02306"></a>02306       d-&gt;explanationLabel-&gt;setText(d-&gt;isIrregular || d-&gt;hasExtendedACL ?
<a name="l02307"></a>02307                    i18n(<span class="stringliteral">&quot;This file uses advanced permissions&quot;</span>,
<a name="l02308"></a>02308                       <span class="stringliteral">&quot;These files use advanced permissions.&quot;</span>,
<a name="l02309"></a>02309                       <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>().count()) : <span class="stringliteral">&quot;&quot;</span>);
<a name="l02310"></a>02310     <span class="keywordflow">if</span> (d-&gt;partialPermissions &amp; UniExec) {
<a name="l02311"></a>02311       d-&gt;extraCheckbox-&gt;setTristate();
<a name="l02312"></a>02312       d-&gt;extraCheckbox-&gt;setNoChange();
<a name="l02313"></a>02313     }
<a name="l02314"></a>02314     <span class="keywordflow">else</span> {
<a name="l02315"></a>02315       d-&gt;extraCheckbox-&gt;setTristate(<span class="keyword">false</span>);
<a name="l02316"></a>02316       d-&gt;extraCheckbox-&gt;setChecked(permissions &amp; UniExec);
<a name="l02317"></a>02317     }
<a name="l02318"></a>02318     <span class="keywordflow">break</span>;
<a name="l02319"></a>02319   <span class="keywordflow">case</span> PermissionsOnlyDirs:
<a name="l02320"></a>02320     enableAccessControls(d-&gt;canChangePermissions &amp;&amp; !d-&gt;isIrregular &amp;&amp; !d-&gt;hasExtendedACL);
<a name="l02321"></a>02321     <span class="comment">// if this is a dir, and we can change permissions, don&#39;t dis-allow</span>
<a name="l02322"></a>02322     <span class="comment">// recursive, we can do that for ACL setting.</span>
<a name="l02323"></a>02323     <span class="keywordflow">if</span> ( d-&gt;cbRecursive )
<a name="l02324"></a>02324        d-&gt;cbRecursive-&gt;setEnabled( d-&gt;canChangePermissions &amp;&amp; !d-&gt;isIrregular );
<a name="l02325"></a>02325 
<a name="l02326"></a>02326     <span class="keywordflow">if</span> (d-&gt;canChangePermissions)
<a name="l02327"></a>02327       d-&gt;explanationLabel-&gt;setText(d-&gt;isIrregular || d-&gt;hasExtendedACL ?
<a name="l02328"></a>02328                    i18n(<span class="stringliteral">&quot;This folder uses advanced permissions.&quot;</span>,
<a name="l02329"></a>02329                       <span class="stringliteral">&quot;These folders use advanced permissions.&quot;</span>,
<a name="l02330"></a>02330                       <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>().count()) : <span class="stringliteral">&quot;&quot;</span>);
<a name="l02331"></a>02331     <span class="keywordflow">if</span> (d-&gt;partialPermissions &amp; S_ISVTX) {
<a name="l02332"></a>02332       d-&gt;extraCheckbox-&gt;setTristate();
<a name="l02333"></a>02333       d-&gt;extraCheckbox-&gt;setNoChange();
<a name="l02334"></a>02334     }
<a name="l02335"></a>02335     <span class="keywordflow">else</span> {
<a name="l02336"></a>02336       d-&gt;extraCheckbox-&gt;setTristate(<span class="keyword">false</span>);
<a name="l02337"></a>02337       d-&gt;extraCheckbox-&gt;setChecked(permissions &amp; S_ISVTX);
<a name="l02338"></a>02338     }
<a name="l02339"></a>02339     <span class="keywordflow">break</span>;
<a name="l02340"></a>02340   <span class="keywordflow">case</span> PermissionsMixed:
<a name="l02341"></a>02341     enableAccessControls(d-&gt;canChangePermissions &amp;&amp; !d-&gt;isIrregular &amp;&amp; !d-&gt;hasExtendedACL);
<a name="l02342"></a>02342     <span class="keywordflow">if</span> (d-&gt;canChangePermissions)
<a name="l02343"></a>02343       d-&gt;explanationLabel-&gt;setText(d-&gt;isIrregular || d-&gt;hasExtendedACL ?
<a name="l02344"></a>02344                    i18n(<span class="stringliteral">&quot;These files use advanced permissions.&quot;</span>) : <span class="stringliteral">&quot;&quot;</span>);
<a name="l02345"></a>02345     <span class="keywordflow">break</span>;
<a name="l02346"></a>02346     <span class="keywordflow">if</span> (d-&gt;partialPermissions &amp; S_ISVTX) {
<a name="l02347"></a>02347       d-&gt;extraCheckbox-&gt;setTristate();
<a name="l02348"></a>02348       d-&gt;extraCheckbox-&gt;setNoChange();
<a name="l02349"></a>02349     }
<a name="l02350"></a>02350     <span class="keywordflow">else</span> {
<a name="l02351"></a>02351       d-&gt;extraCheckbox-&gt;setTristate(<span class="keyword">false</span>);
<a name="l02352"></a>02352       d-&gt;extraCheckbox-&gt;setChecked(permissions &amp; S_ISVTX);
<a name="l02353"></a>02353     }
<a name="l02354"></a>02354     <span class="keywordflow">break</span>;
<a name="l02355"></a>02355   }
<a name="l02356"></a>02356 }
<a name="l02357"></a>02357 
<a name="l02358"></a>02358 <span class="comment">// gets masks for files and dirs from the Access Control frame widgets</span>
<a name="l02359"></a>02359 <span class="keywordtype">void</span> KFilePermissionsPropsPlugin::getPermissionMasks(mode_t &amp;andFilePermissions,
<a name="l02360"></a>02360                              mode_t &amp;andDirPermissions,
<a name="l02361"></a>02361                              mode_t &amp;orFilePermissions,
<a name="l02362"></a>02362                              mode_t &amp;orDirPermissions) {
<a name="l02363"></a>02363   andFilePermissions = mode_t(~UniSpecial);
<a name="l02364"></a>02364   andDirPermissions = mode_t(~(S_ISUID|S_ISGID));
<a name="l02365"></a>02365   orFilePermissions = 0;
<a name="l02366"></a>02366   orDirPermissions = 0;
<a name="l02367"></a>02367   <span class="keywordflow">if</span> (d-&gt;isIrregular)
<a name="l02368"></a>02368     <span class="keywordflow">return</span>;
<a name="l02369"></a>02369 
<a name="l02370"></a>02370   mode_t m = standardPermissions[d-&gt;ownerPermCombo-&gt;currentItem()];
<a name="l02371"></a>02371   <span class="keywordflow">if</span> (m != (mode_t) -1) {
<a name="l02372"></a>02372     orFilePermissions |= m &amp; UniOwner;
<a name="l02373"></a>02373     <span class="keywordflow">if</span> ((m &amp; UniOwner) &amp;&amp;
<a name="l02374"></a>02374     ((d-&gt;pmode == PermissionsMixed) ||
<a name="l02375"></a>02375      ((d-&gt;pmode == PermissionsOnlyFiles) &amp;&amp; (d-&gt;extraCheckbox-&gt;state() == QButton::NoChange))))
<a name="l02376"></a>02376       andFilePermissions &amp;= ~(S_IRUSR | S_IWUSR);
<a name="l02377"></a>02377     <span class="keywordflow">else</span> {
<a name="l02378"></a>02378       andFilePermissions &amp;= ~(S_IRUSR | S_IWUSR | S_IXUSR);
<a name="l02379"></a>02379       <span class="keywordflow">if</span> ((m &amp; S_IRUSR) &amp;&amp; (d-&gt;extraCheckbox-&gt;state() == QButton::On))
<a name="l02380"></a>02380     orFilePermissions |= S_IXUSR;
<a name="l02381"></a>02381     }
<a name="l02382"></a>02382 
<a name="l02383"></a>02383     orDirPermissions |= m &amp; UniOwner;
<a name="l02384"></a>02384     <span class="keywordflow">if</span> (m &amp; S_IRUSR)
<a name="l02385"></a>02385     orDirPermissions |= S_IXUSR;
<a name="l02386"></a>02386     andDirPermissions &amp;= ~(S_IRUSR | S_IWUSR | S_IXUSR);
<a name="l02387"></a>02387   }
<a name="l02388"></a>02388 
<a name="l02389"></a>02389   m = standardPermissions[d-&gt;groupPermCombo-&gt;currentItem()];
<a name="l02390"></a>02390   <span class="keywordflow">if</span> (m != (mode_t) -1) {
<a name="l02391"></a>02391     orFilePermissions |= m &amp; UniGroup;
<a name="l02392"></a>02392     <span class="keywordflow">if</span> ((m &amp; UniGroup) &amp;&amp;
<a name="l02393"></a>02393     ((d-&gt;pmode == PermissionsMixed) ||
<a name="l02394"></a>02394      ((d-&gt;pmode == PermissionsOnlyFiles) &amp;&amp; (d-&gt;extraCheckbox-&gt;state() == QButton::NoChange))))
<a name="l02395"></a>02395       andFilePermissions &amp;= ~(S_IRGRP | S_IWGRP);
<a name="l02396"></a>02396     <span class="keywordflow">else</span> {
<a name="l02397"></a>02397       andFilePermissions &amp;= ~(S_IRGRP | S_IWGRP | S_IXGRP);
<a name="l02398"></a>02398       <span class="keywordflow">if</span> ((m &amp; S_IRGRP) &amp;&amp; (d-&gt;extraCheckbox-&gt;state() == QButton::On))
<a name="l02399"></a>02399     orFilePermissions |= S_IXGRP;
<a name="l02400"></a>02400     }
<a name="l02401"></a>02401 
<a name="l02402"></a>02402     orDirPermissions |= m &amp; UniGroup;
<a name="l02403"></a>02403     <span class="keywordflow">if</span> (m &amp; S_IRGRP)
<a name="l02404"></a>02404     orDirPermissions |= S_IXGRP;
<a name="l02405"></a>02405     andDirPermissions &amp;= ~(S_IRGRP | S_IWGRP | S_IXGRP);
<a name="l02406"></a>02406   }
<a name="l02407"></a>02407 
<a name="l02408"></a>02408   m = standardPermissions[d-&gt;othersPermCombo-&gt;currentItem()];
<a name="l02409"></a>02409   <span class="keywordflow">if</span> (m != (mode_t) -1) {
<a name="l02410"></a>02410     orFilePermissions |= m &amp; UniOthers;
<a name="l02411"></a>02411     <span class="keywordflow">if</span> ((m &amp; UniOthers) &amp;&amp;
<a name="l02412"></a>02412     ((d-&gt;pmode == PermissionsMixed) ||
<a name="l02413"></a>02413      ((d-&gt;pmode == PermissionsOnlyFiles) &amp;&amp; (d-&gt;extraCheckbox-&gt;state() == QButton::NoChange))))
<a name="l02414"></a>02414       andFilePermissions &amp;= ~(S_IROTH | S_IWOTH);
<a name="l02415"></a>02415     <span class="keywordflow">else</span> {
<a name="l02416"></a>02416       andFilePermissions &amp;= ~(S_IROTH | S_IWOTH | S_IXOTH);
<a name="l02417"></a>02417       <span class="keywordflow">if</span> ((m &amp; S_IROTH) &amp;&amp; (d-&gt;extraCheckbox-&gt;state() == QButton::On))
<a name="l02418"></a>02418     orFilePermissions |= S_IXOTH;
<a name="l02419"></a>02419     }
<a name="l02420"></a>02420 
<a name="l02421"></a>02421     orDirPermissions |= m &amp; UniOthers;
<a name="l02422"></a>02422     <span class="keywordflow">if</span> (m &amp; S_IROTH)
<a name="l02423"></a>02423     orDirPermissions |= S_IXOTH;
<a name="l02424"></a>02424     andDirPermissions &amp;= ~(S_IROTH | S_IWOTH | S_IXOTH);
<a name="l02425"></a>02425   }
<a name="l02426"></a>02426 
<a name="l02427"></a>02427   <span class="keywordflow">if</span> (((d-&gt;pmode == PermissionsMixed) || (d-&gt;pmode == PermissionsOnlyDirs)) &amp;&amp;
<a name="l02428"></a>02428       (d-&gt;extraCheckbox-&gt;state() != QButton::NoChange)) {
<a name="l02429"></a>02429     andDirPermissions &amp;= ~S_ISVTX;
<a name="l02430"></a>02430     <span class="keywordflow">if</span> (d-&gt;extraCheckbox-&gt;state() == QButton::On)
<a name="l02431"></a>02431       orDirPermissions |= S_ISVTX;
<a name="l02432"></a>02432   }
<a name="l02433"></a>02433 }
<a name="l02434"></a>02434 
<a name="l02435"></a><a class="code" href="classKFilePermissionsPropsPlugin.html#afffed301f0ae41a164c3c3babac06338">02435</a> <span class="keywordtype">void</span> <a class="code" href="classKFilePermissionsPropsPlugin.html#afffed301f0ae41a164c3c3babac06338" title="Applies all changes to the file.">KFilePermissionsPropsPlugin::applyChanges</a>()
<a name="l02436"></a>02436 {
<a name="l02437"></a>02437   mode_t orFilePermissions;
<a name="l02438"></a>02438   mode_t orDirPermissions;
<a name="l02439"></a>02439   mode_t andFilePermissions;
<a name="l02440"></a>02440   mode_t andDirPermissions;
<a name="l02441"></a>02441 
<a name="l02442"></a>02442   <span class="keywordflow">if</span> (!d-&gt;canChangePermissions)
<a name="l02443"></a>02443     <span class="keywordflow">return</span>;
<a name="l02444"></a>02444 
<a name="l02445"></a>02445   <span class="keywordflow">if</span> (!d-&gt;isIrregular)
<a name="l02446"></a>02446     getPermissionMasks(andFilePermissions,
<a name="l02447"></a>02447                andDirPermissions,
<a name="l02448"></a>02448                orFilePermissions,
<a name="l02449"></a>02449                orDirPermissions);
<a name="l02450"></a>02450   <span class="keywordflow">else</span> {
<a name="l02451"></a>02451     orFilePermissions = permissions;
<a name="l02452"></a>02452     andFilePermissions = d-&gt;partialPermissions;
<a name="l02453"></a>02453     orDirPermissions = permissions;
<a name="l02454"></a>02454     andDirPermissions = d-&gt;partialPermissions;
<a name="l02455"></a>02455   }
<a name="l02456"></a>02456 
<a name="l02457"></a>02457   <a class="codeRef" href="qstring.html">QString</a> owner, group;
<a name="l02458"></a>02458   <span class="keywordflow">if</span> (usrEdit)
<a name="l02459"></a>02459     owner = usrEdit-&gt;text();
<a name="l02460"></a>02460   <span class="keywordflow">if</span> (grpEdit)
<a name="l02461"></a>02461     group = grpEdit-&gt;text();
<a name="l02462"></a>02462   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (grpCombo)
<a name="l02463"></a>02463     group = grpCombo-&gt;<a class="codeRef" href="qcombobox.html#currentText">currentText</a>();
<a name="l02464"></a>02464 
<a name="l02465"></a>02465   <span class="keywordflow">if</span> (owner == strOwner)
<a name="l02466"></a>02466       owner = QString::null; <span class="comment">// no change</span>
<a name="l02467"></a>02467 
<a name="l02468"></a>02468   <span class="keywordflow">if</span> (group == strGroup)
<a name="l02469"></a>02469       group = QString::null;
<a name="l02470"></a>02470 
<a name="l02471"></a>02471   <span class="keywordtype">bool</span> recursive = d-&gt;cbRecursive &amp;&amp; d-&gt;cbRecursive-&gt;isChecked();
<a name="l02472"></a>02472   <span class="keywordtype">bool</span> permissionChange = <span class="keyword">false</span>;
<a name="l02473"></a>02473 
<a name="l02474"></a>02474   KFileItemList files, dirs;
<a name="l02475"></a>02475   KFileItemList items = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#a616b7c9afe4c1c1235c2edb81b2e36a1">items</a>();
<a name="l02476"></a>02476   <span class="keywordflow">for</span> (KFileItemListIterator it(items); it.current(); ++it) {
<a name="l02477"></a>02477     <span class="keywordflow">if</span> ((*it)-&gt;isDir()) {
<a name="l02478"></a>02478       dirs.append(*it);
<a name="l02479"></a>02479       <span class="keywordflow">if</span> ((*it)-&gt;permissions() != (((*it)-&gt;permissions() &amp; andDirPermissions) | orDirPermissions))
<a name="l02480"></a>02480     permissionChange = <span class="keyword">true</span>;
<a name="l02481"></a>02481     }
<a name="l02482"></a>02482     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((*it)-&gt;isFile()) {
<a name="l02483"></a>02483       files.append(*it);
<a name="l02484"></a>02484       <span class="keywordflow">if</span> ((*it)-&gt;permissions() != (((*it)-&gt;permissions() &amp; andFilePermissions) | orFilePermissions))
<a name="l02485"></a>02485     permissionChange = <span class="keyword">true</span>;
<a name="l02486"></a>02486     }
<a name="l02487"></a>02487   }
<a name="l02488"></a>02488 
<a name="l02489"></a>02489   <span class="keyword">const</span> <span class="keywordtype">bool</span> ACLChange = ( d-&gt;extendedACL !=  <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a>()-&gt;ACL() );
<a name="l02490"></a>02490   <span class="keyword">const</span> <span class="keywordtype">bool</span> defaultACLChange = ( d-&gt;defaultACL != <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#af04def59643b5afac5c57d374b83cdb7">item</a>()-&gt;defaultACL() );
<a name="l02491"></a>02491 
<a name="l02492"></a>02492   <span class="keywordflow">if</span> ( owner.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() &amp;&amp; group.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() &amp;&amp; !recursive
<a name="l02493"></a>02493       &amp;&amp; !permissionChange &amp;&amp; !ACLChange &amp;&amp; !defaultACLChange )
<a name="l02494"></a>02494     <span class="keywordflow">return</span>;
<a name="l02495"></a>02495 
<a name="l02496"></a>02496   KIO::Job * job;
<a name="l02497"></a>02497   <span class="keywordflow">if</span> (files.count() &gt; 0) {
<a name="l02498"></a>02498     job = KIO::chmod( files, orFilePermissions, ~andFilePermissions,
<a name="l02499"></a>02499         owner, group, <span class="keyword">false</span> );
<a name="l02500"></a>02500     <span class="keywordflow">if</span> ( ACLChange &amp;&amp; d-&gt;fileSystemSupportsACLs )
<a name="l02501"></a>02501       job-&gt;addMetaData( <span class="stringliteral">&quot;ACL_STRING&quot;</span>, d-&gt;extendedACL.isValid()?d-&gt;extendedACL.asString():<span class="stringliteral">&quot;ACL_DELETE&quot;</span> );
<a name="l02502"></a>02502     <span class="keywordflow">if</span> ( defaultACLChange &amp;&amp; d-&gt;fileSystemSupportsACLs )
<a name="l02503"></a>02503       job-&gt;addMetaData( <span class="stringliteral">&quot;DEFAULT_ACL_STRING&quot;</span>, d-&gt;defaultACL.isValid()?d-&gt;defaultACL.asString():<span class="stringliteral">&quot;ACL_DELETE&quot;</span> );
<a name="l02504"></a>02504 
<a name="l02505"></a>02505     <a class="codeRef" href="qobject.html#connect">connect</a>( job, SIGNAL( result( KIO::Job * ) ),
<a name="l02506"></a>02506         SLOT( slotChmodResult( KIO::Job * ) ) );
<a name="l02507"></a>02507     <span class="comment">// Wait for job</span>
<a name="l02508"></a>02508     <a class="codeRef" href="qwidget.html">QWidget</a> dummy(0,0,WType_Dialog|WShowModal);
<a name="l02509"></a>02509     qt_enter_modal(&amp;dummy);
<a name="l02510"></a>02510     qApp-&gt;enter_loop();
<a name="l02511"></a>02511     qt_leave_modal(&amp;dummy);
<a name="l02512"></a>02512   }
<a name="l02513"></a>02513   <span class="keywordflow">if</span> (dirs.count() &gt; 0) {
<a name="l02514"></a>02514     job = KIO::chmod( dirs, orDirPermissions, ~andDirPermissions,
<a name="l02515"></a>02515         owner, group, recursive );
<a name="l02516"></a>02516     <span class="keywordflow">if</span> ( ACLChange &amp;&amp; d-&gt;fileSystemSupportsACLs )
<a name="l02517"></a>02517       job-&gt;addMetaData( <span class="stringliteral">&quot;ACL_STRING&quot;</span>, d-&gt;extendedACL.isValid()?d-&gt;extendedACL.asString():<span class="stringliteral">&quot;ACL_DELETE&quot;</span> );
<a name="l02518"></a>02518     <span class="keywordflow">if</span> ( defaultACLChange &amp;&amp; d-&gt;fileSystemSupportsACLs )
<a name="l02519"></a>02519       job-&gt;addMetaData( <span class="stringliteral">&quot;DEFAULT_ACL_STRING&quot;</span>, d-&gt;defaultACL.isValid()?d-&gt;defaultACL.asString():<span class="stringliteral">&quot;ACL_DELETE&quot;</span> );
<a name="l02520"></a>02520 
<a name="l02521"></a>02521     <a class="codeRef" href="qobject.html#connect">connect</a>( job, SIGNAL( result( KIO::Job * ) ),
<a name="l02522"></a>02522         SLOT( slotChmodResult( KIO::Job * ) ) );
<a name="l02523"></a>02523     <span class="comment">// Wait for job</span>
<a name="l02524"></a>02524     <a class="codeRef" href="qwidget.html">QWidget</a> dummy(0,0,WType_Dialog|WShowModal);
<a name="l02525"></a>02525     qt_enter_modal(&amp;dummy);
<a name="l02526"></a>02526     qApp-&gt;enter_loop();
<a name="l02527"></a>02527     qt_leave_modal(&amp;dummy);
<a name="l02528"></a>02528   }
<a name="l02529"></a>02529 }
<a name="l02530"></a>02530 
<a name="l02531"></a>02531 <span class="keywordtype">void</span> KFilePermissionsPropsPlugin::slotChmodResult( KIO::Job * job )
<a name="l02532"></a>02532 {
<a name="l02533"></a>02533   kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;KFilePermissionsPropsPlugin::slotChmodResult&quot;</span> &lt;&lt; endl;
<a name="l02534"></a>02534   <span class="keywordflow">if</span> (job-&gt;error())
<a name="l02535"></a>02535     job-&gt;showErrorDialog( d-&gt;m_frame );
<a name="l02536"></a>02536   <span class="comment">// allow apply() to return</span>
<a name="l02537"></a>02537   qApp-&gt;exit_loop();
<a name="l02538"></a>02538 }
<a name="l02539"></a>02539 
<a name="l02540"></a>02540 
<a name="l02541"></a>02541 
<a name="l02542"></a>02542 
<a name="l02543"></a>02543 <span class="keyword">class </span>KURLPropsPlugin::KURLPropsPluginPrivate
<a name="l02544"></a>02544 {
<a name="l02545"></a>02545 <span class="keyword">public</span>:
<a name="l02546"></a>02546   KURLPropsPluginPrivate()
<a name="l02547"></a>02547   {
<a name="l02548"></a>02548   }
<a name="l02549"></a>02549   ~KURLPropsPluginPrivate()
<a name="l02550"></a>02550   {
<a name="l02551"></a>02551   }
<a name="l02552"></a>02552 
<a name="l02553"></a>02553   <a class="codeRef" href="qframe.html">QFrame</a> *m_frame;
<a name="l02554"></a>02554 };
<a name="l02555"></a>02555 
<a name="l02556"></a><a class="code" href="classKURLPropsPlugin.html#aff1a70ceb6074a60b16888eb95190ede">02556</a> <a class="code" href="classKURLPropsPlugin.html#aff1a70ceb6074a60b16888eb95190ede" title="Constructor.">KURLPropsPlugin::KURLPropsPlugin</a>( <a class="code" href="classKPropertiesDialog.html" title="The main properties dialog class.">KPropertiesDialog</a> *_props )
<a name="l02557"></a>02557   : <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a>( _props )
<a name="l02558"></a>02558 {
<a name="l02559"></a>02559   d = <span class="keyword">new</span> KURLPropsPluginPrivate;
<a name="l02560"></a>02560   d-&gt;m_frame = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;addPage(i18n(<span class="stringliteral">&quot;U&amp;RL&quot;</span>));
<a name="l02561"></a>02561   <a class="codeRef" href="qvboxlayout.html">QVBoxLayout</a> *layout = <span class="keyword">new</span> <a class="codeRef" href="qvboxlayout.html">QVBoxLayout</a>(d-&gt;m_frame, 0, KDialog::spacingHint());
<a name="l02562"></a>02562 
<a name="l02563"></a>02563   <a class="codeRef" href="qlabel.html">QLabel</a> *l;
<a name="l02564"></a>02564   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame, <span class="stringliteral">&quot;Label_1&quot;</span> );
<a name="l02565"></a>02565   l-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( i18n(<span class="stringliteral">&quot;URL:&quot;</span>) );
<a name="l02566"></a>02566   layout-&gt;addWidget(l);
<a name="l02567"></a>02567 
<a name="l02568"></a>02568   URLEdit = <span class="keyword">new</span> <a class="code" href="classKURLRequester.html" title="This class is a widget showing a lineedit and a button, which invokes a filedialog.">KURLRequester</a>( d-&gt;m_frame, <span class="stringliteral">&quot;URL Requester&quot;</span> );
<a name="l02569"></a>02569   layout-&gt;addWidget(URLEdit);
<a name="l02570"></a>02570 
<a name="l02571"></a>02571   <a class="codeRef" href="qstring.html">QString</a> path = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path();
<a name="l02572"></a>02572 
<a name="l02573"></a>02573   <a class="codeRef" href="qfile.html">QFile</a> f( path );
<a name="l02574"></a>02574   <span class="keywordflow">if</span> ( !f.<a class="codeRef" href="qfile.html#open">open</a>( IO_ReadOnly ) )
<a name="l02575"></a>02575     <span class="keywordflow">return</span>;
<a name="l02576"></a>02576   f.<a class="codeRef" href="qfile.html#close">close</a>();
<a name="l02577"></a>02577 
<a name="l02578"></a>02578   KSimpleConfig config( path );
<a name="l02579"></a>02579   config.setDesktopGroup();
<a name="l02580"></a>02580   URLStr = config.readPathEntry( <span class="stringliteral">&quot;URL&quot;</span> );
<a name="l02581"></a>02581 
<a name="l02582"></a>02582   <span class="keywordflow">if</span> ( !URLStr.<a class="codeRef" href="qstring.html#isNull">isNull</a>() )
<a name="l02583"></a>02583     URLEdit-&gt;<a class="code" href="classKURLRequester.html#ac8407e17b7c5198d7819ad2ce867204c" title="Sets the url in the lineedit to url.">setURL</a>( URLStr );
<a name="l02584"></a>02584 
<a name="l02585"></a>02585   <a class="codeRef" href="qobject.html#connect">connect</a>( URLEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l02586"></a>02586            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l02587"></a>02587 
<a name="l02588"></a>02588   layout-&gt;addStretch (1);
<a name="l02589"></a>02589 }
<a name="l02590"></a>02590 
<a name="l02591"></a>02591 KURLPropsPlugin::~KURLPropsPlugin()
<a name="l02592"></a>02592 {
<a name="l02593"></a>02593   <span class="keyword">delete</span> d;
<a name="l02594"></a>02594 }
<a name="l02595"></a>02595 
<a name="l02596"></a>02596 <span class="comment">// QString KURLPropsPlugin::tabName () const</span>
<a name="l02597"></a>02597 <span class="comment">// {</span>
<a name="l02598"></a>02598 <span class="comment">//   return i18n (&quot;U&amp;RL&quot;);</span>
<a name="l02599"></a>02599 <span class="comment">// }</span>
<a name="l02600"></a>02600 
<a name="l02601"></a>02601 <span class="keywordtype">bool</span> KURLPropsPlugin::supports( KFileItemList _items )
<a name="l02602"></a>02602 {
<a name="l02603"></a>02603   <span class="keywordflow">if</span> ( _items.count() != 1 )
<a name="l02604"></a>02604     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02605"></a>02605   KFileItem * item = _items.first();
<a name="l02606"></a>02606   <span class="comment">// check if desktop file</span>
<a name="l02607"></a>02607   <span class="keywordflow">if</span> ( !<a class="code" href="classKPropsDlgPlugin.html#ad29f1d332d93035d3ae2278ba25b2803" title="Convenience method for most ::supports methods.">KPropsDlgPlugin::isDesktopFile</a>( item ) )
<a name="l02608"></a>02608     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02609"></a>02609 
<a name="l02610"></a>02610   <span class="comment">// open file and check type</span>
<a name="l02611"></a>02611   KDesktopFile config( item-&gt;url().path(), <span class="keyword">true</span> <span class="comment">/* readonly */</span> );
<a name="l02612"></a>02612   <span class="keywordflow">return</span> config.hasLinkType();
<a name="l02613"></a>02613 }
<a name="l02614"></a>02614 
<a name="l02615"></a><a class="code" href="classKURLPropsPlugin.html#afccb80743447259b495f2c42ef96938f">02615</a> <span class="keywordtype">void</span> <a class="code" href="classKURLPropsPlugin.html#afccb80743447259b495f2c42ef96938f" title="Applies all changes to the file.">KURLPropsPlugin::applyChanges</a>()
<a name="l02616"></a>02616 {
<a name="l02617"></a>02617   <a class="codeRef" href="qstring.html">QString</a> path = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path();
<a name="l02618"></a>02618 
<a name="l02619"></a>02619   <a class="codeRef" href="qfile.html">QFile</a> f( path );
<a name="l02620"></a>02620   <span class="keywordflow">if</span> ( !f.<a class="codeRef" href="qfile.html#open">open</a>( IO_ReadWrite ) ) {
<a name="l02621"></a>02621     KMessageBox::sorry( 0, i18n(<span class="stringliteral">&quot;&lt;qt&gt;Could not save properties. You do not have &quot;</span>
<a name="l02622"></a>02622                 <span class="stringliteral">&quot;sufficient access to write to &lt;b&gt;%1&lt;/b&gt;.&lt;/qt&gt;&quot;</span>).arg(path));
<a name="l02623"></a>02623     <span class="keywordflow">return</span>;
<a name="l02624"></a>02624   }
<a name="l02625"></a>02625   f.<a class="codeRef" href="qfile.html#close">close</a>();
<a name="l02626"></a>02626 
<a name="l02627"></a>02627   KSimpleConfig config( path );
<a name="l02628"></a>02628   config.setDesktopGroup();
<a name="l02629"></a>02629   config.writeEntry( <span class="stringliteral">&quot;Type&quot;</span>, <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;Link&quot;</span>));
<a name="l02630"></a>02630   config.writePathEntry( <span class="stringliteral">&quot;URL&quot;</span>, URLEdit-&gt;url() );
<a name="l02631"></a>02631   <span class="comment">// Users can&#39;t create a Link .desktop file with a Name field,</span>
<a name="l02632"></a>02632   <span class="comment">// but distributions can. Update the Name field in that case.</span>
<a name="l02633"></a>02633   <span class="keywordflow">if</span> ( config.hasKey(<span class="stringliteral">&quot;Name&quot;</span>) )
<a name="l02634"></a>02634   {
<a name="l02635"></a>02635     <a class="codeRef" href="qstring.html">QString</a> nameStr = nameFromFileName(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().fileName());
<a name="l02636"></a>02636     config.writeEntry( <span class="stringliteral">&quot;Name&quot;</span>, nameStr );
<a name="l02637"></a>02637     config.writeEntry( <span class="stringliteral">&quot;Name&quot;</span>, nameStr, <span class="keyword">true</span>, <span class="keyword">false</span>, <span class="keyword">true</span> );
<a name="l02638"></a>02638 
<a name="l02639"></a>02639   }
<a name="l02640"></a>02640 }
<a name="l02641"></a>02641 
<a name="l02642"></a>02642 
<a name="l02643"></a>02643 <span class="comment">/* ----------------------------------------------------</span>
<a name="l02644"></a>02644 <span class="comment"> *</span>
<a name="l02645"></a>02645 <span class="comment"> * KBindingPropsPlugin</span>
<a name="l02646"></a>02646 <span class="comment"> *</span>
<a name="l02647"></a>02647 <span class="comment"> * -------------------------------------------------- */</span>
<a name="l02648"></a>02648 
<a name="l02649"></a>02649 <span class="keyword">class </span>KBindingPropsPlugin::KBindingPropsPluginPrivate
<a name="l02650"></a>02650 {
<a name="l02651"></a>02651 <span class="keyword">public</span>:
<a name="l02652"></a>02652   KBindingPropsPluginPrivate()
<a name="l02653"></a>02653   {
<a name="l02654"></a>02654   }
<a name="l02655"></a>02655   ~KBindingPropsPluginPrivate()
<a name="l02656"></a>02656   {
<a name="l02657"></a>02657   }
<a name="l02658"></a>02658 
<a name="l02659"></a>02659   <a class="codeRef" href="qframe.html">QFrame</a> *m_frame;
<a name="l02660"></a>02660 };
<a name="l02661"></a>02661 
<a name="l02662"></a><a class="code" href="classKBindingPropsPlugin.html#a81a9f062afccad37f7a5d247725973d1">02662</a> <a class="code" href="classKBindingPropsPlugin.html#a81a9f062afccad37f7a5d247725973d1" title="Constructor.">KBindingPropsPlugin::KBindingPropsPlugin</a>( <a class="code" href="classKPropertiesDialog.html" title="The main properties dialog class.">KPropertiesDialog</a> *_props ) : <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a>( _props )
<a name="l02663"></a>02663 {
<a name="l02664"></a>02664   d = <span class="keyword">new</span> KBindingPropsPluginPrivate;
<a name="l02665"></a>02665   d-&gt;m_frame = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;addPage(i18n(<span class="stringliteral">&quot;A&amp;ssociation&quot;</span>));
<a name="l02666"></a>02666   patternEdit = <span class="keyword">new</span> KLineEdit( d-&gt;m_frame, <span class="stringliteral">&quot;LineEdit_1&quot;</span> );
<a name="l02667"></a>02667   commentEdit = <span class="keyword">new</span> KLineEdit( d-&gt;m_frame, <span class="stringliteral">&quot;LineEdit_2&quot;</span> );
<a name="l02668"></a>02668   mimeEdit = <span class="keyword">new</span> KLineEdit( d-&gt;m_frame, <span class="stringliteral">&quot;LineEdit_3&quot;</span> );
<a name="l02669"></a>02669 
<a name="l02670"></a>02670   <a class="codeRef" href="qboxlayout.html">QBoxLayout</a> *mainlayout = <span class="keyword">new</span> <a class="codeRef" href="qvboxlayout.html">QVBoxLayout</a>(d-&gt;m_frame, 0, KDialog::spacingHint());
<a name="l02671"></a>02671   <a class="codeRef" href="qlabel.html">QLabel</a>* tmpQLabel;
<a name="l02672"></a>02672 
<a name="l02673"></a>02673   tmpQLabel = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame, <span class="stringliteral">&quot;Label_1&quot;</span> );
<a name="l02674"></a>02674   tmpQLabel-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>(  i18n(<span class="stringliteral">&quot;Pattern ( example: *.html;*.htm )&quot;</span>) );
<a name="l02675"></a>02675   tmpQLabel-&gt;setMinimumSize(tmpQLabel-&gt;sizeHint());
<a name="l02676"></a>02676   mainlayout-&gt;<a class="codeRef" href="qboxlayout.html#addWidget">addWidget</a>(tmpQLabel, 1);
<a name="l02677"></a>02677 
<a name="l02678"></a>02678   <span class="comment">//patternEdit-&gt;setGeometry( 10, 40, 210, 30 );</span>
<a name="l02679"></a>02679   <span class="comment">//patternEdit-&gt;setText( &quot;&quot; );</span>
<a name="l02680"></a>02680   patternEdit-&gt;<a class="codeRef" href="qlineedit.html#setMaxLength">setMaxLength</a>( 512 );
<a name="l02681"></a>02681   patternEdit-&gt;setMinimumSize( patternEdit-&gt;<a class="codeRef" href="qlineedit.html#sizeHint">sizeHint</a>() );
<a name="l02682"></a>02682   patternEdit-&gt;setFixedHeight( fontHeight );
<a name="l02683"></a>02683   mainlayout-&gt;<a class="codeRef" href="qboxlayout.html#addWidget">addWidget</a>(patternEdit, 1);
<a name="l02684"></a>02684 
<a name="l02685"></a>02685   tmpQLabel = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame, <span class="stringliteral">&quot;Label_2&quot;</span> );
<a name="l02686"></a>02686   tmpQLabel-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>(  i18n(<span class="stringliteral">&quot;Mime Type&quot;</span>) );
<a name="l02687"></a>02687   tmpQLabel-&gt;setMinimumSize(tmpQLabel-&gt;sizeHint());
<a name="l02688"></a>02688   mainlayout-&gt;<a class="codeRef" href="qboxlayout.html#addWidget">addWidget</a>(tmpQLabel, 1);
<a name="l02689"></a>02689 
<a name="l02690"></a>02690   <span class="comment">//mimeEdit-&gt;setGeometry( 10, 160, 210, 30 );</span>
<a name="l02691"></a>02691   mimeEdit-&gt;<a class="codeRef" href="qlineedit.html#setMaxLength">setMaxLength</a>( 256 );
<a name="l02692"></a>02692   mimeEdit-&gt;setMinimumSize( mimeEdit-&gt;<a class="codeRef" href="qlineedit.html#sizeHint">sizeHint</a>() );
<a name="l02693"></a>02693   mimeEdit-&gt;setFixedHeight( fontHeight );
<a name="l02694"></a>02694   mainlayout-&gt;<a class="codeRef" href="qboxlayout.html#addWidget">addWidget</a>(mimeEdit, 1);
<a name="l02695"></a>02695 
<a name="l02696"></a>02696   tmpQLabel = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame, <span class="stringliteral">&quot;Label_3&quot;</span> );
<a name="l02697"></a>02697   tmpQLabel-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>(  i18n(<span class="stringliteral">&quot;Comment&quot;</span>) );
<a name="l02698"></a>02698   tmpQLabel-&gt;setMinimumSize(tmpQLabel-&gt;sizeHint());
<a name="l02699"></a>02699   mainlayout-&gt;<a class="codeRef" href="qboxlayout.html#addWidget">addWidget</a>(tmpQLabel, 1);
<a name="l02700"></a>02700 
<a name="l02701"></a>02701   <span class="comment">//commentEdit-&gt;setGeometry( 10, 100, 210, 30 );</span>
<a name="l02702"></a>02702   commentEdit-&gt;<a class="codeRef" href="qlineedit.html#setMaxLength">setMaxLength</a>( 256 );
<a name="l02703"></a>02703   commentEdit-&gt;setMinimumSize( commentEdit-&gt;<a class="codeRef" href="qlineedit.html#sizeHint">sizeHint</a>() );
<a name="l02704"></a>02704   commentEdit-&gt;setFixedHeight( fontHeight );
<a name="l02705"></a>02705   mainlayout-&gt;<a class="codeRef" href="qboxlayout.html#addWidget">addWidget</a>(commentEdit, 1);
<a name="l02706"></a>02706 
<a name="l02707"></a>02707   cbAutoEmbed = <span class="keyword">new</span> <a class="codeRef" href="qcheckbox.html">QCheckBox</a>( i18n(<span class="stringliteral">&quot;Left click previews&quot;</span>), d-&gt;m_frame, <span class="stringliteral">&quot;cbAutoEmbed&quot;</span> );
<a name="l02708"></a>02708   mainlayout-&gt;<a class="codeRef" href="qboxlayout.html#addWidget">addWidget</a>(cbAutoEmbed, 1);
<a name="l02709"></a>02709 
<a name="l02710"></a>02710   mainlayout-&gt;<a class="codeRef" href="qboxlayout.html#addStretch">addStretch</a> (10);
<a name="l02711"></a>02711   mainlayout-&gt;activate();
<a name="l02712"></a>02712 
<a name="l02713"></a>02713   <a class="codeRef" href="qfile.html">QFile</a> f( _props-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path() );
<a name="l02714"></a>02714   <span class="keywordflow">if</span> ( !f.open( IO_ReadOnly ) )
<a name="l02715"></a>02715     <span class="keywordflow">return</span>;
<a name="l02716"></a>02716   f.<a class="codeRef" href="qfile.html#close">close</a>();
<a name="l02717"></a>02717 
<a name="l02718"></a>02718   KSimpleConfig config( _props-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path() );
<a name="l02719"></a>02719   config.setDesktopGroup();
<a name="l02720"></a>02720   <a class="codeRef" href="qstring.html">QString</a> patternStr = config.readEntry( <span class="stringliteral">&quot;Patterns&quot;</span> );
<a name="l02721"></a>02721   <a class="codeRef" href="qstring.html">QString</a> iconStr = config.readEntry( <span class="stringliteral">&quot;Icon&quot;</span> );
<a name="l02722"></a>02722   <a class="codeRef" href="qstring.html">QString</a> commentStr = config.readEntry( <span class="stringliteral">&quot;Comment&quot;</span> );
<a name="l02723"></a>02723   m_sMimeStr = config.readEntry( <span class="stringliteral">&quot;MimeType&quot;</span> );
<a name="l02724"></a>02724 
<a name="l02725"></a>02725   <span class="keywordflow">if</span> ( !patternStr.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() )
<a name="l02726"></a>02726     patternEdit-&gt;<a class="codeRef" href="qlineedit.html#setText">setText</a>( patternStr );
<a name="l02727"></a>02727   <span class="keywordflow">if</span> ( !commentStr.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() )
<a name="l02728"></a>02728     commentEdit-&gt;<a class="codeRef" href="qlineedit.html#setText">setText</a>( commentStr );
<a name="l02729"></a>02729   <span class="keywordflow">if</span> ( !m_sMimeStr.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() )
<a name="l02730"></a>02730     mimeEdit-&gt;<a class="codeRef" href="qlineedit.html#setText">setText</a>( m_sMimeStr );
<a name="l02731"></a>02731   cbAutoEmbed-&gt;<a class="codeRef" href="qcheckbox.html#setTristate">setTristate</a>();
<a name="l02732"></a>02732   <span class="keywordflow">if</span> ( config.hasKey( <span class="stringliteral">&quot;X-KDE-AutoEmbed&quot;</span> ) )
<a name="l02733"></a>02733       cbAutoEmbed-&gt;<a class="codeRef" href="qcheckbox.html#setChecked">setChecked</a>( config.readBoolEntry( <span class="stringliteral">&quot;X-KDE-AutoEmbed&quot;</span> ) );
<a name="l02734"></a>02734   <span class="keywordflow">else</span>
<a name="l02735"></a>02735       cbAutoEmbed-&gt;<a class="codeRef" href="qcheckbox.html#setNoChange">setNoChange</a>();
<a name="l02736"></a>02736 
<a name="l02737"></a>02737   <a class="codeRef" href="qobject.html#connect">connect</a>( patternEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l02738"></a>02738            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l02739"></a>02739   <a class="codeRef" href="qobject.html#connect">connect</a>( commentEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l02740"></a>02740            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l02741"></a>02741   <a class="codeRef" href="qobject.html#connect">connect</a>( mimeEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l02742"></a>02742            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l02743"></a>02743   <a class="codeRef" href="qobject.html#connect">connect</a>( cbAutoEmbed, SIGNAL( toggled( <span class="keywordtype">bool</span> ) ),
<a name="l02744"></a>02744            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l02745"></a>02745 }
<a name="l02746"></a>02746 
<a name="l02747"></a>02747 KBindingPropsPlugin::~KBindingPropsPlugin()
<a name="l02748"></a>02748 {
<a name="l02749"></a>02749   <span class="keyword">delete</span> d;
<a name="l02750"></a>02750 }
<a name="l02751"></a>02751 
<a name="l02752"></a>02752 <span class="comment">// QString KBindingPropsPlugin::tabName () const</span>
<a name="l02753"></a>02753 <span class="comment">// {</span>
<a name="l02754"></a>02754 <span class="comment">//   return i18n (&quot;A&amp;ssociation&quot;);</span>
<a name="l02755"></a>02755 <span class="comment">// }</span>
<a name="l02756"></a>02756 
<a name="l02757"></a>02757 <span class="keywordtype">bool</span> KBindingPropsPlugin::supports( KFileItemList _items )
<a name="l02758"></a>02758 {
<a name="l02759"></a>02759   <span class="keywordflow">if</span> ( _items.count() != 1 )
<a name="l02760"></a>02760     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02761"></a>02761   KFileItem * item = _items.first();
<a name="l02762"></a>02762   <span class="comment">// check if desktop file</span>
<a name="l02763"></a>02763   <span class="keywordflow">if</span> ( !<a class="code" href="classKPropsDlgPlugin.html#ad29f1d332d93035d3ae2278ba25b2803" title="Convenience method for most ::supports methods.">KPropsDlgPlugin::isDesktopFile</a>( item ) )
<a name="l02764"></a>02764     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02765"></a>02765 
<a name="l02766"></a>02766   <span class="comment">// open file and check type</span>
<a name="l02767"></a>02767   KDesktopFile config( item-&gt;url().path(), <span class="keyword">true</span> <span class="comment">/* readonly */</span> );
<a name="l02768"></a>02768   <span class="keywordflow">return</span> config.hasMimeTypeType();
<a name="l02769"></a>02769 }
<a name="l02770"></a>02770 
<a name="l02771"></a><a class="code" href="classKBindingPropsPlugin.html#a27a1a5d042aaac70343a3abcd4068143">02771</a> <span class="keywordtype">void</span> <a class="code" href="classKBindingPropsPlugin.html#a27a1a5d042aaac70343a3abcd4068143" title="Applies all changes to the file.">KBindingPropsPlugin::applyChanges</a>()
<a name="l02772"></a>02772 {
<a name="l02773"></a>02773   <a class="codeRef" href="qstring.html">QString</a> path = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path();
<a name="l02774"></a>02774   <a class="codeRef" href="qfile.html">QFile</a> f( path );
<a name="l02775"></a>02775 
<a name="l02776"></a>02776   <span class="keywordflow">if</span> ( !f.<a class="codeRef" href="qfile.html#open">open</a>( IO_ReadWrite ) )
<a name="l02777"></a>02777   {
<a name="l02778"></a>02778     KMessageBox::sorry( 0, i18n(<span class="stringliteral">&quot;&lt;qt&gt;Could not save properties. You do not have &quot;</span>
<a name="l02779"></a>02779                 <span class="stringliteral">&quot;sufficient access to write to &lt;b&gt;%1&lt;/b&gt;.&lt;/qt&gt;&quot;</span>).arg(path));
<a name="l02780"></a>02780     <span class="keywordflow">return</span>;
<a name="l02781"></a>02781   }
<a name="l02782"></a>02782   f.<a class="codeRef" href="qfile.html#close">close</a>();
<a name="l02783"></a>02783 
<a name="l02784"></a>02784   KSimpleConfig config( path );
<a name="l02785"></a>02785   config.setDesktopGroup();
<a name="l02786"></a>02786   config.writeEntry( <span class="stringliteral">&quot;Type&quot;</span>, <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;MimeType&quot;</span>) );
<a name="l02787"></a>02787 
<a name="l02788"></a>02788   config.writeEntry( <span class="stringliteral">&quot;Patterns&quot;</span>,  patternEdit-&gt;<a class="codeRef" href="qlineedit.html#text">text</a>() );
<a name="l02789"></a>02789   config.writeEntry( <span class="stringliteral">&quot;Comment&quot;</span>, commentEdit-&gt;<a class="codeRef" href="qlineedit.html#text">text</a>() );
<a name="l02790"></a>02790   config.writeEntry( <span class="stringliteral">&quot;Comment&quot;</span>,
<a name="l02791"></a>02791              commentEdit-&gt;<a class="codeRef" href="qlineedit.html#text">text</a>(), <span class="keyword">true</span>, <span class="keyword">false</span>, true ); <span class="comment">// for compat</span>
<a name="l02792"></a>02792   config.writeEntry( <span class="stringliteral">&quot;MimeType&quot;</span>, mimeEdit-&gt;<a class="codeRef" href="qlineedit.html#text">text</a>() );
<a name="l02793"></a>02793   <span class="keywordflow">if</span> ( cbAutoEmbed-&gt;<a class="codeRef" href="qcheckbox.html#state">state</a>() == QButton::NoChange )
<a name="l02794"></a>02794       config.deleteEntry( <span class="stringliteral">&quot;X-KDE-AutoEmbed&quot;</span>, <span class="keyword">false</span> );
<a name="l02795"></a>02795   <span class="keywordflow">else</span>
<a name="l02796"></a>02796       config.writeEntry( <span class="stringliteral">&quot;X-KDE-AutoEmbed&quot;</span>, cbAutoEmbed-&gt;<a class="codeRef" href="qcheckbox.html#isChecked">isChecked</a>() );
<a name="l02797"></a>02797   config.sync();
<a name="l02798"></a>02798 }
<a name="l02799"></a>02799 
<a name="l02800"></a>02800 <span class="comment">/* ----------------------------------------------------</span>
<a name="l02801"></a>02801 <span class="comment"> *</span>
<a name="l02802"></a>02802 <span class="comment"> * KDevicePropsPlugin</span>
<a name="l02803"></a>02803 <span class="comment"> *</span>
<a name="l02804"></a>02804 <span class="comment"> * -------------------------------------------------- */</span>
<a name="l02805"></a>02805 
<a name="l02806"></a>02806 <span class="keyword">class </span>KDevicePropsPlugin::KDevicePropsPluginPrivate
<a name="l02807"></a>02807 {
<a name="l02808"></a>02808 <span class="keyword">public</span>:
<a name="l02809"></a>02809   KDevicePropsPluginPrivate()
<a name="l02810"></a>02810   {
<a name="l02811"></a>02811   }
<a name="l02812"></a>02812   ~KDevicePropsPluginPrivate()
<a name="l02813"></a>02813   {
<a name="l02814"></a>02814   }
<a name="l02815"></a>02815 
<a name="l02816"></a>02816   <a class="codeRef" href="qframe.html">QFrame</a> *m_frame;
<a name="l02817"></a>02817   <a class="codeRef" href="qstringlist.html">QStringList</a> mountpointlist;
<a name="l02818"></a>02818   <a class="codeRef" href="qlabel.html">QLabel</a> *m_freeSpaceText;
<a name="l02819"></a>02819   <a class="codeRef" href="qlabel.html">QLabel</a> *m_freeSpaceLabel;
<a name="l02820"></a>02820   <a class="codeRef" href="qprogressbar.html">QProgressBar</a> *m_freeSpaceBar;
<a name="l02821"></a>02821 };
<a name="l02822"></a>02822 
<a name="l02823"></a>02823 KDevicePropsPlugin::KDevicePropsPlugin( <a class="code" href="classKPropertiesDialog.html" title="The main properties dialog class.">KPropertiesDialog</a> *_props ) : <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a>( _props )
<a name="l02824"></a>02824 {
<a name="l02825"></a>02825   d = <span class="keyword">new</span> KDevicePropsPluginPrivate;
<a name="l02826"></a>02826   d-&gt;m_frame = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;addPage(i18n(<span class="stringliteral">&quot;De&amp;vice&quot;</span>));
<a name="l02827"></a>02827 
<a name="l02828"></a>02828   <a class="codeRef" href="qstringlist.html">QStringList</a> devices;
<a name="l02829"></a>02829   KMountPoint::List mountPoints = KMountPoint::possibleMountPoints();
<a name="l02830"></a>02830 
<a name="l02831"></a>02831   <span class="keywordflow">for</span>(KMountPoint::List::ConstIterator it = mountPoints.begin();
<a name="l02832"></a>02832       it != mountPoints.end(); ++it)
<a name="l02833"></a>02833   {
<a name="l02834"></a>02834      KMountPoint *mp = *it;
<a name="l02835"></a>02835      <a class="codeRef" href="qstring.html">QString</a> mountPoint = mp-&gt;mountPoint();
<a name="l02836"></a>02836      <a class="codeRef" href="qstring.html">QString</a> device = mp-&gt;mountedFrom();
<a name="l02837"></a>02837      kdDebug()&lt;&lt;<span class="stringliteral">&quot;mountPoint :&quot;</span>&lt;&lt;mountPoint&lt;&lt;<span class="stringliteral">&quot; device :&quot;</span>&lt;&lt;device&lt;&lt;<span class="stringliteral">&quot; mp-&gt;mountType() :&quot;</span>&lt;&lt;mp-&gt;mountType()&lt;&lt;endl;
<a name="l02838"></a>02838 
<a name="l02839"></a>02839      <span class="keywordflow">if</span> ((mountPoint != <span class="stringliteral">&quot;-&quot;</span>) &amp;&amp; (mountPoint != <span class="stringliteral">&quot;none&quot;</span>) &amp;&amp; !mountPoint.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>()
<a name="l02840"></a>02840           &amp;&amp; device != <span class="stringliteral">&quot;none&quot;</span>)
<a name="l02841"></a>02841      {
<a name="l02842"></a>02842         devices.append( device + <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot; (&quot;</span>)
<a name="l02843"></a>02843                         + mountPoint + <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;)&quot;</span>) );
<a name="l02844"></a>02844         m_devicelist.append(device);
<a name="l02845"></a>02845         d-&gt;mountpointlist.append(mountPoint);
<a name="l02846"></a>02846      }
<a name="l02847"></a>02847   }
<a name="l02848"></a>02848 
<a name="l02849"></a>02849   <a class="codeRef" href="qgridlayout.html">QGridLayout</a> *layout = <span class="keyword">new</span> <a class="codeRef" href="qgridlayout.html">QGridLayout</a>( d-&gt;m_frame, 0, 2, 0,
<a name="l02850"></a>02850                                         KDialog::spacingHint());
<a name="l02851"></a>02851   layout-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(1, 1);
<a name="l02852"></a>02852 
<a name="l02853"></a>02853   <a class="codeRef" href="qlabel.html">QLabel</a>* label;
<a name="l02854"></a>02854   label = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame );
<a name="l02855"></a>02855   label-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( devices.count() == 0 ?
<a name="l02856"></a>02856                       i18n(<span class="stringliteral">&quot;Device (/dev/fd0):&quot;</span>) : <span class="comment">// old style</span>
<a name="l02857"></a>02857                       i18n(<span class="stringliteral">&quot;Device:&quot;</span>) ); <span class="comment">// new style (combobox)</span>
<a name="l02858"></a>02858   layout-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(label, 0, 0);
<a name="l02859"></a>02859 
<a name="l02860"></a>02860   device = <span class="keyword">new</span> <a class="codeRef" href="qcombobox.html">QComboBox</a>( <span class="keyword">true</span>, d-&gt;m_frame, <span class="stringliteral">&quot;ComboBox_device&quot;</span> );
<a name="l02861"></a>02861   device-&gt;insertStringList( devices );
<a name="l02862"></a>02862   layout-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(device, 0, 1);
<a name="l02863"></a>02863   <a class="codeRef" href="qobject.html#connect">connect</a>( device, SIGNAL( activated( <span class="keywordtype">int</span> ) ),
<a name="l02864"></a>02864            <span class="keyword">this</span>, SLOT( slotActivated( <span class="keywordtype">int</span> ) ) );
<a name="l02865"></a>02865 
<a name="l02866"></a>02866   readonly = <span class="keyword">new</span> <a class="codeRef" href="qcheckbox.html">QCheckBox</a>( d-&gt;m_frame, <span class="stringliteral">&quot;CheckBox_readonly&quot;</span> );
<a name="l02867"></a>02867   readonly-&gt;setText(  i18n(<span class="stringliteral">&quot;Read only&quot;</span>) );
<a name="l02868"></a>02868   layout-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(readonly, 1, 1);
<a name="l02869"></a>02869 
<a name="l02870"></a>02870   label = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame );
<a name="l02871"></a>02871   label-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( i18n(<span class="stringliteral">&quot;File system:&quot;</span>) );
<a name="l02872"></a>02872   layout-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(label, 2, 0);
<a name="l02873"></a>02873 
<a name="l02874"></a>02874   <a class="codeRef" href="qlabel.html">QLabel</a> *fileSystem = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame );
<a name="l02875"></a>02875   layout-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(fileSystem, 2, 1);
<a name="l02876"></a>02876 
<a name="l02877"></a>02877   label = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame );
<a name="l02878"></a>02878   label-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( devices.count()==0 ?
<a name="l02879"></a>02879                       i18n(<span class="stringliteral">&quot;Mount point (/mnt/floppy):&quot;</span>) : <span class="comment">// old style</span>
<a name="l02880"></a>02880                       i18n(<span class="stringliteral">&quot;Mount point:&quot;</span>)); <span class="comment">// new style (combobox)</span>
<a name="l02881"></a>02881   layout-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(label, 3, 0);
<a name="l02882"></a>02882 
<a name="l02883"></a>02883   mountpoint = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame, <span class="stringliteral">&quot;LineEdit_mountpoint&quot;</span> );
<a name="l02884"></a>02884 
<a name="l02885"></a>02885   layout-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(mountpoint, 3, 1);
<a name="l02886"></a>02886 
<a name="l02887"></a>02887   <span class="comment">// show disk free</span>
<a name="l02888"></a>02888   d-&gt;m_freeSpaceText = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Free disk space:&quot;</span>), d-&gt;m_frame );
<a name="l02889"></a>02889   layout-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(d-&gt;m_freeSpaceText, 4, 0);
<a name="l02890"></a>02890 
<a name="l02891"></a>02891   d-&gt;m_freeSpaceLabel = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( d-&gt;m_frame );
<a name="l02892"></a>02892   layout-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>( d-&gt;m_freeSpaceLabel, 4, 1 );
<a name="l02893"></a>02893 
<a name="l02894"></a>02894   d-&gt;m_freeSpaceBar = <span class="keyword">new</span> <a class="codeRef" href="qprogressbar.html">QProgressBar</a>( d-&gt;m_frame, <span class="stringliteral">&quot;freeSpaceBar&quot;</span> );
<a name="l02895"></a>02895   layout-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCellWidget">addMultiCellWidget</a>(d-&gt;m_freeSpaceBar, 5, 5, 0, 1);
<a name="l02896"></a>02896 
<a name="l02897"></a>02897   <span class="comment">// we show it in the slot when we know the values</span>
<a name="l02898"></a>02898   d-&gt;m_freeSpaceText-&gt;hide();
<a name="l02899"></a>02899   d-&gt;m_freeSpaceLabel-&gt;hide();
<a name="l02900"></a>02900   d-&gt;m_freeSpaceBar-&gt;hide();
<a name="l02901"></a>02901 
<a name="l02902"></a>02902   KSeparator* sep = <span class="keyword">new</span> KSeparator( KSeparator::HLine, d-&gt;m_frame);
<a name="l02903"></a>02903   layout-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCellWidget">addMultiCellWidget</a>(sep, 6, 6, 0, 1);
<a name="l02904"></a>02904 
<a name="l02905"></a>02905   unmounted = <span class="keyword">new</span> <a class="code" href="classKIconButton.html" title="A pushbutton for choosing an icon.">KIconButton</a>( d-&gt;m_frame );
<a name="l02906"></a>02906   <span class="keywordtype">int</span> bsize = 66 + 2 * unmounted-&gt;style().pixelMetric(QStyle::PM_ButtonMargin);
<a name="l02907"></a>02907   unmounted-&gt;setFixedSize(bsize, bsize);
<a name="l02908"></a>02908   unmounted-&gt;setIconType(KIcon::Desktop, KIcon::Device);
<a name="l02909"></a>02909   layout-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(unmounted, 7, 0);
<a name="l02910"></a>02910 
<a name="l02911"></a>02911   label = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n(<span class="stringliteral">&quot;Unmounted Icon&quot;</span>),  d-&gt;m_frame );
<a name="l02912"></a>02912   layout-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(label, 7, 1);
<a name="l02913"></a>02913 
<a name="l02914"></a>02914   layout-&gt;<a class="codeRef" href="qgridlayout.html#setRowStretch">setRowStretch</a>(8, 1);
<a name="l02915"></a>02915 
<a name="l02916"></a>02916   <a class="codeRef" href="qstring.html">QString</a> path( _props-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path() );
<a name="l02917"></a>02917 
<a name="l02918"></a>02918   <a class="codeRef" href="qfile.html">QFile</a> f( path );
<a name="l02919"></a>02919   <span class="keywordflow">if</span> ( !f.open( IO_ReadOnly ) )
<a name="l02920"></a>02920     <span class="keywordflow">return</span>;
<a name="l02921"></a>02921   f.close();
<a name="l02922"></a>02922 
<a name="l02923"></a>02923   KSimpleConfig config( path );
<a name="l02924"></a>02924   config.setDesktopGroup();
<a name="l02925"></a>02925   <a class="codeRef" href="qstring.html">QString</a> deviceStr = config.readEntry( <span class="stringliteral">&quot;Dev&quot;</span> );
<a name="l02926"></a>02926   <a class="codeRef" href="qstring.html">QString</a> mountPointStr = config.readEntry( <span class="stringliteral">&quot;MountPoint&quot;</span> );
<a name="l02927"></a>02927   <span class="keywordtype">bool</span> ro = config.readBoolEntry( <span class="stringliteral">&quot;ReadOnly&quot;</span>, <span class="keyword">false</span> );
<a name="l02928"></a>02928   <a class="codeRef" href="qstring.html">QString</a> unmountedStr = config.readEntry( <span class="stringliteral">&quot;UnmountIcon&quot;</span> );
<a name="l02929"></a>02929 
<a name="l02930"></a>02930   fileSystem-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( i18n(config.readEntry(<span class="stringliteral">&quot;FSType&quot;</span>).local8Bit()) );
<a name="l02931"></a>02931 
<a name="l02932"></a>02932   device-&gt;setEditText( deviceStr );
<a name="l02933"></a>02933   <span class="keywordflow">if</span> ( !deviceStr.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() ) {
<a name="l02934"></a>02934     <span class="comment">// Set default options for this device (first matching entry)</span>
<a name="l02935"></a>02935     <span class="keywordtype">int</span> index = m_devicelist.findIndex(deviceStr);
<a name="l02936"></a>02936     <span class="keywordflow">if</span> (index != -1)
<a name="l02937"></a>02937     {
<a name="l02938"></a>02938       <span class="comment">//kdDebug(250) &lt;&lt; &quot;found it &quot; &lt;&lt; index &lt;&lt; endl;</span>
<a name="l02939"></a>02939       slotActivated( index );
<a name="l02940"></a>02940     }
<a name="l02941"></a>02941   }
<a name="l02942"></a>02942 
<a name="l02943"></a>02943   <span class="keywordflow">if</span> ( !mountPointStr.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() )
<a name="l02944"></a>02944   {
<a name="l02945"></a>02945     mountpoint-&gt;setText( mountPointStr );
<a name="l02946"></a>02946     updateInfo();
<a name="l02947"></a>02947   }
<a name="l02948"></a>02948 
<a name="l02949"></a>02949   readonly-&gt;setChecked( ro );
<a name="l02950"></a>02950 
<a name="l02951"></a>02951   <span class="keywordflow">if</span> ( unmountedStr.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() )
<a name="l02952"></a>02952     unmountedStr = KMimeType::defaultMimeTypePtr()-&gt;KServiceType::icon(); <span class="comment">// default icon</span>
<a name="l02953"></a>02953 
<a name="l02954"></a>02954   unmounted-&gt;setIcon( unmountedStr );
<a name="l02955"></a>02955 
<a name="l02956"></a>02956   <a class="codeRef" href="qobject.html#connect">connect</a>( device, SIGNAL( activated( <span class="keywordtype">int</span> ) ),
<a name="l02957"></a>02957            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l02958"></a>02958   <a class="codeRef" href="qobject.html#connect">connect</a>( device, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l02959"></a>02959            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l02960"></a>02960   <a class="codeRef" href="qobject.html#connect">connect</a>( readonly, SIGNAL( toggled( <span class="keywordtype">bool</span> ) ),
<a name="l02961"></a>02961            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l02962"></a>02962   <a class="codeRef" href="qobject.html#connect">connect</a>( unmounted, SIGNAL( iconChanged( <a class="codeRef" href="qstring.html">QString</a> ) ),
<a name="l02963"></a>02963            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l02964"></a>02964 
<a name="l02965"></a>02965   <a class="codeRef" href="qobject.html#connect">connect</a>( device, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l02966"></a>02966            <span class="keyword">this</span>, SLOT( slotDeviceChanged() ) );
<a name="l02967"></a>02967 }
<a name="l02968"></a>02968 
<a name="l02969"></a>02969 KDevicePropsPlugin::~KDevicePropsPlugin()
<a name="l02970"></a>02970 {
<a name="l02971"></a>02971   <span class="keyword">delete</span> d;
<a name="l02972"></a>02972 }
<a name="l02973"></a>02973 
<a name="l02974"></a>02974 <span class="comment">// QString KDevicePropsPlugin::tabName () const</span>
<a name="l02975"></a>02975 <span class="comment">// {</span>
<a name="l02976"></a>02976 <span class="comment">//   return i18n (&quot;De&amp;vice&quot;);</span>
<a name="l02977"></a>02977 <span class="comment">// }</span>
<a name="l02978"></a>02978 
<a name="l02979"></a>02979 <span class="keywordtype">void</span> KDevicePropsPlugin::updateInfo()
<a name="l02980"></a>02980 {
<a name="l02981"></a>02981   <span class="comment">// we show it in the slot when we know the values</span>
<a name="l02982"></a>02982   d-&gt;m_freeSpaceText-&gt;hide();
<a name="l02983"></a>02983   d-&gt;m_freeSpaceLabel-&gt;hide();
<a name="l02984"></a>02984   d-&gt;m_freeSpaceBar-&gt;hide();
<a name="l02985"></a>02985 
<a name="l02986"></a>02986   <span class="keywordflow">if</span> ( !mountpoint-&gt;<a class="codeRef" href="qlabel.html#text">text</a>().isEmpty() )
<a name="l02987"></a>02987   {
<a name="l02988"></a>02988     <a class="code" href="classKDiskFreeSp.html" title="This class parses the output of &quot;df&quot; to find the disk usage information for a given partition (mount ...">KDiskFreeSp</a> * job = <span class="keyword">new</span> <a class="code" href="classKDiskFreeSp.html" title="This class parses the output of &quot;df&quot; to find the disk usage information for a given partition (mount ...">KDiskFreeSp</a>;
<a name="l02989"></a>02989     <a class="codeRef" href="qobject.html#connect">connect</a>( job, SIGNAL( foundMountPoint( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;,
<a name="l02990"></a>02990                                            <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;, <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; ) ),
<a name="l02991"></a>02991              <span class="keyword">this</span>, SLOT( slotFoundMountPoint( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;,
<a name="l02992"></a>02992                                               <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp;, <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; ) ) );
<a name="l02993"></a>02993 
<a name="l02994"></a>02994     job-&gt;<a class="code" href="classKDiskFreeSp.html#a42e93d7340696d23f2c2e3bd47275e24" title="Call this to fire a search on the disk usage information for mountPoint.">readDF</a>( mountpoint-&gt;<a class="codeRef" href="qlabel.html#text">text</a>() );
<a name="l02995"></a>02995   }
<a name="l02996"></a>02996 }
<a name="l02997"></a>02997 
<a name="l02998"></a>02998 <span class="keywordtype">void</span> KDevicePropsPlugin::slotActivated( <span class="keywordtype">int</span> index )
<a name="l02999"></a>02999 {
<a name="l03000"></a>03000   <span class="comment">// Update mountpoint so that it matches the device that was selected in the combo</span>
<a name="l03001"></a>03001   device-&gt;setEditText( m_devicelist[index] );
<a name="l03002"></a>03002   mountpoint-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( d-&gt;mountpointlist[index] );
<a name="l03003"></a>03003 
<a name="l03004"></a>03004   updateInfo();
<a name="l03005"></a>03005 }
<a name="l03006"></a>03006 
<a name="l03007"></a>03007 <span class="keywordtype">void</span> KDevicePropsPlugin::slotDeviceChanged()
<a name="l03008"></a>03008 {
<a name="l03009"></a>03009   <span class="comment">// Update mountpoint so that it matches the typed device</span>
<a name="l03010"></a>03010   <span class="keywordtype">int</span> index = m_devicelist.findIndex( device-&gt;currentText() );
<a name="l03011"></a>03011   <span class="keywordflow">if</span> ( index != -1 )
<a name="l03012"></a>03012     mountpoint-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( d-&gt;mountpointlist[index] );
<a name="l03013"></a>03013   <span class="keywordflow">else</span>
<a name="l03014"></a>03014     mountpoint-&gt;<a class="codeRef" href="qlabel.html#setText">setText</a>( QString::null );
<a name="l03015"></a>03015 
<a name="l03016"></a>03016   updateInfo();
<a name="l03017"></a>03017 }
<a name="l03018"></a>03018 
<a name="l03019"></a>03019 <span class="keywordtype">void</span> KDevicePropsPlugin::slotFoundMountPoint( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; kBSize,
<a name="l03020"></a>03020                                               <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; <span class="comment">/*kBUsed*/</span>,
<a name="l03021"></a>03021                                               <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>&amp; kBAvail,
<a name="l03022"></a>03022                                               <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; )
<a name="l03023"></a>03023 {
<a name="l03024"></a>03024   d-&gt;m_freeSpaceText-&gt;show();
<a name="l03025"></a>03025   d-&gt;m_freeSpaceLabel-&gt;show();
<a name="l03026"></a>03026 
<a name="l03027"></a>03027   <span class="keywordtype">int</span> percUsed = 100 - (int)(100.0 * kBAvail / kBSize);
<a name="l03028"></a>03028 
<a name="l03029"></a>03029   d-&gt;m_freeSpaceLabel-&gt;setText(
<a name="l03030"></a>03030       <span class="comment">// xgettext:no-c-format  --  Don&#39;t warn about translating the %1 out of %2 part.</span>
<a name="l03031"></a>03031       i18n(<span class="stringliteral">&quot;Available space out of total partition size (percent used)&quot;</span>, <span class="stringliteral">&quot;%1 out of %2 (%3% used)&quot;</span>)
<a name="l03032"></a>03032       .arg(KIO::convertSizeFromKB(kBAvail))
<a name="l03033"></a>03033       .arg(KIO::convertSizeFromKB(kBSize))
<a name="l03034"></a>03034       .arg( 100 - (<span class="keywordtype">int</span>)(100.0 * kBAvail / kBSize) ));
<a name="l03035"></a>03035 
<a name="l03036"></a>03036   d-&gt;m_freeSpaceBar-&gt;setProgress(percUsed, 100);
<a name="l03037"></a>03037   d-&gt;m_freeSpaceBar-&gt;show();
<a name="l03038"></a>03038 }
<a name="l03039"></a>03039 
<a name="l03040"></a>03040 <span class="keywordtype">bool</span> KDevicePropsPlugin::supports( KFileItemList _items )
<a name="l03041"></a>03041 {
<a name="l03042"></a>03042   <span class="keywordflow">if</span> ( _items.count() != 1 )
<a name="l03043"></a>03043     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l03044"></a>03044   KFileItem * item = _items.first();
<a name="l03045"></a>03045   <span class="comment">// check if desktop file</span>
<a name="l03046"></a>03046   <span class="keywordflow">if</span> ( !<a class="code" href="classKPropsDlgPlugin.html#ad29f1d332d93035d3ae2278ba25b2803" title="Convenience method for most ::supports methods.">KPropsDlgPlugin::isDesktopFile</a>( item ) )
<a name="l03047"></a>03047     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l03048"></a>03048   <span class="comment">// open file and check type</span>
<a name="l03049"></a>03049   KDesktopFile config( item-&gt;url().path(), <span class="keyword">true</span> <span class="comment">/* readonly */</span> );
<a name="l03050"></a>03050   <span class="keywordflow">return</span> config.hasDeviceType();
<a name="l03051"></a>03051 }
<a name="l03052"></a>03052 
<a name="l03053"></a><a class="code" href="classKDevicePropsPlugin.html#ac51e5e04bf196ca0ca6d1800013ef49d">03053</a> <span class="keywordtype">void</span> <a class="code" href="classKDevicePropsPlugin.html#ac51e5e04bf196ca0ca6d1800013ef49d" title="Applies all changes to the file.">KDevicePropsPlugin::applyChanges</a>()
<a name="l03054"></a>03054 {
<a name="l03055"></a>03055   <a class="codeRef" href="qstring.html">QString</a> path = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path();
<a name="l03056"></a>03056   <a class="codeRef" href="qfile.html">QFile</a> f( path );
<a name="l03057"></a>03057   <span class="keywordflow">if</span> ( !f.<a class="codeRef" href="qfile.html#open">open</a>( IO_ReadWrite ) )
<a name="l03058"></a>03058   {
<a name="l03059"></a>03059     KMessageBox::sorry( 0, i18n(<span class="stringliteral">&quot;&lt;qt&gt;Could not save properties. You do not have sufficient &quot;</span>
<a name="l03060"></a>03060                 <span class="stringliteral">&quot;access to write to &lt;b&gt;%1&lt;/b&gt;.&lt;/qt&gt;&quot;</span>).arg(path));
<a name="l03061"></a>03061     <span class="keywordflow">return</span>;
<a name="l03062"></a>03062   }
<a name="l03063"></a>03063   f.<a class="codeRef" href="qfile.html#close">close</a>();
<a name="l03064"></a>03064 
<a name="l03065"></a>03065   KSimpleConfig config( path );
<a name="l03066"></a>03066   config.setDesktopGroup();
<a name="l03067"></a>03067   config.writeEntry( <span class="stringliteral">&quot;Type&quot;</span>, <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;FSDevice&quot;</span>) );
<a name="l03068"></a>03068 
<a name="l03069"></a>03069   config.writeEntry( <span class="stringliteral">&quot;Dev&quot;</span>, device-&gt;currentText() );
<a name="l03070"></a>03070   config.writeEntry( <span class="stringliteral">&quot;MountPoint&quot;</span>, mountpoint-&gt;<a class="codeRef" href="qlabel.html#text">text</a>() );
<a name="l03071"></a>03071 
<a name="l03072"></a>03072   config.writeEntry( <span class="stringliteral">&quot;UnmountIcon&quot;</span>, unmounted-&gt;icon() );
<a name="l03073"></a>03073   kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;unmounted-&gt;icon() = &quot;</span> &lt;&lt; unmounted-&gt;icon() &lt;&lt; endl;
<a name="l03074"></a>03074 
<a name="l03075"></a>03075   config.writeEntry( <span class="stringliteral">&quot;ReadOnly&quot;</span>, readonly-&gt;<a class="codeRef" href="qcheckbox.html#isChecked">isChecked</a>() );
<a name="l03076"></a>03076 
<a name="l03077"></a>03077   config.sync();
<a name="l03078"></a>03078 }
<a name="l03079"></a>03079 
<a name="l03080"></a>03080 
<a name="l03081"></a>03081 <span class="comment">/* ----------------------------------------------------</span>
<a name="l03082"></a>03082 <span class="comment"> *</span>
<a name="l03083"></a>03083 <span class="comment"> * KDesktopPropsPlugin</span>
<a name="l03084"></a>03084 <span class="comment"> *</span>
<a name="l03085"></a>03085 <span class="comment"> * -------------------------------------------------- */</span>
<a name="l03086"></a>03086 
<a name="l03087"></a>03087 
<a name="l03088"></a><a class="code" href="classKDesktopPropsPlugin.html#aa94b4770a4c287be98b753228bb70652">03088</a> <a class="code" href="classKDesktopPropsPlugin.html#aa94b4770a4c287be98b753228bb70652" title="Constructor.">KDesktopPropsPlugin::KDesktopPropsPlugin</a>( <a class="code" href="classKPropertiesDialog.html" title="The main properties dialog class.">KPropertiesDialog</a> *_props )
<a name="l03089"></a>03089   : <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a>( _props )
<a name="l03090"></a>03090 {
<a name="l03091"></a>03091   <a class="codeRef" href="qframe.html">QFrame</a> *frame = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;addPage(i18n(<span class="stringliteral">&quot;&amp;Application&quot;</span>));
<a name="l03092"></a>03092   <a class="codeRef" href="qvboxlayout.html">QVBoxLayout</a> *mainlayout = <span class="keyword">new</span> <a class="codeRef" href="qvboxlayout.html">QVBoxLayout</a>( frame, 0, KDialog::spacingHint() );
<a name="l03093"></a>03093 
<a name="l03094"></a>03094   w = <span class="keyword">new</span> KPropertiesDesktopBase(frame);
<a name="l03095"></a>03095   mainlayout-&gt;addWidget(w);
<a name="l03096"></a>03096 
<a name="l03097"></a>03097   <span class="keywordtype">bool</span> bKDesktopMode = (<a class="codeRef" href="qcstring.html">QCString</a>(qApp-&gt;name()) == <span class="stringliteral">&quot;kdesktop&quot;</span>); <span class="comment">// nasty heh?</span>
<a name="l03098"></a>03098 
<a name="l03099"></a>03099   <span class="keywordflow">if</span> (bKDesktopMode)
<a name="l03100"></a>03100   {
<a name="l03101"></a>03101     <span class="comment">// Hide Name entry</span>
<a name="l03102"></a>03102     w-&gt;nameEdit-&gt;hide();
<a name="l03103"></a>03103     w-&gt;nameLabel-&gt;hide();
<a name="l03104"></a>03104   }
<a name="l03105"></a>03105 
<a name="l03106"></a>03106   w-&gt;pathEdit-&gt;setMode(KFile::Directory | KFile::LocalOnly);
<a name="l03107"></a>03107   w-&gt;pathEdit-&gt;lineEdit()-&gt;setAcceptDrops(<span class="keyword">false</span>);
<a name="l03108"></a>03108 
<a name="l03109"></a>03109   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;nameEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ), <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03110"></a>03110   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;genNameEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ), <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03111"></a>03111   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;commentEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ), <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03112"></a>03112   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;commandEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ), <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03113"></a>03113   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;pathEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ), <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03114"></a>03114 
<a name="l03115"></a>03115   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;browseButton, SIGNAL( clicked() ), <span class="keyword">this</span>, SLOT( slotBrowseExec() ) );
<a name="l03116"></a>03116   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;addFiletypeButton, SIGNAL( clicked() ), <span class="keyword">this</span>, SLOT( slotAddFiletype() ) );
<a name="l03117"></a>03117   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;delFiletypeButton, SIGNAL( clicked() ), <span class="keyword">this</span>, SLOT( slotDelFiletype() ) );
<a name="l03118"></a>03118   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;advancedButton, SIGNAL( clicked() ), <span class="keyword">this</span>, SLOT( slotAdvanced() ) );
<a name="l03119"></a>03119 
<a name="l03120"></a>03120   <span class="comment">// now populate the page</span>
<a name="l03121"></a>03121   <a class="codeRef" href="qstring.html">QString</a> path = _props-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path();
<a name="l03122"></a>03122   <a class="codeRef" href="qfile.html">QFile</a> f( path );
<a name="l03123"></a>03123   <span class="keywordflow">if</span> ( !f.<a class="codeRef" href="qfile.html#open">open</a>( IO_ReadOnly ) )
<a name="l03124"></a>03124     <span class="keywordflow">return</span>;
<a name="l03125"></a>03125   f.<a class="codeRef" href="qfile.html#close">close</a>();
<a name="l03126"></a>03126 
<a name="l03127"></a>03127   KDesktopFile  config( path );
<a name="l03128"></a>03128   <a class="codeRef" href="qstring.html">QString</a> nameStr = config.readName();
<a name="l03129"></a>03129   <a class="codeRef" href="qstring.html">QString</a> genNameStr = config.readGenericName();
<a name="l03130"></a>03130   <a class="codeRef" href="qstring.html">QString</a> commentStr = config.readComment();
<a name="l03131"></a>03131   <a class="codeRef" href="qstring.html">QString</a> commandStr = config.readPathEntry( <span class="stringliteral">&quot;Exec&quot;</span> );
<a name="l03132"></a>03132   <span class="keywordflow">if</span> (commandStr.<a class="codeRef" href="qstring.html#left">left</a>(12) == <span class="stringliteral">&quot;ksystraycmd &quot;</span>)
<a name="l03133"></a>03133   {
<a name="l03134"></a>03134     commandStr.<a class="codeRef" href="qstring.html#remove">remove</a>(0, 12);
<a name="l03135"></a>03135     m_systrayBool = <span class="keyword">true</span>;
<a name="l03136"></a>03136   }
<a name="l03137"></a>03137   <span class="keywordflow">else</span>
<a name="l03138"></a>03138     m_systrayBool = <span class="keyword">false</span>;
<a name="l03139"></a>03139 
<a name="l03140"></a>03140   m_origCommandStr = commandStr;
<a name="l03141"></a>03141   <a class="codeRef" href="qstring.html">QString</a> pathStr = config.readPathEntry( <span class="stringliteral">&quot;Path&quot;</span> );
<a name="l03142"></a>03142   m_terminalBool = config.readBoolEntry( <span class="stringliteral">&quot;Terminal&quot;</span> );
<a name="l03143"></a>03143   m_terminalOptionStr = config.readEntry( <span class="stringliteral">&quot;TerminalOptions&quot;</span> );
<a name="l03144"></a>03144   m_suidBool = config.readBoolEntry( <span class="stringliteral">&quot;X-KDE-SubstituteUID&quot;</span> );
<a name="l03145"></a>03145   m_suidUserStr = config.readEntry( <span class="stringliteral">&quot;X-KDE-Username&quot;</span> );
<a name="l03146"></a>03146   <span class="keywordflow">if</span>( config.hasKey( <span class="stringliteral">&quot;StartupNotify&quot;</span> ))
<a name="l03147"></a>03147     m_startupBool = config.readBoolEntry( <span class="stringliteral">&quot;StartupNotify&quot;</span>, <span class="keyword">true</span> );
<a name="l03148"></a>03148   <span class="keywordflow">else</span>
<a name="l03149"></a>03149     m_startupBool = config.readBoolEntry( <span class="stringliteral">&quot;X-KDE-StartupNotify&quot;</span>, <span class="keyword">true</span> );
<a name="l03150"></a>03150   m_dcopServiceType = config.readEntry(<span class="stringliteral">&quot;X-DCOP-ServiceType&quot;</span>).<a class="codeRef" href="qstring.html#lower">lower</a>();
<a name="l03151"></a>03151 
<a name="l03152"></a>03152   <a class="codeRef" href="qstringlist.html">QStringList</a> mimeTypes = config.readListEntry( <span class="stringliteral">&quot;MimeType&quot;</span>, <span class="charliteral">&#39;;&#39;</span> );
<a name="l03153"></a>03153 
<a name="l03154"></a>03154   <span class="keywordflow">if</span> ( nameStr.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() || bKDesktopMode ) {
<a name="l03155"></a>03155     <span class="comment">// We&#39;ll use the file name if no name is specified</span>
<a name="l03156"></a>03156     <span class="comment">// because we _need_ a Name for a valid file.</span>
<a name="l03157"></a>03157     <span class="comment">// But let&#39;s do it in apply, not here, so that we pick up the right name.</span>
<a name="l03158"></a>03158     setDirty();
<a name="l03159"></a>03159   }
<a name="l03160"></a>03160   <span class="keywordflow">if</span> ( !bKDesktopMode )
<a name="l03161"></a>03161     w-&gt;nameEdit-&gt;setText(nameStr);
<a name="l03162"></a>03162 
<a name="l03163"></a>03163   w-&gt;genNameEdit-&gt;setText( genNameStr );
<a name="l03164"></a>03164   w-&gt;commentEdit-&gt;setText( commentStr );
<a name="l03165"></a>03165   w-&gt;commandEdit-&gt;setText( commandStr );
<a name="l03166"></a>03166   w-&gt;pathEdit-&gt;lineEdit()-&gt;setText( pathStr );
<a name="l03167"></a>03167   w-&gt;filetypeList-&gt;setAllColumnsShowFocus(<span class="keyword">true</span>);
<a name="l03168"></a>03168 
<a name="l03169"></a>03169   KMimeType::Ptr defaultMimetype = KMimeType::defaultMimeTypePtr();
<a name="l03170"></a>03170   <span class="keywordflow">for</span>(QStringList::ConstIterator it = mimeTypes.begin();
<a name="l03171"></a>03171       it != mimeTypes.end(); )
<a name="l03172"></a>03172   {
<a name="l03173"></a>03173     KMimeType::Ptr p = KMimeType::mimeType(*it);
<a name="l03174"></a>03174     ++it;
<a name="l03175"></a>03175     <a class="codeRef" href="qstring.html">QString</a> preference;
<a name="l03176"></a>03176     <span class="keywordflow">if</span> (it != mimeTypes.end())
<a name="l03177"></a>03177     {
<a name="l03178"></a>03178        <span class="keywordtype">bool</span> numeric;
<a name="l03179"></a>03179        (*it).<a class="codeRef" href="qstring.html#toInt">toInt</a>(&amp;numeric);
<a name="l03180"></a>03180        <span class="keywordflow">if</span> (numeric)
<a name="l03181"></a>03181        {
<a name="l03182"></a>03182          preference = *it;
<a name="l03183"></a>03183          ++it;
<a name="l03184"></a>03184        }
<a name="l03185"></a>03185     }
<a name="l03186"></a>03186     <span class="keywordflow">if</span> (p &amp;&amp; (p != defaultMimetype))
<a name="l03187"></a>03187     {
<a name="l03188"></a>03188        <span class="keyword">new</span> <a class="codeRef" href="qlistviewitem.html">QListViewItem</a>(w-&gt;filetypeList, p-&gt;name(), p-&gt;comment(), preference);
<a name="l03189"></a>03189     }
<a name="l03190"></a>03190   }
<a name="l03191"></a>03191 
<a name="l03192"></a>03192 }
<a name="l03193"></a>03193 
<a name="l03194"></a>03194 KDesktopPropsPlugin::~KDesktopPropsPlugin()
<a name="l03195"></a>03195 {
<a name="l03196"></a>03196 }
<a name="l03197"></a>03197 
<a name="l03198"></a>03198 <span class="keywordtype">void</span> KDesktopPropsPlugin::slotSelectMimetype()
<a name="l03199"></a>03199 {
<a name="l03200"></a>03200   <a class="codeRef" href="qlistview.html">QListView</a> *w = (<a class="codeRef" href="qlistview.html">QListView</a>*)<a class="codeRef" href="qobject.html#sender">sender</a>();
<a name="l03201"></a>03201   <a class="codeRef" href="qlistviewitem.html">QListViewItem</a> *item = w-&gt;<a class="codeRef" href="qlistview.html#firstChild">firstChild</a>();
<a name="l03202"></a>03202   <span class="keywordflow">while</span>(item)
<a name="l03203"></a>03203   {
<a name="l03204"></a>03204      <span class="keywordflow">if</span> (item-&gt;<a class="codeRef" href="qlistviewitem.html#isSelected">isSelected</a>())
<a name="l03205"></a>03205         w-&gt;<a class="codeRef" href="qlistview.html#setSelected">setSelected</a>(item, <span class="keyword">false</span>);
<a name="l03206"></a>03206      item = item-&gt;<a class="codeRef" href="qlistviewitem.html#nextSibling">nextSibling</a>();
<a name="l03207"></a>03207   }
<a name="l03208"></a>03208 }
<a name="l03209"></a>03209 
<a name="l03210"></a>03210 <span class="keywordtype">void</span> KDesktopPropsPlugin::slotAddFiletype()
<a name="l03211"></a>03211 {
<a name="l03212"></a>03212   KDialogBase dlg(w, <span class="stringliteral">&quot;KPropertiesMimetypes&quot;</span>, <span class="keyword">true</span>,
<a name="l03213"></a>03213                   i18n(<span class="stringliteral">&quot;Add File Type for %1&quot;</span>).arg(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().fileName()),
<a name="l03214"></a>03214                   KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok);
<a name="l03215"></a>03215 
<a name="l03216"></a>03216   KGuiItem okItem(i18n(<span class="stringliteral">&quot;&amp;Add&quot;</span>), QString::null <span class="comment">/* no icon */</span>,
<a name="l03217"></a>03217                   i18n(<span class="stringliteral">&quot;Add the selected file types to\nthe list of supported file types.&quot;</span>),
<a name="l03218"></a>03218                   i18n(<span class="stringliteral">&quot;Add the selected file types to\nthe list of supported file types.&quot;</span>));
<a name="l03219"></a>03219   dlg.setButtonOK(okItem);
<a name="l03220"></a>03220 
<a name="l03221"></a>03221   KPropertiesMimetypeBase *mw = <span class="keyword">new</span> KPropertiesMimetypeBase(&amp;dlg);
<a name="l03222"></a>03222 
<a name="l03223"></a>03223   dlg.setMainWidget(mw);
<a name="l03224"></a>03224 
<a name="l03225"></a>03225   {
<a name="l03226"></a>03226      mw-&gt;listView-&gt;setRootIsDecorated(<span class="keyword">true</span>);
<a name="l03227"></a>03227      mw-&gt;listView-&gt;setSelectionMode(QListView::Extended);
<a name="l03228"></a>03228      mw-&gt;listView-&gt;setAllColumnsShowFocus(<span class="keyword">true</span>);
<a name="l03229"></a>03229      mw-&gt;listView-&gt;setFullWidth(<span class="keyword">true</span>);
<a name="l03230"></a>03230      mw-&gt;listView-&gt;setMinimumSize(500,400);
<a name="l03231"></a>03231 
<a name="l03232"></a>03232      <a class="codeRef" href="qobject.html#connect">connect</a>(mw-&gt;listView, SIGNAL(selectionChanged()),
<a name="l03233"></a>03233              <span class="keyword">this</span>, SLOT(slotSelectMimetype()));
<a name="l03234"></a>03234      <a class="codeRef" href="qobject.html#connect">connect</a>(mw-&gt;listView, SIGNAL(doubleClicked( <a class="codeRef" href="qlistviewitem.html">QListViewItem</a> *, <span class="keyword">const</span> <a class="codeRef" href="qpoint.html">QPoint</a> &amp;, <span class="keywordtype">int</span> )),
<a name="l03235"></a>03235              &amp;dlg, SLOT( slotOk()));
<a name="l03236"></a>03236 
<a name="l03237"></a>03237      <a class="codeRef" href="qmap.html">QMap&lt;QString,QListViewItem*&gt;</a> majorMap;
<a name="l03238"></a>03238      <a class="codeRef" href="qlistviewitem.html">QListViewItem</a> *majorGroup;
<a name="l03239"></a>03239      KMimeType::List mimetypes = KMimeType::allMimeTypes();
<a name="l03240"></a>03240      <a class="codeRef" href="qvaluelistiterator.html">QValueListIterator&lt;KMimeType::Ptr&gt;</a> it(mimetypes.begin());
<a name="l03241"></a>03241      <span class="keywordflow">for</span> (; it != mimetypes.end(); ++it) {
<a name="l03242"></a>03242         <a class="codeRef" href="qstring.html">QString</a> mimetype = (*it)-&gt;name();
<a name="l03243"></a>03243         <span class="keywordflow">if</span> (mimetype == KMimeType::defaultMimeType())
<a name="l03244"></a>03244            <span class="keywordflow">continue</span>;
<a name="l03245"></a>03245         <span class="keywordtype">int</span> index = mimetype.<a class="codeRef" href="qstring.html#find">find</a>(<span class="stringliteral">&quot;/&quot;</span>);
<a name="l03246"></a>03246         <a class="codeRef" href="qstring.html">QString</a> maj = mimetype.<a class="codeRef" href="qstring.html#left">left</a>(index);
<a name="l03247"></a>03247         <a class="codeRef" href="qstring.html">QString</a> min = mimetype.<a class="codeRef" href="qstring.html#mid">mid</a>(index+1);
<a name="l03248"></a>03248 
<a name="l03249"></a>03249         <a class="codeRef" href="qmapiterator.html">QMapIterator&lt;QString,QListViewItem*&gt;</a> mit = majorMap.<a class="codeRef" href="qmap.html#find">find</a>( maj );
<a name="l03250"></a>03250         <span class="keywordflow">if</span> ( mit == majorMap.<a class="codeRef" href="qmap.html#end">end</a>() ) {
<a name="l03251"></a>03251            majorGroup = <span class="keyword">new</span> <a class="codeRef" href="qlistviewitem.html">QListViewItem</a>( mw-&gt;listView, maj );
<a name="l03252"></a>03252            majorGroup-&gt;<a class="codeRef" href="qlistviewitem.html#setExpandable">setExpandable</a>(<span class="keyword">true</span>);
<a name="l03253"></a>03253            mw-&gt;listView-&gt;setOpen(majorGroup, <span class="keyword">true</span>);
<a name="l03254"></a>03254            majorMap.<a class="codeRef" href="qmap.html#insert">insert</a>( maj, majorGroup );
<a name="l03255"></a>03255         }
<a name="l03256"></a>03256         <span class="keywordflow">else</span>
<a name="l03257"></a>03257         {
<a name="l03258"></a>03258            majorGroup = mit.<a class="codeRef" href="qmapiterator.html#data">data</a>();
<a name="l03259"></a>03259         }
<a name="l03260"></a>03260 
<a name="l03261"></a>03261         <a class="codeRef" href="qlistviewitem.html">QListViewItem</a> *item = <span class="keyword">new</span> <a class="codeRef" href="qlistviewitem.html">QListViewItem</a>(majorGroup, min, (*it)-&gt;comment());
<a name="l03262"></a>03262         item-&gt;<a class="codeRef" href="qlistviewitem.html#setPixmap">setPixmap</a>(0, (*it)-&gt;pixmap(KIcon::Small, IconSize(KIcon::Small)));
<a name="l03263"></a>03263      }
<a name="l03264"></a>03264      <a class="codeRef" href="qmapiterator.html">QMapIterator&lt;QString,QListViewItem*&gt;</a> mit = majorMap.<a class="codeRef" href="qmap.html#find">find</a>( <span class="stringliteral">&quot;all&quot;</span> );
<a name="l03265"></a>03265      <span class="keywordflow">if</span> ( mit != majorMap.<a class="codeRef" href="qmap.html#end">end</a>())
<a name="l03266"></a>03266      {
<a name="l03267"></a>03267         mw-&gt;listView-&gt;setCurrentItem(mit.<a class="codeRef" href="qmapiterator.html#data">data</a>());
<a name="l03268"></a>03268         mw-&gt;listView-&gt;ensureItemVisible(mit.<a class="codeRef" href="qmapiterator.html#data">data</a>());
<a name="l03269"></a>03269      }
<a name="l03270"></a>03270   }
<a name="l03271"></a>03271 
<a name="l03272"></a>03272   <span class="keywordflow">if</span> (dlg.exec() == KDialogBase::Accepted)
<a name="l03273"></a>03273   {
<a name="l03274"></a>03274      KMimeType::Ptr defaultMimetype = KMimeType::defaultMimeTypePtr();
<a name="l03275"></a>03275      <a class="codeRef" href="qlistviewitem.html">QListViewItem</a> *majorItem = mw-&gt;<a class="codeRef" href="qlistviewitem.html#listView">listView</a>-&gt;firstChild();
<a name="l03276"></a>03276      <span class="keywordflow">while</span>(majorItem)
<a name="l03277"></a>03277      {
<a name="l03278"></a>03278         <a class="codeRef" href="qstring.html">QString</a> major = majorItem-&gt;<a class="codeRef" href="qlistviewitem.html#text">text</a>(0);
<a name="l03279"></a>03279 
<a name="l03280"></a>03280         <a class="codeRef" href="qlistviewitem.html">QListViewItem</a> *minorItem = majorItem-&gt;<a class="codeRef" href="qlistviewitem.html#firstChild">firstChild</a>();
<a name="l03281"></a>03281         <span class="keywordflow">while</span>(minorItem)
<a name="l03282"></a>03282         {
<a name="l03283"></a>03283            <span class="keywordflow">if</span> (minorItem-&gt;<a class="codeRef" href="qlistviewitem.html#isSelected">isSelected</a>())
<a name="l03284"></a>03284            {
<a name="l03285"></a>03285               <a class="codeRef" href="qstring.html">QString</a> mimetype = major + <span class="stringliteral">&quot;/&quot;</span> + minorItem-&gt;<a class="codeRef" href="qlistviewitem.html#text">text</a>(0);
<a name="l03286"></a>03286               KMimeType::Ptr p = KMimeType::mimeType(mimetype);
<a name="l03287"></a>03287               <span class="keywordflow">if</span> (p &amp;&amp; (p != defaultMimetype))
<a name="l03288"></a>03288               {
<a name="l03289"></a>03289                  mimetype = p-&gt;name();
<a name="l03290"></a>03290                  <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;
<a name="l03291"></a>03291                  <a class="codeRef" href="qlistviewitem.html">QListViewItem</a> *item = w-&gt;filetypeList-&gt;<a class="codeRef" href="qlistview.html#firstChild">firstChild</a>();
<a name="l03292"></a>03292                  <span class="keywordflow">while</span> (item)
<a name="l03293"></a>03293                  {
<a name="l03294"></a>03294                     <span class="keywordflow">if</span> (mimetype == item-&gt;<a class="codeRef" href="qlistviewitem.html#text">text</a>(0))
<a name="l03295"></a>03295                     {
<a name="l03296"></a>03296                        found = <span class="keyword">true</span>;
<a name="l03297"></a>03297                        <span class="keywordflow">break</span>;
<a name="l03298"></a>03298                     }
<a name="l03299"></a>03299                     item = item-&gt;<a class="codeRef" href="qlistviewitem.html#nextSibling">nextSibling</a>();
<a name="l03300"></a>03300                  }
<a name="l03301"></a>03301                  <span class="keywordflow">if</span> (!found) {
<a name="l03302"></a>03302                     <span class="keyword">new</span> <a class="codeRef" href="qlistviewitem.html">QListViewItem</a>(w-&gt;filetypeList, p-&gt;name(), p-&gt;comment());
<a name="l03303"></a>03303                     emit <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>();
<a name="l03304"></a>03304                  }
<a name="l03305"></a>03305               }
<a name="l03306"></a>03306            }
<a name="l03307"></a>03307            minorItem = minorItem-&gt;<a class="codeRef" href="qlistviewitem.html#nextSibling">nextSibling</a>();
<a name="l03308"></a>03308         }
<a name="l03309"></a>03309 
<a name="l03310"></a>03310         majorItem = majorItem-&gt;<a class="codeRef" href="qlistviewitem.html#nextSibling">nextSibling</a>();
<a name="l03311"></a>03311      }
<a name="l03312"></a>03312 
<a name="l03313"></a>03313   }
<a name="l03314"></a>03314 }
<a name="l03315"></a>03315 
<a name="l03316"></a>03316 <span class="keywordtype">void</span> KDesktopPropsPlugin::slotDelFiletype()
<a name="l03317"></a>03317 {
<a name="l03318"></a>03318   <span class="keyword">delete</span> w-&gt;filetypeList-&gt;<a class="codeRef" href="qlistview.html#currentItem">currentItem</a>();
<a name="l03319"></a>03319   emit <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>();
<a name="l03320"></a>03320 }
<a name="l03321"></a>03321 
<a name="l03322"></a>03322 <span class="keywordtype">void</span> KDesktopPropsPlugin::checkCommandChanged()
<a name="l03323"></a>03323 {
<a name="l03324"></a>03324   <span class="keywordflow">if</span> (KRun::binaryName(w-&gt;commandEdit-&gt;text(), <span class="keyword">true</span>) !=
<a name="l03325"></a>03325       KRun::binaryName(m_origCommandStr, <span class="keyword">true</span>))
<a name="l03326"></a>03326   {
<a name="l03327"></a>03327     <a class="codeRef" href="qstring.html">QString</a> m_origCommandStr = w-&gt;commandEdit-&gt;text();
<a name="l03328"></a>03328     m_dcopServiceType= QString::null; <span class="comment">// Reset</span>
<a name="l03329"></a>03329   }
<a name="l03330"></a>03330 }
<a name="l03331"></a>03331 
<a name="l03332"></a><a class="code" href="classKDesktopPropsPlugin.html#afaed9f23df081c957bd510fb72689a12">03332</a> <span class="keywordtype">void</span> <a class="code" href="classKDesktopPropsPlugin.html#afaed9f23df081c957bd510fb72689a12" title="Applies all changes to the file.">KDesktopPropsPlugin::applyChanges</a>()
<a name="l03333"></a>03333 {
<a name="l03334"></a>03334   kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;KDesktopPropsPlugin::applyChanges&quot;</span> &lt;&lt; endl;
<a name="l03335"></a>03335   <a class="codeRef" href="qstring.html">QString</a> path = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path();
<a name="l03336"></a>03336 
<a name="l03337"></a>03337   <a class="codeRef" href="qfile.html">QFile</a> f( path );
<a name="l03338"></a>03338 
<a name="l03339"></a>03339   <span class="keywordflow">if</span> ( !f.<a class="codeRef" href="qfile.html#open">open</a>( IO_ReadWrite ) ) {
<a name="l03340"></a>03340     KMessageBox::sorry( 0, i18n(<span class="stringliteral">&quot;&lt;qt&gt;Could not save properties. You do not have &quot;</span>
<a name="l03341"></a>03341                 <span class="stringliteral">&quot;sufficient access to write to &lt;b&gt;%1&lt;/b&gt;.&lt;/qt&gt;&quot;</span>).arg(path));
<a name="l03342"></a>03342     <span class="keywordflow">return</span>;
<a name="l03343"></a>03343   }
<a name="l03344"></a>03344   f.<a class="codeRef" href="qfile.html#close">close</a>();
<a name="l03345"></a>03345 
<a name="l03346"></a>03346   <span class="comment">// If the command is changed we reset certain settings that are strongly</span>
<a name="l03347"></a>03347   <span class="comment">// coupled to the command.</span>
<a name="l03348"></a>03348   checkCommandChanged();
<a name="l03349"></a>03349 
<a name="l03350"></a>03350   KSimpleConfig config( path );
<a name="l03351"></a>03351   config.setDesktopGroup();
<a name="l03352"></a>03352   config.writeEntry( <span class="stringliteral">&quot;Type&quot;</span>, <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;Application&quot;</span>));
<a name="l03353"></a>03353   config.writeEntry( <span class="stringliteral">&quot;Comment&quot;</span>, w-&gt;commentEdit-&gt;text() );
<a name="l03354"></a>03354   config.writeEntry( <span class="stringliteral">&quot;Comment&quot;</span>, w-&gt;commentEdit-&gt;text(), <span class="keyword">true</span>, <span class="keyword">false</span>, true ); <span class="comment">// for compat</span>
<a name="l03355"></a>03355   config.writeEntry( <span class="stringliteral">&quot;GenericName&quot;</span>, w-&gt;genNameEdit-&gt;text() );
<a name="l03356"></a>03356   config.writeEntry( <span class="stringliteral">&quot;GenericName&quot;</span>, w-&gt;genNameEdit-&gt;text(), <span class="keyword">true</span>, <span class="keyword">false</span>, true ); <span class="comment">// for compat</span>
<a name="l03357"></a>03357 
<a name="l03358"></a>03358   <span class="keywordflow">if</span> (m_systrayBool)
<a name="l03359"></a>03359     config.writePathEntry( <span class="stringliteral">&quot;Exec&quot;</span>, w-&gt;commandEdit-&gt;text().prepend(<span class="stringliteral">&quot;ksystraycmd &quot;</span>) );
<a name="l03360"></a>03360   <span class="keywordflow">else</span>
<a name="l03361"></a>03361     config.writePathEntry( <span class="stringliteral">&quot;Exec&quot;</span>, w-&gt;commandEdit-&gt;text() );
<a name="l03362"></a>03362   config.writePathEntry( <span class="stringliteral">&quot;Path&quot;</span>, w-&gt;pathEdit-&gt;lineEdit()-&gt;text() );
<a name="l03363"></a>03363 
<a name="l03364"></a>03364   <span class="comment">// Write mimeTypes</span>
<a name="l03365"></a>03365   <a class="codeRef" href="qstringlist.html">QStringList</a> mimeTypes;
<a name="l03366"></a>03366   <span class="keywordflow">for</span>( <a class="codeRef" href="qlistviewitem.html">QListViewItem</a> *item = w-&gt;filetypeList-&gt;<a class="codeRef" href="qlistview.html#firstChild">firstChild</a>();
<a name="l03367"></a>03367        item; item = item-&gt;<a class="codeRef" href="qlistviewitem.html#nextSibling">nextSibling</a>() )
<a name="l03368"></a>03368   {
<a name="l03369"></a>03369     <a class="codeRef" href="qstring.html">QString</a> preference = item-&gt;<a class="codeRef" href="qlistviewitem.html#text">text</a>(2);
<a name="l03370"></a>03370     mimeTypes.append(item-&gt;<a class="codeRef" href="qlistviewitem.html#text">text</a>(0));
<a name="l03371"></a>03371     <span class="keywordflow">if</span> (!preference.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>())
<a name="l03372"></a>03372        mimeTypes.append(preference);
<a name="l03373"></a>03373   }
<a name="l03374"></a>03374 
<a name="l03375"></a>03375   config.writeEntry( <span class="stringliteral">&quot;MimeType&quot;</span>, mimeTypes, <span class="charliteral">&#39;;&#39;</span> );
<a name="l03376"></a>03376 
<a name="l03377"></a>03377   <span class="keywordflow">if</span> ( !w-&gt;nameEdit-&gt;isHidden() ) {
<a name="l03378"></a>03378       <a class="codeRef" href="qstring.html">QString</a> nameStr = w-&gt;nameEdit-&gt;text();
<a name="l03379"></a>03379       config.writeEntry( <span class="stringliteral">&quot;Name&quot;</span>, nameStr );
<a name="l03380"></a>03380       config.writeEntry( <span class="stringliteral">&quot;Name&quot;</span>, nameStr, <span class="keyword">true</span>, <span class="keyword">false</span>, <span class="keyword">true</span> );
<a name="l03381"></a>03381   }
<a name="l03382"></a>03382 
<a name="l03383"></a>03383   config.writeEntry(<span class="stringliteral">&quot;Terminal&quot;</span>, m_terminalBool);
<a name="l03384"></a>03384   config.writeEntry(<span class="stringliteral">&quot;TerminalOptions&quot;</span>, m_terminalOptionStr);
<a name="l03385"></a>03385   config.writeEntry(<span class="stringliteral">&quot;X-KDE-SubstituteUID&quot;</span>, m_suidBool);
<a name="l03386"></a>03386   config.writeEntry(<span class="stringliteral">&quot;X-KDE-Username&quot;</span>, m_suidUserStr);
<a name="l03387"></a>03387   config.writeEntry(<span class="stringliteral">&quot;StartupNotify&quot;</span>, m_startupBool);
<a name="l03388"></a>03388   config.writeEntry(<span class="stringliteral">&quot;X-DCOP-ServiceType&quot;</span>, m_dcopServiceType);
<a name="l03389"></a>03389   config.sync();
<a name="l03390"></a>03390 
<a name="l03391"></a>03391   <span class="comment">// KSycoca update needed?</span>
<a name="l03392"></a>03392   <a class="codeRef" href="qstring.html">QString</a> sycocaPath = KGlobal::dirs()-&gt;relativeLocation(<span class="stringliteral">&quot;apps&quot;</span>, path);
<a name="l03393"></a>03393   <span class="keywordtype">bool</span> updateNeeded = !sycocaPath.<a class="codeRef" href="qstring.html#startsWith">startsWith</a>(<span class="stringliteral">&quot;/&quot;</span>);
<a name="l03394"></a>03394   <span class="keywordflow">if</span> (!updateNeeded)
<a name="l03395"></a>03395   {
<a name="l03396"></a>03396      sycocaPath = KGlobal::dirs()-&gt;relativeLocation(<span class="stringliteral">&quot;xdgdata-apps&quot;</span>, path);
<a name="l03397"></a>03397      updateNeeded = !sycocaPath.<a class="codeRef" href="qstring.html#startsWith">startsWith</a>(<span class="stringliteral">&quot;/&quot;</span>);
<a name="l03398"></a>03398   }
<a name="l03399"></a>03399   <span class="keywordflow">if</span> (updateNeeded)
<a name="l03400"></a>03400      KService::rebuildKSycoca(w);
<a name="l03401"></a>03401 }
<a name="l03402"></a>03402 
<a name="l03403"></a>03403 
<a name="l03404"></a>03404 <span class="keywordtype">void</span> KDesktopPropsPlugin::slotBrowseExec()
<a name="l03405"></a>03405 {
<a name="l03406"></a>03406   KURL f = <a class="code" href="classKFileDialog.html#a253d8042934dc81cf7636691e741fe95" title="Creates a modal file dialog and returns the selected URL or an empty string if none was chosen...">KFileDialog::getOpenURL</a>( QString::null,
<a name="l03407"></a>03407                                       QString::null, w );
<a name="l03408"></a>03408   <span class="keywordflow">if</span> ( f.isEmpty() )
<a name="l03409"></a>03409     <span class="keywordflow">return</span>;
<a name="l03410"></a>03410 
<a name="l03411"></a>03411   <span class="keywordflow">if</span> ( !f.isLocalFile()) {
<a name="l03412"></a>03412     KMessageBox::sorry(w, i18n(<span class="stringliteral">&quot;Only executables on local file systems are supported.&quot;</span>));
<a name="l03413"></a>03413     <span class="keywordflow">return</span>;
<a name="l03414"></a>03414   }
<a name="l03415"></a>03415 
<a name="l03416"></a>03416   <a class="codeRef" href="qstring.html">QString</a> path = f.path();
<a name="l03417"></a>03417   KRun::shellQuote( path );
<a name="l03418"></a>03418   w-&gt;commandEdit-&gt;setText( path );
<a name="l03419"></a>03419 }
<a name="l03420"></a>03420 
<a name="l03421"></a>03421 <span class="keywordtype">void</span> KDesktopPropsPlugin::slotAdvanced()
<a name="l03422"></a>03422 {
<a name="l03423"></a>03423   KDialogBase dlg(w, <span class="stringliteral">&quot;KPropertiesDesktopAdv&quot;</span>, <span class="keyword">true</span>,
<a name="l03424"></a>03424       i18n(<span class="stringliteral">&quot;Advanced Options for %1&quot;</span>).arg(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().fileName()),
<a name="l03425"></a>03425       KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok);
<a name="l03426"></a>03426   KPropertiesDesktopAdvBase *w = <span class="keyword">new</span> KPropertiesDesktopAdvBase(&amp;dlg);
<a name="l03427"></a>03427 
<a name="l03428"></a>03428   dlg.setMainWidget(w);
<a name="l03429"></a>03429 
<a name="l03430"></a>03430   <span class="comment">// If the command is changed we reset certain settings that are strongly</span>
<a name="l03431"></a>03431   <span class="comment">// coupled to the command.</span>
<a name="l03432"></a>03432   checkCommandChanged();
<a name="l03433"></a>03433 
<a name="l03434"></a>03434   <span class="comment">// check to see if we use konsole if not do not add the nocloseonexit</span>
<a name="l03435"></a>03435   <span class="comment">// because we don&#39;t know how to do this on other terminal applications</span>
<a name="l03436"></a>03436   KConfigGroup confGroup( KGlobal::config(), <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;General&quot;</span>) );
<a name="l03437"></a>03437   <a class="codeRef" href="qstring.html">QString</a> preferredTerminal = confGroup.readPathEntry(<span class="stringliteral">&quot;TerminalApplication&quot;</span>,
<a name="l03438"></a>03438                           <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;konsole&quot;</span>));
<a name="l03439"></a>03439 
<a name="l03440"></a>03440   <span class="keywordtype">bool</span> terminalCloseBool = <span class="keyword">false</span>;
<a name="l03441"></a>03441 
<a name="l03442"></a>03442   <span class="keywordflow">if</span> (preferredTerminal == <span class="stringliteral">&quot;konsole&quot;</span>)
<a name="l03443"></a>03443   {
<a name="l03444"></a>03444      terminalCloseBool = (m_terminalOptionStr.<a class="codeRef" href="qstring.html#contains">contains</a>( <span class="stringliteral">&quot;--noclose&quot;</span> ) &gt; 0);
<a name="l03445"></a>03445      w-&gt;terminalCloseCheck-&gt;setChecked(terminalCloseBool);
<a name="l03446"></a>03446      m_terminalOptionStr.<a class="codeRef" href="qstring.html#replace">replace</a>( <span class="stringliteral">&quot;--noclose&quot;</span>, <span class="stringliteral">&quot;&quot;</span>);
<a name="l03447"></a>03447   }
<a name="l03448"></a>03448   <span class="keywordflow">else</span>
<a name="l03449"></a>03449   {
<a name="l03450"></a>03450      w-&gt;terminalCloseCheck-&gt;hide();
<a name="l03451"></a>03451   }
<a name="l03452"></a>03452 
<a name="l03453"></a>03453   w-&gt;terminalCheck-&gt;setChecked(m_terminalBool);
<a name="l03454"></a>03454   w-&gt;terminalEdit-&gt;setText(m_terminalOptionStr);
<a name="l03455"></a>03455   w-&gt;terminalCloseCheck-&gt;setEnabled(m_terminalBool);
<a name="l03456"></a>03456   w-&gt;terminalEdit-&gt;setEnabled(m_terminalBool);
<a name="l03457"></a>03457   w-&gt;terminalEditLabel-&gt;setEnabled(m_terminalBool);
<a name="l03458"></a>03458 
<a name="l03459"></a>03459   w-&gt;suidCheck-&gt;setChecked(m_suidBool);
<a name="l03460"></a>03460   w-&gt;suidEdit-&gt;setText(m_suidUserStr);
<a name="l03461"></a>03461   w-&gt;suidEdit-&gt;setEnabled(m_suidBool);
<a name="l03462"></a>03462   w-&gt;suidEditLabel-&gt;setEnabled(m_suidBool);
<a name="l03463"></a>03463 
<a name="l03464"></a>03464   w-&gt;startupInfoCheck-&gt;setChecked(m_startupBool);
<a name="l03465"></a>03465   w-&gt;systrayCheck-&gt;setChecked(m_systrayBool);
<a name="l03466"></a>03466 
<a name="l03467"></a>03467   <span class="keywordflow">if</span> (m_dcopServiceType == <span class="stringliteral">&quot;unique&quot;</span>)
<a name="l03468"></a>03468     w-&gt;dcopCombo-&gt;setCurrentItem(2);
<a name="l03469"></a>03469   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_dcopServiceType == <span class="stringliteral">&quot;multi&quot;</span>)
<a name="l03470"></a>03470     w-&gt;dcopCombo-&gt;setCurrentItem(1);
<a name="l03471"></a>03471   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_dcopServiceType == <span class="stringliteral">&quot;wait&quot;</span>)
<a name="l03472"></a>03472     w-&gt;dcopCombo-&gt;setCurrentItem(3);
<a name="l03473"></a>03473   <span class="keywordflow">else</span>
<a name="l03474"></a>03474     w-&gt;dcopCombo-&gt;setCurrentItem(0);
<a name="l03475"></a>03475 
<a name="l03476"></a>03476   <span class="comment">// Provide username completion up to 1000 users.</span>
<a name="l03477"></a>03477   KCompletion *kcom = <span class="keyword">new</span> KCompletion;
<a name="l03478"></a>03478   kcom-&gt;setOrder(KCompletion::Sorted);
<a name="l03479"></a>03479   <span class="keyword">struct </span>passwd *pw;
<a name="l03480"></a>03480   <span class="keywordtype">int</span> i, maxEntries = 1000;
<a name="l03481"></a>03481   setpwent();
<a name="l03482"></a>03482   <span class="keywordflow">for</span> (i=0; ((pw = getpwent()) != 0L) &amp;&amp; (i &lt; maxEntries); i++)
<a name="l03483"></a>03483     kcom-&gt;addItem(<a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(pw-&gt;pw_name));
<a name="l03484"></a>03484   endpwent();
<a name="l03485"></a>03485   <span class="keywordflow">if</span> (i &lt; maxEntries)
<a name="l03486"></a>03486   {
<a name="l03487"></a>03487     w-&gt;suidEdit-&gt;setCompletionObject(kcom, <span class="keyword">true</span>);
<a name="l03488"></a>03488     w-&gt;suidEdit-&gt;setAutoDeleteCompletionObject( <span class="keyword">true</span> );
<a name="l03489"></a>03489     w-&gt;suidEdit-&gt;setCompletionMode(KGlobalSettings::CompletionAuto);
<a name="l03490"></a>03490   }
<a name="l03491"></a>03491   <span class="keywordflow">else</span>
<a name="l03492"></a>03492   {
<a name="l03493"></a>03493     <span class="keyword">delete</span> kcom;
<a name="l03494"></a>03494   }
<a name="l03495"></a>03495 
<a name="l03496"></a>03496   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;terminalEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l03497"></a>03497            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03498"></a>03498   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;terminalCloseCheck, SIGNAL( toggled( <span class="keywordtype">bool</span> ) ),
<a name="l03499"></a>03499            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03500"></a>03500   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;terminalCheck, SIGNAL( toggled( <span class="keywordtype">bool</span> ) ),
<a name="l03501"></a>03501            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03502"></a>03502   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;suidCheck, SIGNAL( toggled( <span class="keywordtype">bool</span> ) ),
<a name="l03503"></a>03503            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03504"></a>03504   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;suidEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l03505"></a>03505            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03506"></a>03506   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;startupInfoCheck, SIGNAL( toggled( <span class="keywordtype">bool</span> ) ),
<a name="l03507"></a>03507            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03508"></a>03508   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;systrayCheck, SIGNAL( toggled( <span class="keywordtype">bool</span> ) ),
<a name="l03509"></a>03509            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03510"></a>03510   <a class="codeRef" href="qobject.html#connect">connect</a>( w-&gt;dcopCombo, SIGNAL( highlighted( <span class="keywordtype">int</span> ) ),
<a name="l03511"></a>03511            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03512"></a>03512 
<a name="l03513"></a>03513   <span class="keywordflow">if</span> ( dlg.exec() == QDialog::Accepted )
<a name="l03514"></a>03514   {
<a name="l03515"></a>03515     m_terminalOptionStr = w-&gt;terminalEdit-&gt;text().<a class="codeRef" href="qstring.html#stripWhiteSpace">stripWhiteSpace</a>();
<a name="l03516"></a>03516     m_terminalBool = w-&gt;terminalCheck-&gt;isChecked();
<a name="l03517"></a>03517     m_suidBool = w-&gt;suidCheck-&gt;isChecked();
<a name="l03518"></a>03518     m_suidUserStr = w-&gt;suidEdit-&gt;text().<a class="codeRef" href="qstring.html#stripWhiteSpace">stripWhiteSpace</a>();
<a name="l03519"></a>03519     m_startupBool = w-&gt;startupInfoCheck-&gt;isChecked();
<a name="l03520"></a>03520     m_systrayBool = w-&gt;systrayCheck-&gt;isChecked();
<a name="l03521"></a>03521 
<a name="l03522"></a>03522     <span class="keywordflow">if</span> (w-&gt;terminalCloseCheck-&gt;isChecked())
<a name="l03523"></a>03523     {
<a name="l03524"></a>03524       m_terminalOptionStr.<a class="codeRef" href="qstring.html#append">append</a>(<span class="stringliteral">&quot; --noclose&quot;</span>);
<a name="l03525"></a>03525     }
<a name="l03526"></a>03526 
<a name="l03527"></a>03527     <span class="keywordflow">switch</span>(w-&gt;dcopCombo-&gt;currentItem())
<a name="l03528"></a>03528     {
<a name="l03529"></a>03529       <span class="keywordflow">case</span> 1:  m_dcopServiceType = <span class="stringliteral">&quot;multi&quot;</span>; <span class="keywordflow">break</span>;
<a name="l03530"></a>03530       <span class="keywordflow">case</span> 2:  m_dcopServiceType = <span class="stringliteral">&quot;unique&quot;</span>; <span class="keywordflow">break</span>;
<a name="l03531"></a>03531       <span class="keywordflow">case</span> 3:  m_dcopServiceType = <span class="stringliteral">&quot;wait&quot;</span>; <span class="keywordflow">break</span>;
<a name="l03532"></a>03532       <span class="keywordflow">default</span>: m_dcopServiceType = <span class="stringliteral">&quot;none&quot;</span>; <span class="keywordflow">break</span>;
<a name="l03533"></a>03533     }
<a name="l03534"></a>03534   }
<a name="l03535"></a>03535 }
<a name="l03536"></a>03536 
<a name="l03537"></a>03537 <span class="keywordtype">bool</span> KDesktopPropsPlugin::supports( KFileItemList _items )
<a name="l03538"></a>03538 {
<a name="l03539"></a>03539   <span class="keywordflow">if</span> ( _items.count() != 1 )
<a name="l03540"></a>03540     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l03541"></a>03541   KFileItem * item = _items.first();
<a name="l03542"></a>03542   <span class="comment">// check if desktop file</span>
<a name="l03543"></a>03543   <span class="keywordflow">if</span> ( !<a class="code" href="classKPropsDlgPlugin.html#ad29f1d332d93035d3ae2278ba25b2803" title="Convenience method for most ::supports methods.">KPropsDlgPlugin::isDesktopFile</a>( item ) )
<a name="l03544"></a>03544     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l03545"></a>03545   <span class="comment">// open file and check type</span>
<a name="l03546"></a>03546   KDesktopFile config( item-&gt;url().path(), <span class="keyword">true</span> <span class="comment">/* readonly */</span> );
<a name="l03547"></a>03547   <span class="keywordflow">return</span> config.hasApplicationType() &amp;&amp; kapp-&gt;authorize(<span class="stringliteral">&quot;run_desktop_files&quot;</span>) &amp;&amp; kapp-&gt;authorize(<span class="stringliteral">&quot;shell_access&quot;</span>);
<a name="l03548"></a>03548 }
<a name="l03549"></a>03549 
<a name="l03550"></a>03550 <span class="keywordtype">void</span> KPropertiesDialog::virtual_hook( <span class="keywordtype">int</span> <span class="keywordtype">id</span>, <span class="keywordtype">void</span>* data )
<a name="l03551"></a>03551 { KDialogBase::virtual_hook( <span class="keywordtype">id</span>, data ); }
<a name="l03552"></a>03552 
<a name="l03553"></a>03553 <span class="keywordtype">void</span> KPropsDlgPlugin::virtual_hook( <span class="keywordtype">int</span>, <span class="keywordtype">void</span>* )
<a name="l03554"></a>03554 { <span class="comment">/*BASE::virtual_hook( id, data );*/</span> }
<a name="l03555"></a>03555 
<a name="l03556"></a>03556 
<a name="l03557"></a>03557 
<a name="l03558"></a>03558 
<a name="l03559"></a>03559 
<a name="l03565"></a>03565 <span class="keyword">class </span>KExecPropsPlugin::KExecPropsPluginPrivate
<a name="l03566"></a>03566 {
<a name="l03567"></a>03567 <span class="keyword">public</span>:
<a name="l03568"></a>03568   KExecPropsPluginPrivate()
<a name="l03569"></a>03569   {
<a name="l03570"></a>03570   }
<a name="l03571"></a>03571   ~KExecPropsPluginPrivate()
<a name="l03572"></a>03572   {
<a name="l03573"></a>03573   }
<a name="l03574"></a>03574 
<a name="l03575"></a>03575   <a class="codeRef" href="qframe.html">QFrame</a> *m_frame;
<a name="l03576"></a>03576   <a class="codeRef" href="qcheckbox.html">QCheckBox</a> *nocloseonexitCheck;
<a name="l03577"></a>03577 };
<a name="l03578"></a>03578 
<a name="l03579"></a><a class="code" href="classKExecPropsPlugin.html#a0094dee578802b9ffcd36c237fe0621b">03579</a> <a class="code" href="classKExecPropsPlugin.html#a0094dee578802b9ffcd36c237fe0621b" title="Constructor.">KExecPropsPlugin::KExecPropsPlugin</a>( <a class="code" href="classKPropertiesDialog.html" title="The main properties dialog class.">KPropertiesDialog</a> *_props )
<a name="l03580"></a>03580   : <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a>( _props )
<a name="l03581"></a>03581 {
<a name="l03582"></a>03582   d = <span class="keyword">new</span> KExecPropsPluginPrivate;
<a name="l03583"></a>03583   d-&gt;m_frame = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;addPage(i18n(<span class="stringliteral">&quot;E&amp;xecute&quot;</span>));
<a name="l03584"></a>03584   <a class="codeRef" href="qvboxlayout.html">QVBoxLayout</a> * mainlayout = <span class="keyword">new</span> <a class="codeRef" href="qvboxlayout.html">QVBoxLayout</a>( d-&gt;m_frame, 0,
<a name="l03585"></a>03585       KDialog::spacingHint());
<a name="l03586"></a>03586 
<a name="l03587"></a>03587   <span class="comment">// Now the widgets in the top layout</span>
<a name="l03588"></a>03588 
<a name="l03589"></a>03589   <a class="codeRef" href="qlabel.html">QLabel</a>* l;
<a name="l03590"></a>03590   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n( <span class="stringliteral">&quot;Comman&amp;d:&quot;</span> ), d-&gt;m_frame );
<a name="l03591"></a>03591   mainlayout-&gt;addWidget(l);
<a name="l03592"></a>03592 
<a name="l03593"></a>03593   <a class="codeRef" href="qhboxlayout.html">QHBoxLayout</a> * hlayout;
<a name="l03594"></a>03594   hlayout = <span class="keyword">new</span> <a class="codeRef" href="qhboxlayout.html">QHBoxLayout</a>(KDialog::spacingHint());
<a name="l03595"></a>03595   mainlayout-&gt;addLayout(hlayout);
<a name="l03596"></a>03596 
<a name="l03597"></a>03597   execEdit = <span class="keyword">new</span> KLineEdit( d-&gt;m_frame );
<a name="l03598"></a>03598   <a class="codeRef" href="qwhatsthis.html#add">QWhatsThis::add</a>(execEdit,i18n(
<a name="l03599"></a>03599     <span class="stringliteral">&quot;Following the command, you can have several place holders which will be replaced &quot;</span>
<a name="l03600"></a>03600     <span class="stringliteral">&quot;with the actual values when the actual program is run:\n&quot;</span>
<a name="l03601"></a>03601     <span class="stringliteral">&quot;%f - a single file name\n&quot;</span>
<a name="l03602"></a>03602     <span class="stringliteral">&quot;%F - a list of files; use for applications that can open several local files at once\n&quot;</span>
<a name="l03603"></a>03603     <span class="stringliteral">&quot;%u - a single URL\n&quot;</span>
<a name="l03604"></a>03604     <span class="stringliteral">&quot;%U - a list of URLs\n&quot;</span>
<a name="l03605"></a>03605     <span class="stringliteral">&quot;%d - the folder of the file to open\n&quot;</span>
<a name="l03606"></a>03606     <span class="stringliteral">&quot;%D - a list of folders\n&quot;</span>
<a name="l03607"></a>03607     <span class="stringliteral">&quot;%i - the icon\n&quot;</span>
<a name="l03608"></a>03608     <span class="stringliteral">&quot;%m - the mini-icon\n&quot;</span>
<a name="l03609"></a>03609     <span class="stringliteral">&quot;%c - the caption&quot;</span>));
<a name="l03610"></a>03610   hlayout-&gt;addWidget(execEdit, 1);
<a name="l03611"></a>03611 
<a name="l03612"></a>03612   l-&gt;<a class="codeRef" href="qlabel.html#setBuddy">setBuddy</a>( execEdit );
<a name="l03613"></a>03613 
<a name="l03614"></a>03614   execBrowse = <span class="keyword">new</span> <a class="codeRef" href="qpushbutton.html">QPushButton</a>( d-&gt;m_frame );
<a name="l03615"></a>03615   execBrowse-&gt;<a class="codeRef" href="qbutton.html#setText">setText</a>( i18n(<span class="stringliteral">&quot;&amp;Browse...&quot;</span>) );
<a name="l03616"></a>03616   hlayout-&gt;addWidget(execBrowse);
<a name="l03617"></a>03617 
<a name="l03618"></a>03618   <span class="comment">// The groupbox about swallowing</span>
<a name="l03619"></a>03619   <a class="codeRef" href="qgroupbox.html">QGroupBox</a>* tmpQGroupBox;
<a name="l03620"></a>03620   tmpQGroupBox = <span class="keyword">new</span> <a class="codeRef" href="qgroupbox.html">QGroupBox</a>( i18n(<span class="stringliteral">&quot;Panel Embedding&quot;</span>), d-&gt;m_frame );
<a name="l03621"></a>03621   tmpQGroupBox-&gt;<a class="codeRef" href="qgroupbox.html#setColumnLayout">setColumnLayout</a>( 0, Qt::Horizontal );
<a name="l03622"></a>03622 
<a name="l03623"></a>03623   mainlayout-&gt;addWidget(tmpQGroupBox);
<a name="l03624"></a>03624 
<a name="l03625"></a>03625   <a class="codeRef" href="qgridlayout.html">QGridLayout</a> *grid = <span class="keyword">new</span> <a class="codeRef" href="qgridlayout.html">QGridLayout</a>(tmpQGroupBox-&gt;layout(), 2, 2);
<a name="l03626"></a>03626   grid-&gt;setSpacing( KDialog::spacingHint() );
<a name="l03627"></a>03627   grid-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(1, 1);
<a name="l03628"></a>03628 
<a name="l03629"></a>03629   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n( <span class="stringliteral">&quot;&amp;Execute on click:&quot;</span> ), tmpQGroupBox );
<a name="l03630"></a>03630   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 0, 0);
<a name="l03631"></a>03631 
<a name="l03632"></a>03632   swallowExecEdit = <span class="keyword">new</span> KLineEdit( tmpQGroupBox );
<a name="l03633"></a>03633   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(swallowExecEdit, 0, 1);
<a name="l03634"></a>03634 
<a name="l03635"></a>03635   l-&gt;<a class="codeRef" href="qlabel.html#setBuddy">setBuddy</a>( swallowExecEdit );
<a name="l03636"></a>03636 
<a name="l03637"></a>03637   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n( <span class="stringliteral">&quot;&amp;Window title:&quot;</span> ), tmpQGroupBox );
<a name="l03638"></a>03638   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 1, 0);
<a name="l03639"></a>03639 
<a name="l03640"></a>03640   swallowTitleEdit = <span class="keyword">new</span> KLineEdit( tmpQGroupBox );
<a name="l03641"></a>03641   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(swallowTitleEdit, 1, 1);
<a name="l03642"></a>03642 
<a name="l03643"></a>03643   l-&gt;<a class="codeRef" href="qlabel.html#setBuddy">setBuddy</a>( swallowTitleEdit );
<a name="l03644"></a>03644 
<a name="l03645"></a>03645   <span class="comment">// The groupbox about run in terminal</span>
<a name="l03646"></a>03646 
<a name="l03647"></a>03647   tmpQGroupBox = <span class="keyword">new</span> <a class="codeRef" href="qgroupbox.html">QGroupBox</a>( d-&gt;m_frame );
<a name="l03648"></a>03648   tmpQGroupBox-&gt;<a class="codeRef" href="qgroupbox.html#setColumnLayout">setColumnLayout</a>( 0, Qt::Horizontal );
<a name="l03649"></a>03649 
<a name="l03650"></a>03650   mainlayout-&gt;addWidget(tmpQGroupBox);
<a name="l03651"></a>03651 
<a name="l03652"></a>03652   grid = <span class="keyword">new</span> <a class="codeRef" href="qgridlayout.html">QGridLayout</a>(tmpQGroupBox-&gt;layout(), 3, 2);
<a name="l03653"></a>03653   grid-&gt;setSpacing( KDialog::spacingHint() );
<a name="l03654"></a>03654   grid-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(1, 1);
<a name="l03655"></a>03655 
<a name="l03656"></a>03656   terminalCheck = <span class="keyword">new</span> <a class="codeRef" href="qcheckbox.html">QCheckBox</a>( tmpQGroupBox );
<a name="l03657"></a>03657   terminalCheck-&gt;<a class="codeRef" href="qcheckbox.html#setText">setText</a>( i18n(<span class="stringliteral">&quot;&amp;Run in terminal&quot;</span>) );
<a name="l03658"></a>03658   grid-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCellWidget">addMultiCellWidget</a>(terminalCheck, 0, 0, 0, 1);
<a name="l03659"></a>03659 
<a name="l03660"></a>03660   <span class="comment">// check to see if we use konsole if not do not add the nocloseonexit</span>
<a name="l03661"></a>03661   <span class="comment">// because we don&#39;t know how to do this on other terminal applications</span>
<a name="l03662"></a>03662   KConfigGroup confGroup( KGlobal::config(), <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;General&quot;</span>) );
<a name="l03663"></a>03663   <a class="codeRef" href="qstring.html">QString</a> preferredTerminal = confGroup.readPathEntry(<span class="stringliteral">&quot;TerminalApplication&quot;</span>,
<a name="l03664"></a>03664                           <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;konsole&quot;</span>));
<a name="l03665"></a>03665 
<a name="l03666"></a>03666   <span class="keywordtype">int</span> posOptions = 1;
<a name="l03667"></a>03667   d-&gt;nocloseonexitCheck = 0L;
<a name="l03668"></a>03668   <span class="keywordflow">if</span> (preferredTerminal == <span class="stringliteral">&quot;konsole&quot;</span>)
<a name="l03669"></a>03669   {
<a name="l03670"></a>03670     posOptions = 2;
<a name="l03671"></a>03671     d-&gt;nocloseonexitCheck = <span class="keyword">new</span> <a class="codeRef" href="qcheckbox.html">QCheckBox</a>( tmpQGroupBox );
<a name="l03672"></a>03672     d-&gt;nocloseonexitCheck-&gt;setText( i18n(<span class="stringliteral">&quot;Do not &amp;close when command exits&quot;</span>) );
<a name="l03673"></a>03673     grid-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCellWidget">addMultiCellWidget</a>(d-&gt;nocloseonexitCheck, 1, 1, 0, 1);
<a name="l03674"></a>03674   }
<a name="l03675"></a>03675 
<a name="l03676"></a>03676   terminalLabel = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>( i18n( <span class="stringliteral">&quot;&amp;Terminal options:&quot;</span> ), tmpQGroupBox );
<a name="l03677"></a>03677   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(terminalLabel, posOptions, 0);
<a name="l03678"></a>03678 
<a name="l03679"></a>03679   terminalEdit = <span class="keyword">new</span> KLineEdit( tmpQGroupBox );
<a name="l03680"></a>03680   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(terminalEdit, posOptions, 1);
<a name="l03681"></a>03681 
<a name="l03682"></a>03682   terminalLabel-&gt;<a class="codeRef" href="qlabel.html#setBuddy">setBuddy</a>( terminalEdit );
<a name="l03683"></a>03683 
<a name="l03684"></a>03684   <span class="comment">// The groupbox about run with substituted uid.</span>
<a name="l03685"></a>03685 
<a name="l03686"></a>03686   tmpQGroupBox = <span class="keyword">new</span> <a class="codeRef" href="qgroupbox.html">QGroupBox</a>( d-&gt;m_frame );
<a name="l03687"></a>03687   tmpQGroupBox-&gt;<a class="codeRef" href="qgroupbox.html#setColumnLayout">setColumnLayout</a>( 0, Qt::Horizontal );
<a name="l03688"></a>03688 
<a name="l03689"></a>03689   mainlayout-&gt;addWidget(tmpQGroupBox);
<a name="l03690"></a>03690 
<a name="l03691"></a>03691   grid = <span class="keyword">new</span> <a class="codeRef" href="qgridlayout.html">QGridLayout</a>(tmpQGroupBox-&gt;layout(), 2, 2);
<a name="l03692"></a>03692   grid-&gt;setSpacing(KDialog::spacingHint());
<a name="l03693"></a>03693   grid-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(1, 1);
<a name="l03694"></a>03694 
<a name="l03695"></a>03695   suidCheck = <span class="keyword">new</span> <a class="codeRef" href="qcheckbox.html">QCheckBox</a>(tmpQGroupBox);
<a name="l03696"></a>03696   suidCheck-&gt;<a class="codeRef" href="qcheckbox.html#setText">setText</a>(i18n(<span class="stringliteral">&quot;Ru&amp;n as a different user&quot;</span>));
<a name="l03697"></a>03697   grid-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCellWidget">addMultiCellWidget</a>(suidCheck, 0, 0, 0, 1);
<a name="l03698"></a>03698 
<a name="l03699"></a>03699   suidLabel = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n( <span class="stringliteral">&quot;&amp;Username:&quot;</span> ), tmpQGroupBox);
<a name="l03700"></a>03700   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(suidLabel, 1, 0);
<a name="l03701"></a>03701 
<a name="l03702"></a>03702   suidEdit = <span class="keyword">new</span> KLineEdit(tmpQGroupBox);
<a name="l03703"></a>03703   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(suidEdit, 1, 1);
<a name="l03704"></a>03704 
<a name="l03705"></a>03705   suidLabel-&gt;<a class="codeRef" href="qlabel.html#setBuddy">setBuddy</a>( suidEdit );
<a name="l03706"></a>03706 
<a name="l03707"></a>03707   mainlayout-&gt;addStretch(1);
<a name="l03708"></a>03708 
<a name="l03709"></a>03709   <span class="comment">// now populate the page</span>
<a name="l03710"></a>03710   <a class="codeRef" href="qstring.html">QString</a> path = _props-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path();
<a name="l03711"></a>03711   <a class="codeRef" href="qfile.html">QFile</a> f( path );
<a name="l03712"></a>03712   <span class="keywordflow">if</span> ( !f.<a class="codeRef" href="qfile.html#open">open</a>( IO_ReadOnly ) )
<a name="l03713"></a>03713     <span class="keywordflow">return</span>;
<a name="l03714"></a>03714   f.<a class="codeRef" href="qfile.html#close">close</a>();
<a name="l03715"></a>03715 
<a name="l03716"></a>03716   KSimpleConfig config( path );
<a name="l03717"></a>03717   config.setDollarExpansion( <span class="keyword">false</span> );
<a name="l03718"></a>03718   config.setDesktopGroup();
<a name="l03719"></a>03719   execStr = config.readPathEntry( <span class="stringliteral">&quot;Exec&quot;</span> );
<a name="l03720"></a>03720   swallowExecStr = config.readPathEntry( <span class="stringliteral">&quot;SwallowExec&quot;</span> );
<a name="l03721"></a>03721   swallowTitleStr = config.readEntry( <span class="stringliteral">&quot;SwallowTitle&quot;</span> );
<a name="l03722"></a>03722   termBool = config.readBoolEntry( <span class="stringliteral">&quot;Terminal&quot;</span> );
<a name="l03723"></a>03723   termOptionsStr = config.readEntry( <span class="stringliteral">&quot;TerminalOptions&quot;</span> );
<a name="l03724"></a>03724   suidBool = config.readBoolEntry( <span class="stringliteral">&quot;X-KDE-SubstituteUID&quot;</span> );
<a name="l03725"></a>03725   suidUserStr = config.readEntry( <span class="stringliteral">&quot;X-KDE-Username&quot;</span> );
<a name="l03726"></a>03726 
<a name="l03727"></a>03727   <span class="keywordflow">if</span> ( !swallowExecStr.<a class="codeRef" href="qstring.html#isNull">isNull</a>() )
<a name="l03728"></a>03728     swallowExecEdit-&gt;setText( swallowExecStr );
<a name="l03729"></a>03729   <span class="keywordflow">if</span> ( !swallowTitleStr.<a class="codeRef" href="qstring.html#isNull">isNull</a>() )
<a name="l03730"></a>03730     swallowTitleEdit-&gt;setText( swallowTitleStr );
<a name="l03731"></a>03731 
<a name="l03732"></a>03732   <span class="keywordflow">if</span> ( !execStr.<a class="codeRef" href="qstring.html#isNull">isNull</a>() )
<a name="l03733"></a>03733     execEdit-&gt;setText( execStr );
<a name="l03734"></a>03734 
<a name="l03735"></a>03735   <span class="keywordflow">if</span> ( d-&gt;nocloseonexitCheck )
<a name="l03736"></a>03736   {
<a name="l03737"></a>03737     d-&gt;nocloseonexitCheck-&gt;setChecked( (termOptionsStr.<a class="codeRef" href="qstring.html#contains">contains</a>( <span class="stringliteral">&quot;--noclose&quot;</span> ) &gt; 0) );
<a name="l03738"></a>03738     termOptionsStr.<a class="codeRef" href="qstring.html#replace">replace</a>( <span class="stringliteral">&quot;--noclose&quot;</span>, <span class="stringliteral">&quot;&quot;</span>);
<a name="l03739"></a>03739   }
<a name="l03740"></a>03740   <span class="keywordflow">if</span> ( !termOptionsStr.<a class="codeRef" href="qstring.html#isNull">isNull</a>() )
<a name="l03741"></a>03741     terminalEdit-&gt;setText( termOptionsStr );
<a name="l03742"></a>03742 
<a name="l03743"></a>03743   terminalCheck-&gt;<a class="codeRef" href="qcheckbox.html#setChecked">setChecked</a>( termBool );
<a name="l03744"></a>03744   enableCheckedEdit();
<a name="l03745"></a>03745 
<a name="l03746"></a>03746   suidCheck-&gt;<a class="codeRef" href="qcheckbox.html#setChecked">setChecked</a>( suidBool );
<a name="l03747"></a>03747   suidEdit-&gt;setText( suidUserStr );
<a name="l03748"></a>03748   enableSuidEdit();
<a name="l03749"></a>03749 
<a name="l03750"></a>03750   <span class="comment">// Provide username completion up to 1000 users.</span>
<a name="l03751"></a>03751   KCompletion *kcom = <span class="keyword">new</span> KCompletion;
<a name="l03752"></a>03752   kcom-&gt;setOrder(KCompletion::Sorted);
<a name="l03753"></a>03753   <span class="keyword">struct </span>passwd *pw;
<a name="l03754"></a>03754   <span class="keywordtype">int</span> i, maxEntries = 1000;
<a name="l03755"></a>03755   setpwent();
<a name="l03756"></a>03756   <span class="keywordflow">for</span> (i=0; ((pw = getpwent()) != 0L) &amp;&amp; (i &lt; maxEntries); i++)
<a name="l03757"></a>03757     kcom-&gt;addItem(<a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(pw-&gt;pw_name));
<a name="l03758"></a>03758   endpwent();
<a name="l03759"></a>03759   <span class="keywordflow">if</span> (i &lt; maxEntries)
<a name="l03760"></a>03760   {
<a name="l03761"></a>03761     suidEdit-&gt;setCompletionObject(kcom, <span class="keyword">true</span>);
<a name="l03762"></a>03762     suidEdit-&gt;setAutoDeleteCompletionObject( <span class="keyword">true</span> );
<a name="l03763"></a>03763     suidEdit-&gt;setCompletionMode(KGlobalSettings::CompletionAuto);
<a name="l03764"></a>03764   }
<a name="l03765"></a>03765   <span class="keywordflow">else</span>
<a name="l03766"></a>03766   {
<a name="l03767"></a>03767     <span class="keyword">delete</span> kcom;
<a name="l03768"></a>03768   }
<a name="l03769"></a>03769 
<a name="l03770"></a>03770   <a class="codeRef" href="qobject.html#connect">connect</a>( swallowExecEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l03771"></a>03771            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03772"></a>03772   <a class="codeRef" href="qobject.html#connect">connect</a>( swallowTitleEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l03773"></a>03773            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03774"></a>03774   <a class="codeRef" href="qobject.html#connect">connect</a>( execEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l03775"></a>03775            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03776"></a>03776   <a class="codeRef" href="qobject.html#connect">connect</a>( terminalEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l03777"></a>03777            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03778"></a>03778   <span class="keywordflow">if</span> (d-&gt;nocloseonexitCheck)
<a name="l03779"></a>03779     <a class="codeRef" href="qobject.html#connect">connect</a>( d-&gt;nocloseonexitCheck, SIGNAL( toggled( <span class="keywordtype">bool</span> ) ),
<a name="l03780"></a>03780            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03781"></a>03781   <a class="codeRef" href="qobject.html#connect">connect</a>( terminalCheck, SIGNAL( toggled( <span class="keywordtype">bool</span> ) ),
<a name="l03782"></a>03782            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03783"></a>03783   <a class="codeRef" href="qobject.html#connect">connect</a>( suidCheck, SIGNAL( toggled( <span class="keywordtype">bool</span> ) ),
<a name="l03784"></a>03784            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03785"></a>03785   <a class="codeRef" href="qobject.html#connect">connect</a>( suidEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l03786"></a>03786            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l03787"></a>03787 
<a name="l03788"></a>03788   <a class="codeRef" href="qobject.html#connect">connect</a>( execBrowse, SIGNAL( clicked() ), <span class="keyword">this</span>, SLOT( slotBrowseExec() ) );
<a name="l03789"></a>03789   <a class="codeRef" href="qobject.html#connect">connect</a>( terminalCheck, SIGNAL( clicked() ), <span class="keyword">this</span>,  SLOT( enableCheckedEdit() ) );
<a name="l03790"></a>03790   <a class="codeRef" href="qobject.html#connect">connect</a>( suidCheck, SIGNAL( clicked() ), <span class="keyword">this</span>,  SLOT( enableSuidEdit() ) );
<a name="l03791"></a>03791 
<a name="l03792"></a>03792 }
<a name="l03793"></a>03793 
<a name="l03794"></a>03794 KExecPropsPlugin::~KExecPropsPlugin()
<a name="l03795"></a>03795 {
<a name="l03796"></a>03796   <span class="keyword">delete</span> d;
<a name="l03797"></a>03797 }
<a name="l03798"></a>03798 
<a name="l03799"></a>03799 <span class="keywordtype">void</span> KExecPropsPlugin::enableCheckedEdit()
<a name="l03800"></a>03800 {
<a name="l03801"></a>03801   <span class="keywordtype">bool</span> checked = terminalCheck-&gt;<a class="codeRef" href="qcheckbox.html#isChecked">isChecked</a>();
<a name="l03802"></a>03802   terminalLabel-&gt;setEnabled( checked );
<a name="l03803"></a>03803   <span class="keywordflow">if</span> (d-&gt;nocloseonexitCheck)
<a name="l03804"></a>03804     d-&gt;nocloseonexitCheck-&gt;setEnabled( checked );
<a name="l03805"></a>03805   terminalEdit-&gt;setEnabled( checked );
<a name="l03806"></a>03806 }
<a name="l03807"></a>03807 
<a name="l03808"></a>03808 <span class="keywordtype">void</span> KExecPropsPlugin::enableSuidEdit()
<a name="l03809"></a>03809 {
<a name="l03810"></a>03810   <span class="keywordtype">bool</span> checked = suidCheck-&gt;<a class="codeRef" href="qcheckbox.html#isChecked">isChecked</a>();
<a name="l03811"></a>03811   suidLabel-&gt;setEnabled( checked );
<a name="l03812"></a>03812   suidEdit-&gt;setEnabled( checked );
<a name="l03813"></a>03813 }
<a name="l03814"></a>03814 
<a name="l03815"></a>03815 <span class="keywordtype">bool</span> KExecPropsPlugin::supports( KFileItemList _items )
<a name="l03816"></a>03816 {
<a name="l03817"></a>03817   <span class="keywordflow">if</span> ( _items.count() != 1 )
<a name="l03818"></a>03818     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l03819"></a>03819   KFileItem * item = _items.first();
<a name="l03820"></a>03820   <span class="comment">// check if desktop file</span>
<a name="l03821"></a>03821   <span class="keywordflow">if</span> ( !<a class="code" href="classKPropsDlgPlugin.html#ad29f1d332d93035d3ae2278ba25b2803" title="Convenience method for most ::supports methods.">KPropsDlgPlugin::isDesktopFile</a>( item ) )
<a name="l03822"></a>03822     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l03823"></a>03823   <span class="comment">// open file and check type</span>
<a name="l03824"></a>03824   KDesktopFile config( item-&gt;url().path(), <span class="keyword">true</span> <span class="comment">/* readonly */</span> );
<a name="l03825"></a>03825   <span class="keywordflow">return</span> config.hasApplicationType() &amp;&amp; kapp-&gt;authorize(<span class="stringliteral">&quot;run_desktop_files&quot;</span>) &amp;&amp; kapp-&gt;authorize(<span class="stringliteral">&quot;shell_access&quot;</span>);
<a name="l03826"></a>03826 }
<a name="l03827"></a>03827 
<a name="l03828"></a><a class="code" href="classKExecPropsPlugin.html#a0a72341bb6c5a0b160c8844c4e80cd1d">03828</a> <span class="keywordtype">void</span> <a class="code" href="classKExecPropsPlugin.html#a0a72341bb6c5a0b160c8844c4e80cd1d" title="Applies all changes to the file.">KExecPropsPlugin::applyChanges</a>()
<a name="l03829"></a>03829 {
<a name="l03830"></a>03830   kdDebug(250) &lt;&lt; <span class="stringliteral">&quot;KExecPropsPlugin::applyChanges&quot;</span> &lt;&lt; endl;
<a name="l03831"></a>03831   <a class="codeRef" href="qstring.html">QString</a> path = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path();
<a name="l03832"></a>03832 
<a name="l03833"></a>03833   <a class="codeRef" href="qfile.html">QFile</a> f( path );
<a name="l03834"></a>03834 
<a name="l03835"></a>03835   <span class="keywordflow">if</span> ( !f.<a class="codeRef" href="qfile.html#open">open</a>( IO_ReadWrite ) ) {
<a name="l03836"></a>03836     KMessageBox::sorry( 0, i18n(<span class="stringliteral">&quot;&lt;qt&gt;Could not save properties. You do not have &quot;</span>
<a name="l03837"></a>03837                 <span class="stringliteral">&quot;sufficient access to write to &lt;b&gt;%1&lt;/b&gt;.&lt;/qt&gt;&quot;</span>).arg(path));
<a name="l03838"></a>03838     <span class="keywordflow">return</span>;
<a name="l03839"></a>03839   }
<a name="l03840"></a>03840   f.<a class="codeRef" href="qfile.html#close">close</a>();
<a name="l03841"></a>03841 
<a name="l03842"></a>03842   KSimpleConfig config( path );
<a name="l03843"></a>03843   config.setDesktopGroup();
<a name="l03844"></a>03844   config.writeEntry( <span class="stringliteral">&quot;Type&quot;</span>, <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;Application&quot;</span>));
<a name="l03845"></a>03845   config.writePathEntry( <span class="stringliteral">&quot;Exec&quot;</span>, execEdit-&gt;text() );
<a name="l03846"></a>03846   config.writePathEntry( <span class="stringliteral">&quot;SwallowExec&quot;</span>, swallowExecEdit-&gt;text() );
<a name="l03847"></a>03847   config.writeEntry( <span class="stringliteral">&quot;SwallowTitle&quot;</span>, swallowTitleEdit-&gt;text() );
<a name="l03848"></a>03848   config.writeEntry( <span class="stringliteral">&quot;Terminal&quot;</span>, terminalCheck-&gt;<a class="codeRef" href="qcheckbox.html#isChecked">isChecked</a>() );
<a name="l03849"></a>03849   <a class="codeRef" href="qstring.html">QString</a> temp = terminalEdit-&gt;text();
<a name="l03850"></a>03850   <span class="keywordflow">if</span> (d-&gt;nocloseonexitCheck )
<a name="l03851"></a>03851     <span class="keywordflow">if</span> ( d-&gt;nocloseonexitCheck-&gt;isChecked() )
<a name="l03852"></a>03852       temp += <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;--noclose &quot;</span>);
<a name="l03853"></a>03853   temp = temp.<a class="codeRef" href="qstring.html#stripWhiteSpace">stripWhiteSpace</a>();
<a name="l03854"></a>03854   config.writeEntry( <span class="stringliteral">&quot;TerminalOptions&quot;</span>, temp );
<a name="l03855"></a>03855   config.writeEntry( <span class="stringliteral">&quot;X-KDE-SubstituteUID&quot;</span>, suidCheck-&gt;<a class="codeRef" href="qcheckbox.html#isChecked">isChecked</a>() );
<a name="l03856"></a>03856   config.writeEntry( <span class="stringliteral">&quot;X-KDE-Username&quot;</span>, suidEdit-&gt;text() );
<a name="l03857"></a>03857 }
<a name="l03858"></a>03858 
<a name="l03859"></a>03859 
<a name="l03860"></a>03860 <span class="keywordtype">void</span> KExecPropsPlugin::slotBrowseExec()
<a name="l03861"></a>03861 {
<a name="l03862"></a>03862     KURL f = <a class="code" href="classKFileDialog.html#a253d8042934dc81cf7636691e741fe95" title="Creates a modal file dialog and returns the selected URL or an empty string if none was chosen...">KFileDialog::getOpenURL</a>( QString::null,
<a name="l03863"></a>03863                                       QString::null, d-&gt;m_frame );
<a name="l03864"></a>03864     <span class="keywordflow">if</span> ( f.isEmpty() )
<a name="l03865"></a>03865         <span class="keywordflow">return</span>;
<a name="l03866"></a>03866 
<a name="l03867"></a>03867     <span class="keywordflow">if</span> ( !f.isLocalFile()) {
<a name="l03868"></a>03868         KMessageBox::sorry(d-&gt;m_frame, i18n(<span class="stringliteral">&quot;Only executables on local file systems are supported.&quot;</span>));
<a name="l03869"></a>03869         <span class="keywordflow">return</span>;
<a name="l03870"></a>03870     }
<a name="l03871"></a>03871 
<a name="l03872"></a>03872     <a class="codeRef" href="qstring.html">QString</a> path = f.path();
<a name="l03873"></a>03873     KRun::shellQuote( path );
<a name="l03874"></a>03874     execEdit-&gt;setText( path );
<a name="l03875"></a>03875 }
<a name="l03876"></a>03876 
<a name="l03877"></a>03877 <span class="keyword">class </span>KApplicationPropsPlugin::KApplicationPropsPluginPrivate
<a name="l03878"></a>03878 {
<a name="l03879"></a>03879 <span class="keyword">public</span>:
<a name="l03880"></a>03880   KApplicationPropsPluginPrivate()
<a name="l03881"></a>03881   {
<a name="l03882"></a>03882       m_kdesktopMode = <a class="codeRef" href="qcstring.html">QCString</a>(qApp-&gt;name()) == <span class="stringliteral">&quot;kdesktop&quot;</span>; <span class="comment">// nasty heh?</span>
<a name="l03883"></a>03883   }
<a name="l03884"></a>03884   ~KApplicationPropsPluginPrivate()
<a name="l03885"></a>03885   {
<a name="l03886"></a>03886   }
<a name="l03887"></a>03887 
<a name="l03888"></a>03888   <a class="codeRef" href="qframe.html">QFrame</a> *m_frame;
<a name="l03889"></a>03889   <span class="keywordtype">bool</span> m_kdesktopMode;
<a name="l03890"></a>03890 };
<a name="l03891"></a>03891 
<a name="l03892"></a><a class="code" href="classKApplicationPropsPlugin.html#af6aea032ee99314353e75e33a54e403d">03892</a> <a class="code" href="classKApplicationPropsPlugin.html#af6aea032ee99314353e75e33a54e403d" title="Constructor.">KApplicationPropsPlugin::KApplicationPropsPlugin</a>( <a class="code" href="classKPropertiesDialog.html" title="The main properties dialog class.">KPropertiesDialog</a> *_props )
<a name="l03893"></a>03893   : <a class="code" href="classKPropsDlgPlugin.html" title="A Plugin in the Properties dialog This is an abstract class.">KPropsDlgPlugin</a>( _props )
<a name="l03894"></a>03894 {
<a name="l03895"></a>03895   d = <span class="keyword">new</span> KApplicationPropsPluginPrivate;
<a name="l03896"></a>03896   d-&gt;m_frame = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;addPage(i18n(<span class="stringliteral">&quot;&amp;Application&quot;</span>));
<a name="l03897"></a>03897   <a class="codeRef" href="qvboxlayout.html">QVBoxLayout</a> *toplayout = <span class="keyword">new</span> <a class="codeRef" href="qvboxlayout.html">QVBoxLayout</a>( d-&gt;m_frame, 0, KDialog::spacingHint());
<a name="l03898"></a>03898 
<a name="l03899"></a>03899   <a class="codeRef" href="qiconset.html">QIconSet</a> iconSet;
<a name="l03900"></a>03900   <a class="codeRef" href="qpixmap.html">QPixmap</a> pixMap;
<a name="l03901"></a>03901 
<a name="l03902"></a>03902   addExtensionButton = <span class="keyword">new</span> <a class="codeRef" href="qpushbutton.html">QPushButton</a>( QString::null, d-&gt;m_frame );
<a name="l03903"></a>03903   iconSet = SmallIconSet( <span class="stringliteral">&quot;back&quot;</span> );
<a name="l03904"></a>03904   addExtensionButton-&gt;<a class="codeRef" href="qpushbutton.html#setIconSet">setIconSet</a>( iconSet );
<a name="l03905"></a>03905   pixMap = iconSet.<a class="codeRef" href="qiconset.html#pixmap">pixmap</a>( QIconSet::Small, QIconSet::Normal );
<a name="l03906"></a>03906   addExtensionButton-&gt;setFixedSize( pixMap.<a class="codeRef" href="qpixmap.html#width">width</a>()+8, pixMap.<a class="codeRef" href="qpixmap.html#height">height</a>()+8 );
<a name="l03907"></a>03907   <a class="codeRef" href="qobject.html#connect">connect</a>( addExtensionButton, SIGNAL( clicked() ),
<a name="l03908"></a>03908             SLOT( slotAddExtension() ) );
<a name="l03909"></a>03909 
<a name="l03910"></a>03910   delExtensionButton = <span class="keyword">new</span> <a class="codeRef" href="qpushbutton.html">QPushButton</a>( QString::null, d-&gt;m_frame );
<a name="l03911"></a>03911   iconSet = SmallIconSet( <span class="stringliteral">&quot;forward&quot;</span> );
<a name="l03912"></a>03912   delExtensionButton-&gt;<a class="codeRef" href="qpushbutton.html#setIconSet">setIconSet</a>( iconSet );
<a name="l03913"></a>03913   delExtensionButton-&gt;setFixedSize( pixMap.<a class="codeRef" href="qpixmap.html#width">width</a>()+8, pixMap.<a class="codeRef" href="qpixmap.html#height">height</a>()+8 );
<a name="l03914"></a>03914   <a class="codeRef" href="qobject.html#connect">connect</a>( delExtensionButton, SIGNAL( clicked() ),
<a name="l03915"></a>03915             SLOT( slotDelExtension() ) );
<a name="l03916"></a>03916 
<a name="l03917"></a>03917   <a class="codeRef" href="qlabel.html">QLabel</a> *l;
<a name="l03918"></a>03918 
<a name="l03919"></a>03919   <a class="codeRef" href="qgridlayout.html">QGridLayout</a> *grid = <span class="keyword">new</span> <a class="codeRef" href="qgridlayout.html">QGridLayout</a>(2, 2);
<a name="l03920"></a>03920   grid-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(1, 1);
<a name="l03921"></a>03921   toplayout-&gt;addLayout(grid);
<a name="l03922"></a>03922 
<a name="l03923"></a>03923   <span class="keywordflow">if</span> ( d-&gt;m_kdesktopMode )
<a name="l03924"></a>03924   {
<a name="l03925"></a>03925       <span class="comment">// in kdesktop the name field comes from the first tab</span>
<a name="l03926"></a>03926       nameEdit = 0L;
<a name="l03927"></a>03927   }
<a name="l03928"></a>03928   <span class="keywordflow">else</span>
<a name="l03929"></a>03929   {
<a name="l03930"></a>03930       l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Name:&quot;</span>), d-&gt;m_frame, <span class="stringliteral">&quot;Label_4&quot;</span> );
<a name="l03931"></a>03931       grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 0, 0);
<a name="l03932"></a>03932 
<a name="l03933"></a>03933       nameEdit = <span class="keyword">new</span> KLineEdit( d-&gt;m_frame, <span class="stringliteral">&quot;LineEdit_3&quot;</span> );
<a name="l03934"></a>03934       grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(nameEdit, 0, 1);
<a name="l03935"></a>03935   }
<a name="l03936"></a>03936 
<a name="l03937"></a>03937   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Description:&quot;</span>),  d-&gt;m_frame, <span class="stringliteral">&quot;Label_5&quot;</span> );
<a name="l03938"></a>03938   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 1, 0);
<a name="l03939"></a>03939 
<a name="l03940"></a>03940   genNameEdit = <span class="keyword">new</span> KLineEdit( d-&gt;m_frame, <span class="stringliteral">&quot;LineEdit_4&quot;</span> );
<a name="l03941"></a>03941   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(genNameEdit, 1, 1);
<a name="l03942"></a>03942 
<a name="l03943"></a>03943   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;Comment:&quot;</span>),  d-&gt;m_frame, <span class="stringliteral">&quot;Label_3&quot;</span> );
<a name="l03944"></a>03944   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(l, 2, 0);
<a name="l03945"></a>03945 
<a name="l03946"></a>03946   commentEdit = <span class="keyword">new</span> KLineEdit( d-&gt;m_frame, <span class="stringliteral">&quot;LineEdit_2&quot;</span> );
<a name="l03947"></a>03947   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(commentEdit, 2, 1);
<a name="l03948"></a>03948 
<a name="l03949"></a>03949   l = <span class="keyword">new</span> <a class="codeRef" href="qlabel.html">QLabel</a>(i18n(<span class="stringliteral">&quot;File types:&quot;</span>), d-&gt;m_frame);
<a name="l03950"></a>03950   toplayout-&gt;addWidget(l, 0, AlignLeft);
<a name="l03951"></a>03951 
<a name="l03952"></a>03952   grid = <span class="keyword">new</span> <a class="codeRef" href="qgridlayout.html">QGridLayout</a>(4, 3);
<a name="l03953"></a>03953   grid-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(0, 1);
<a name="l03954"></a>03954   grid-&gt;<a class="codeRef" href="qgridlayout.html#setColStretch">setColStretch</a>(2, 1);
<a name="l03955"></a>03955   grid-&gt;<a class="codeRef" href="qgridlayout.html#setRowStretch">setRowStretch</a>( 0, 1 );
<a name="l03956"></a>03956   grid-&gt;<a class="codeRef" href="qgridlayout.html#setRowStretch">setRowStretch</a>( 3, 1 );
<a name="l03957"></a>03957   toplayout-&gt;addLayout(grid, 2);
<a name="l03958"></a>03958 
<a name="l03959"></a>03959   extensionsList = <span class="keyword">new</span> <a class="codeRef" href="qlistbox.html">QListBox</a>( d-&gt;m_frame );
<a name="l03960"></a>03960   extensionsList-&gt;<a class="codeRef" href="qlistbox.html#setSelectionMode">setSelectionMode</a>( QListBox::Extended );
<a name="l03961"></a>03961   grid-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCellWidget">addMultiCellWidget</a>(extensionsList, 0, 3, 0, 0);
<a name="l03962"></a>03962 
<a name="l03963"></a>03963   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(addExtensionButton, 1, 1);
<a name="l03964"></a>03964   grid-&gt;<a class="codeRef" href="qgridlayout.html#addWidget">addWidget</a>(delExtensionButton, 2, 1);
<a name="l03965"></a>03965 
<a name="l03966"></a>03966   availableExtensionsList = <span class="keyword">new</span> <a class="codeRef" href="qlistbox.html">QListBox</a>( d-&gt;m_frame );
<a name="l03967"></a>03967   availableExtensionsList-&gt;<a class="codeRef" href="qlistbox.html#setSelectionMode">setSelectionMode</a>( QListBox::Extended );
<a name="l03968"></a>03968   grid-&gt;<a class="codeRef" href="qgridlayout.html#addMultiCellWidget">addMultiCellWidget</a>(availableExtensionsList, 0, 3, 2, 2);
<a name="l03969"></a>03969 
<a name="l03970"></a>03970   <a class="codeRef" href="qstring.html">QString</a> path = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path() ;
<a name="l03971"></a>03971   <a class="codeRef" href="qfile.html">QFile</a> f( path );
<a name="l03972"></a>03972   <span class="keywordflow">if</span> ( !f.<a class="codeRef" href="qfile.html#open">open</a>( IO_ReadOnly ) )
<a name="l03973"></a>03973     <span class="keywordflow">return</span>;
<a name="l03974"></a>03974   f.<a class="codeRef" href="qfile.html#close">close</a>();
<a name="l03975"></a>03975 
<a name="l03976"></a>03976   KDesktopFile config( path );
<a name="l03977"></a>03977   <a class="codeRef" href="qstring.html">QString</a> commentStr = config.readComment();
<a name="l03978"></a>03978   <a class="codeRef" href="qstring.html">QString</a> genNameStr = config.readGenericName();
<a name="l03979"></a>03979 
<a name="l03980"></a>03980   <a class="codeRef" href="qstringlist.html">QStringList</a> selectedTypes = config.readListEntry( <span class="stringliteral">&quot;ServiceTypes&quot;</span> );
<a name="l03981"></a>03981   <span class="comment">// For compatibility with KDE 1.x</span>
<a name="l03982"></a>03982   selectedTypes += config.readListEntry( <span class="stringliteral">&quot;MimeType&quot;</span>, <span class="charliteral">&#39;;&#39;</span> );
<a name="l03983"></a>03983 
<a name="l03984"></a>03984   <a class="codeRef" href="qstring.html">QString</a> nameStr = config.readName();
<a name="l03985"></a>03985   <span class="keywordflow">if</span> ( nameStr.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() || d-&gt;m_kdesktopMode ) {
<a name="l03986"></a>03986     <span class="comment">// We&#39;ll use the file name if no name is specified</span>
<a name="l03987"></a>03987     <span class="comment">// because we _need_ a Name for a valid file.</span>
<a name="l03988"></a>03988     <span class="comment">// But let&#39;s do it in apply, not here, so that we pick up the right name.</span>
<a name="l03989"></a>03989     setDirty();
<a name="l03990"></a>03990   }
<a name="l03991"></a>03991 
<a name="l03992"></a>03992   commentEdit-&gt;<a class="codeRef" href="qlineedit.html#setText">setText</a>( commentStr );
<a name="l03993"></a>03993   genNameEdit-&gt;<a class="codeRef" href="qlineedit.html#setText">setText</a>( genNameStr );
<a name="l03994"></a>03994   <span class="keywordflow">if</span> ( nameEdit )
<a name="l03995"></a>03995       nameEdit-&gt;<a class="codeRef" href="qlineedit.html#setText">setText</a>( nameStr );
<a name="l03996"></a>03996 
<a name="l03997"></a>03997   selectedTypes.<a class="codeRef" href="qstringlist.html#sort">sort</a>();
<a name="l03998"></a>03998   QStringList::Iterator sit = selectedTypes.begin();
<a name="l03999"></a>03999   <span class="keywordflow">for</span>( ; sit != selectedTypes.end(); ++sit ) {
<a name="l04000"></a>04000     <span class="keywordflow">if</span> ( !((*sit).isEmpty()) )
<a name="l04001"></a>04001       extensionsList-&gt;<a class="codeRef" href="qlistbox.html#insertItem">insertItem</a>( *sit );
<a name="l04002"></a>04002   }
<a name="l04003"></a>04003 
<a name="l04004"></a>04004   KMimeType::List mimeTypes = KMimeType::allMimeTypes();
<a name="l04005"></a>04005   <a class="codeRef" href="qvaluelistiterator.html">QValueListIterator&lt;KMimeType::Ptr&gt;</a> it2 = mimeTypes.begin();
<a name="l04006"></a>04006   <span class="keywordflow">for</span> ( ; it2 != mimeTypes.end(); ++it2 )
<a name="l04007"></a>04007     addMimeType ( (*it2)-&gt;name() );
<a name="l04008"></a>04008 
<a name="l04009"></a>04009   updateButton();
<a name="l04010"></a>04010 
<a name="l04011"></a>04011   <a class="codeRef" href="qobject.html#connect">connect</a>( extensionsList, SIGNAL( highlighted( <span class="keywordtype">int</span> ) ),
<a name="l04012"></a>04012            <span class="keyword">this</span>, SLOT( updateButton() ) );
<a name="l04013"></a>04013   <a class="codeRef" href="qobject.html#connect">connect</a>( availableExtensionsList, SIGNAL( highlighted( <span class="keywordtype">int</span> ) ),
<a name="l04014"></a>04014            <span class="keyword">this</span>, SLOT( updateButton() ) );
<a name="l04015"></a>04015 
<a name="l04016"></a>04016   <a class="codeRef" href="qobject.html#connect">connect</a>( addExtensionButton, SIGNAL( clicked() ),
<a name="l04017"></a>04017            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l04018"></a>04018   <a class="codeRef" href="qobject.html#connect">connect</a>( delExtensionButton, SIGNAL( clicked() ),
<a name="l04019"></a>04019            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l04020"></a>04020   <span class="keywordflow">if</span> ( nameEdit )
<a name="l04021"></a>04021       <a class="codeRef" href="qobject.html#connect">connect</a>( nameEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l04022"></a>04022                <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l04023"></a>04023   <a class="codeRef" href="qobject.html#connect">connect</a>( commentEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l04024"></a>04024            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l04025"></a>04025   <a class="codeRef" href="qobject.html#connect">connect</a>( genNameEdit, SIGNAL( textChanged( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; ) ),
<a name="l04026"></a>04026            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l04027"></a>04027   <a class="codeRef" href="qobject.html#connect">connect</a>( availableExtensionsList, SIGNAL( selected( <span class="keywordtype">int</span> ) ),
<a name="l04028"></a>04028            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l04029"></a>04029   <a class="codeRef" href="qobject.html#connect">connect</a>( extensionsList, SIGNAL( selected( <span class="keywordtype">int</span> ) ),
<a name="l04030"></a>04030            <span class="keyword">this</span>, SIGNAL( <a class="code" href="classKPropsDlgPlugin.html#a50aadff2df577ad8cd112a1b9f9252ee" title="Emit this signal when the user changed anything in the plugin&#39;s tabs.">changed</a>() ) );
<a name="l04031"></a>04031 }
<a name="l04032"></a>04032 
<a name="l04033"></a>04033 KApplicationPropsPlugin::~KApplicationPropsPlugin()
<a name="l04034"></a>04034 {
<a name="l04035"></a>04035   <span class="keyword">delete</span> d;
<a name="l04036"></a>04036 }
<a name="l04037"></a>04037 
<a name="l04038"></a>04038 <span class="comment">// QString KApplicationPropsPlugin::tabName () const</span>
<a name="l04039"></a>04039 <span class="comment">// {</span>
<a name="l04040"></a>04040 <span class="comment">//   return i18n (&quot;&amp;Application&quot;);</span>
<a name="l04041"></a>04041 <span class="comment">// }</span>
<a name="l04042"></a>04042 
<a name="l04043"></a>04043 <span class="keywordtype">void</span> KApplicationPropsPlugin::updateButton()
<a name="l04044"></a>04044 {
<a name="l04045"></a>04045     addExtensionButton-&gt;setEnabled(availableExtensionsList-&gt;<a class="codeRef" href="qlistbox.html#currentItem">currentItem</a>()&gt;-1);
<a name="l04046"></a>04046     delExtensionButton-&gt;setEnabled(extensionsList-&gt;<a class="codeRef" href="qlistbox.html#currentItem">currentItem</a>()&gt;-1);
<a name="l04047"></a>04047 }
<a name="l04048"></a>04048 
<a name="l04049"></a>04049 <span class="keywordtype">void</span> KApplicationPropsPlugin::addMimeType( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; name )
<a name="l04050"></a>04050 {
<a name="l04051"></a>04051   <span class="comment">// Add a mimetype to the list of available mime types if not in the extensionsList</span>
<a name="l04052"></a>04052 
<a name="l04053"></a>04053   <span class="keywordtype">bool</span> insert = <span class="keyword">true</span>;
<a name="l04054"></a>04054 
<a name="l04055"></a>04055   <span class="keywordflow">for</span> ( uint i = 0; i &lt; extensionsList-&gt;<a class="codeRef" href="qlistbox.html#count">count</a>(); i++ )
<a name="l04056"></a>04056     <span class="keywordflow">if</span> ( extensionsList-&gt;<a class="codeRef" href="qlistbox.html#text">text</a>( i ) == <a class="codeRef" href="qobject.html#name">name</a> )
<a name="l04057"></a>04057       insert = <span class="keyword">false</span>;
<a name="l04058"></a>04058 
<a name="l04059"></a>04059   <span class="keywordflow">if</span> ( insert )
<a name="l04060"></a>04060   {
<a name="l04061"></a>04061     availableExtensionsList-&gt;<a class="codeRef" href="qlistbox.html#insertItem">insertItem</a>( name );
<a name="l04062"></a>04062     availableExtensionsList-&gt;<a class="codeRef" href="qlistbox.html#sort">sort</a>();
<a name="l04063"></a>04063   }
<a name="l04064"></a>04064 }
<a name="l04065"></a>04065 
<a name="l04066"></a>04066 <span class="keywordtype">bool</span> KApplicationPropsPlugin::supports( KFileItemList _items )
<a name="l04067"></a>04067 {
<a name="l04068"></a>04068   <span class="comment">// same constraints as KExecPropsPlugin : desktop file with Type = Application</span>
<a name="l04069"></a>04069   <span class="keywordflow">return</span> KExecPropsPlugin::supports( _items );
<a name="l04070"></a>04070 }
<a name="l04071"></a>04071 
<a name="l04072"></a><a class="code" href="classKApplicationPropsPlugin.html#a2dc5f3b21cad9d8a8756627222bb158f">04072</a> <span class="keywordtype">void</span> <a class="code" href="classKApplicationPropsPlugin.html#a2dc5f3b21cad9d8a8756627222bb158f" title="Applies all changes to the file.">KApplicationPropsPlugin::applyChanges</a>()
<a name="l04073"></a>04073 {
<a name="l04074"></a>04074   <a class="codeRef" href="qstring.html">QString</a> path = <a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().path();
<a name="l04075"></a>04075 
<a name="l04076"></a>04076   <a class="codeRef" href="qfile.html">QFile</a> f( path );
<a name="l04077"></a>04077 
<a name="l04078"></a>04078   <span class="keywordflow">if</span> ( !f.<a class="codeRef" href="qfile.html#open">open</a>( IO_ReadWrite ) ) {
<a name="l04079"></a>04079     KMessageBox::sorry( 0, i18n(<span class="stringliteral">&quot;&lt;qt&gt;Could not save properties. You do not &quot;</span>
<a name="l04080"></a>04080                 <span class="stringliteral">&quot;have sufficient access to write to &lt;b&gt;%1&lt;/b&gt;.&lt;/qt&gt;&quot;</span>).arg(path));
<a name="l04081"></a>04081     <span class="keywordflow">return</span>;
<a name="l04082"></a>04082   }
<a name="l04083"></a>04083   f.<a class="codeRef" href="qfile.html#close">close</a>();
<a name="l04084"></a>04084 
<a name="l04085"></a>04085   KSimpleConfig config( path );
<a name="l04086"></a>04086   config.setDesktopGroup();
<a name="l04087"></a>04087   config.writeEntry( <span class="stringliteral">&quot;Type&quot;</span>, <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;Application&quot;</span>));
<a name="l04088"></a>04088   config.writeEntry( <span class="stringliteral">&quot;Comment&quot;</span>, commentEdit-&gt;<a class="codeRef" href="qlineedit.html#text">text</a>() );
<a name="l04089"></a>04089   config.writeEntry( <span class="stringliteral">&quot;Comment&quot;</span>, commentEdit-&gt;<a class="codeRef" href="qlineedit.html#text">text</a>(), <span class="keyword">true</span>, <span class="keyword">false</span>, true ); <span class="comment">// for compat</span>
<a name="l04090"></a>04090   config.writeEntry( <span class="stringliteral">&quot;GenericName&quot;</span>, genNameEdit-&gt;<a class="codeRef" href="qlineedit.html#text">text</a>() );
<a name="l04091"></a>04091   config.writeEntry( <span class="stringliteral">&quot;GenericName&quot;</span>, genNameEdit-&gt;<a class="codeRef" href="qlineedit.html#text">text</a>(), <span class="keyword">true</span>, <span class="keyword">false</span>, true ); <span class="comment">// for compat</span>
<a name="l04092"></a>04092 
<a name="l04093"></a>04093   <a class="codeRef" href="qstringlist.html">QStringList</a> selectedTypes;
<a name="l04094"></a>04094   <span class="keywordflow">for</span> ( uint i = 0; i &lt; extensionsList-&gt;<a class="codeRef" href="qlistbox.html#count">count</a>(); i++ )
<a name="l04095"></a>04095     selectedTypes.append( extensionsList-&gt;<a class="codeRef" href="qlistbox.html#text">text</a>( i ) );
<a name="l04096"></a>04096 
<a name="l04097"></a>04097   config.writeEntry( <span class="stringliteral">&quot;MimeType&quot;</span>, selectedTypes, <span class="charliteral">&#39;;&#39;</span> );
<a name="l04098"></a>04098   config.writeEntry( <span class="stringliteral">&quot;ServiceTypes&quot;</span>, <span class="stringliteral">&quot;&quot;</span> );
<a name="l04099"></a>04099   <span class="comment">// hmm, actually it should probably be the contrary (but see also typeslistitem.cpp)</span>
<a name="l04100"></a>04100 
<a name="l04101"></a>04101   <a class="codeRef" href="qstring.html">QString</a> nameStr = nameEdit ? nameEdit-&gt;<a class="codeRef" href="qlineedit.html#text">text</a>() : QString::null;
<a name="l04102"></a>04102   <span class="keywordflow">if</span> ( nameStr.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() ) <span class="comment">// nothing entered, or widget not existing at all (kdesktop mode)</span>
<a name="l04103"></a>04103     nameStr = nameFromFileName(<a class="code" href="classKPropsDlgPlugin.html#a7f0cae5dbbf64ebe3708d669e2719e81" title="Pointer to the dialog.">properties</a>-&gt;<a class="code" href="classKPropertiesDialog.html#aad240cacd1826a982407d1531239006b" title="The URL of the file that has its properties being displayed.">kurl</a>().fileName());
<a name="l04104"></a>04104 
<a name="l04105"></a>04105   config.writeEntry( <span class="stringliteral">&quot;Name&quot;</span>, nameStr );
<a name="l04106"></a>04106   config.writeEntry( <span class="stringliteral">&quot;Name&quot;</span>, nameStr, <span class="keyword">true</span>, <span class="keyword">false</span>, <span class="keyword">true</span> );
<a name="l04107"></a>04107 
<a name="l04108"></a>04108   config.sync();
<a name="l04109"></a>04109 }
<a name="l04110"></a>04110 
<a name="l04111"></a>04111 <span class="keywordtype">void</span> KApplicationPropsPlugin::slotAddExtension()
<a name="l04112"></a>04112 {
<a name="l04113"></a>04113   <a class="codeRef" href="qlistboxitem.html">QListBoxItem</a> *item = availableExtensionsList-&gt;<a class="codeRef" href="qlistbox.html#firstItem">firstItem</a>();
<a name="l04114"></a>04114   <a class="codeRef" href="qlistboxitem.html">QListBoxItem</a> *nextItem;
<a name="l04115"></a>04115 
<a name="l04116"></a>04116   <span class="keywordflow">while</span> ( item )
<a name="l04117"></a>04117   {
<a name="l04118"></a>04118     nextItem = item-&gt;<a class="codeRef" href="qlistboxitem.html#next">next</a>();
<a name="l04119"></a>04119 
<a name="l04120"></a>04120     <span class="keywordflow">if</span> ( item-&gt;<a class="codeRef" href="qlistboxitem.html#isSelected">isSelected</a>() )
<a name="l04121"></a>04121     {
<a name="l04122"></a>04122       extensionsList-&gt;<a class="codeRef" href="qlistbox.html#insertItem">insertItem</a>( item-&gt;<a class="codeRef" href="qlistboxitem.html#text">text</a>() );
<a name="l04123"></a>04123       availableExtensionsList-&gt;<a class="codeRef" href="qlistbox.html#removeItem">removeItem</a>( availableExtensionsList-&gt;<a class="codeRef" href="qlistbox.html#index">index</a>( item ) );
<a name="l04124"></a>04124     }
<a name="l04125"></a>04125 
<a name="l04126"></a>04126     item = nextItem;
<a name="l04127"></a>04127   }
<a name="l04128"></a>04128 
<a name="l04129"></a>04129   extensionsList-&gt;<a class="codeRef" href="qlistbox.html#sort">sort</a>();
<a name="l04130"></a>04130   updateButton();
<a name="l04131"></a>04131 }
<a name="l04132"></a>04132 
<a name="l04133"></a>04133 <span class="keywordtype">void</span> KApplicationPropsPlugin::slotDelExtension()
<a name="l04134"></a>04134 {
<a name="l04135"></a>04135   <a class="codeRef" href="qlistboxitem.html">QListBoxItem</a> *item = extensionsList-&gt;<a class="codeRef" href="qlistbox.html#firstItem">firstItem</a>();
<a name="l04136"></a>04136   <a class="codeRef" href="qlistboxitem.html">QListBoxItem</a> *nextItem;
<a name="l04137"></a>04137 
<a name="l04138"></a>04138   <span class="keywordflow">while</span> ( item )
<a name="l04139"></a>04139   {
<a name="l04140"></a>04140     nextItem = item-&gt;<a class="codeRef" href="qlistboxitem.html#next">next</a>();
<a name="l04141"></a>04141 
<a name="l04142"></a>04142     <span class="keywordflow">if</span> ( item-&gt;<a class="codeRef" href="qlistboxitem.html#isSelected">isSelected</a>() )
<a name="l04143"></a>04143     {
<a name="l04144"></a>04144       availableExtensionsList-&gt;<a class="codeRef" href="qlistbox.html#insertItem">insertItem</a>( item-&gt;<a class="codeRef" href="qlistboxitem.html#text">text</a>() );
<a name="l04145"></a>04145       extensionsList-&gt;<a class="codeRef" href="qlistbox.html#removeItem">removeItem</a>( extensionsList-&gt;<a class="codeRef" href="qlistbox.html#index">index</a>( item ) );
<a name="l04146"></a>04146     }
<a name="l04147"></a>04147 
<a name="l04148"></a>04148     item = nextItem;
<a name="l04149"></a>04149   }
<a name="l04150"></a>04150 
<a name="l04151"></a>04151   availableExtensionsList-&gt;<a class="codeRef" href="qlistbox.html#sort">sort</a>();
<a name="l04152"></a>04152   updateButton();
<a name="l04153"></a>04153 }
<a name="l04154"></a>04154 
<a name="l04155"></a>04155 
<a name="l04156"></a>04156 
<a name="l04157"></a>04157 <span class="preprocessor">#include &quot;kpropertiesdialog.moc&quot;</span>
</pre></div></div>
</div>
    </div></div>


      </td>
  </tr>
  <tr>
    <td valign="top" id="leftmenu" width="25%">
      <a name="navigation"></a>
      <div class="menu_box"><h2>kio/kfile</h2>
<div class="nav_list">
<ul><li><a href="index.html">Main Page</a></li><li><a href="hierarchy.html">Class Hierarchy</a></li><li><a href="classes.html">Alphabetical List</a></li><li><a href="annotated.html">Class List</a></li><li><a href="files.html">File List</a></li><li><a href="functions.html">Class Members</a></li><li><a href="pages.html">Related Pages</a></li></ul>
<!--
<h2>Class Picker</h2>
<div style="text-align: center;">
<form name="guideform">
<select name="guidelinks" style="width:100%;" onChange="window.location=document.guideform.guidelinks.options[document.guideform.guidelinks.selectedIndex].value">
<option value="annotated.html">-- Choose --</option>
  <option value="classKApplicationPropsPlugin.html">kapplicationpropsplugin</option>,  <option value="classKBindingPropsPlugin.html">kbindingpropsplugin</option>,  <option value="classKCombiView.html">kcombiview</option>,  <option value="classKDesktopPropsPlugin.html">kdesktoppropsplugin</option>,  <option value="classKDevicePropsPlugin.html">kdevicepropsplugin</option>,  <option value="classKDirOperator.html">kdiroperator</option>,  <option value="classKDirSelectDialog.html">kdirselectdialog</option>,  <option value="classKDirSize.html">kdirsize</option>,  <option value="classKDiskFreeSp.html">kdiskfreesp</option>,  <option value="classKEncodingFileDialog.html">kencodingfiledialog</option>,  <option value="classKExecPropsPlugin.html">kexecpropsplugin</option>,  <option value="classKFile.html">kfile</option>,  <option value="classKFileDetailView.html">kfiledetailview</option>,  <option value="classKFileDialog.html">kfiledialog</option>,  <option value="classKFileIconView.html">kfileiconview</option>,  <option value="classKFileIconViewItem.html">kfileiconviewitem</option>,  <option value="classKFileListViewItem.html">kfilelistviewitem</option>,  <option value="classKFileMetaInfoWidget.html">kfilemetainfowidget</option>,  <option value="classKFileMetaPropsPlugin.html">kfilemetapropsplugin</option>,  <option value="classKFileOpenWithHandler.html">kfileopenwithhandler</option>,  <option value="classKFilePermissionsPropsPlugin.html">kfilepermissionspropsplugin</option>,  <option value="classKFilePreview.html">kfilepreview</option>,  <option value="classKFilePropsPlugin.html">kfilepropsplugin</option>,  <option value="classKFileSharePropsPlugin.html">kfilesharepropsplugin</option>,  <option value="classKFileTreeBranch.html">kfiletreebranch</option>,  <option value="classKFileTreeView.html">kfiletreeview</option>,  <option value="classKFileTreeViewItem.html">kfiletreeviewitem</option>,  <option value="classKFileView.html">kfileview</option>,  <option value="classKFileViewSignaler.html">kfileviewsignaler</option>,  <option value="classKIconButton.html">kiconbutton</option>,  <option value="classKIconCanvas.html">kiconcanvas</option>,  <option value="classKIconDialog.html">kicondialog</option>,  <option value="classKImageFilePreview.html">kimagefilepreview</option>,  <option value="classKNotifyDialog.html">knotifydialog</option>,  <option value="classKOpenWithDlg.html">kopenwithdlg</option>,  <option value="classKPreviewPropsPlugin.html">kpreviewpropsplugin</option>,  <option value="classKPreviewWidgetBase.html">kpreviewwidgetbase</option>,  <option value="classKPropertiesDialog.html">kpropertiesdialog</option>,  <option value="classKPropsDlgPlugin.html">kpropsdlgplugin</option>,  <option value="classKRecentDirs.html">krecentdirs</option>,  <option value="classKRecentDocument.html">krecentdocument</option>,  <option value="classKURLBar.html">kurlbar</option>,  <option value="classKURLBarItem.html">kurlbaritem</option>,  <option value="classKURLBarItemDialog.html">kurlbaritemdialog</option>,  <option value="classKURLBarListBox.html">kurlbarlistbox</option>,  <option value="classKURLComboBox.html">kurlcombobox</option>,  <option value="classKURLComboRequester.html">kurlcomborequester</option>,  <option value="classKURLPropsPlugin.html">kurlpropsplugin</option>,  <option value="classKURLRequester.html">kurlrequester</option>,  <option value="classKURLRequesterDlg.html">kurlrequesterdlg</option>,
</select>
</form>
</div>
-->
</div></div>
<div class="menu_box"><h2>API Dox</h2>
<div class="nav_list">
<ul>
<li><a href="../../../arts/html/index.html">arts</a></li><li><a href="../../../dcop/html/index.html">dcop</a></li><li><a href="../../../dnssd/html/index.html">dnssd</a></li><li><a href="../../../interfaces/html/index.html">interfaces</a></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<a href="../../../interfaces/kimproxy/interface/html/index.html">interface</a></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<a href="../../../interfaces/kimproxy/library/html/index.html">library</a></li><li>&nbsp;&nbsp;<a href="../../../interfaces/kspeech/html/index.html">kspeech</a></li><li>&nbsp;&nbsp;<a href="../../../interfaces/ktexteditor/html/index.html">ktexteditor</a></li><li><a href="../../../kabc/html/index.html">kabc</a></li><li><a href="../../../kate/html/index.html">kate</a></li><li><a href="../../../kcmshell/html/index.html">kcmshell</a></li><li><a href="../../../kdecore/html/index.html">kdecore</a></li><li><a href="../../../kded/html/index.html">kded</a></li><li><a href="../../../kdefx/html/index.html">kdefx</a></li><li><a href="../../../kdeprint/html/index.html">kdeprint</a></li><li><a href="../../../kdesu/html/index.html">kdesu</a></li><li><a href="../../../kdeui/html/index.html">kdeui</a></li><li><a href="../../../kdoctools/html/index.html">kdoctools</a></li><li><a href="../../../khtml/html/index.html">khtml</a></li><li><a href="../../../kimgio/html/index.html">kimgio</a></li><li><a href="../../../kinit/html/index.html">kinit</a></li><li><a href="../../../kio/html/index.html">kio</a></li><li>&nbsp;&nbsp;<a href="../../../kio/bookmarks/html/index.html">bookmarks</a></li><li>&nbsp;&nbsp;<a href="../../../kio/httpfilter/html/index.html">httpfilter</a></li><li>&nbsp;&nbsp;<a href="../../../kio/kfile/html/index.html">kfile</a></li><li>&nbsp;&nbsp;<a href="../../../kio/kio/html/index.html">kio</a></li><li>&nbsp;&nbsp;<a href="../../../kio/kioexec/html/index.html">kioexec</a></li><li>&nbsp;&nbsp;<a href="../../../kio/kpasswdserver/html/index.html">kpasswdserver</a></li><li>&nbsp;&nbsp;<a href="../../../kio/kssl/html/index.html">kssl</a></li><li><a href="../../../kioslave/html/index.html">kioslave</a></li><li>&nbsp;&nbsp;<a href="../../../kioslave/http/html/index.html">http</a></li><li><a href="../../../kjs/html/index.html">kjs</a></li><li><a href="../../../kmdi/html/index.html">kmdi</a></li><li>&nbsp;&nbsp;<a href="../../../kmdi/kmdi/html/index.html">kmdi</a></li><li><a href="../../../knewstuff/html/index.html">knewstuff</a></li><li><a href="../../../kparts/html/index.html">kparts</a></li><li><a href="../../../kresources/html/index.html">kresources</a></li><li><a href="../../../kspell2/html/index.html">kspell2</a></li><li><a href="../../../kunittest/html/index.html">kunittest</a></li><li><a href="../../../kutils/html/index.html">kutils</a></li><li><a href="../../../kwallet/html/index.html">kwallet</a></li><li><a href="../../../libkmid/html/index.html">libkmid</a></li><li><a href="../../../libkscreensaver/html/index.html">libkscreensaver</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>