source: trunk/qt/utils.cc @ 10822

Last change on this file since 10822 was 10822, checked in by Longinus00, 12 years ago

#3298:Prettier formating of percentages

  • Property svn:keywords set to Date Rev Author Id
File size: 5.2 KB
Line 
1/*
2 * This file Copyright (C) 2009-2010 Mnemosyne LLC
3 *
4 * This file is licensed by the GPL version 2.  Works owned by the
5 * Transmission project are granted a special exemption to clause 2(b)
6 * so that the bulk of its code can remain under the MIT license.
7 * This exemption does not extend to derived works not owned by
8 * the Transmission project.
9 *
10 * $Id: utils.cc 10822 2010-06-22 22:30:58Z Longinus00 $
11 */
12
13#include <iostream>
14
15#include <QApplication>
16#include <QDataStream>
17#include <QFile>
18#include <QFileDialog>
19#include <QFileInfo>
20#include <QInputDialog>
21#include <QObject>
22#include <QSet>
23#include <QStyle>
24
25#include <libtransmission/transmission.h>
26#include <libtransmission/utils.h> // tr_formatter
27
28#include "qticonloader.h"
29#include "utils.h"
30
31QString
32Utils :: remoteFileChooser( QWidget * parent, const QString& title, const QString& myPath, bool dir, bool local )
33{
34    QString path;
35
36    if( local )
37    {
38        if( dir )
39            path = QFileDialog::getExistingDirectory( parent, title, myPath );
40        else
41            path = QFileDialog::getOpenFileName( parent, title, myPath );
42    }
43    else
44        path = QInputDialog::getText( parent, title, tr( "Enter a location:" ), QLineEdit::Normal, myPath, NULL );
45
46    return path;
47}
48
49QString
50Utils :: sizeToString( double bytes )
51{
52    if( !bytes )
53        return tr( "None" );
54    else {
55        char buf[128];
56        tr_formatter_size( buf, bytes, sizeof( buf ) );
57        return buf;
58    }
59}
60
61QString
62Utils :: speedToString( const Speed& speed )
63{
64    if( speed.isZero( ) )
65        return tr( "None" );
66    else {
67        char buf[128];
68        tr_formatter_speed( buf, speed.bps( ), sizeof( buf ) );
69        return buf;
70    }
71}
72
73QString
74Utils :: percentToString( double x )
75{
76    char buf[128];
77    return QString( tr_strpercent( buf, x, sizeof(buf) ) );
78}
79
80QString
81Utils :: ratioToString( double ratio )
82{
83    char buf[128];
84    return QString::fromUtf8( tr_strratio( buf, sizeof(buf), ratio, "\xE2\x88\x9E" ) );
85}
86
87QString
88Utils :: timeToString( int seconds )
89{
90    int days, hours, minutes;
91    QString d, h, m, s;
92    QString str;
93
94    if( seconds < 0 )
95        seconds = 0;
96
97    days = seconds / 86400;
98    hours = ( seconds % 86400 ) / 3600;
99    minutes = ( seconds % 3600 ) / 60;
100    seconds %= 60;
101
102    d = tr( "%Ln day(s)", 0, days );
103    h = tr( "%Ln hour(s)", 0, hours );
104    m = tr( "%Ln minute(s)", 0, minutes );
105    s = tr( "%Ln second(s)", 0, seconds );
106
107    if( days )
108    {
109        if( days >= 4 || !hours )
110            str = d;
111        else
112            str = tr( "%1, %2" ).arg( d ).arg( h );
113    }
114    else if( hours )
115    {
116        if( hours >= 4 || !minutes )
117            str = h;
118        else
119            str = tr( "%1, %2" ).arg( h ).arg( m );
120    }
121    else if( minutes )
122    {
123        if( minutes >= 4 || !seconds )
124            str = m;
125        else
126            str = tr( "%1, %2" ).arg( m ).arg( s );
127    }
128    else
129    {
130        str = s;
131    }
132
133    return str;
134}
135
136void
137Utils :: toStderr( const QString& str )
138{
139    std::cerr << qPrintable(str) << std::endl;
140}
141
142const QIcon&
143Utils :: guessMimeIcon( const QString& filename )
144{
145    enum { DISK, DOCUMENT, PICTURE, VIDEO, ARCHIVE, AUDIO, APP, TYPE_COUNT };
146    static QIcon fallback;
147    static QIcon fileIcons[TYPE_COUNT];
148    static QSet<QString> suffixes[TYPE_COUNT];
149
150    if( fileIcons[0].isNull( ) )
151    {
152        fallback = QApplication::style()->standardIcon( QStyle :: SP_FileIcon );
153
154        fileIcons[DISK]= QtIconLoader :: icon( "media-optical", fallback );
155        suffixes[DISK] << "iso";
156
157        fileIcons[DOCUMENT] = QtIconLoader :: icon( "text-x-generic", fallback );
158        suffixes[DOCUMENT] << "abw" << "csv" << "doc" << "dvi" << "htm" << "html" << "ini" << "log"
159                           << "odp" << "ods" << "odt" << "pdf" << "ppt" << "ps" << "rtf" << "tex"
160                           << "txt" << "xml";
161
162        fileIcons[PICTURE]  = QtIconLoader :: icon( "image-x-generic", fallback );
163        suffixes[PICTURE] << "bmp" << "gif" << "jpg" << "jpeg" << "pcx" << "png" << "psd" << "raw"
164                          << "tga" << "tiff";
165
166        fileIcons[VIDEO] = QtIconLoader :: icon( "video-x-generic", fallback );
167        suffixes[VIDEO] << "3gp" << "asf" << "avi" << "mov" << "mpeg" << "mpg" << "mp4" << "mkv"
168                        << "mov" << "ogm" << "ogv" << "qt" << "rm" << "wmv";
169
170        fileIcons[ARCHIVE]  = QtIconLoader :: icon( "package-x-generic", fallback );
171        suffixes[ARCHIVE] << "7z" << "ace" << "bz2" << "cbz" << "gz" << "gzip" << "lzma" << "rar"
172                          << "sft" << "tar" << "zip";
173
174        fileIcons[AUDIO] = QtIconLoader :: icon( "audio-x-generic", fallback );
175        suffixes[AUDIO] << "aac" << "ac3" << "aiff" << "ape" << "au" << "flac" << "m3u" << "m4a"
176                        << "mid" << "midi" << "mp2" << "mp3" << "mpc" << "nsf" << "oga" << "ogg"
177                        << "ra" << "ram" << "shn" << "voc" << "wav" << "wma";
178
179        fileIcons[APP] = QtIconLoader :: icon( "application-x-executable", fallback );
180        suffixes[APP] << "bat" << "cmd" << "com" << "exe";
181    }
182
183    QString suffix( QFileInfo( filename ).suffix( ).toLower( ) );
184
185    for( int i=0; i<TYPE_COUNT; ++i )
186        if( suffixes[i].contains( suffix ) )
187            return fileIcons[i];
188
189    return fallback;
190}
Note: See TracBrowser for help on using the repository browser.