Sophie

Sophie

distrib > Arklinux > devel > i586 > media > main > by-pkgid > 55a0eeb6652adcfc2fb1b1094c78b066 > files > 296

libqtpod-devel-0.4.2-1ark.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>libqtpod: libqtpod/src/track.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.0 -->
<div class="tabs">
  <ul>
    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="annotated.html"><span>Classes</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="dirs.html"><span>Directories</span></a></li>
    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
    <li><a href="examples.html"><span>Examples</span></a></li>
  </ul></div>
<div class="nav">
<a class="el" href="dir_1c4e625326ae5a16dce68a64877e05dc.html">libqtpod</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_23d909e7812f47a039ca3653afa1ae8a.html">src</a></div>
<h1>track.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001  <span class="comment">/*****************************************************************************</span>
<a name="l00002"></a>00002 <span class="comment"> *   Copyright (C) 2004 by Michael Schulze                                    *</span>
<a name="l00003"></a>00003 <span class="comment"> *   mike.s@genion.de                                                         *</span>
<a name="l00004"></a>00004 <span class="comment"> *                                                                            *</span>
<a name="l00005"></a>00005 <span class="comment"> *  The code contained in this file is free software; you can redistribute    *</span>
<a name="l00006"></a>00006 <span class="comment"> *  it and/or modify it under the terms of the GNU Lesser General Public      *</span>
<a name="l00007"></a>00007 <span class="comment"> *  License as published by the Free Software Foundation; either version      *</span>
<a name="l00008"></a>00008 <span class="comment"> *  2.1 of the License, or (at your option) any later version.                *</span>
<a name="l00009"></a>00009 <span class="comment"> *                                                                            *</span>
<a name="l00010"></a>00010 <span class="comment"> *  This file is distributed in the hope that it will be useful,              *</span>
<a name="l00011"></a>00011 <span class="comment"> *  but WITHOUT ANY WARRANTY; without even the implied warranty of            *</span>
<a name="l00012"></a>00012 <span class="comment"> *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *</span>
<a name="l00013"></a>00013 <span class="comment"> *  Lesser General Public License for more details.                           *</span>
<a name="l00014"></a>00014 <span class="comment"> *                                                                            *</span>
<a name="l00015"></a>00015 <span class="comment"> *  You should have received a copy of the GNU Lesser General Public          *</span>
<a name="l00016"></a>00016 <span class="comment"> *  License along with this code; if not, write to the Free Software          *</span>
<a name="l00017"></a>00017 <span class="comment"> *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *</span>
<a name="l00018"></a>00018 <span class="comment"> *                                                                            *</span>
<a name="l00019"></a>00019 <span class="comment"> *  iTunes and iPod are trademarks of Apple                                   *</span>
<a name="l00020"></a>00020 <span class="comment"> *                                                                            *</span>
<a name="l00021"></a>00021 <span class="comment"> *  This product is not supported/written/published by Apple!                 *</span>
<a name="l00022"></a>00022 <span class="comment"> *****************************************************************************/</span>
<a name="l00023"></a>00023 <span class="preprocessor">#ifndef ITUNESDBTRACK_H</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define ITUNESDBTRACK_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span>
<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;qdatetime.h&gt;</span>
<a name="l00027"></a>00027 
<a name="l00028"></a>00028 <span class="preprocessor">#include "utils.h"</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "listitem.h"</span>
<a name="l00030"></a>00030 
<a name="l00031"></a>00031 <span class="keyword">namespace </span>itunesdb {
<a name="l00032"></a>00032 
<a name="l00033"></a>00033 <span class="comment"></span>
<a name="l00034"></a>00034 <span class="comment">/**</span>
<a name="l00035"></a>00035 <span class="comment"> * @brief Represents a track in the database.</span>
<a name="l00036"></a>00036 <span class="comment"> *</span>
<a name="l00037"></a>00037 <span class="comment"> * This class mainly acts as a data access object for reading and writing track entries to/from the database file.</span>
<a name="l00038"></a>00038 <span class="comment"> * @author Michael Schulze</span>
<a name="l00039"></a>00039 <span class="comment">*/</span>
<a name="l00040"></a><a class="code" href="classitunesdb_1_1Track.html">00040</a> <span class="keyword">class </span><a class="code" href="classitunesdb_1_1Track.html">Track</a> : <span class="keyword">public</span> <a class="code" href="classitunesdb_1_1ListItem.html">ListItem</a> {
<a name="l00041"></a>00041 
<a name="l00042"></a>00042     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classitunesdb_1_1ItunesDBParser.html">ItunesDBParser</a>;
<a name="l00043"></a>00043     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classitunesdb_1_1ItunesDBWriter.html">ItunesDBWriter</a>;
<a name="l00044"></a>00044 
<a name="l00045"></a>00045 <span class="keyword">public</span>:
<a name="l00046"></a>00046 
<a name="l00047"></a>00047     <span class="keyword">enum</span> MediaType {
<a name="l00048"></a>00048         Audio_Video     = 0x00,
<a name="l00049"></a>00049         Audio           = 0x01,
<a name="l00050"></a>00050         Video           = 0x02,
<a name="l00051"></a>00051         Podcast         = 0x04,
<a name="l00052"></a>00052         Video_Podcast   = 0x06,
<a name="l00053"></a>00053         Audiobook       = 0x08,
<a name="l00054"></a>00054         Music_Video     = 0x20,
<a name="l00055"></a>00055         TV_Show         = 0x40,
<a name="l00056"></a>00056         TV_Show_w_Audio = 0x60
<a name="l00057"></a>00057     };
<a name="l00058"></a>00058 
<a name="l00059"></a>00059     <a class="code" href="classitunesdb_1_1Track.html">Track</a>( Q_UINT32 trackID = 0 );
<a name="l00060"></a>00060 
<a name="l00061"></a>00061     <span class="keyword">virtual</span> ~<a class="code" href="classitunesdb_1_1Track.html">Track</a>();
<a name="l00062"></a>00062 <span class="comment"></span>
<a name="l00063"></a>00063 <span class="comment">    /**</span>
<a name="l00064"></a>00064 <span class="comment">     * Returns the key for the track in the ITunesDB database</span>
<a name="l00065"></a>00065 <span class="comment">     * @return the key for the track in the ITunesDB database</span>
<a name="l00066"></a>00066 <span class="comment">     */</span>
<a name="l00067"></a>00067     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#62e01998e794bef118192fabb09f0625">getID</a>() <span class="keyword">const</span>;
<a name="l00068"></a>00068 <span class="comment"></span>
<a name="l00069"></a>00069 <span class="comment">    /**</span>
<a name="l00070"></a>00070 <span class="comment">     * Returns the album the track is released for</span>
<a name="l00071"></a>00071 <span class="comment">     * @return the albumname</span>
<a name="l00072"></a>00072 <span class="comment">     */</span>
<a name="l00073"></a>00073     <span class="keyword">const</span> QString &amp; <a class="code" href="classitunesdb_1_1Track.html#50c5b73deb47467f17b9623911d384d6">getAlbum</a>() <span class="keyword">const</span>;
<a name="l00074"></a>00074 <span class="comment"></span>
<a name="l00075"></a>00075 <span class="comment">    /**</span>
<a name="l00076"></a>00076 <span class="comment">     * Returns the album the track is released for</span>
<a name="l00077"></a>00077 <span class="comment">     * @return the albumname for sorting</span>
<a name="l00078"></a>00078 <span class="comment">     */</span>
<a name="l00079"></a>00079     <span class="keyword">const</span> QString &amp; <a class="code" href="classitunesdb_1_1Track.html#1794e681dec841b8d17dba77327712fa">getAlbumForSort</a>() <span class="keyword">const</span>;
<a name="l00080"></a>00080 <span class="comment"></span>
<a name="l00081"></a>00081 <span class="comment">    /**</span>
<a name="l00082"></a>00082 <span class="comment">     * Returns the artist</span>
<a name="l00083"></a>00083 <span class="comment">     * @return the artists name</span>
<a name="l00084"></a>00084 <span class="comment">     */</span>
<a name="l00085"></a>00085     <span class="keyword">const</span> QString &amp; <a class="code" href="classitunesdb_1_1Track.html#aa23e0428a17def319a62a291327c1ea">getArtist</a>() <span class="keyword">const</span>;
<a name="l00086"></a>00086 <span class="comment"></span>
<a name="l00087"></a>00087 <span class="comment">    /**</span>
<a name="l00088"></a>00088 <span class="comment">     * @deprecated use Track::getArtistNameForSort() instead</span>
<a name="l00089"></a>00089 <span class="comment">     * @see Track::getArtistNameForSort()</span>
<a name="l00090"></a>00090 <span class="comment">     */</span>
<a name="l00091"></a>00091     QString <a class="code" href="classitunesdb_1_1Track.html#5bfc5eee78c21e4f42fc340111b9c60a">getPlainArtistName</a>() <span class="keyword">const</span> __attribute__((deprecated));
<a name="l00092"></a>00092 <span class="comment"></span>
<a name="l00093"></a>00093 <span class="comment">    /**</span>
<a name="l00094"></a>00094 <span class="comment">     * Returns the category</span>
<a name="l00095"></a>00095 <span class="comment">     * @return the category</span>
<a name="l00096"></a>00096 <span class="comment">     */</span>
<a name="l00097"></a>00097     <span class="keyword">const</span> QString&amp; <a class="code" href="classitunesdb_1_1Track.html#3c18acf05673392dd77a442b55fb16b4">getCategory</a>() <span class="keyword">const</span>;
<a name="l00098"></a>00098 <span class="comment"></span>
<a name="l00099"></a>00099 <span class="comment">    /**</span>
<a name="l00100"></a>00100 <span class="comment">     * Returns the comment set for the track</span>
<a name="l00101"></a>00101 <span class="comment">     * @return the comment</span>
<a name="l00102"></a>00102 <span class="comment">     */</span>
<a name="l00103"></a>00103     <span class="keyword">const</span> QString &amp; <a class="code" href="classitunesdb_1_1Track.html#91de32a69e98467e07334d862d32ee76">getComment</a>() <span class="keyword">const</span>;
<a name="l00104"></a>00104 <span class="comment"></span>
<a name="l00105"></a>00105 <span class="comment">    /**</span>
<a name="l00106"></a>00106 <span class="comment">     * Returns the name of the (TV) show</span>
<a name="l00107"></a>00107 <span class="comment">     */</span>
<a name="l00108"></a>00108     <span class="keyword">const</span> QString &amp; <a class="code" href="classitunesdb_1_1Track.html#e20fd861d6bb12f7b960a94ba91a3b04">getTvShow</a>() <span class="keyword">const</span>;
<a name="l00109"></a>00109 <span class="comment"></span>
<a name="l00110"></a>00110 <span class="comment">    /**</span>
<a name="l00111"></a>00111 <span class="comment">     * Sets the name of the (TV) show</span>
<a name="l00112"></a>00112 <span class="comment">     */</span>
<a name="l00113"></a>00113     <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#6299892cc90da8e6c39ee66f59731601">setTvShow</a>( <span class="keyword">const</span> QString&amp; show );
<a name="l00114"></a>00114 <span class="comment"></span>
<a name="l00115"></a>00115 <span class="comment">    /**</span>
<a name="l00116"></a>00116 <span class="comment">     * Returns the title of the track</span>
<a name="l00117"></a>00117 <span class="comment">     * @return the title</span>
<a name="l00118"></a>00118 <span class="comment">     */</span>
<a name="l00119"></a>00119     <span class="keyword">const</span> QString &amp; <a class="code" href="classitunesdb_1_1Track.html#ed1aec0294874100aac1e9fbd8d87054">getTitle</a>() <span class="keyword">const</span>;
<a name="l00120"></a>00120 <span class="comment"></span>
<a name="l00121"></a>00121 <span class="comment">    /**</span>
<a name="l00122"></a>00122 <span class="comment">     * Returns the title of the track</span>
<a name="l00123"></a>00123 <span class="comment">     * @return the title of the track used for sorting</span>
<a name="l00124"></a>00124 <span class="comment">     */</span>
<a name="l00125"></a>00125     <span class="keyword">const</span> QString &amp; <a class="code" href="classitunesdb_1_1Track.html#50ecfb56b348bdda2e5945ea3aa7d6da">getTitleForSort</a>() <span class="keyword">const</span>;
<a name="l00126"></a>00126 <span class="comment"></span>
<a name="l00127"></a>00127 <span class="comment">    /**</span>
<a name="l00128"></a>00128 <span class="comment">     * Returns the genre of the track</span>
<a name="l00129"></a>00129 <span class="comment">     * @return the genre</span>
<a name="l00130"></a>00130 <span class="comment">     */</span>
<a name="l00131"></a>00131     <span class="keyword">const</span> QString &amp; <a class="code" href="classitunesdb_1_1Track.html#c7dc7a1fcc22fe39183804f75e8605e9">getGenre</a>() <span class="keyword">const</span>;
<a name="l00132"></a>00132 <span class="comment"></span>
<a name="l00133"></a>00133 <span class="comment">    /**</span>
<a name="l00134"></a>00134 <span class="comment">     * Returns the pathname of the track as stored in the itunesdb.</span>
<a name="l00135"></a>00135 <span class="comment">     * Be aware that the path is relative to the ipod base directory</span>
<a name="l00136"></a>00136 <span class="comment">     * and the path separator is ":".</span>
<a name="l00137"></a>00137 <span class="comment">     * @return pathname of the track</span>
<a name="l00138"></a>00138 <span class="comment">     */</span>
<a name="l00139"></a>00139     <span class="keyword">const</span> QString &amp; <a class="code" href="classitunesdb_1_1Track.html#eec94b05af98904488396a12362ce69a">getPathInfo</a>() <span class="keyword">const</span>;
<a name="l00140"></a>00140 <span class="comment"></span>
<a name="l00141"></a>00141 <span class="comment">    /**</span>
<a name="l00142"></a>00142 <span class="comment">     * Returns the composer</span>
<a name="l00143"></a>00143 <span class="comment">     * @return the composer</span>
<a name="l00144"></a>00144 <span class="comment">     */</span>
<a name="l00145"></a>00145     <span class="keyword">const</span> QString &amp; <a class="code" href="classitunesdb_1_1Track.html#0c0c8486cbe93147ee5515327c09dc07">getComposer</a>() <span class="keyword">const</span>;
<a name="l00146"></a>00146 <span class="comment"></span>
<a name="l00147"></a>00147 <span class="comment">    /**</span>
<a name="l00148"></a>00148 <span class="comment">     * Retunrs the EQ Setting</span>
<a name="l00149"></a>00149 <span class="comment">     */</span>
<a name="l00150"></a>00150     <span class="keyword">const</span> QString &amp; <a class="code" href="classitunesdb_1_1Track.html#b6a942f837b8ffb35cfb9bf8d3b993f1">getEqualizerSetting</a>() <span class="keyword">const</span>;
<a name="l00151"></a>00151 <span class="comment"></span>
<a name="l00152"></a>00152 <span class="comment">    /**</span>
<a name="l00153"></a>00153 <span class="comment">     * Returns some descriptional text for this piece of audio data.</span>
<a name="l00154"></a>00154 <span class="comment">     */</span>
<a name="l00155"></a>00155     <span class="keyword">const</span> QString&amp; <a class="code" href="classitunesdb_1_1Track.html#de40ed104d68d9a8280d11df8eb8c96a">getDescription</a>() <span class="keyword">const</span>;
<a name="l00156"></a>00156 <span class="comment"></span>
<a name="l00157"></a>00157 <span class="comment">    /**</span>
<a name="l00158"></a>00158 <span class="comment">     * Returns the grouping info for this song.</span>
<a name="l00159"></a>00159 <span class="comment">     */</span>
<a name="l00160"></a>00160     <span class="keyword">const</span> QString&amp; <a class="code" href="classitunesdb_1_1Track.html#00227c6c1191f76f99ff05a1cab0134b">getGrouping</a>() <span class="keyword">const</span>;
<a name="l00161"></a>00161 <span class="comment"></span>
<a name="l00162"></a>00162 <span class="comment">    /**</span>
<a name="l00163"></a>00163 <span class="comment">     * Returns the name of the artist for the whole album. This may be different if it's a soundtrack for example.</span>
<a name="l00164"></a>00164 <span class="comment">     */</span>
<a name="l00165"></a>00165     <span class="keyword">const</span> QString&amp; <a class="code" href="classitunesdb_1_1Track.html#76a73acb8401bf6abfedce258c0cb2f2">getAlbumArtist</a>() <span class="keyword">const</span>;
<a name="l00166"></a>00166 <span class="comment"></span>
<a name="l00167"></a>00167 <span class="comment">    /**</span>
<a name="l00168"></a>00168 <span class="comment">     * In case the band/artist name starts with a "The" this returns the name with the The</span>
<a name="l00169"></a>00169 <span class="comment">     * at the end (like "Prodigy, The" for "The Prodigy"). Otherwise the normal artist name</span>
<a name="l00170"></a>00170 <span class="comment">     * is returned.</span>
<a name="l00171"></a>00171 <span class="comment">     */</span>
<a name="l00172"></a>00172     <span class="keyword">const</span> QString&amp; <a class="code" href="classitunesdb_1_1Track.html#2d00e7e556d09cd31904d122e7788ff2">getAlbumArtistForSort</a>() <span class="keyword">const</span>;
<a name="l00173"></a>00173 <span class="comment"></span>
<a name="l00174"></a>00174 <span class="comment">    /**</span>
<a name="l00175"></a>00175 <span class="comment">     * In case the band/artist name starts with a "The" this returns the name with the The</span>
<a name="l00176"></a>00176 <span class="comment">     * at the end (like "Prodigy, The" for "The Prodigy"). Otherwise the normal artist name</span>
<a name="l00177"></a>00177 <span class="comment">     * is returned.</span>
<a name="l00178"></a>00178 <span class="comment">     */</span>
<a name="l00179"></a>00179     <span class="keyword">const</span> QString&amp; <a class="code" href="classitunesdb_1_1Track.html#9fe8b1d246dc98e4835496ae530c97e6">getArtistNameForSort</a>() <span class="keyword">const</span>;
<a name="l00180"></a>00180 <span class="comment"></span>
<a name="l00181"></a>00181 <span class="comment">    /**</span>
<a name="l00182"></a>00182 <span class="comment">     * Returns the list of keywords pertaining the track</span>
<a name="l00183"></a>00183 <span class="comment">     */</span>
<a name="l00184"></a>00184     <span class="keyword">const</span> QString&amp; <a class="code" href="classitunesdb_1_1Track.html#1aa38533e167e66a942fc983062b39cc">getKeywords</a>() <span class="keyword">const</span>;
<a name="l00185"></a>00185 
<a name="l00186"></a>00186     <span class="keyword">const</span> QString&amp; getFileFormatDesc() <span class="keyword">const</span>;
<a name="l00187"></a>00187 <span class="comment"></span>
<a name="l00188"></a>00188 <span class="comment">    /**</span>
<a name="l00189"></a>00189 <span class="comment">     * Returns the DBID which refers to additional media associated to this track (like cover art)</span>
<a name="l00190"></a>00190 <span class="comment">     * @return the DBID</span>
<a name="l00191"></a>00191 <span class="comment">     */</span>
<a name="l00192"></a>00192     Q_UINT64 <a class="code" href="classitunesdb_1_1Track.html#4370635fe353acb81d03bc88349a3560">getDBID</a>() <span class="keyword">const</span>;
<a name="l00193"></a>00193 <span class="comment"></span>
<a name="l00194"></a>00194 <span class="comment">    /**</span>
<a name="l00195"></a>00195 <span class="comment">     * Returns the rating for this track as read from the itunesdb.</span>
<a name="l00196"></a>00196 <span class="comment">     * @return the rating for this track as read from the itunesdb.</span>
<a name="l00197"></a>00197 <span class="comment">     */</span>
<a name="l00198"></a>00198     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="classitunesdb_1_1Track.html#cabe25bf8eb5ab0ada105a1f1bc56eee">getRating</a>() <span class="keyword">const</span>;
<a name="l00199"></a>00199 <span class="comment"></span>
<a name="l00200"></a>00200 <span class="comment">    /**</span>
<a name="l00201"></a>00201 <span class="comment">     * Returns the last modified date for this track.</span>
<a name="l00202"></a>00202 <span class="comment">     * @return the last modified date for this track.</span>
<a name="l00203"></a>00203 <span class="comment">     */</span>
<a name="l00204"></a>00204     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#7f464bb6f93fea07605b2ad017a3f4d9">getLastModified</a>() <span class="keyword">const</span>;
<a name="l00205"></a>00205 <span class="comment"></span>
<a name="l00206"></a>00206 <span class="comment">    /**</span>
<a name="l00207"></a>00207 <span class="comment">     * Returns the size of the file associated with this track</span>
<a name="l00208"></a>00208 <span class="comment">     * @return the filesize</span>
<a name="l00209"></a>00209 <span class="comment">     */</span>
<a name="l00210"></a>00210     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#f73cdfc26572f90f8eb11d4d1897cbca">getFileSize</a>() <span class="keyword">const</span>;
<a name="l00211"></a>00211 <span class="comment"></span>
<a name="l00212"></a>00212 <span class="comment">    /**</span>
<a name="l00213"></a>00213 <span class="comment">     * Returns the length of the track in milliseconds</span>
<a name="l00214"></a>00214 <span class="comment">     * @return the length of the track in milliseconds</span>
<a name="l00215"></a>00215 <span class="comment">     */</span>
<a name="l00216"></a>00216     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#fc61c76a1929b778b99a251279382c10">getTrackLength</a>() <span class="keyword">const</span>;
<a name="l00217"></a>00217 <span class="comment"></span>
<a name="l00218"></a>00218 <span class="comment">    /**</span>
<a name="l00219"></a>00219 <span class="comment">     * Returns the number of the track</span>
<a name="l00220"></a>00220 <span class="comment">     * @return the number of the track</span>
<a name="l00221"></a>00221 <span class="comment">     */</span>
<a name="l00222"></a>00222     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#ff0abc0a6f340bee96d62fb18cd5599e">getTrackNumber</a>() <span class="keyword">const</span>;
<a name="l00223"></a>00223 <span class="comment"></span>
<a name="l00224"></a>00224 <span class="comment">    /**</span>
<a name="l00225"></a>00225 <span class="comment">     * Returns the number of tracks in the album</span>
<a name="l00226"></a>00226 <span class="comment">     * @return the number of tracks in the album</span>
<a name="l00227"></a>00227 <span class="comment">     */</span>
<a name="l00228"></a>00228     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#820ac9157a3547ca1f068881ba238b9a">getTrackCount</a>() <span class="keyword">const</span>;
<a name="l00229"></a>00229 <span class="comment"></span>
<a name="l00230"></a>00230 <span class="comment">    /**</span>
<a name="l00231"></a>00231 <span class="comment">     * Returns the year the song was created</span>
<a name="l00232"></a>00232 <span class="comment">     * @return the year the song was created</span>
<a name="l00233"></a>00233 <span class="comment">     */</span>
<a name="l00234"></a>00234     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#ce2ebad74e20c7a7ce1d8ab560ec012d">getYear</a>() <span class="keyword">const</span>;
<a name="l00235"></a>00235 <span class="comment"></span>
<a name="l00236"></a>00236 <span class="comment">    /**</span>
<a name="l00237"></a>00237 <span class="comment">     * Returns the bitrate</span>
<a name="l00238"></a>00238 <span class="comment">     * @return the bitrate</span>
<a name="l00239"></a>00239 <span class="comment">     */</span>
<a name="l00240"></a>00240     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#62c1f77428b22f50704d6519e9f16411">getBitrate</a>() <span class="keyword">const</span>;
<a name="l00241"></a>00241 <span class="comment"></span>
<a name="l00242"></a>00242 <span class="comment">    /**</span>
<a name="l00243"></a>00243 <span class="comment">     * Returns the sample rate</span>
<a name="l00244"></a>00244 <span class="comment">     * @return the sample rate</span>
<a name="l00245"></a>00245 <span class="comment">     */</span>
<a name="l00246"></a>00246     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#e24ff517b81e71691acd6ccf39885e49">getSamplerate</a>() <span class="keyword">const</span>;
<a name="l00247"></a>00247 <span class="comment"></span>
<a name="l00248"></a>00248 <span class="comment">    /**</span>
<a name="l00249"></a>00249 <span class="comment">     * Returns the volume adjust for the track</span>
<a name="l00250"></a>00250 <span class="comment">     * @return the volume adjust</span>
<a name="l00251"></a>00251 <span class="comment">     */</span>
<a name="l00252"></a>00252     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#443933b306cab4f0b873c8bd15c00ff6">getVolumeAdjust</a>() <span class="keyword">const</span>;
<a name="l00253"></a>00253 <span class="comment"></span>
<a name="l00254"></a>00254 <span class="comment">    /**</span>
<a name="l00255"></a>00255 <span class="comment">     * Returns the number of times the track was played so far</span>
<a name="l00256"></a>00256 <span class="comment">     * @return the play count</span>
<a name="l00257"></a>00257 <span class="comment">     */</span>
<a name="l00258"></a>00258     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#43fb9af66edd5d08134586f87064020c">getPlayCount</a>() <span class="keyword">const</span>;
<a name="l00259"></a>00259 <span class="comment"></span>
<a name="l00260"></a>00260 <span class="comment">    /**</span>
<a name="l00261"></a>00261 <span class="comment">     * Returns the date the track was last played.</span>
<a name="l00262"></a>00262 <span class="comment">     */</span>
<a name="l00263"></a>00263     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#c05515d82025f8158f3281d3703903d5">getLastPlayed</a>() <span class="keyword">const</span>;
<a name="l00264"></a>00264 <span class="comment"></span>
<a name="l00265"></a>00265 <span class="comment">    /**</span>
<a name="l00266"></a>00266 <span class="comment">     * Returns the cd number the track is on for albums with more than one CD.</span>
<a name="l00267"></a>00267 <span class="comment">     * @return the cd number the track is on for albums with more than one CD.</span>
<a name="l00268"></a>00268 <span class="comment">     */</span>
<a name="l00269"></a>00269     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#cdabeb062433774c8d3b901cf447981c">getCdNumber</a>() <span class="keyword">const</span>;
<a name="l00270"></a>00270 <span class="comment"></span>
<a name="l00271"></a>00271 <span class="comment">    /**</span>
<a name="l00272"></a>00272 <span class="comment">     * Returns the number of CDs for the album of the track.</span>
<a name="l00273"></a>00273 <span class="comment">     * @return the number of CDs for the album of the track.</span>
<a name="l00274"></a>00274 <span class="comment">     */</span>
<a name="l00275"></a>00275     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#b61779fe4014d7067645cad24c211257">getCdCount</a>() <span class="keyword">const</span>;
<a name="l00276"></a>00276 <span class="comment"></span>
<a name="l00277"></a>00277 <span class="comment">    /**</span>
<a name="l00278"></a>00278 <span class="comment">     * Returns the date the track was added to the database/device.</span>
<a name="l00279"></a>00279 <span class="comment">     * @return the date the track was added to the database/device.</span>
<a name="l00280"></a>00280 <span class="comment">     */</span>
<a name="l00281"></a><a class="code" href="classitunesdb_1_1Track.html#4e13ff472e49e30912bfab6f8037686c">00281</a>     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#4e13ff472e49e30912bfab6f8037686c">getDateAdded</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> date_added; }
<a name="l00282"></a>00282 
<a name="l00283"></a>00283     Q_UINT32 getStartTime()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mStartTime; }
<a name="l00284"></a>00284     Q_UINT32 getStopTime()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mStopTime; }
<a name="l00285"></a>00285     Q_UINT32 getSoundCheck()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mSoundCheck; }
<a name="l00286"></a>00286 
<a name="l00287"></a>00287     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> getVbrFlag() <span class="keyword">const</span>;
<a name="l00288"></a>00288 
<a name="l00289"></a>00289     Q_UINT32 getFileFormatCode()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> file_format_code; }
<a name="l00290"></a>00290     Q_UINT32 getReleaseDate()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> date_released; }
<a name="l00291"></a>00291     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> getCompilationFlag()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> compilation; }
<a name="l00292"></a>00292 
<a name="l00293"></a>00293     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> isChecked()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> checked; }
<a name="l00294"></a>00294 
<a name="l00295"></a>00295     <span class="keywordtype">bool</span> isVideo() <span class="keyword">const</span>;
<a name="l00296"></a>00296 
<a name="l00297"></a>00297     Q_UINT16 getBPM() <span class="keyword">const</span>;
<a name="l00298"></a>00298 
<a name="l00299"></a>00299     <span class="keyword">virtual</span> <span class="keywordtype">void</span> setDBID( Q_UINT64 <span class="keywordtype">id</span> );
<a name="l00300"></a>00300 <span class="comment"></span>
<a name="l00301"></a>00301 <span class="comment">    /**</span>
<a name="l00302"></a>00302 <span class="comment">     * Sets the album for this track.</span>
<a name="l00303"></a>00303 <span class="comment">     * @param album the album to set.</span>
<a name="l00304"></a>00304 <span class="comment">     */</span>
<a name="l00305"></a>00305     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#a1aa60f4f1215109ec15dccd91b947ca">setAlbum</a>( <span class="keyword">const</span> QString&amp; album );
<a name="l00306"></a>00306 <span class="comment"></span>
<a name="l00307"></a>00307 <span class="comment">    /**</span>
<a name="l00308"></a>00308 <span class="comment">     * Sets the album for this track.</span>
<a name="l00309"></a>00309 <span class="comment">     * @param album the album to set for sort.</span>
<a name="l00310"></a>00310 <span class="comment">     */</span>
<a name="l00311"></a>00311     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#0bced639ac1ebb141198eddc9b5c33df">setAlbumForSort</a>( <span class="keyword">const</span> QString&amp; album );
<a name="l00312"></a>00312 <span class="comment"></span>
<a name="l00313"></a>00313 <span class="comment">    /**</span>
<a name="l00314"></a>00314 <span class="comment">     * Sets the artist for this track.</span>
<a name="l00315"></a>00315 <span class="comment">     * @param artist the artist name to set.</span>
<a name="l00316"></a>00316 <span class="comment">     */</span>
<a name="l00317"></a>00317     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#0352612663d76b6f763b132d75bf444a">setArtist</a>( <span class="keyword">const</span> QString&amp; artist );
<a name="l00318"></a>00318 <span class="comment"></span>
<a name="l00319"></a>00319 <span class="comment">    /**</span>
<a name="l00320"></a>00320 <span class="comment">     * Sets the artist for this track used for sorting.</span>
<a name="l00321"></a>00321 <span class="comment">     * @param artist the artist name to set for sort.</span>
<a name="l00322"></a>00322 <span class="comment">     */</span>
<a name="l00323"></a>00323     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#75e09db284b1447ab215714478ed8a42">setArtistNameForSort</a>( <span class="keyword">const</span> QString&amp; artist );
<a name="l00324"></a>00324 <span class="comment"></span>
<a name="l00325"></a>00325 <span class="comment">    /**</span>
<a name="l00326"></a>00326 <span class="comment">     * Sets the category for this track.</span>
<a name="l00327"></a>00327 <span class="comment">     * @param category the category to set.</span>
<a name="l00328"></a>00328 <span class="comment">     */</span>
<a name="l00329"></a>00329     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#515cb8cd61b41299c7949e5f35845220">setCategory</a>( <span class="keyword">const</span> QString&amp; category );
<a name="l00330"></a>00330 <span class="comment"></span>
<a name="l00331"></a>00331 <span class="comment">    /**</span>
<a name="l00332"></a>00332 <span class="comment">     * Sets the path information for this track. The path is relative to the ipod's base directory.</span>
<a name="l00333"></a>00333 <span class="comment">     * The path separator is ":"</span>
<a name="l00334"></a>00334 <span class="comment">     * @param encodedpath the path information to set.</span>
<a name="l00335"></a>00335 <span class="comment">     */</span>
<a name="l00336"></a>00336     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#8247c69b12880e9c6858e24833d34713">setPathInfo</a>( <span class="keyword">const</span> QString&amp; encodedpath );
<a name="l00337"></a>00337 <span class="comment"></span>
<a name="l00338"></a>00338 <span class="comment">    /**</span>
<a name="l00339"></a>00339 <span class="comment">     * Sets the comment for this track.</span>
<a name="l00340"></a>00340 <span class="comment">     * @param comment the comment to set.</span>
<a name="l00341"></a>00341 <span class="comment">     */</span>
<a name="l00342"></a>00342     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#9fbbb885a1a0d39688acd6e0eea18f5e">setComment</a>( <span class="keyword">const</span> QString&amp; comment );
<a name="l00343"></a>00343 
<a name="l00344"></a>00344     <span class="keyword">virtual</span> <span class="keywordtype">void</span> setCompilationFlag( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> isCompilation );
<a name="l00345"></a>00345 <span class="comment"></span>
<a name="l00346"></a>00346 <span class="comment">    /**</span>
<a name="l00347"></a>00347 <span class="comment">     * Sets the description for this track.</span>
<a name="l00348"></a>00348 <span class="comment">     * @param description_txt the description to set.</span>
<a name="l00349"></a>00349 <span class="comment">     */</span>
<a name="l00350"></a>00350     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#1a413d027e1545ec3a0273c42ead28e8">setDescription</a>( <span class="keyword">const</span> QString&amp; description_txt );
<a name="l00351"></a>00351 <span class="comment"></span>
<a name="l00352"></a>00352 <span class="comment">    /**</span>
<a name="l00353"></a>00353 <span class="comment">     * Sets the grouping for this track.</span>
<a name="l00354"></a>00354 <span class="comment">     * @param grouping the grouping to set.</span>
<a name="l00355"></a>00355 <span class="comment">     */</span>
<a name="l00356"></a>00356     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#5197f395eff505718eb7885a5d33cfd7">setGrouping</a>( <span class="keyword">const</span> QString&amp; grouping );
<a name="l00357"></a>00357 <span class="comment"></span>
<a name="l00358"></a>00358 <span class="comment">    /**</span>
<a name="l00359"></a>00359 <span class="comment">     * Sets the genre for this track.</span>
<a name="l00360"></a>00360 <span class="comment">     * @param genre the genre to set.</span>
<a name="l00361"></a>00361 <span class="comment">     */</span>
<a name="l00362"></a>00362     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#6eeec77a9b6cf17ce20b193d76087205">setGenre</a>( <span class="keyword">const</span> QString&amp; genre );
<a name="l00363"></a>00363 <span class="comment"></span>
<a name="l00364"></a>00364 <span class="comment">    /**</span>
<a name="l00365"></a>00365 <span class="comment">     * Sets the title for this track.</span>
<a name="l00366"></a>00366 <span class="comment">     * @param title the title to set.</span>
<a name="l00367"></a>00367 <span class="comment">     */</span>
<a name="l00368"></a>00368     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#5335af2eb3cbede2436830fcdb35fa35">setTitle</a>( <span class="keyword">const</span> QString&amp; title );
<a name="l00369"></a>00369 <span class="comment"></span>
<a name="l00370"></a>00370 <span class="comment">    /**</span>
<a name="l00371"></a>00371 <span class="comment">     * Sets the title for this track used for sorting.</span>
<a name="l00372"></a>00372 <span class="comment">     * @param title the title to set.</span>
<a name="l00373"></a>00373 <span class="comment">     */</span>
<a name="l00374"></a>00374     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#bdd51042dfe187d0d198c0e2b6815b5e">setTitleForSort</a>( <span class="keyword">const</span> QString&amp; title );
<a name="l00375"></a>00375 <span class="comment"></span>
<a name="l00376"></a>00376 <span class="comment">    /**</span>
<a name="l00377"></a>00377 <span class="comment">     * Sets the file format description for this track.</span>
<a name="l00378"></a>00378 <span class="comment">     * @param fdesc the file format description to set.</span>
<a name="l00379"></a>00379 <span class="comment">     */</span>
<a name="l00380"></a>00380     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#de24796e546fcde522650db39f362b8d">setFileFormatDesc</a>( <span class="keyword">const</span> QString&amp; fdesc );
<a name="l00381"></a>00381 <span class="comment"></span>
<a name="l00382"></a>00382 <span class="comment">    /**</span>
<a name="l00383"></a>00383 <span class="comment">     * Sets the composer for this track.</span>
<a name="l00384"></a>00384 <span class="comment">     * @param composer the composer to set.</span>
<a name="l00385"></a>00385 <span class="comment">     */</span>
<a name="l00386"></a>00386     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#d744404ef78148f094fd866dda6e77eb">setComposer</a>( <span class="keyword">const</span> QString&amp; composer );
<a name="l00387"></a>00387 <span class="comment"></span>
<a name="l00388"></a>00388 <span class="comment">    /**</span>
<a name="l00389"></a>00389 <span class="comment">     * Sets the equalizer setting for this track.</span>
<a name="l00390"></a>00390 <span class="comment">     * @param eqSetting the equalizer preset to set. See the itunesb wiki for details</span>
<a name="l00391"></a>00391 <span class="comment">     */</span>
<a name="l00392"></a>00392     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#68d21003e41a847f7a77e194e37dbc84">setEqualizerSetting</a>( <span class="keyword">const</span> QString&amp; eqSetting );
<a name="l00393"></a>00393 <span class="comment"></span>
<a name="l00394"></a>00394 <span class="comment">    /**</span>
<a name="l00395"></a>00395 <span class="comment">     * Sets the name of the artist for the whole album. This may be different if it's a soundtrack for example.</span>
<a name="l00396"></a>00396 <span class="comment">     * @param albumartist the name of the artist for the whole album</span>
<a name="l00397"></a>00397 <span class="comment">     */</span>
<a name="l00398"></a>00398     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#b1236d8e2fe9b62ffd6fdaf1e07d57f2">setAlbumArtist</a>( <span class="keyword">const</span> QString&amp; albumartist );
<a name="l00399"></a>00399 <span class="comment"></span>
<a name="l00400"></a>00400 <span class="comment">    /**</span>
<a name="l00401"></a>00401 <span class="comment">     * Sets the name of the artist for the whole album. This may be different if it's a soundtrack for example.</span>
<a name="l00402"></a>00402 <span class="comment">     * @param albumartist the name of the artist for the whole album used for sorting</span>
<a name="l00403"></a>00403 <span class="comment">     */</span>
<a name="l00404"></a>00404     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#6cf3fc63475e15d72460ecb085a26866">setAlbumArtistForSort</a>( <span class="keyword">const</span> QString&amp; albumartist );
<a name="l00405"></a>00405 <span class="comment"></span>
<a name="l00406"></a>00406 <span class="comment">    /**</span>
<a name="l00407"></a>00407 <span class="comment">     * Sets the list of keywords pertaining the track</span>
<a name="l00408"></a>00408 <span class="comment">     * @param keywords a number of keywords</span>
<a name="l00409"></a>00409 <span class="comment">     */</span>
<a name="l00410"></a>00410     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#25f865c60eec72ae97338741b136120c">setKeywords</a>( <span class="keyword">const</span> QString&amp; keywords );
<a name="l00411"></a>00411 <span class="comment"></span>
<a name="l00412"></a>00412 <span class="comment">    /**</span>
<a name="l00413"></a>00413 <span class="comment">     * Sets the track number for this track.</span>
<a name="l00414"></a>00414 <span class="comment">     * @param tracknumber the track number to set.</span>
<a name="l00415"></a>00415 <span class="comment">     */</span>
<a name="l00416"></a>00416     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#b465dba8f607c5d0454c538906e41627">setTrackNumber</a>( Q_UINT32 tracknumber );
<a name="l00417"></a>00417 <span class="comment"></span>
<a name="l00418"></a>00418 <span class="comment">    /**</span>
<a name="l00419"></a>00419 <span class="comment">     * Sets the the number of tracks in the album for this track.</span>
<a name="l00420"></a>00420 <span class="comment">     * @param numtracks the number of tracks to set.</span>
<a name="l00421"></a>00421 <span class="comment">     */</span>
<a name="l00422"></a>00422     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#d9dfe85d796c3d2219cc9d058fca7b8e">setTrackCount</a>( Q_UINT32 numtracks );
<a name="l00423"></a>00423 <span class="comment"></span>
<a name="l00424"></a>00424 <span class="comment">    /**</span>
<a name="l00425"></a>00425 <span class="comment">     * Sets the volume adjust for this track.</span>
<a name="l00426"></a>00426 <span class="comment">     * @param newVolumeAdjust the volume adjust to set.</span>
<a name="l00427"></a>00427 <span class="comment">     */</span>
<a name="l00428"></a>00428     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#b8159a3ee8439250015b64242d16851e">setVolumeAdjust</a>( Q_UINT32 newVolumeAdjust );
<a name="l00429"></a>00429 <span class="comment"></span>
<a name="l00430"></a>00430 <span class="comment">    /**</span>
<a name="l00431"></a>00431 <span class="comment">     * Sets the year of release for this track.</span>
<a name="l00432"></a>00432 <span class="comment">     * @param newYear the year to set.</span>
<a name="l00433"></a>00433 <span class="comment">     */</span>
<a name="l00434"></a>00434     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#edee64faf9e077bf32b5e86a259d9012">setYear</a>( Q_UINT32 newYear );
<a name="l00435"></a>00435 <span class="comment"></span>
<a name="l00436"></a>00436 <span class="comment">    /**</span>
<a name="l00437"></a>00437 <span class="comment">     * Sets the start time for this track.</span>
<a name="l00438"></a>00438 <span class="comment">     * @param startTime the start time to set.</span>
<a name="l00439"></a>00439 <span class="comment">     */</span>
<a name="l00440"></a>00440     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#47b0dbc3b474254fb7073048f6de29d0">setStartTime</a>( Q_UINT32 startTime );
<a name="l00441"></a>00441 <span class="comment"></span>
<a name="l00442"></a>00442 <span class="comment">    /**</span>
<a name="l00443"></a>00443 <span class="comment">     * Sets the stop time for this track.</span>
<a name="l00444"></a>00444 <span class="comment">     * @param stopTime the stop time to set.</span>
<a name="l00445"></a>00445 <span class="comment">     */</span>
<a name="l00446"></a>00446     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#b689e619f544ca9ab79d8a54ee965f82">setStopTime</a>( Q_UINT32 stopTime );
<a name="l00447"></a>00447 <span class="comment"></span>
<a name="l00448"></a>00448 <span class="comment">    /**</span>
<a name="l00449"></a>00449 <span class="comment">     * Sets the soundcheck for this track.</span>
<a name="l00450"></a>00450 <span class="comment">     * @param soundCheck the soundcheck to set.</span>
<a name="l00451"></a>00451 <span class="comment">     */</span>
<a name="l00452"></a>00452     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#52556102b8066848a905d67d539f724a">setSoundCheck</a>( Q_UINT32 soundCheck );
<a name="l00453"></a>00453 <span class="comment"></span>
<a name="l00454"></a>00454 <span class="comment">    /**</span>
<a name="l00455"></a>00455 <span class="comment">     * Sets the rating for this track.</span>
<a name="l00456"></a>00456 <span class="comment">     * @param rating the rating to set.</span>
<a name="l00457"></a>00457 <span class="comment">     */</span>
<a name="l00458"></a>00458     <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#306ceeee4f8a5103acfa0b603c33c573">setRating</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> rating);
<a name="l00459"></a>00459 <span class="comment"></span>
<a name="l00460"></a>00460 <span class="comment">    /**</span>
<a name="l00461"></a>00461 <span class="comment">     * Sets the date the track was last played.</span>
<a name="l00462"></a>00462 <span class="comment">     * @param lastplayed the last played date to set.</span>
<a name="l00463"></a>00463 <span class="comment">     */</span>
<a name="l00464"></a>00464     <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#259af8b1f918d539158cea6bf5556c5a">setLastPlayed</a>(Q_UINT32 lastplayed);
<a name="l00465"></a>00465 <span class="comment"></span>
<a name="l00466"></a>00466 <span class="comment">    /**</span>
<a name="l00467"></a>00467 <span class="comment">     * Sets the playcount for this track.</span>
<a name="l00468"></a>00468 <span class="comment">     * @param newPlaycount the playcount to set.</span>
<a name="l00469"></a>00469 <span class="comment">     */</span>
<a name="l00470"></a>00470     <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#bacdeae8ee7e7ab5d8533a6fbb25cdfa">setPlayCount</a>(Q_UINT32 newPlaycount);
<a name="l00471"></a>00471 <span class="comment"></span>
<a name="l00472"></a>00472 <span class="comment">    /**</span>
<a name="l00473"></a>00473 <span class="comment">     * Sets the beats per minute info for this track.</span>
<a name="l00474"></a>00474 <span class="comment">     * @param bpm the beats per minute information to set.</span>
<a name="l00475"></a>00475 <span class="comment">     */</span>
<a name="l00476"></a><a class="code" href="classitunesdb_1_1Track.html#6ab53eef86d1dc069dd31120da9b0b98">00476</a>     <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#6ab53eef86d1dc069dd31120da9b0b98">setBPM</a>( Q_UINT32 bpm ) { beatsPerMinute = bpm; }
<a name="l00477"></a>00477 <span class="comment"></span>
<a name="l00478"></a>00478 <span class="comment">    /**</span>
<a name="l00479"></a>00479 <span class="comment">     * Returns the file extension for this track.</span>
<a name="l00480"></a>00480 <span class="comment">     * @return the file extension for this track.</span>
<a name="l00481"></a>00481 <span class="comment">     */</span>
<a name="l00482"></a>00482     QString <a class="code" href="classitunesdb_1_1Track.html#23f9d3beb5b6e97d311df02a53952c2f">getFileExtension</a>() <span class="keyword">const</span>;
<a name="l00483"></a>00483 <span class="comment"></span>
<a name="l00484"></a>00484 <span class="comment">    /**</span>
<a name="l00485"></a>00485 <span class="comment">     * Sets the file extension for this track.</span>
<a name="l00486"></a>00486 <span class="comment">     * @param fileextension the file extension to set.</span>
<a name="l00487"></a>00487 <span class="comment">     */</span>
<a name="l00488"></a>00488     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#bb373d5f33e8d7cb9939ea85f334423e">setFileExtension</a>( <span class="keyword">const</span> QString&amp; fileextension );
<a name="l00489"></a>00489 <span class="comment"></span>
<a name="l00490"></a>00490 <span class="comment">    /**</span>
<a name="l00491"></a>00491 <span class="comment">     * Sets the number of skips for this track</span>
<a name="l00492"></a>00492 <span class="comment">     */</span>
<a name="l00493"></a>00493     <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#54c60cdb4f5aa3073d6e03b66b39633c">setSkipCount</a>( Q_UINT32 numberOfSkips );
<a name="l00494"></a>00494 <span class="comment"></span>
<a name="l00495"></a>00495 <span class="comment">    /**</span>
<a name="l00496"></a>00496 <span class="comment">     * Returns the number of times this track was skipped</span>
<a name="l00497"></a>00497 <span class="comment">     * @return the number of times this track was skipped</span>
<a name="l00498"></a>00498 <span class="comment">     */</span>
<a name="l00499"></a>00499     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#56bdf13ab48c5007b4fb17e1b0757a62">getSkipCount</a>() <span class="keyword">const</span>;
<a name="l00500"></a>00500 <span class="comment"></span>
<a name="l00501"></a>00501 <span class="comment">    /**</span>
<a name="l00502"></a>00502 <span class="comment">     * Sets the time the track was skipped</span>
<a name="l00503"></a>00503 <span class="comment">     */</span>
<a name="l00504"></a>00504     <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#db9b25ffb996f5db0646827e6185441e">setLastSkippedTime</a>( Q_UINT32 lastSkippedDateTime );
<a name="l00505"></a>00505 <span class="comment"></span>
<a name="l00506"></a>00506 <span class="comment">    /**</span>
<a name="l00507"></a>00507 <span class="comment">     * Returns the time the track was skipped</span>
<a name="l00508"></a>00508 <span class="comment">     * @return the time the track was skipped</span>
<a name="l00509"></a>00509 <span class="comment">     */</span>
<a name="l00510"></a>00510     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#d82a0b49862887539e9797265a134ec7">getLastSkippedTime</a>() <span class="keyword">const</span>;
<a name="l00511"></a>00511 
<a name="l00512"></a>00512     <span class="keywordtype">void</span> skipWhenShuffle( <span class="keywordtype">bool</span> enable );
<a name="l00513"></a>00513 
<a name="l00514"></a>00514     <span class="keywordtype">bool</span> skippedWhenShuffle() <span class="keyword">const</span>;
<a name="l00515"></a>00515 
<a name="l00516"></a>00516     <span class="keywordtype">void</span> setHasLyrics( <span class="keywordtype">bool</span> hasLyrics );
<a name="l00517"></a>00517 
<a name="l00518"></a>00518     <span class="keywordtype">bool</span> hasLyrics() <span class="keyword">const</span>;
<a name="l00519"></a>00519 
<a name="l00520"></a>00520     <span class="keywordtype">void</span> setMediaType( Track::MediaType type );
<a name="l00521"></a>00521 
<a name="l00522"></a>00522     Track::MediaType getMediaType() <span class="keyword">const</span>;
<a name="l00523"></a>00523 <span class="comment"></span>
<a name="l00524"></a>00524 <span class="comment">    /**</span>
<a name="l00525"></a>00525 <span class="comment">     * Sets the nessessary information for gapless playback. Set all the parameters to zero</span>
<a name="l00526"></a>00526 <span class="comment">     * if gapless playback should be disabled for this song.</span>
<a name="l00527"></a>00527 <span class="comment">     * @param pregapSamples Number of samples of silence before the songs starts</span>
<a name="l00528"></a>00528 <span class="comment">     * @param songSamples Number of samples in the song</span>
<a name="l00529"></a>00529 <span class="comment">     * @param postgapSamples Number of samples of silence at the end of the song</span>
<a name="l00530"></a>00530 <span class="comment">     * @param gaplessData The size in bytes from first Synch Frame (which is usually the XING frame that includes the LAME tag) until the 8th before the last frame. The gapless playback does not work for MP3 files if this is set to zero. Maybe the iPod prepares the next track when rest 8 frames in the actual track. For AAC tracks, this may be zero.</span>
<a name="l00531"></a>00531 <span class="comment">     */</span>
<a name="l00532"></a>00532     <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#b0d61696a592d79e7573231e9e40c8a9">setGaplessPBackData</a>( Q_UINT32 pregapSamples, Q_UINT64 songSamples, Q_UINT32 postgapSamples, Q_UINT32 gaplessData );
<a name="l00533"></a>00533 
<a name="l00534"></a>00534     Q_UINT32 getNumPregapSamples() <span class="keyword">const</span>;
<a name="l00535"></a>00535 
<a name="l00536"></a>00536     Q_UINT64 getNumSongSamples() <span class="keyword">const</span>;
<a name="l00537"></a>00537 
<a name="l00538"></a>00538     Q_UINT32 getNumPostgapSamples() <span class="keyword">const</span>;
<a name="l00539"></a>00539 <span class="comment"></span>
<a name="l00540"></a>00540 <span class="comment">    /**</span>
<a name="l00541"></a>00541 <span class="comment">     * Returns the size in bytes from first Synch Frame (which is usually the XING frame that includes the LAME tag) until the 8th before the last frame.</span>
<a name="l00542"></a>00542 <span class="comment">     */</span>
<a name="l00543"></a>00543     Q_UINT32 <a class="code" href="classitunesdb_1_1Track.html#a67104145cfe3673976088158e761088">getGaplessDataSize</a>() <span class="keyword">const</span>;
<a name="l00544"></a>00544 
<a name="l00545"></a>00545     <span class="keywordtype">void</span> setSeasonNumber( Q_UINT32 season );
<a name="l00546"></a>00546 
<a name="l00547"></a>00547     Q_UINT32 getSeasonNumber() <span class="keyword">const</span>;
<a name="l00548"></a>00548 
<a name="l00549"></a>00549     <span class="keywordtype">void</span> setEpisodeNumber( Q_UINT32 episode );
<a name="l00550"></a>00550 
<a name="l00551"></a>00551     Q_UINT32 getEpisodeNumber() <span class="keyword">const</span>;
<a name="l00552"></a>00552     
<a name="l00553"></a>00553     Q_UINT16 getAlbumID()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mAlbumID; }
<a name="l00554"></a>00554 <span class="comment"></span>
<a name="l00555"></a>00555 <span class="comment">    /**</span>
<a name="l00556"></a>00556 <span class="comment">     * Copies the metadata from the given source to this Track.</span>
<a name="l00557"></a>00557 <span class="comment">     * The Track class itself is a possible TrackMetaSource, so you</span>
<a name="l00558"></a>00558 <span class="comment">     * can copy metadata from a track to another.</span>
<a name="l00559"></a>00559 <span class="comment">     */</span>
<a name="l00560"></a>00560     <span class="keyword">template</span> &lt;<span class="keyword">class</span> TrackMetaSource&gt;
<a name="l00561"></a><a class="code" href="classitunesdb_1_1Track.html#031292b6790aeeac124dbc9a7b053f12">00561</a>     <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#031292b6790aeeac124dbc9a7b053f12">readFrom</a>( TrackMetaSource&amp; provider ) {
<a name="l00562"></a>00562         <span class="comment">// Album specific stuff</span>
<a name="l00563"></a>00563         <a class="code" href="classitunesdb_1_1Track.html#a1aa60f4f1215109ec15dccd91b947ca">setAlbum</a>( provider.getAlbum() );
<a name="l00564"></a>00564         <a class="code" href="classitunesdb_1_1Track.html#0bced639ac1ebb141198eddc9b5c33df">setAlbumForSort</a>( provider.getAlbumForSort() );
<a name="l00565"></a>00565         <a class="code" href="classitunesdb_1_1Track.html#0352612663d76b6f763b132d75bf444a">setArtist</a>( provider.getArtist() );
<a name="l00566"></a>00566         <a class="code" href="classitunesdb_1_1Track.html#75e09db284b1447ab215714478ed8a42">setArtistNameForSort</a>( provider.getArtistNameForSort() );
<a name="l00567"></a>00567         <a class="code" href="classitunesdb_1_1Track.html#6ab53eef86d1dc069dd31120da9b0b98">setBPM</a>( provider.getBPM() );
<a name="l00568"></a>00568         <a class="code" href="classitunesdb_1_1Track.html#515cb8cd61b41299c7949e5f35845220">setCategory</a>( provider.getCategory() );
<a name="l00569"></a>00569         <a class="code" href="classitunesdb_1_1Track.html#9fbbb885a1a0d39688acd6e0eea18f5e">setComment</a>( provider.getComment() );
<a name="l00570"></a>00570         setCompilationFlag( provider.getCompilationFlag() );
<a name="l00571"></a>00571         <a class="code" href="classitunesdb_1_1Track.html#d744404ef78148f094fd866dda6e77eb">setComposer</a>( provider.getComposer() );
<a name="l00572"></a>00572         <a class="code" href="classitunesdb_1_1Track.html#1a413d027e1545ec3a0273c42ead28e8">setDescription</a>( provider.getDescription() );
<a name="l00573"></a>00573         <a class="code" href="classitunesdb_1_1Track.html#5197f395eff505718eb7885a5d33cfd7">setGrouping</a>( provider.getGrouping() );
<a name="l00574"></a>00574         <a class="code" href="classitunesdb_1_1Track.html#68d21003e41a847f7a77e194e37dbc84">setEqualizerSetting</a>( provider.getEqualizerSetting() );
<a name="l00575"></a>00575         <a class="code" href="classitunesdb_1_1Track.html#b1236d8e2fe9b62ffd6fdaf1e07d57f2">setAlbumArtist</a>( provider.getAlbumArtist() );
<a name="l00576"></a>00576         <a class="code" href="classitunesdb_1_1Track.html#6cf3fc63475e15d72460ecb085a26866">setAlbumArtistForSort</a>( provider.getAlbumArtistForSort() );
<a name="l00577"></a>00577         <a class="code" href="classitunesdb_1_1Track.html#25f865c60eec72ae97338741b136120c">setKeywords</a>( provider.getKeywords() );
<a name="l00578"></a>00578         <a class="code" href="classitunesdb_1_1Track.html#de24796e546fcde522650db39f362b8d">setFileFormatDesc</a>(  provider.getFileFormatDesc() );
<a name="l00579"></a>00579         <a class="code" href="classitunesdb_1_1Track.html#6eeec77a9b6cf17ce20b193d76087205">setGenre</a>( provider.getGenre() );
<a name="l00580"></a>00580         <a class="code" href="classitunesdb_1_1Track.html#5335af2eb3cbede2436830fcdb35fa35">setTitle</a>( provider.getTitle() );
<a name="l00581"></a>00581         <a class="code" href="classitunesdb_1_1Track.html#bdd51042dfe187d0d198c0e2b6815b5e">setTitleForSort</a>( provider.getTitleForSort() );
<a name="l00582"></a>00582         <a class="code" href="classitunesdb_1_1Track.html#d9dfe85d796c3d2219cc9d058fca7b8e">setTrackCount</a>( provider.getTrackCount() );
<a name="l00583"></a>00583         <a class="code" href="classitunesdb_1_1Track.html#b465dba8f607c5d0454c538906e41627">setTrackNumber</a>( provider.getTrackNumber() );
<a name="l00584"></a>00584         <a class="code" href="classitunesdb_1_1Track.html#b8159a3ee8439250015b64242d16851e">setVolumeAdjust</a>( provider.getVolumeAdjust() );
<a name="l00585"></a>00585         <a class="code" href="classitunesdb_1_1Track.html#edee64faf9e077bf32b5e86a259d9012">setYear</a>( provider.getYear() );
<a name="l00586"></a>00586         <a class="code" href="classitunesdb_1_1Track.html#6299892cc90da8e6c39ee66f59731601">setTvShow</a>( provider.getTvShow() );
<a name="l00587"></a>00587         setSeasonNumber( provider.getSeasonNumber() );
<a name="l00588"></a>00588         setEpisodeNumber( provider.getEpisodeNumber() );
<a name="l00589"></a>00589 
<a name="l00590"></a>00590         <span class="comment">// Track related technical stuff</span>
<a name="l00591"></a>00591         <a class="code" href="classitunesdb_1_1Track.html#259af8b1f918d539158cea6bf5556c5a">setLastPlayed</a>( provider.getLastPlayed() );
<a name="l00592"></a>00592         <a class="code" href="classitunesdb_1_1Track.html#bacdeae8ee7e7ab5d8533a6fbb25cdfa">setPlayCount</a>( provider.getPlayCount() );
<a name="l00593"></a>00593         <a class="code" href="classitunesdb_1_1Track.html#db9b25ffb996f5db0646827e6185441e">setLastSkippedTime</a>( provider.getLastSkippedTime() );
<a name="l00594"></a>00594         <a class="code" href="classitunesdb_1_1Track.html#54c60cdb4f5aa3073d6e03b66b39633c">setSkipCount</a>( provider.getSkipCount() );
<a name="l00595"></a>00595         <a class="code" href="classitunesdb_1_1Track.html#306ceeee4f8a5103acfa0b603c33c573">setRating</a>( provider.getRating() );
<a name="l00596"></a>00596         numcds = provider.getCdCount();
<a name="l00597"></a>00597         cdnum = provider.getCdNumber();
<a name="l00598"></a>00598         file_format_code = provider.getFileFormatCode();
<a name="l00599"></a>00599         type = provider.getMediaType();
<a name="l00600"></a>00600         tracklen = provider.getTrackLength();
<a name="l00601"></a>00601         vbr = provider.getVbrFlag();
<a name="l00602"></a>00602         bitrate = provider.getBitrate();
<a name="l00603"></a>00603         samplerate = provider.getSamplerate();
<a name="l00604"></a>00604         <a class="code" href="classitunesdb_1_1Track.html#47b0dbc3b474254fb7073048f6de29d0">setStartTime</a>( provider.getStartTime() );
<a name="l00605"></a>00605         <a class="code" href="classitunesdb_1_1Track.html#b689e619f544ca9ab79d8a54ee965f82">setStopTime</a>( provider.getStopTime() );
<a name="l00606"></a>00606         <a class="code" href="classitunesdb_1_1Track.html#52556102b8066848a905d67d539f724a">setSoundCheck</a>( provider.getSoundCheck() );
<a name="l00607"></a>00607         setHasLyrics( provider.hasLyrics() );
<a name="l00608"></a>00608         setMediaType( provider.getMediaType() );
<a name="l00609"></a>00609         <a class="code" href="classitunesdb_1_1Track.html#b0d61696a592d79e7573231e9e40c8a9">setGaplessPBackData</a>( provider.getNumPregapSamples(), provider.getNumSongSamples(), provider.getNumPostgapSamples(), provider.getGaplessDataSize() );
<a name="l00610"></a>00610         <span class="comment">// Resource related technical stuff</span>
<a name="l00611"></a>00611         file_size = provider.getFileSize();
<a name="l00612"></a>00612         lastmodified = provider.getLastModified();
<a name="l00613"></a>00613 
<a name="l00614"></a>00614         <a class="code" href="classitunesdb_1_1Track.html#d9f3f7386ec4f43b3d1229e762a26261">doneAddingData</a>();
<a name="l00615"></a>00615     }
<a name="l00616"></a>00616 
<a name="l00617"></a>00617     <span class="keywordtype">void</span> setRecentlyPlayed( <span class="keywordtype">bool</span> playedRecently = <span class="keyword">true</span> ) { m_recentlyPlayed = playedRecently; }
<a name="l00618"></a>00618     <span class="keywordtype">bool</span> recentlyPlayed()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_recentlyPlayed; }
<a name="l00619"></a>00619 
<a name="l00620"></a>00620     QString toQString()<span class="keyword"> const </span>{
<a name="l00621"></a>00621         <span class="keywordflow">return</span> <a class="code" href="classitunesdb_1_1Track.html#aa23e0428a17def319a62a291327c1ea">getArtist</a>() + <span class="stringliteral">" - "</span> + <a class="code" href="classitunesdb_1_1Track.html#50c5b73deb47467f17b9623911d384d6">getAlbum</a>() + <span class="stringliteral">" - "</span> + QString::number( <a class="code" href="classitunesdb_1_1Track.html#ff0abc0a6f340bee96d62fb18cd5599e">getTrackNumber</a>() ) + QString( <span class="stringliteral">"-"</span> ) + <a class="code" href="classitunesdb_1_1Track.html#ed1aec0294874100aac1e9fbd8d87054">getTitle</a>();
<a name="l00622"></a>00622     }
<a name="l00623"></a>00623 
<a name="l00624"></a>00624 <span class="keyword">protected</span>:
<a name="l00625"></a>00625 <span class="comment"></span>
<a name="l00626"></a>00626 <span class="comment">    /**</span>
<a name="l00627"></a>00627 <span class="comment">     * Writes track information (mhit) to the given stream.</span>
<a name="l00628"></a>00628 <span class="comment">     * @param outstream the stream to write the mhit to</span>
<a name="l00629"></a>00629 <span class="comment">     * @return the given stream</span>
<a name="l00630"></a>00630 <span class="comment">     */</span>
<a name="l00631"></a>00631     <span class="keyword">virtual</span> QDataStream &amp; <a class="code" href="classitunesdb_1_1Track.html#d3eed7ce62a5d5f0b6970c3fb5499d5c">writeToStream</a>( QDataStream &amp; outstream );
<a name="l00632"></a>00632 <span class="comment"></span>
<a name="l00633"></a>00633 <span class="comment">    /**</span>
<a name="l00634"></a>00634 <span class="comment">     * Reads track information (mhit) from the given stream.</span>
<a name="l00635"></a>00635 <span class="comment">     * @param instream the stream to read the mhit from</span>
<a name="l00636"></a>00636 <span class="comment">     * @param ok a pointer to a bool to be set to true if the read succeeds</span>
<a name="l00637"></a>00637 <span class="comment">     * @return the given stream</span>
<a name="l00638"></a>00638 <span class="comment">     */</span>
<a name="l00639"></a>00639     <span class="keyword">virtual</span> QDataStream &amp; <a class="code" href="classitunesdb_1_1Track.html#2d320894ca6e8906df87cb0d7a6e881b">readFromStream</a>( QDataStream &amp; instream, <span class="keywordtype">bool</span> * ok = NULL );
<a name="l00640"></a>00640 
<a name="l00641"></a>00641     <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#87f3d0b8f363653694e5ae90558eb35c">writeData</a>( QByteArray&amp; data ) <span class="keyword">const</span>;
<a name="l00642"></a>00642 <span class="comment"></span>
<a name="l00643"></a>00643 <span class="comment">    /**</span>
<a name="l00644"></a>00644 <span class="comment">     * override from ListItem::doneAddingData()</span>
<a name="l00645"></a>00645 <span class="comment">     */</span>
<a name="l00646"></a>00646     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1Track.html#d9f3f7386ec4f43b3d1229e762a26261">doneAddingData</a>();
<a name="l00647"></a>00647 
<a name="l00648"></a>00648     Q_UINT32 id;
<a name="l00649"></a>00649 
<a name="l00650"></a>00650     <span class="comment">// attributes</span>
<a name="l00651"></a>00651     Q_UINT32 lastmodified;    <span class="comment">// last modified date</span>
<a name="l00652"></a>00652     Q_UINT32 file_size;
<a name="l00653"></a>00653     Q_UINT32 tracklen;
<a name="l00654"></a>00654     Q_UINT32 tracknum;
<a name="l00655"></a>00655     Q_UINT32 numtracks;
<a name="l00656"></a>00656     Q_UINT32 year;
<a name="l00657"></a>00657     Q_UINT32 bitrate;
<a name="l00658"></a>00658     Q_UINT32 samplerate;
<a name="l00659"></a>00659     Q_UINT32 volumeadjust;
<a name="l00660"></a>00660     Q_UINT32 playcount;
<a name="l00661"></a>00661     Q_UINT32 last_played_at;
<a name="l00662"></a>00662     Q_UINT32 cdnum;
<a name="l00663"></a>00663     Q_UINT32 numcds;
<a name="l00664"></a>00664     Q_UINT32 file_format_code;
<a name="l00665"></a>00665     Q_UINT32 date_added;
<a name="l00666"></a>00666     Q_UINT32 date_released;
<a name="l00667"></a>00667 
<a name="l00668"></a>00668     Q_UINT32 mStartTime;
<a name="l00669"></a>00669     Q_UINT32 mStopTime;
<a name="l00670"></a>00670     Q_UINT32 mSoundCheck;
<a name="l00671"></a>00671 
<a name="l00672"></a>00672     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> rating;       <span class="comment">// rating 0 lowest 100 highest</span>
<a name="l00673"></a>00673     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> vbr;          <span class="comment">// vbr=1, cbr=0</span>
<a name="l00674"></a>00674     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> type;         <span class="comment">// mp3=1, aac+audible=0</span>
<a name="l00675"></a>00675     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> compilation;  <span class="comment">// iscompiltaion=1, 0 otherwise</span>
<a name="l00676"></a>00676 
<a name="l00677"></a>00677     Q_UINT64 dbid;
<a name="l00678"></a>00678     Q_UINT8  checked;
<a name="l00679"></a>00679     Q_UINT8  app_rating;
<a name="l00680"></a>00680     Q_UINT16 beatsPerMinute;
<a name="l00681"></a>00681     Q_UINT16 mArtworkCount;
<a name="l00682"></a>00682     Q_UINT16 unk9;
<a name="l00683"></a>00683     Q_UINT32 mArtworkSize;
<a name="l00684"></a>00684     Q_UINT32 unk11;
<a name="l00685"></a>00685     Q_UINT32 mAppleDRM;
<a name="l00686"></a>00686     Q_UINT32 mSkipCount;
<a name="l00687"></a>00687     Q_UINT32 mLastSkippedDate;
<a name="l00688"></a>00688     Q_UINT8  mHasArtwork;
<a name="l00689"></a>00689     Q_UINT8  mSkipWhenShuffe;
<a name="l00690"></a>00690     Q_UINT8  mRememberPbackPos;
<a name="l00691"></a>00691     Q_UINT8  flag4;
<a name="l00692"></a>00692     Q_UINT8  mHasLyricsFlag;
<a name="l00693"></a>00693     Q_UINT8  mIsMovie;
<a name="l00694"></a>00694     Q_UINT8  mPodcastPlayedFlag;
<a name="l00695"></a>00695     Q_UINT8  unk37_2;
<a name="l00696"></a>00696     Q_UINT32 unk21;
<a name="l00697"></a>00697     Q_UINT32 mPregapSamples;
<a name="l00698"></a>00698     Q_UINT64 mNumSamples;
<a name="l00699"></a>00699     Q_UINT32 unk25;
<a name="l00700"></a>00700     Q_UINT32 mPostgapSamples;
<a name="l00701"></a>00701     Q_UINT32 unk27;
<a name="l00702"></a>00702     Q_UINT32 mMediaType;
<a name="l00703"></a>00703     Q_UINT32 mSeasonNumber;
<a name="l00704"></a>00704     Q_UINT32 mEpisodeNumber;
<a name="l00705"></a>00705     Q_UINT32 unk31; <span class="comment">// seems to be always 0 for unprotected files</span>
<a name="l00706"></a>00706     Q_UINT32 unk32;
<a name="l00707"></a>00707     Q_UINT32 unk33;
<a name="l00708"></a>00708     Q_UINT32 unk34;
<a name="l00709"></a>00709     Q_UINT32 unk35;
<a name="l00710"></a>00710     Q_UINT32 unk36;
<a name="l00711"></a>00711     Q_UINT32 unk37;
<a name="l00712"></a>00712     Q_UINT32 mGaplessData;
<a name="l00713"></a>00713     Q_UINT32 unk38;
<a name="l00714"></a>00714     Q_UINT16 mGapLessFlag;
<a name="l00715"></a>00715     Q_UINT16 mGaplessAlbum; <span class="comment">// no crossfading in iTunes</span>
<a name="l00716"></a>00716     Q_UINT16 unk39[10];
<a name="l00717"></a>00717     Q_UINT32 unk40;
<a name="l00718"></a>00718     Q_UINT32 unk41;
<a name="l00719"></a>00719     Q_UINT32 unk42;
<a name="l00720"></a>00720     Q_UINT32 unk43;
<a name="l00721"></a>00721     Q_UINT16 unk44;
<a name="l00722"></a>00722     Q_UINT16 mAlbumID;
<a name="l00723"></a>00723     Q_UINT32 mMhiiLink;
<a name="l00724"></a>00724 
<a name="l00725"></a>00725     <span class="comment">// TODO implement podcast flag (together with the whole rest)</span>
<a name="l00726"></a>00726 
<a name="l00727"></a>00727 <span class="keyword">private</span>:
<a name="l00728"></a>00728 
<a name="l00729"></a>00729     <span class="keywordtype">bool</span> m_recentlyPlayed;
<a name="l00730"></a>00730 
<a name="l00731"></a>00731 };
<a name="l00732"></a>00732 <span class="comment"></span>
<a name="l00733"></a>00733 <span class="comment">/**</span>
<a name="l00734"></a>00734 <span class="comment"> * This interface defines a comparator comparing 2 Tracks and returning a negative int, zero, or</span>
<a name="l00735"></a>00735 <span class="comment"> * a positive int if the first track is smaller, equal or greater than the second.</span>
<a name="l00736"></a>00736 <span class="comment"> *</span>
<a name="l00737"></a>00737 <span class="comment"> * Example: you need to sort a TrackPtrList by Year</span>
<a name="l00738"></a>00738 <span class="comment"> *</span>
<a name="l00739"></a>00739 <span class="comment"> * First create an implementor for TrackComparator like this:</span>
<a name="l00740"></a>00740 <span class="comment"> * &lt;pre&gt;&lt;code&gt;</span>
<a name="l00741"></a>00741 <span class="comment"> * class TracksByYearComparator : public TrackComparator {</span>
<a name="l00742"></a>00742 <span class="comment"> * public:</span>
<a name="l00743"></a>00743 <span class="comment"> *     virtual int compare( const itunesdb::Track&amp; track1, const itunesdb::Track&amp; track2 ) {</span>
<a name="l00744"></a>00744 <span class="comment"> *         return track1.getYear() - track2.getYear();</span>
<a name="l00745"></a>00745 <span class="comment"> *     }</span>
<a name="l00746"></a>00746 <span class="comment"> * };</span>
<a name="l00747"></a>00747 <span class="comment"> * &lt;/code&gt;&lt;/pre&gt;</span>
<a name="l00748"></a>00748 <span class="comment"> * then you call the @c TrackPtrList::setComparator() method of your @c TrackPtrList instance and</span>
<a name="l00749"></a>00749 <span class="comment"> * sort() it.</span>
<a name="l00750"></a>00750 <span class="comment"> * @see itunesdb::TrackComparators for a list of predefined comparators and further examples</span>
<a name="l00751"></a>00751 <span class="comment"> */</span>
<a name="l00752"></a>00752 <span class="keyword">typedef</span> itunesdb::utils::Comparator&lt;itunesdb::Track&gt; TrackComparator;
<a name="l00753"></a>00753 <span class="keyword">typedef</span> QTPOD_SHARED_PTR_IMPL_DEF&lt;TrackComparator&gt; TrackComparatorPtr;
<a name="l00754"></a>00754 <span class="keyword">typedef</span> QTPOD_SHARED_PTR_IMPL_DEF&lt;const TrackComparator&gt; ConstTrackComparatorPtr;
<a name="l00755"></a>00755 <span class="comment"></span>
<a name="l00756"></a>00756 <span class="comment">/**</span>
<a name="l00757"></a>00757 <span class="comment"> * This class provides a set of predefined TrackComparator implementations</span>
<a name="l00758"></a>00758 <span class="comment"> */</span>
<a name="l00759"></a><a class="code" href="classitunesdb_1_1TrackComparators.html">00759</a> <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators.html">TrackComparators</a> {
<a name="l00760"></a>00760     <span class="keyword">class </span>KeepOrder;
<a name="l00761"></a>00761     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByTitle.html">ByTitle</a>;
<a name="l00762"></a>00762     <span class="keyword">class </span>ByArtist;
<a name="l00763"></a>00763     <span class="keyword">class </span>ByAlbum;
<a name="l00764"></a>00764     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByGenre.html">ByGenre</a>;
<a name="l00765"></a>00765     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByCategory.html">ByCategory</a>;
<a name="l00766"></a>00766     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByComment.html">ByComment</a>;
<a name="l00767"></a>00767     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByComposer.html">ByComposer</a>;
<a name="l00768"></a>00768     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByEqualizerSetting.html">ByEqualizerSetting</a>;
<a name="l00769"></a>00769     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByDescriptionTxt.html">ByDescriptionTxt</a>;
<a name="l00770"></a>00770     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByGrouping.html">ByGrouping</a>;
<a name="l00771"></a>00771     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByBitrate.html">ByBitrate</a>;
<a name="l00772"></a>00772     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByFiletype.html">ByFiletype</a>;
<a name="l00773"></a>00773     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByTimeModified.html">ByTimeModified</a>;
<a name="l00774"></a>00774     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByTrackNumber.html">ByTrackNumber</a>;
<a name="l00775"></a>00775     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1BySize.html">BySize</a>;
<a name="l00776"></a>00776     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByTrackLength.html">ByTrackLength</a>;
<a name="l00777"></a>00777     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByYear.html">ByYear</a>;
<a name="l00778"></a>00778     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1BySampleRate.html">BySampleRate</a>;
<a name="l00779"></a>00779     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByDateAdded.html">ByDateAdded</a>;
<a name="l00780"></a>00780     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByPlaycount.html">ByPlaycount</a>;
<a name="l00781"></a>00781     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByLastPlayed.html">ByLastPlayed</a>;
<a name="l00782"></a>00782     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByRating.html">ByRating</a>;
<a name="l00783"></a>00783     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByCdNumber.html">ByCdNumber</a>;
<a name="l00784"></a>00784     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByReleaseDate.html">ByReleaseDate</a>;
<a name="l00785"></a>00785     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByBPM.html">ByBPM</a>;
<a name="l00786"></a>00786     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1BySkipCountOnly.html">BySkipCountOnly</a>;
<a name="l00787"></a>00787     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByLastSkipped.html">ByLastSkipped</a>;
<a name="l00788"></a>00788     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByTvShow.html">ByTvShow</a>;
<a name="l00789"></a>00789     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1BySeason.html">BySeason</a>;
<a name="l00790"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#1fb07a6cdd50a2b1d73be4f9f10f7cd4">00790</a>     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ByEpisodeNumber.html">ByEpisodeNumber</a>;
<a name="l00791"></a>00791 
<a name="l00792"></a>00792 <span class="keyword">public</span>:
<a name="l00793"></a>00793 <span class="comment"></span>
<a name="l00794"></a>00794 <span class="comment">    /**</span>
<a name="l00795"></a>00795 <span class="comment">     * Comparator to keep the order when calling sort()</span>
<a name="l00796"></a>00796 <span class="comment">     */</span>
<a name="l00797"></a>00797     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#1fb07a6cdd50a2b1d73be4f9f10f7cd4">KEEP_ORDER</a>;
<a name="l00798"></a>00798 <span class="comment"></span>
<a name="l00799"></a>00799 <span class="comment">    /**</span>
<a name="l00800"></a>00800 <span class="comment">     * Comparator to sort a list of tracks by title</span>
<a name="l00801"></a>00801 <span class="comment">     */</span>
<a name="l00802"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#d5bcc3b473a6ba496fe96e9d2c470839">00802</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#d5bcc3b473a6ba496fe96e9d2c470839">BY_TITLE</a>;
<a name="l00803"></a>00803 <span class="comment"></span>
<a name="l00804"></a>00804 <span class="comment">    /**</span>
<a name="l00805"></a>00805 <span class="comment">     * Comparator to sort a list of tracks by the artist property</span>
<a name="l00806"></a>00806 <span class="comment">     */</span>
<a name="l00807"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#73c5bacf6df45cadd45a5fbe582a9bc6">00807</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#73c5bacf6df45cadd45a5fbe582a9bc6">BY_ARTISTONLY</a>;
<a name="l00808"></a>00808 <span class="comment"></span>
<a name="l00809"></a>00809 <span class="comment">    /**</span>
<a name="l00810"></a>00810 <span class="comment">     * Comparator to sort a list of tracks by the album property</span>
<a name="l00811"></a>00811 <span class="comment">     */</span>
<a name="l00812"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#fe9b7862f7ee5d0bef4de9cd5a3e4281">00812</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#fe9b7862f7ee5d0bef4de9cd5a3e4281">BY_ALBUMONLY</a>;
<a name="l00813"></a>00813 <span class="comment"></span>
<a name="l00814"></a>00814 <span class="comment">    /**</span>
<a name="l00815"></a>00815 <span class="comment">     * Comparator to sort a list of tracks by TV show, season, spisode and title</span>
<a name="l00816"></a>00816 <span class="comment">     */</span>
<a name="l00817"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#efe4b10d0cdcbb42e0e6d50f41f21a80">00817</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#efe4b10d0cdcbb42e0e6d50f41f21a80">BY_TVSHOWONLY</a>;
<a name="l00818"></a>00818 <span class="comment"></span>
<a name="l00819"></a>00819 <span class="comment">    /**</span>
<a name="l00820"></a>00820 <span class="comment">     * Comparator to sort a list of tracks by season, episode and title</span>
<a name="l00821"></a>00821 <span class="comment">     */</span>
<a name="l00822"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#a86e9e2b97a64f452890e7a771027b53">00822</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#a86e9e2b97a64f452890e7a771027b53">BY_SEASONONLY</a>;
<a name="l00823"></a>00823 <span class="comment"></span>
<a name="l00824"></a>00824 <span class="comment">    /**</span>
<a name="l00825"></a>00825 <span class="comment">     * Comparator to sort a list of tracks by episode number and title</span>
<a name="l00826"></a>00826 <span class="comment">     */</span>
<a name="l00827"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#1ab4f19ea67fcbc8f3ffe0d6d9761e9a">00827</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#1ab4f19ea67fcbc8f3ffe0d6d9761e9a">BY_EPISODEONLY</a>;
<a name="l00828"></a>00828 <span class="comment"></span>
<a name="l00829"></a>00829 <span class="comment">    /**</span>
<a name="l00830"></a>00830 <span class="comment">     * Comparator to sort a list of tracks by the genre property</span>
<a name="l00831"></a>00831 <span class="comment">     */</span>
<a name="l00832"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#d20d0765250edc32373df56e9210924a">00832</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#d20d0765250edc32373df56e9210924a">BY_GENREONLY</a>;
<a name="l00833"></a>00833 <span class="comment"></span>
<a name="l00834"></a>00834 <span class="comment">    /**</span>
<a name="l00835"></a>00835 <span class="comment">     * Comparator to sort a list of tracks by category</span>
<a name="l00836"></a>00836 <span class="comment">     */</span>
<a name="l00837"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#d77c806dc990e361e0f99a302108955b">00837</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#d77c806dc990e361e0f99a302108955b">BY_CATEGORY</a>;
<a name="l00838"></a>00838 <span class="comment"></span>
<a name="l00839"></a>00839 <span class="comment">    /**</span>
<a name="l00840"></a>00840 <span class="comment">     * Comparator to sort a list of tracks by the comment property</span>
<a name="l00841"></a>00841 <span class="comment">     */</span>
<a name="l00842"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#04ffc8210112d31eea6aebdcebcc3bb7">00842</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#04ffc8210112d31eea6aebdcebcc3bb7">BY_COMMENT</a>;
<a name="l00843"></a>00843 <span class="comment"></span>
<a name="l00844"></a>00844 <span class="comment">    /**</span>
<a name="l00845"></a>00845 <span class="comment">     * Comparator to sort a list of tracks by the composer property</span>
<a name="l00846"></a>00846 <span class="comment">     */</span>
<a name="l00847"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#f7afa03836ed435fdf2a49fb2c9a898a">00847</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#f7afa03836ed435fdf2a49fb2c9a898a">BY_COMPOSERONLY</a>;
<a name="l00848"></a>00848 <span class="comment"></span>
<a name="l00849"></a>00849 <span class="comment">    /**</span>
<a name="l00850"></a>00850 <span class="comment">     * Comparator to sort a list of tracks by the eq setting property</span>
<a name="l00851"></a>00851 <span class="comment">     */</span>
<a name="l00852"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#f07c91caffcc1a3a9eb6dd258b1c64d1">00852</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#f07c91caffcc1a3a9eb6dd258b1c64d1">BY_EQSETTING</a>;
<a name="l00853"></a>00853 <span class="comment"></span>
<a name="l00854"></a>00854 <span class="comment">    /**</span>
<a name="l00855"></a>00855 <span class="comment">     * Comparator to sort a list of tracks by the description property</span>
<a name="l00856"></a>00856 <span class="comment">     */</span>
<a name="l00857"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#824f991f1b1fae115da9037e9a1506f5">00857</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#824f991f1b1fae115da9037e9a1506f5">BY_DESCRIPTIONTXT</a>;
<a name="l00858"></a>00858 <span class="comment"></span>
<a name="l00859"></a>00859 <span class="comment">    /**</span>
<a name="l00860"></a>00860 <span class="comment">     * Comparator to sort a list of tracks by the grouping property</span>
<a name="l00861"></a>00861 <span class="comment">     */</span>
<a name="l00862"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#f53a0290b0ccb8a6d71a098e65f576d6">00862</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#f53a0290b0ccb8a6d71a098e65f576d6">BY_GROUPING</a>;
<a name="l00863"></a>00863 <span class="comment"></span>
<a name="l00864"></a>00864 <span class="comment">    /**</span>
<a name="l00865"></a>00865 <span class="comment">     * Comparator to sort a list of tracks by bitrate</span>
<a name="l00866"></a>00866 <span class="comment">     */</span>
<a name="l00867"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#6bb32f0cbea9412976cbfad8d8d99c94">00867</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#6bb32f0cbea9412976cbfad8d8d99c94">BY_BITRATE</a>;
<a name="l00868"></a>00868 <span class="comment"></span>
<a name="l00869"></a>00869 <span class="comment">    /**</span>
<a name="l00870"></a>00870 <span class="comment">     * Comparator to sort a list of tracks by filetype</span>
<a name="l00871"></a>00871 <span class="comment">     */</span>
<a name="l00872"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#4539f12aa81b00b2c6618d0535c3e522">00872</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#4539f12aa81b00b2c6618d0535c3e522">BY_FILETYPE</a>;
<a name="l00873"></a>00873 <span class="comment"></span>
<a name="l00874"></a>00874 <span class="comment">    /**</span>
<a name="l00875"></a>00875 <span class="comment">     * Comparator to sort a list of tracks by modification time</span>
<a name="l00876"></a>00876 <span class="comment">     */</span>
<a name="l00877"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#9537b944cc76a226d4703ed0659550cd">00877</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#9537b944cc76a226d4703ed0659550cd">BY_TIMEMODIFIED</a>;
<a name="l00878"></a>00878 <span class="comment"></span>
<a name="l00879"></a>00879 <span class="comment">    /**</span>
<a name="l00880"></a>00880 <span class="comment">     * Comparator to sort a list of tracks by track number</span>
<a name="l00881"></a>00881 <span class="comment">     */</span>
<a name="l00882"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#1efdc2c9ecae2539b98070fd5f12c4fd">00882</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#1efdc2c9ecae2539b98070fd5f12c4fd">BY_TRACKNUMBER</a>;
<a name="l00883"></a>00883 <span class="comment"></span>
<a name="l00884"></a>00884 <span class="comment">    /**</span>
<a name="l00885"></a>00885 <span class="comment">     * Comparator to sort a list of tracks by size</span>
<a name="l00886"></a>00886 <span class="comment">     */</span>
<a name="l00887"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#43cc9672c0f4cfbb6200dbf096be6f06">00887</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#43cc9672c0f4cfbb6200dbf096be6f06">BY_SIZE</a>;
<a name="l00888"></a>00888 <span class="comment"></span>
<a name="l00889"></a>00889 <span class="comment">    /**</span>
<a name="l00890"></a>00890 <span class="comment">     * Comparator to sort a list of tracks by the tracks length (timewise)</span>
<a name="l00891"></a>00891 <span class="comment">     */</span>
<a name="l00892"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#5fe234745ca1bc8fb1a6dfa14c888999">00892</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#5fe234745ca1bc8fb1a6dfa14c888999">BY_TRACKLENGTH</a>;
<a name="l00893"></a>00893 <span class="comment"></span>
<a name="l00894"></a>00894 <span class="comment">    /**</span>
<a name="l00895"></a>00895 <span class="comment">     * Comparator to sort a list of tracks by the year property</span>
<a name="l00896"></a>00896 <span class="comment">     */</span>
<a name="l00897"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#eab7d59c051178a27c6d0ba19bdba33a">00897</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#eab7d59c051178a27c6d0ba19bdba33a">BY_YEAR</a>;
<a name="l00898"></a>00898 <span class="comment"></span>
<a name="l00899"></a>00899 <span class="comment">    /**</span>
<a name="l00900"></a>00900 <span class="comment">     * Comparator to sort a list of tracks by the sample rate</span>
<a name="l00901"></a>00901 <span class="comment">     */</span>
<a name="l00902"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#57e8c09579fcf3c28296cd7447d945be">00902</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#57e8c09579fcf3c28296cd7447d945be">BY_SAMPLERATE</a>;
<a name="l00903"></a>00903 <span class="comment"></span>
<a name="l00904"></a>00904 <span class="comment">    /**</span>
<a name="l00905"></a>00905 <span class="comment">     * Comparator to sort a list of tracks by the date the tracks were added to the database</span>
<a name="l00906"></a>00906 <span class="comment">     * (oldest first).</span>
<a name="l00907"></a>00907 <span class="comment">     */</span>
<a name="l00908"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#83811dedb941abd99119faabb0e7f5e4">00908</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#83811dedb941abd99119faabb0e7f5e4">BY_DATEADDED</a>;
<a name="l00909"></a>00909 <span class="comment"></span>
<a name="l00910"></a>00910 <span class="comment">    /**</span>
<a name="l00911"></a>00911 <span class="comment">     * Comparator to sort a list of tracks by the date the tracks were added to the database</span>
<a name="l00912"></a>00912 <span class="comment">     * (most recently first).</span>
<a name="l00913"></a>00913 <span class="comment">     */</span>
<a name="l00914"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#d6f65bab6a6e7b088584d785dc7ae151">00914</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#d6f65bab6a6e7b088584d785dc7ae151">BY_RECENTLYADDED</a>;
<a name="l00915"></a>00915 <span class="comment"></span>
<a name="l00916"></a>00916 <span class="comment">    /**</span>
<a name="l00917"></a>00917 <span class="comment">     * Comparator to sort a list of tracks by the play count property</span>
<a name="l00918"></a>00918 <span class="comment">     */</span>
<a name="l00919"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#9cecfcaf6251086d22227c2868e9bca6">00919</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#9cecfcaf6251086d22227c2868e9bca6">BY_PLAYCOUNTONLY</a>;
<a name="l00920"></a>00920 <span class="comment"></span>
<a name="l00921"></a>00921 <span class="comment">    /**</span>
<a name="l00922"></a>00922 <span class="comment">     * Comparator to sort a list of tracks by the last played property (most recently last).</span>
<a name="l00923"></a>00923 <span class="comment">     */</span>
<a name="l00924"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#2b0a00c427a94bff90ba6c5ae99f443a">00924</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#2b0a00c427a94bff90ba6c5ae99f443a">BY_LASTPLAYED</a>;
<a name="l00925"></a>00925 <span class="comment"></span>
<a name="l00926"></a>00926 <span class="comment">    /**</span>
<a name="l00927"></a>00927 <span class="comment">     * Comparator to sort a list of tracks by the last played property (most recently first).</span>
<a name="l00928"></a>00928 <span class="comment">     */</span>
<a name="l00929"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#23185a4cf3d86ebe24e4f5a80dcfb0f4">00929</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#23185a4cf3d86ebe24e4f5a80dcfb0f4">BY_LASTPLAYED_REVERSE</a>;
<a name="l00930"></a>00930 <span class="comment"></span>
<a name="l00931"></a>00931 <span class="comment">    /**</span>
<a name="l00932"></a>00932 <span class="comment">     * Comparator to sort a list of tracks by the rating property.</span>
<a name="l00933"></a>00933 <span class="comment">     */</span>
<a name="l00934"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#95e8e329f14b730776e3946d139558f0">00934</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#95e8e329f14b730776e3946d139558f0">BY_RATING</a>;
<a name="l00935"></a>00935 <span class="comment"></span>
<a name="l00936"></a>00936 <span class="comment">    /**</span>
<a name="l00937"></a>00937 <span class="comment">     * Comparator to sort a list of tracks by the cd number property.</span>
<a name="l00938"></a>00938 <span class="comment">     */</span>
<a name="l00939"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#9bc2c059317ee3be9e9021a56043269e">00939</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#9bc2c059317ee3be9e9021a56043269e">BY_CDNUMBER</a>;
<a name="l00940"></a>00940 <span class="comment"></span>
<a name="l00941"></a>00941 <span class="comment">    /**</span>
<a name="l00942"></a>00942 <span class="comment">     * Comparator to sort a list of tracks by release date.</span>
<a name="l00943"></a>00943 <span class="comment">     */</span>
<a name="l00944"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#d757e08c8b5f109f572805515c279209">00944</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#d757e08c8b5f109f572805515c279209">BY_RELEASEDATE</a>;
<a name="l00945"></a>00945 <span class="comment"></span>
<a name="l00946"></a>00946 <span class="comment">    /**</span>
<a name="l00947"></a>00947 <span class="comment">     * Comparator to sort a list of tracks by beats per minute.</span>
<a name="l00948"></a>00948 <span class="comment">     */</span>
<a name="l00949"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#4afb1f3a7d917094201c7012c5d77010">00949</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#4afb1f3a7d917094201c7012c5d77010">BY_BPM</a>;
<a name="l00950"></a>00950 <span class="comment"></span>
<a name="l00951"></a>00951 <span class="comment">    /**</span>
<a name="l00952"></a>00952 <span class="comment">     * Comparator to sort a list of tracks by the skip count property</span>
<a name="l00953"></a>00953 <span class="comment">     */</span>
<a name="l00954"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#1f5e844708cd12d4dfeadc0522c92a7e">00954</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#1f5e844708cd12d4dfeadc0522c92a7e">BY_SKIPCOUNTONLY</a>;
<a name="l00955"></a>00955 <span class="comment"></span>
<a name="l00956"></a>00956 <span class="comment">    /**</span>
<a name="l00957"></a>00957 <span class="comment">     * Comparator to sort a list of tracks by the last played property (most recently last).</span>
<a name="l00958"></a>00958 <span class="comment">     */</span>
<a name="l00959"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#e9e8617af808058b3431b57e5c89740c">00959</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#e9e8617af808058b3431b57e5c89740c">BY_LASTSKIPPED</a>;
<a name="l00960"></a>00960 <span class="comment"></span>
<a name="l00961"></a>00961 <span class="comment">    /**</span>
<a name="l00962"></a>00962 <span class="comment">     * Comparator to sort a list of tracks by the last played property (most recently first).</span>
<a name="l00963"></a>00963 <span class="comment">     */</span>
<a name="l00964"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#5be17ba58901e7a5cf7c61570179f600">00964</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#5be17ba58901e7a5cf7c61570179f600">BY_LASTSKIPPED_REVERSE</a>;
<a name="l00965"></a>00965 <span class="comment"></span>
<a name="l00966"></a>00966 <span class="comment">    /**</span>
<a name="l00967"></a>00967 <span class="comment">     * Comparator to sort a list of tracks by album, tracknumber and title</span>
<a name="l00968"></a>00968 <span class="comment">     */</span>
<a name="l00969"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#1f0344d415167c93da27bf4cb4097cd5">00969</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#1f0344d415167c93da27bf4cb4097cd5">BY_ALBUM</a>;
<a name="l00970"></a>00970 <span class="comment"></span>
<a name="l00971"></a>00971 <span class="comment">    /**</span>
<a name="l00972"></a>00972 <span class="comment">     * Comparator to sort a list of tracks by artist, album, tracknumber and title</span>
<a name="l00973"></a>00973 <span class="comment">     */</span>
<a name="l00974"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#e08cbed4697399c0565b6473eb1e0b51">00974</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#e08cbed4697399c0565b6473eb1e0b51">BY_ARTIST</a>;
<a name="l00975"></a>00975 <span class="comment"></span>
<a name="l00976"></a>00976 <span class="comment">    /**</span>
<a name="l00977"></a>00977 <span class="comment">     * Comparator to sort a list of tracks by genre and all the properties BY_ARTIST uses.</span>
<a name="l00978"></a>00978 <span class="comment">     */</span>
<a name="l00979"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#c405254ea1e750654f9b30a3a8c3899e">00979</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#c405254ea1e750654f9b30a3a8c3899e">BY_GENRE</a>;
<a name="l00980"></a>00980 <span class="comment"></span>
<a name="l00981"></a>00981 <span class="comment">    /**</span>
<a name="l00982"></a>00982 <span class="comment">     * Comparator to sort a list of tracks by composer and title</span>
<a name="l00983"></a>00983 <span class="comment">     */</span>
<a name="l00984"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#3fd2f93e6789232feba437f849d2c0ad">00984</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#3fd2f93e6789232feba437f849d2c0ad">BY_COMPOSER</a>;
<a name="l00985"></a>00985 <span class="comment"></span>
<a name="l00986"></a>00986 <span class="comment">    /**</span>
<a name="l00987"></a>00987 <span class="comment">     * Comparator to sort a list of tracks by playcount and all the properties BY_ARTIST uses.</span>
<a name="l00988"></a>00988 <span class="comment">     */</span>
<a name="l00989"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#a962ddbd90a69f4d715dc021e0257bab">00989</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#a962ddbd90a69f4d715dc021e0257bab">BY_PLAYCOUNT</a>;
<a name="l00990"></a>00990 <span class="comment"></span>
<a name="l00991"></a>00991 <span class="comment">    /**</span>
<a name="l00992"></a>00992 <span class="comment">     * Comparator to sort a list of tracks by skip count and all the properties BY_ARTIST uses.</span>
<a name="l00993"></a>00993 <span class="comment">     */</span>
<a name="l00994"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#e74cb6b5f7d59d0fc3cfdd809ccba7b1">00994</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#e74cb6b5f7d59d0fc3cfdd809ccba7b1">BY_SKIPCOUNT</a>;
<a name="l00995"></a>00995 <span class="comment"></span>
<a name="l00996"></a>00996 <span class="comment">    /**</span>
<a name="l00997"></a>00997 <span class="comment">     * Comparator to sort a list of tracks by TV show, season, spisode and title</span>
<a name="l00998"></a>00998 <span class="comment">     */</span>
<a name="l00999"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#cdbaf06fefc4c67cdeb3f9dd7ee4c4d5">00999</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#cdbaf06fefc4c67cdeb3f9dd7ee4c4d5">BY_TVSHOW</a>;
<a name="l01000"></a>01000 <span class="comment"></span>
<a name="l01001"></a>01001 <span class="comment">    /**</span>
<a name="l01002"></a>01002 <span class="comment">     * Comparator to sort a list of tracks by season, episode and title</span>
<a name="l01003"></a>01003 <span class="comment">     */</span>
<a name="l01004"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#6d50e3f6a775cdf7de5fcfb831e2e4d6">01004</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#6d50e3f6a775cdf7de5fcfb831e2e4d6">BY_SEASON</a>;
<a name="l01005"></a>01005 <span class="comment"></span>
<a name="l01006"></a>01006 <span class="comment">    /**</span>
<a name="l01007"></a>01007 <span class="comment">     * Comparator to sort a list of tracks by episode number and title</span>
<a name="l01008"></a>01008 <span class="comment">     */</span>
<a name="l01009"></a><a class="code" href="classitunesdb_1_1TrackComparators.html#20804f83628fa4a7dd0589814206a827">01009</a>     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#20804f83628fa4a7dd0589814206a827">BY_EPISODE</a>;
<a name="l01010"></a>01010 <span class="comment"></span>
<a name="l01011"></a>01011 <span class="comment">    /**</span>
<a name="l01012"></a>01012 <span class="comment">     * Reverses the sort order of the given comparator.</span>
<a name="l01013"></a>01013 <span class="comment">     */</span>
<a name="l01014"></a><a class="code" href="classitunesdb_1_1TrackComparators_1_1ReverseComparator.html">01014</a>     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ReverseComparator.html">ReverseComparator</a> : <span class="keyword">public</span> TrackComparator {
<a name="l01015"></a>01015         TrackComparatorPtr m_delegate;
<a name="l01016"></a>01016     <span class="keyword">public</span>:<span class="comment"></span>
<a name="l01017"></a>01017 <span class="comment">        /**</span>
<a name="l01018"></a>01018 <span class="comment">         * Constructs a comparator reversing the sort order of the given comparator.</span>
<a name="l01019"></a>01019 <span class="comment">         */</span>
<a name="l01020"></a><a class="code" href="classitunesdb_1_1TrackComparators_1_1ReverseComparator.html#106b63199020e3d10b0e411eabd0225a">01020</a>         <a class="code" href="classitunesdb_1_1TrackComparators_1_1ReverseComparator.html#106b63199020e3d10b0e411eabd0225a">ReverseComparator</a>( <span class="keyword">const</span> TrackComparatorPtr&amp; comparator ) : m_delegate( comparator ) {}
<a name="l01021"></a>01021         <span class="keyword">virtual</span> ~<a class="code" href="classitunesdb_1_1TrackComparators_1_1ReverseComparator.html">ReverseComparator</a>() {}<span class="comment"></span>
<a name="l01022"></a>01022 <span class="comment">        /**</span>
<a name="l01023"></a>01023 <span class="comment">         * Compares the two given tracks in reverse to the delegating comparator</span>
<a name="l01024"></a>01024 <span class="comment">         * @param track1 the first track to be compared to the second</span>
<a name="l01025"></a>01025 <span class="comment">         * @param track2 the second track to be compared</span>
<a name="l01026"></a>01026 <span class="comment">         * @return the reverse of the result of the delegate</span>
<a name="l01027"></a>01027 <span class="comment">         */</span>
<a name="l01028"></a><a class="code" href="classitunesdb_1_1TrackComparators_1_1ReverseComparator.html#dd51935d20c90d7b64878093c84e833c">01028</a>         <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classitunesdb_1_1TrackComparators_1_1ReverseComparator.html#dd51935d20c90d7b64878093c84e833c">compare</a>( <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1Track.html">itunesdb::Track</a>&amp; track1, <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1Track.html">itunesdb::Track</a>&amp; track2 )<span class="keyword"> const </span>{
<a name="l01029"></a>01029             <span class="keywordflow">return</span> m_delegate-&gt;compare( track2, track1 );
<a name="l01030"></a>01030         }
<a name="l01031"></a>01031     };
<a name="l01032"></a>01032 
<a name="l01033"></a>01033 <span class="comment"></span>
<a name="l01034"></a>01034 <span class="comment">    /**</span>
<a name="l01035"></a>01035 <span class="comment">     * @brief Composition of many comparators.</span>
<a name="l01036"></a>01036 <span class="comment">     * </span>
<a name="l01037"></a>01037 <span class="comment">     * The first Comparator added is the one with the highest priority.</span>
<a name="l01038"></a>01038 <span class="comment">     */</span>
<a name="l01039"></a><a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html">01039</a>     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html">ComposingComparator</a> : <span class="keyword">public</span> TrackComparator {
<a name="l01040"></a>01040         <span class="keyword">typedef</span> std::vector&lt;TrackComparatorPtr&gt; ComparatorPtrVector;
<a name="l01041"></a>01041         ComparatorPtrVector m_comparators;
<a name="l01042"></a>01042     <span class="keyword">public</span>:
<a name="l01043"></a>01043 <span class="comment"></span>
<a name="l01044"></a>01044 <span class="comment">        /**</span>
<a name="l01045"></a>01045 <span class="comment">         * @brief Creates a new empty comparator composition</span>
<a name="l01046"></a>01046 <span class="comment">         */</span>
<a name="l01047"></a><a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html#36c94d2be2c74b8f4c46603df1671946">01047</a>         <a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html#36c94d2be2c74b8f4c46603df1671946">ComposingComparator</a>() {}
<a name="l01048"></a>01048 <span class="comment"></span>
<a name="l01049"></a>01049 <span class="comment">        /**</span>
<a name="l01050"></a>01050 <span class="comment">         * @brief Constructs a composing comparator with the given comparator added to the top.</span>
<a name="l01051"></a>01051 <span class="comment">         * </span>
<a name="l01052"></a>01052 <span class="comment">         * The comparator given is owned by this instance so the lifecycle is managed by it.</span>
<a name="l01053"></a>01053 <span class="comment">         */</span>
<a name="l01054"></a><a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html#d7e6a18eec7f08b5038314e219cc8cea">01054</a>         <a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html#36c94d2be2c74b8f4c46603df1671946">ComposingComparator</a>( TrackComparator * first ) {
<a name="l01055"></a>01055             <span class="keywordflow">if</span> ( first ) {
<a name="l01056"></a>01056                 m_comparators.push_back( TrackComparatorPtr( first ) );
<a name="l01057"></a>01057             }
<a name="l01058"></a>01058         }
<a name="l01059"></a>01059 <span class="comment"></span>
<a name="l01060"></a>01060 <span class="comment">        /**</span>
<a name="l01061"></a>01061 <span class="comment">         * @brief Constructs a composing comparator with the given comparator added to the top.</span>
<a name="l01062"></a>01062 <span class="comment">         */</span>
<a name="l01063"></a><a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html#3b57aed0a78034353e86bbe3b61a9634">01063</a>         <a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html#36c94d2be2c74b8f4c46603df1671946">ComposingComparator</a>( TrackComparatorPtr first ) {
<a name="l01064"></a>01064             <span class="keywordflow">if</span> ( first ) {
<a name="l01065"></a>01065                 m_comparators.push_back( first );
<a name="l01066"></a>01066             }
<a name="l01067"></a>01067         }
<a name="l01068"></a>01068         <span class="keyword">virtual</span> ~<a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html">ComposingComparator</a>() {}
<a name="l01069"></a>01069 <span class="comment"></span>
<a name="l01070"></a>01070 <span class="comment">        /**</span>
<a name="l01071"></a>01071 <span class="comment">         * @brief Appends the given comparator.</span>
<a name="l01072"></a>01072 <span class="comment">         * @param next the TrackComparator to add</span>
<a name="l01073"></a>01073 <span class="comment">         * @return a pointer to this ComposingComparator</span>
<a name="l01074"></a>01074 <span class="comment">         */</span>
<a name="l01075"></a><a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html#6e85cb80dfbd0f4cc426163d10f18879">01075</a>         <a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html">ComposingComparator</a> * <a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html#6e85cb80dfbd0f4cc426163d10f18879">add</a>( TrackComparatorPtr next ) {
<a name="l01076"></a>01076             <span class="keywordflow">if</span> ( next ) {
<a name="l01077"></a>01077                 m_comparators.push_back( next );
<a name="l01078"></a>01078             }
<a name="l01079"></a>01079             <span class="keywordflow">return</span> <span class="keyword">this</span>;
<a name="l01080"></a>01080         }
<a name="l01081"></a>01081 <span class="comment"></span>
<a name="l01082"></a>01082 <span class="comment">        /**</span>
<a name="l01083"></a>01083 <span class="comment">         * @brief Appends the given comparator.</span>
<a name="l01084"></a>01084 <span class="comment">         * </span>
<a name="l01085"></a>01085 <span class="comment">         * The comparator given is owned by this instance so the lifecycle is managed by it.</span>
<a name="l01086"></a>01086 <span class="comment">         * @param next the TrackComparator to add</span>
<a name="l01087"></a>01087 <span class="comment">         * @return a pointer to this ComposingComparator</span>
<a name="l01088"></a>01088 <span class="comment">         */</span>
<a name="l01089"></a><a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html#9d958c674e3cebaad1ee8e6012ba31e0">01089</a>         <a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html">ComposingComparator</a> * <a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html#6e85cb80dfbd0f4cc426163d10f18879">add</a>( TrackComparator * next ) {
<a name="l01090"></a>01090             <span class="keywordflow">if</span> ( next ) {
<a name="l01091"></a>01091                 m_comparators.push_back( TrackComparatorPtr( next ) );
<a name="l01092"></a>01092             }
<a name="l01093"></a>01093             <span class="keywordflow">return</span> <span class="keyword">this</span>;
<a name="l01094"></a>01094         }
<a name="l01095"></a>01095 <span class="comment"></span>
<a name="l01096"></a>01096 <span class="comment">        /**</span>
<a name="l01097"></a>01097 <span class="comment">         * @brief Returns the result of the first comparator returning a value != 0</span>
<a name="l01098"></a>01098 <span class="comment">         * @param track1 the first track to compare</span>
<a name="l01099"></a>01099 <span class="comment">         * @param track2 the second track to compare</span>
<a name="l01100"></a>01100 <span class="comment">         * @return the result of the first comparator returning a value != 0</span>
<a name="l01101"></a>01101 <span class="comment">         */</span>
<a name="l01102"></a>01102         <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classitunesdb_1_1TrackComparators_1_1ComposingComparator.html#aa1b66bede02f7ed1814954cc2623037">compare</a>( <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1Track.html">itunesdb::Track</a>&amp; track1, <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1Track.html">itunesdb::Track</a>&amp; track2 ) <span class="keyword">const</span>;
<a name="l01103"></a>01103     };
<a name="l01104"></a>01104 <span class="comment"></span>
<a name="l01105"></a>01105 <span class="comment">    /**</span>
<a name="l01106"></a>01106 <span class="comment">     * @brief Creates a shared ptr to the given comparator.</span>
<a name="l01107"></a>01107 <span class="comment">     */</span>
<a name="l01108"></a>01108     <span class="keyword">static</span> TrackComparatorPtr <a class="code" href="classitunesdb_1_1TrackComparators.html#17f602d963bac4df37f0e313a5c26c1c">createPtr</a>( TrackComparator * comparator );
<a name="l01109"></a>01109 };  <span class="comment">// TrackComparators</span>
<a name="l01110"></a>01110 
<a name="l01111"></a>01111 <span class="comment"></span>
<a name="l01112"></a>01112 <span class="comment">/**</span>
<a name="l01113"></a>01113 <span class="comment"> * This interface will be used by ITunesDB::findFirstTrackBy and ITunesDB::getTracksBy.</span>
<a name="l01114"></a>01114 <span class="comment"> * Callers to these functions provide a reference to an implementation of this interface</span>
<a name="l01115"></a>01115 <span class="comment"> * and thus provide code to decide if a given track is a valid result.</span>
<a name="l01116"></a>01116 <span class="comment"> *</span>
<a name="l01117"></a>01117 <span class="comment"> * Example: you need to get all the tracks performed at a given year (e.g. 2004) from the database</span>
<a name="l01118"></a>01118 <span class="comment"> *</span>
<a name="l01119"></a>01119 <span class="comment"> * First create an implementor for TrackPredicate like this:</span>
<a name="l01120"></a>01120 <span class="comment"> * &lt;pre&gt;&lt;code&gt;</span>
<a name="l01121"></a>01121 <span class="comment"> * class TracksByYearPredicate : public TrackPredicate {</span>
<a name="l01122"></a>01122 <span class="comment"> *     Q_UINT32 m_givenYear;</span>
<a name="l01123"></a>01123 <span class="comment"> * public:</span>
<a name="l01124"></a>01124 <span class="comment"> *     TracksByYearPredicate( Q_UINT32 givenYear ) : m_givenYear( givenYear ) {}</span>
<a name="l01125"></a>01125 <span class="comment"> *     ~TracksByYearPredicate() {}</span>
<a name="l01126"></a>01126 <span class="comment"> *     bool operator() ( const itunesdb::Track&amp; track ) {</span>
<a name="l01127"></a>01127 <span class="comment"> *         return track.getYear() == m_givenYear;</span>
<a name="l01128"></a>01128 <span class="comment"> *     }</span>
<a name="l01129"></a>01129 <span class="comment"> * };</span>
<a name="l01130"></a>01130 <span class="comment"> * &lt;/code&gt;&lt;/pre&gt;</span>
<a name="l01131"></a>01131 <span class="comment"> * then you call the ITunesDB::getTracksBy() method of your ITunesDB instance (here itunesdb) with a reference to your predicate</span>
<a name="l01132"></a>01132 <span class="comment"> * &lt;pre&gt;&lt;code&gt;</span>
<a name="l01133"></a>01133 <span class="comment"> * TracksByYearPredicate yearPredicate( 2004 );</span>
<a name="l01134"></a>01134 <span class="comment"> * TrackPtrList result;</span>
<a name="l01135"></a>01135 <span class="comment"> * itunesdb.getTracksBy( yearPredicate, result );</span>
<a name="l01136"></a>01136 <span class="comment"> * &lt;/code&gt;&lt;/pre&gt;</span>
<a name="l01137"></a>01137 <span class="comment"> * Now you have all tracks performed at 2004 in your result list.</span>
<a name="l01138"></a>01138 <span class="comment"> * Alternatively you can call the getTracksBy() method returning a RangeIterator and add the tracks to your own container.</span>
<a name="l01139"></a>01139 <span class="comment"> * &lt;pre&gt;&lt;code&gt;</span>
<a name="l01140"></a>01140 <span class="comment">    ITunesDB::FilteredTrackConstIterator&lt;TracksByYearPredicate&gt; iter = itunesdb.getTracksBy( yearPredicate );</span>
<a name="l01141"></a>01141 <span class="comment">    std::vector&lt;itunesdb::Track*&gt; vector;</span>
<a name="l01142"></a>01142 <span class="comment">    while( iter.hasNext() ) {</span>
<a name="l01143"></a>01143 <span class="comment">        vector.push_back( iter.next() );</span>
<a name="l01144"></a>01144 <span class="comment">    }</span>
<a name="l01145"></a>01145 <span class="comment"> * &lt;/code&gt;&lt;/pre&gt;</span>
<a name="l01146"></a>01146 <span class="comment"> * @see ITunesDB::findFirstTrackBy()</span>
<a name="l01147"></a>01147 <span class="comment"> * @see ITunesDB::getTracksBy()</span>
<a name="l01148"></a>01148 <span class="comment"> * }</span>
<a name="l01149"></a>01149 <span class="comment"> */</span>
<a name="l01150"></a><a class="code" href="classitunesdb_1_1TrackPredicate.html">01150</a> <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackPredicate.html">TrackPredicate</a> {
<a name="l01151"></a>01151 <span class="keyword">public</span>:
<a name="l01152"></a>01152     <span class="keyword">virtual</span> ~<a class="code" href="classitunesdb_1_1TrackPredicate.html">TrackPredicate</a>() {}
<a name="l01153"></a>01153 <span class="comment"></span>
<a name="l01154"></a>01154 <span class="comment">    /**</span>
<a name="l01155"></a>01155 <span class="comment">     * Implement this method accordingly to the documentation above and (!) the documentation</span>
<a name="l01156"></a>01156 <span class="comment">     * of the function this predicate will be given to.</span>
<a name="l01157"></a>01157 <span class="comment">     */</span>
<a name="l01158"></a>01158     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classitunesdb_1_1TrackPredicate.html#2a031fa5f6b071aa2d0e1fd09fe66f5f">operator () </a>( <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1Track.html">Track</a> * ) <span class="keyword">const </span>= 0;
<a name="l01159"></a>01159 };
<a name="l01160"></a>01160 
<a name="l01161"></a>01161 
<a name="l01162"></a>01162 <span class="keyword">typedef</span> QTPOD_SHARED_PTR_IMPL_DEF&lt;TrackPredicate&gt; TrackPredicatePtr;
<a name="l01163"></a>01163 <span class="keyword">typedef</span> QTPOD_SHARED_PTR_IMPL_DEF&lt;const TrackPredicate&gt; ConstTrackPredicatePtr;
<a name="l01164"></a>01164 
<a name="l01165"></a>01165 <span class="comment"></span>
<a name="l01166"></a>01166 <span class="comment">/**</span>
<a name="l01167"></a>01167 <span class="comment"> * This class provides a few TrackPredicate implementations.</span>
<a name="l01168"></a>01168 <span class="comment"> */</span>
<a name="l01169"></a><a class="code" href="classitunesdb_1_1TrackPredicates.html">01169</a> <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackPredicates.html">TrackPredicates</a> {
<a name="l01170"></a>01170 <span class="keyword">public</span>:
<a name="l01171"></a>01171 <span class="comment"></span>
<a name="l01172"></a>01172 <span class="comment">    /**</span>
<a name="l01173"></a>01173 <span class="comment">     * A predicate to find tracks by a given artist. This predicate will return true for</span>
<a name="l01174"></a>01174 <span class="comment">     * every track that fits to the artist given at construction time.</span>
<a name="l01175"></a>01175 <span class="comment">     * @see ByArtist::ByArtist( const QString&amp; )</span>
<a name="l01176"></a>01176 <span class="comment">     */</span>
<a name="l01177"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByArtist.html">01177</a>     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByArtist.html">ByArtist</a> : <span class="keyword">public</span> <a class="code" href="classitunesdb_1_1TrackPredicate.html">TrackPredicate</a> {
<a name="l01178"></a>01178     <span class="keyword">public</span>:<span class="comment"></span>
<a name="l01179"></a>01179 <span class="comment">        /**</span>
<a name="l01180"></a>01180 <span class="comment">         * Constructor to create a new predicate for the given artist.</span>
<a name="l01181"></a>01181 <span class="comment">         */</span>
<a name="l01182"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByArtist.html#98b31247abdf75d197fd770e88373e57">01182</a>         <a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByArtist.html#98b31247abdf75d197fd770e88373e57">ByArtist</a>( <span class="keyword">const</span> QString&amp; artist ) : _artist_( artist ) {}
<a name="l01183"></a>01183         <span class="keyword">virtual</span> ~<a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByArtist.html">ByArtist</a>() {}
<a name="l01184"></a>01184 <span class="comment"></span>
<a name="l01185"></a>01185 <span class="comment">        /**</span>
<a name="l01186"></a>01186 <span class="comment">         * Returns true if the given track matches the parameters given to the constructor.</span>
<a name="l01187"></a>01187 <span class="comment">         */</span>
<a name="l01188"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByArtist.html#406069eb2167ff62eadfb7a8024fd091">01188</a>         <span class="keywordtype">bool</span> <a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByArtist.html#406069eb2167ff62eadfb7a8024fd091">operator () </a>( <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1Track.html">Track</a> * track )<span class="keyword"> const </span>{
<a name="l01189"></a>01189             <span class="keywordflow">return</span>  track &amp;&amp; _artist_.compare( track-&gt;<a class="code" href="classitunesdb_1_1Track.html#aa23e0428a17def319a62a291327c1ea">getArtist</a>() ) == 0;
<a name="l01190"></a>01190         }
<a name="l01191"></a>01191     <span class="keyword">private</span>:
<a name="l01192"></a>01192         <span class="keyword">const</span> QString _artist_;
<a name="l01193"></a>01193     };  <span class="comment">// ByArtist</span>
<a name="l01194"></a>01194 
<a name="l01195"></a>01195 <span class="comment"></span>
<a name="l01196"></a>01196 <span class="comment">    /**</span>
<a name="l01197"></a>01197 <span class="comment">     * A predicate to find tracks by a given album. This predicate will return true for</span>
<a name="l01198"></a>01198 <span class="comment">     * every track that fits to the artist/album combination given at construction time.</span>
<a name="l01199"></a>01199 <span class="comment">     * @see ByAlbum::ByAlbum( const QString&amp;, const QString&amp; )</span>
<a name="l01200"></a>01200 <span class="comment">     */</span>
<a name="l01201"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByAlbum.html">01201</a>     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByAlbum.html">ByAlbum</a> : <span class="keyword">public</span> <a class="code" href="classitunesdb_1_1TrackPredicate.html">TrackPredicate</a> {
<a name="l01202"></a>01202     <span class="keyword">public</span>:<span class="comment"></span>
<a name="l01203"></a>01203 <span class="comment">        /**</span>
<a name="l01204"></a>01204 <span class="comment">         * Constructor to create a new predicate for the given artist/album combination.</span>
<a name="l01205"></a>01205 <span class="comment">         */</span>
<a name="l01206"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByAlbum.html#8bcc3ba11647a53da7d4af5c495a3af2">01206</a>         <a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByAlbum.html#8bcc3ba11647a53da7d4af5c495a3af2">ByAlbum</a>(<span class="keyword">const</span> QString&amp; artist, <span class="keyword">const</span> QString &amp; album)
<a name="l01207"></a>01207             : _artist_( artist ), _album_( album ) {}
<a name="l01208"></a>01208         <span class="keyword">virtual</span> ~<a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByAlbum.html">ByAlbum</a>() {}
<a name="l01209"></a>01209 <span class="comment"></span>
<a name="l01210"></a>01210 <span class="comment">        /**</span>
<a name="l01211"></a>01211 <span class="comment">         * Returns true if the given track matches the parameters given to the constructor.</span>
<a name="l01212"></a>01212 <span class="comment">         */</span>
<a name="l01213"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByAlbum.html#95f2dae63e956c942754c835c71f404b">01213</a>         <span class="keywordtype">bool</span> <a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByAlbum.html#95f2dae63e956c942754c835c71f404b">operator () </a>( <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1Track.html">Track</a> * track )<span class="keyword"> const </span>{
<a name="l01214"></a>01214             <span class="keywordtype">bool</span> result = track;
<a name="l01215"></a>01215             <span class="keywordflow">if</span> ( result &amp;&amp; !_artist_.isEmpty() ) {
<a name="l01216"></a>01216                 result = _artist_.compare( track-&gt;<a class="code" href="classitunesdb_1_1Track.html#aa23e0428a17def319a62a291327c1ea">getArtist</a>() ) == 0;
<a name="l01217"></a>01217             }
<a name="l01218"></a>01218             <span class="keywordflow">return</span>  result &amp;&amp; _album_.compare( track-&gt;<a class="code" href="classitunesdb_1_1Track.html#50c5b73deb47467f17b9623911d384d6">getAlbum</a>() ) == 0;
<a name="l01219"></a>01219         }
<a name="l01220"></a>01220     <span class="keyword">private</span>:
<a name="l01221"></a>01221         <span class="keyword">const</span> QString _artist_;
<a name="l01222"></a>01222         <span class="keyword">const</span> QString _album_;
<a name="l01223"></a>01223     };
<a name="l01224"></a>01224 
<a name="l01225"></a>01225 <span class="comment"></span>
<a name="l01226"></a>01226 <span class="comment">    /**</span>
<a name="l01227"></a>01227 <span class="comment">     * A predicate to find the track by a given artist/album/title. This predicate will return</span>
<a name="l01228"></a>01228 <span class="comment">     * true for every track that fits to the artist/album/title combination given at construction</span>
<a name="l01229"></a>01229 <span class="comment">     * time.</span>
<a name="l01230"></a>01230 <span class="comment">     * @see ByFullInfo::ByFullInfo( const QString&amp;, const QString&amp;, const QString&amp;, Q_UINT32 )</span>
<a name="l01231"></a>01231 <span class="comment">     */</span>
<a name="l01232"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByFullInfo.html">01232</a>     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByFullInfo.html">ByFullInfo</a> : <span class="keyword">public</span> <a class="code" href="classitunesdb_1_1TrackPredicate.html">TrackPredicate</a> {
<a name="l01233"></a>01233     <span class="keyword">public</span>:<span class="comment"></span>
<a name="l01234"></a>01234 <span class="comment">        /**</span>
<a name="l01235"></a>01235 <span class="comment">         * Constructor to create a new predicate for the given artist/album/title combination.</span>
<a name="l01236"></a>01236 <span class="comment">         */</span>
<a name="l01237"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByFullInfo.html#27ea52bff9f2a5f8d5f6addcb6e42cc1">01237</a>         <a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByFullInfo.html#27ea52bff9f2a5f8d5f6addcb6e42cc1">ByFullInfo</a>( <span class="keyword">const</span> QString&amp; artist, <span class="keyword">const</span> QString&amp; album, <span class="keyword">const</span> QString&amp; title, Q_UINT32 trackNum = 0 )
<a name="l01238"></a>01238             : m_artist( artist ), m_album( album ), m_title( title ), m_trackNum( trackNum ) {}
<a name="l01239"></a>01239         <span class="keyword">virtual</span> ~<a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByFullInfo.html">ByFullInfo</a>() {}
<a name="l01240"></a>01240 
<a name="l01241"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByFullInfo.html#48288d29fe49482dcaacbd0db41f8aee">01241</a>         <span class="keywordtype">bool</span> <a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByFullInfo.html#48288d29fe49482dcaacbd0db41f8aee">operator () </a>( <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1Track.html">Track</a> * track )<span class="keyword"> const </span>{
<a name="l01242"></a>01242             <span class="keywordflow">return</span>  track &amp;&amp;
<a name="l01243"></a>01243                     m_artist.compare( track-&gt;<a class="code" href="classitunesdb_1_1Track.html#aa23e0428a17def319a62a291327c1ea">getArtist</a>() ) == 0 &amp;&amp;
<a name="l01244"></a>01244                     m_album.compare( track-&gt;<a class="code" href="classitunesdb_1_1Track.html#50c5b73deb47467f17b9623911d384d6">getAlbum</a>() ) == 0 &amp;&amp;
<a name="l01245"></a>01245                     m_title.compare( track-&gt;<a class="code" href="classitunesdb_1_1Track.html#ed1aec0294874100aac1e9fbd8d87054">getTitle</a>() ) == 0 &amp;&amp;
<a name="l01246"></a>01246                     ( m_trackNum == 0 || m_trackNum == track-&gt;<a class="code" href="classitunesdb_1_1Track.html#ff0abc0a6f340bee96d62fb18cd5599e">getTrackNumber</a>() );
<a name="l01247"></a>01247         }
<a name="l01248"></a>01248     <span class="keyword">private</span>:
<a name="l01249"></a>01249         <span class="keyword">const</span> QString&amp; m_artist;
<a name="l01250"></a>01250         <span class="keyword">const</span> QString&amp; m_album;
<a name="l01251"></a>01251         <span class="keyword">const</span> QString&amp; m_title;
<a name="l01252"></a>01252         Q_UINT32 m_trackNum;
<a name="l01253"></a>01253     };  <span class="comment">// ByFullInfo</span>
<a name="l01254"></a>01254 
<a name="l01255"></a>01255 <span class="comment"></span>
<a name="l01256"></a>01256 <span class="comment">    /**</span>
<a name="l01257"></a>01257 <span class="comment">     * A predicate to find a track for the given filename. This predicate will return</span>
<a name="l01258"></a>01258 <span class="comment">     * true for every track that fits to the file name given at construction time.</span>
<a name="l01259"></a>01259 <span class="comment">     */</span>
<a name="l01260"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByPathInfo.html">01260</a>     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByPathInfo.html">ByPathInfo</a> : <span class="keyword">public</span> <a class="code" href="classitunesdb_1_1TrackPredicate.html">TrackPredicate</a> {
<a name="l01261"></a>01261     <span class="keyword">public</span>:
<a name="l01262"></a>01262 <span class="comment"></span>
<a name="l01263"></a>01263 <span class="comment">        /**</span>
<a name="l01264"></a>01264 <span class="comment">         * Constructor to create a new predicate for the given file path.</span>
<a name="l01265"></a>01265 <span class="comment">         */</span>
<a name="l01266"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByPathInfo.html#6e0b628484af152d013797f9b86f4423">01266</a>         <a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByPathInfo.html#6e0b628484af152d013797f9b86f4423">ByPathInfo</a>( <span class="keyword">const</span> QString&amp; pathInfo )
<a name="l01267"></a>01267             : mPathInfo( pathInfo ) {}
<a name="l01268"></a>01268 
<a name="l01269"></a>01269         <span class="keyword">virtual</span> ~<a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByPathInfo.html">ByPathInfo</a>() {}
<a name="l01270"></a>01270 <span class="comment"></span>
<a name="l01271"></a>01271 <span class="comment">        /**</span>
<a name="l01272"></a>01272 <span class="comment">         * Returns true if the given track matches the parameters given to the constructor.</span>
<a name="l01273"></a>01273 <span class="comment">         */</span>
<a name="l01274"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByPathInfo.html#d939f6a3441e0856785759a5d699e23c">01274</a>         <span class="keywordtype">bool</span> <a class="code" href="classitunesdb_1_1TrackPredicates_1_1ByPathInfo.html#d939f6a3441e0856785759a5d699e23c">operator () </a>( <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1Track.html">Track</a> * track )<span class="keyword"> const </span>{
<a name="l01275"></a>01275             <span class="keywordflow">if</span> ( !track ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01276"></a>01276             <span class="keyword">const</span> QString &amp; trackPathInfo = track-&gt;<a class="code" href="classitunesdb_1_1Track.html#eec94b05af98904488396a12362ce69a">getPathInfo</a>();
<a name="l01277"></a>01277             <span class="keywordflow">return</span> mPathInfo.startsWith( trackPathInfo, <span class="keyword">false</span> ) &amp;&amp;
<a name="l01278"></a>01278                    mPathInfo.length() == trackPathInfo.length();
<a name="l01279"></a>01279         }
<a name="l01280"></a>01280 
<a name="l01281"></a>01281     <span class="keyword">private</span>:
<a name="l01282"></a>01282         <span class="keyword">const</span> QString mPathInfo;
<a name="l01283"></a>01283     };
<a name="l01284"></a>01284 
<a name="l01285"></a>01285 <span class="comment"></span>
<a name="l01286"></a>01286 <span class="comment">    /**</span>
<a name="l01287"></a>01287 <span class="comment">     * Predicate to find tracks by a given free text search. This predicate will return true</span>
<a name="l01288"></a>01288 <span class="comment">     * for every track that somehow contains the string given at construction time.</span>
<a name="l01289"></a>01289 <span class="comment">     * @see Contains::Contains( const QString&amp;, bool )</span>
<a name="l01290"></a>01290 <span class="comment">     */</span>
<a name="l01291"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1Contains.html">01291</a>     <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackPredicates_1_1Contains.html">Contains</a> : <span class="keyword">public</span> <a class="code" href="classitunesdb_1_1TrackPredicate.html">TrackPredicate</a> {
<a name="l01292"></a>01292     <span class="keyword">public</span>:<span class="comment"></span>
<a name="l01293"></a>01293 <span class="comment">        /**</span>
<a name="l01294"></a>01294 <span class="comment">         * Constructor to create a new predicate for the given free text string.</span>
<a name="l01295"></a>01295 <span class="comment">         */</span>
<a name="l01296"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1Contains.html#c1f44f2b374a79e4ee6aebac979deb2e">01296</a>         <a class="code" href="classitunesdb_1_1TrackPredicates_1_1Contains.html#c1f44f2b374a79e4ee6aebac979deb2e">Contains</a>( <span class="keyword">const</span> QString&amp; someString, <span class="keywordtype">bool</span> caseSensitive )
<a name="l01297"></a>01297             : m_someString( someString ), m_caseSensitive( caseSensitive ) {}
<a name="l01298"></a>01298         <span class="keyword">virtual</span> ~<a class="code" href="classitunesdb_1_1TrackPredicates_1_1Contains.html">Contains</a>() {}
<a name="l01299"></a>01299 <span class="comment"></span>
<a name="l01300"></a>01300 <span class="comment">        /**</span>
<a name="l01301"></a>01301 <span class="comment">         * Returns true if the given track somehow contains the string given at construction time.</span>
<a name="l01302"></a>01302 <span class="comment">         */</span>
<a name="l01303"></a><a class="code" href="classitunesdb_1_1TrackPredicates_1_1Contains.html#703eb86d34420f347be1bdf5a36b63fd">01303</a>         <span class="keywordtype">bool</span> <a class="code" href="classitunesdb_1_1TrackPredicates_1_1Contains.html#703eb86d34420f347be1bdf5a36b63fd">operator () </a>( <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1Track.html">Track</a> * track )<span class="keyword"> const </span>{
<a name="l01304"></a>01304             <span class="keywordflow">if</span> ( !track ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01305"></a>01305             QString sBuffer( track-&gt;<a class="code" href="classitunesdb_1_1Track.html#aa23e0428a17def319a62a291327c1ea">getArtist</a>() + track-&gt;<a class="code" href="classitunesdb_1_1Track.html#50c5b73deb47467f17b9623911d384d6">getAlbum</a>() + track-&gt;<a class="code" href="classitunesdb_1_1Track.html#ed1aec0294874100aac1e9fbd8d87054">getTitle</a>() + track-&gt;<a class="code" href="classitunesdb_1_1Track.html#0c0c8486cbe93147ee5515327c09dc07">getComposer</a>() );
<a name="l01306"></a>01306             <span class="keywordflow">return</span> sBuffer.contains( m_someString, m_caseSensitive );
<a name="l01307"></a>01307         }
<a name="l01308"></a>01308     <span class="keyword">private</span>:
<a name="l01309"></a>01309         <span class="keyword">const</span> QString m_someString;
<a name="l01310"></a>01310         <span class="keywordtype">bool</span> m_caseSensitive;
<a name="l01311"></a>01311     };  <span class="comment">// Contains</span>
<a name="l01312"></a>01312 
<a name="l01313"></a>01313 
<a name="l01314"></a>01314     <span class="keyword">static</span> <span class="keyword">class </span>AllTracks : <span class="keyword">public</span> <a class="code" href="classitunesdb_1_1TrackPredicate.html">TrackPredicate</a> {
<a name="l01315"></a>01315     <span class="keyword">public</span>:
<a name="l01316"></a>01316         <span class="keywordtype">bool</span> operator() ( <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1Track.html">Track</a> * track )<span class="keyword"> const </span>{
<a name="l01317"></a>01317             <span class="keywordflow">return</span> track;
<a name="l01318"></a>01318         }
<a name="l01319"></a>01319     } ALLTRACKS;
<a name="l01320"></a>01320 
<a name="l01321"></a>01321 
<a name="l01322"></a>01322     <span class="keyword">struct </span>PredicatePtrDelegator {
<a name="l01323"></a>01323         <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1TrackPredicate.html">itunesdb::TrackPredicate</a> * m_predicate;
<a name="l01324"></a>01324         PredicatePtrDelegator( <span class="keyword">const</span> <a class="code" href="classitunesdb_1_1TrackPredicate.html">itunesdb::TrackPredicate</a> * predicate = NULL )
<a name="l01325"></a>01325             : m_predicate( predicate ) {}
<a name="l01326"></a>01326         <span class="keywordtype">bool</span> operator()( <span class="keyword">const</span> Track * track )<span class="keyword"> const </span>{
<a name="l01327"></a>01327             <span class="keywordflow">return</span> track &amp;&amp; ( !m_predicate || (*m_predicate)( track ) );
<a name="l01328"></a>01328         }
<a name="l01329"></a>01329     };
<a name="l01330"></a>01330 
<a name="l01331"></a>01331 };  <span class="comment">// TrackPredicates</span>
<a name="l01332"></a>01332 
<a name="l01333"></a>01333 <span class="comment"></span>
<a name="l01334"></a>01334 <span class="comment">/**</span>
<a name="l01335"></a>01335 <span class="comment"> * @brief A SortablePtrVector implementation for Track pointers.</span>
<a name="l01336"></a>01336 <span class="comment"> * </span>
<a name="l01337"></a>01337 <span class="comment"> * The default sort order is set to Artist - Album - tracknumber</span>
<a name="l01338"></a>01338 <span class="comment"> * @see itunesdb::utils::SortablePtrVector for details about the base class</span>
<a name="l01339"></a>01339 <span class="comment"> * @see itunesdb::TrackComparators for a collection of predefined comparators</span>
<a name="l01340"></a>01340 <span class="comment"> */</span>
<a name="l01341"></a><a class="code" href="classitunesdb_1_1TrackPtrList.html">01341</a> <span class="keyword">class </span><a class="code" href="classitunesdb_1_1TrackPtrList.html">TrackPtrList</a> : <span class="keyword">public</span> itunesdb::utils::SortablePtrVector&lt;itunesdb::Track&gt;
<a name="l01342"></a>01342 {
<a name="l01343"></a>01343     <span class="keyword">typedef</span> <a class="code" href="classitunesdb_1_1utils_1_1SortablePtrVector.html">itunesdb::utils::SortablePtrVector&lt;itunesdb::Track&gt;</a> <a class="code" href="classitunesdb_1_1utils_1_1SortablePtrVector.html">BaseClass</a>;
<a name="l01344"></a>01344 <span class="keyword">public</span>:
<a name="l01345"></a>01345 <span class="comment"></span>
<a name="l01346"></a>01346 <span class="comment">    /**</span>
<a name="l01347"></a>01347 <span class="comment">     * @brief Creates an empty TrackPtrList</span>
<a name="l01348"></a>01348 <span class="comment">     * </span>
<a name="l01349"></a>01349 <span class="comment">     * The default sort order ist set accordingly to setDefaultSortOrder()</span>
<a name="l01350"></a>01350 <span class="comment">     */</span>
<a name="l01351"></a>01351     <a class="code" href="classitunesdb_1_1TrackPtrList.html#0353f7daa72b2dcce94f7f75706f37ef">TrackPtrList</a>();
<a name="l01352"></a>01352 <span class="comment"></span>
<a name="l01353"></a>01353 <span class="comment">    /**</span>
<a name="l01354"></a>01354 <span class="comment">     * @brief Creates a TrackPtrList and fills in the itunesdb::Track pointers returned by the given utils::RangeIterator.</span>
<a name="l01355"></a>01355 <span class="comment">     * </span>
<a name="l01356"></a>01356 <span class="comment">     * The default sort order ist set accordingly to setDefaultSortOrder()</span>
<a name="l01357"></a>01357 <span class="comment">     * @param elements the Tracks to be filled in to the list</span>
<a name="l01358"></a>01358 <span class="comment">     */</span>
<a name="l01359"></a>01359     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> IterT&gt;
<a name="l01360"></a><a class="code" href="classitunesdb_1_1TrackPtrList.html#9049f2b3cbdc77878ba4bab0132f5e54">01360</a>     <a class="code" href="classitunesdb_1_1TrackPtrList.html#0353f7daa72b2dcce94f7f75706f37ef">TrackPtrList</a>( IterT elements )
<a name="l01361"></a>01361         : itunesdb::utils::<a class="code" href="classitunesdb_1_1utils_1_1SortablePtrVector.html#cf93524a4f4c891fb7a9a454e18835db">SortablePtrVector</a>&lt;itunesdb::<a class="code" href="classitunesdb_1_1Track.html">Track</a>&gt; ( elements, false )
<a name="l01362"></a>01362     {
<a name="l01363"></a>01363         <a class="code" href="classitunesdb_1_1TrackPtrList.html#efd45b90f973b547aba82a1d0bfa23e8">setDefaultSortOrder</a>();
<a name="l01364"></a>01364     }
<a name="l01365"></a>01365 
<a name="l01366"></a>01366 
<a name="l01367"></a>01367     <span class="keyword">virtual</span> ~<a class="code" href="classitunesdb_1_1TrackPtrList.html">TrackPtrList</a>();
<a name="l01368"></a>01368 <span class="comment"></span>
<a name="l01369"></a>01369 <span class="comment">    /**</span>
<a name="l01370"></a>01370 <span class="comment">     * @brief Returns true if this list contains tracks not in sync with the database.</span>
<a name="l01371"></a>01371 <span class="comment">     */</span>
<a name="l01372"></a>01372     <span class="keywordtype">bool</span> <a class="code" href="classitunesdb_1_1TrackPtrList.html#f5f9e708b3c1fd44dc0f0fc0c3331fa3">hasDirtyTracks</a>() <span class="keyword">const</span>;
<a name="l01373"></a>01373 <span class="comment"></span>
<a name="l01374"></a>01374 <span class="comment">    /**</span>
<a name="l01375"></a>01375 <span class="comment">     * @brief Returns true if this list contains tracks being played after the last sync.</span>
<a name="l01376"></a>01376 <span class="comment">     */</span>
<a name="l01377"></a>01377     <span class="keywordtype">bool</span> <a class="code" href="classitunesdb_1_1TrackPtrList.html#e396bebfd14e5b200490f74b97bdb005">hasRecentlyPlayedTracks</a>() <span class="keyword">const</span>;
<a name="l01378"></a>01378 <span class="comment"></span>
<a name="l01379"></a>01379 <span class="comment">    /**</span>
<a name="l01380"></a>01380 <span class="comment">     * @brief Returns all the Tracks where the given predicate returned true</span>
<a name="l01381"></a>01381 <span class="comment">     */</span>
<a name="l01382"></a>01382     <a class="code" href="classitunesdb_1_1TrackPtrList.html">TrackPtrList</a> * <a class="code" href="classitunesdb_1_1TrackPtrList.html#d55d46d8d4965fbcf08b8d57eb66e23a">getTracksBy</a>( <a class="code" href="classitunesdb_1_1TrackPredicate.html">TrackPredicate</a>&amp; predicate, <a class="code" href="classitunesdb_1_1TrackPtrList.html">itunesdb::TrackPtrList</a>&amp; buffer ) <span class="keyword">const</span>;
<a name="l01383"></a>01383 <span class="comment"></span>
<a name="l01384"></a>01384 <span class="comment">    /**</span>
<a name="l01385"></a>01385 <span class="comment">     * @brief Returns the first Track where the given predicate returned true</span>
<a name="l01386"></a>01386 <span class="comment">     * </span>
<a name="l01387"></a>01387 <span class="comment">     * The given trackpredicate needs to contain a method that gets a track, and returns a bool</span>
<a name="l01388"></a>01388 <span class="comment">     * if it's the desired track</span>
<a name="l01389"></a>01389 <span class="comment">     * @return the first Track where the given predicate returned true</span>
<a name="l01390"></a>01390 <span class="comment">     * @see class TrackPredicate</span>
<a name="l01391"></a>01391 <span class="comment">     */</span>
<a name="l01392"></a>01392     <a class="code" href="classitunesdb_1_1Track.html">Track</a> * <a class="code" href="classitunesdb_1_1TrackPtrList.html#096619b7640e8b2b61e1ea19078aacd2">findFirstTrackBy</a>( <a class="code" href="classitunesdb_1_1TrackPredicate.html">TrackPredicate</a>&amp; predicate ) <span class="keyword">const</span>;
<a name="l01393"></a>01393 <span class="comment"></span>
<a name="l01394"></a>01394 <span class="comment">    /**</span>
<a name="l01395"></a>01395 <span class="comment">     * @brief Removes the elements the given predicate returns true.</span>
<a name="l01396"></a>01396 <span class="comment">     * </span>
<a name="l01397"></a>01397 <span class="comment">     * @return true if at least one of the elements got removed.</span>
<a name="l01398"></a>01398 <span class="comment">     */</span>
<a name="l01399"></a>01399     <span class="keywordtype">bool</span> <a class="code" href="classitunesdb_1_1TrackPtrList.html#8a4b2750d35fa5661cbd349d505243e6">removeIfTrue</a>( <a class="code" href="classitunesdb_1_1TrackPredicate.html">TrackPredicate</a>&amp; predicate );
<a name="l01400"></a>01400 <span class="comment"></span>
<a name="l01401"></a>01401 <span class="comment">    /**</span>
<a name="l01402"></a>01402 <span class="comment">     * @brief Removes all references to the given track.</span>
<a name="l01403"></a>01403 <span class="comment">     * </span>
<a name="l01404"></a>01404 <span class="comment">     * @return true if at least one element got removed. false otherwise</span>
<a name="l01405"></a>01405 <span class="comment">     */</span>
<a name="l01406"></a>01406     <span class="keywordtype">bool</span> <a class="code" href="classitunesdb_1_1TrackPtrList.html#8cce853225e04eeb0b34b71e4cba8dd6">removeAllRefs</a>( <a class="code" href="classitunesdb_1_1Track.html">itunesdb::Track</a> * track );
<a name="l01407"></a>01407 <span class="comment"></span>
<a name="l01408"></a>01408 <span class="comment">    /**</span>
<a name="l01409"></a>01409 <span class="comment">     * @brief Sets the sort order to default ( Artist/Album/Tracknumber )</span>
<a name="l01410"></a>01410 <span class="comment">     */</span>
<a name="l01411"></a>01411     <span class="keywordtype">void</span> <a class="code" href="classitunesdb_1_1TrackPtrList.html#efd45b90f973b547aba82a1d0bfa23e8">setDefaultSortOrder</a>();
<a name="l01412"></a>01412 
<a name="l01413"></a>01413 };
<a name="l01414"></a>01414 
<a name="l01415"></a>01415 }   <span class="comment">// namespace itunesdb</span>
<a name="l01416"></a>01416 
<a name="l01417"></a>01417 <span class="preprocessor">#endif</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Wed Dec 19 00:15:19 2007 for libqtpod by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.0 </small></address>
</body>
</html>