source: trunk/qt/formatter.cc @ 10957

Last change on this file since 10957 was 10957, checked in by charles, 12 years ago

(trunk qt) ensure that units are i18nized in the Qt client. Update the Qt translation files.

File size: 4.3 KB
Line 
1/*
2 * This file Copyright (C) 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$
11 */
12
13#include <iostream>
14
15#include <libtransmission/transmission.h>
16#include <libtransmission/utils.h> // tr_formatter
17
18#include "formatter.h"
19#include "speed.h"
20
21/***
22****  Constants
23***/
24
25namespace
26{
27    unsigned int speed_K;
28    unsigned int mem_K;
29    unsigned int size_K;
30}
31
32QString Formatter::unitStrings[3][4];
33
34void
35Formatter :: initUnits( )
36{
37    speed_K = 1000;
38    unitStrings[SPEED][B]  = tr(  "B/s" );
39    unitStrings[SPEED][KB] = tr( "kB/s" );
40    unitStrings[SPEED][MB] = tr( "MB/s" );
41    unitStrings[SPEED][GB] = tr( "GB/s" );
42    unitStrings[SPEED][TB] = tr( "TB/s" );
43    tr_formatter_speed_init( speed_K,
44                             qPrintable( unitStrings[SPEED][KB] ),
45                             qPrintable( unitStrings[SPEED][MB] ),
46                             qPrintable( unitStrings[SPEED][GB] ),
47                             qPrintable( unitStrings[SPEED][TB] ) );
48
49    size_K = 1000;
50    unitStrings[SIZE][B]  = tr(  "B" );
51    unitStrings[SIZE][KB] = tr( "KB" );
52    unitStrings[SIZE][MB] = tr( "MB" );
53    unitStrings[SIZE][GB] = tr( "GB" );
54    unitStrings[SIZE][TB] = tr( "TB" );
55    tr_formatter_size_init( size_K,
56                            qPrintable( unitStrings[SIZE][KB] ),
57                            qPrintable( unitStrings[SIZE][MB] ),
58                            qPrintable( unitStrings[SIZE][GB] ),
59                            qPrintable( unitStrings[SIZE][TB] ) );
60
61    mem_K = 1024;
62    unitStrings[MEM][B]  = tr(   "B" );
63    unitStrings[MEM][KB] = tr( "KiB" );
64    unitStrings[MEM][MB] = tr( "MiB" );
65    unitStrings[MEM][GB] = tr( "GiB" );
66    unitStrings[MEM][TB] = tr( "TiB" );
67    tr_formatter_mem_init( mem_K,
68                           qPrintable( unitStrings[MEM][KB] ),
69                           qPrintable( unitStrings[MEM][MB] ),
70                           qPrintable( unitStrings[MEM][GB] ),
71                           qPrintable( unitStrings[MEM][TB] ) );
72}
73
74/***
75****
76***/
77
78double
79Speed :: KBps( ) const
80{
81    return _Bps / speed_K;
82}
83
84Speed
85Speed :: fromKBps( double KBps )
86{
87    return KBps * speed_K;
88}
89
90/***
91****
92***/
93
94QString
95Formatter :: memToString( double bytes )
96{
97    if( !bytes )
98        return tr( "None" );
99    else {
100        char buf[128];
101        tr_formatter_mem_B( buf, bytes, sizeof( buf ) );
102        return buf;
103    }
104}
105
106QString
107Formatter :: sizeToString( double bytes )
108{
109    if( !bytes )
110        return tr( "None" );
111    else {
112        char buf[128];
113        tr_formatter_size_B( buf, bytes, sizeof( buf ) );
114        return buf;
115    }
116}
117
118QString
119Formatter :: speedToString( const Speed& speed )
120{
121    if( speed.isZero( ) )
122        return tr( "None" );
123    else {
124        char buf[128];
125        tr_formatter_speed_KBps( buf, speed.Bps( ), sizeof( buf ) );
126        return buf;
127    }
128}
129
130QString
131Formatter :: percentToString( double x )
132{
133    char buf[128];
134    return QString( tr_strpercent( buf, x, sizeof(buf) ) );
135}
136
137QString
138Formatter :: ratioToString( double ratio )
139{
140    char buf[128];
141    return QString::fromUtf8( tr_strratio( buf, sizeof(buf), ratio, "\xE2\x88\x9E" ) );
142}
143
144QString
145Formatter :: timeToString( int seconds )
146{
147    int days, hours, minutes;
148    QString d, h, m, s;
149    QString str;
150
151    if( seconds < 0 )
152        seconds = 0;
153
154    days = seconds / 86400;
155    hours = ( seconds % 86400 ) / 3600;
156    minutes = ( seconds % 3600 ) / 60;
157    seconds %= 60;
158
159    d = tr( "%Ln day(s)", 0, days );
160    h = tr( "%Ln hour(s)", 0, hours );
161    m = tr( "%Ln minute(s)", 0, minutes );
162    s = tr( "%Ln second(s)", 0, seconds );
163
164    if( days )
165    {
166        if( days >= 4 || !hours )
167            str = d;
168        else
169            str = tr( "%1, %2" ).arg( d ).arg( h );
170    }
171    else if( hours )
172    {
173        if( hours >= 4 || !minutes )
174            str = h;
175        else
176            str = tr( "%1, %2" ).arg( h ).arg( m );
177    }
178    else if( minutes )
179    {
180        if( minutes >= 4 || !seconds )
181            str = m;
182        else
183            str = tr( "%1, %2" ).arg( m ).arg( s );
184    }
185    else
186    {
187        str = s;
188    }
189
190    return str;
191}
Note: See TracBrowser for help on using the repository browser.