1 //
2 // C++ Implementation: global
3 //
4 // Description:
5 //
6 //
7 // Author: Daniel Faust <hessijames@gmail.com>, (C) 2008
8 //
9 // Copyright: See COPYING file that comes with this distribution
10 //
11 //
12 #include "global.h"
13 
14 #include <KLocale>
15 #include <KGlobal>
16 
17 
Global()18 Global::Global()
19 {}
20 
~Global()21 Global::~Global()
22 {}
23 
prettyNumber(double num,QString unit,short digits)24 QString Global::prettyNumber( double num, QString unit, short digits )
25 {
26     QString prettyString;
27     if( unit == "%" && digits == 3 )
28     {
29         if( num < 10 )
30             prettyString.sprintf("%.2f %%",num);
31         else if( num < 100 )
32             prettyString.sprintf("%.1f %%",num);
33         else
34             prettyString.sprintf("%.0f %%",num);
35 
36         if( KGlobal::locale()->decimalSymbol() != "." )
37             prettyString.replace(".",KGlobal::locale()->decimalSymbol());
38     }
39     else if( unit == "%" && digits == 2 )
40     {
41         if( num < 10 )
42             prettyString.sprintf("%.1f %%",num);
43         else
44             prettyString.sprintf("%.0f %%",num);
45 
46         if( KGlobal::locale()->decimalSymbol() != "." )
47             prettyString.replace(".",KGlobal::locale()->decimalSymbol());
48     }
49     else if( unit == "B" )
50     {
51         short pow = 0;
52         while( num > 1024 )
53         {
54             num /= 1024;
55             pow++;
56         }
57         if( pow == 0 )
58             unit = "B";
59         else if( pow == 1 )
60             unit = "KiB";
61         else if( pow == 2 )
62             unit = "MiB";
63         else if( pow == 3 )
64             unit = "GiB";
65         else if( pow == 4 )
66             unit = "TiB";
67         else if( pow == 5 )
68             unit = "PiB";
69         else if( pow == 6 )
70             unit = "EiB";
71         else if( pow == 7 )
72             unit = "ZiB";
73         else if( pow == 8 )
74             unit = "YiB";
75         else
76             unit = "Nan";
77 
78         if( num < 100 || num > 999 )
79             prettyString = QString::number(num).left(4);
80         else
81             prettyString = QString::number(num).left(3);
82 
83         prettyString = prettyString + " " + unit;
84 
85         if( KGlobal::locale()->decimalSymbol() != "." )
86             prettyString.replace(".",KGlobal::locale()->decimalSymbol());
87     }
88     else if( unit == "ms" )
89     {
90         short days = (int)(num/86400000.0f);
91         short hours = (int)(num/3600000.0f)%24;
92         short minutes = (int)(num/60000.0f)%60;
93         short seconds = (int)(num/1000.0f)%60;
94         short milliseconds = (int)num%1000;
95 
96         if( days >= 10 )
97             prettyString = QString("%1%2").arg(days).arg(i18nc("days","d"));
98         else if( days >= 1 )
99             prettyString = QString("%1%2 %3%4").arg(days).arg(i18nc("days","d")).arg(hours).arg(i18nc("hours","h"));
100         else if( hours >= 1 )
101             prettyString = QString("%1%2 %3%4").arg(hours).arg(i18nc("hours","h")).arg(minutes).arg(i18nc("minutes","m"));
102         else if( minutes >= 1 && seconds < 10 )
103             prettyString = QString("%1%2 0%3%4").arg(minutes).arg(i18nc("minutes","m")).arg(seconds).arg(i18nc("seconds","s"));
104         else if( minutes >= 1 )
105             prettyString = QString("%1%2 %3%4").arg(minutes).arg(i18nc("minutes","m")).arg(seconds).arg(i18nc("seconds","s"));
106         else if( seconds >= 1 && milliseconds < 10 )
107             prettyString = QString("%1%2 00%3%4").arg(seconds).arg(i18nc("seconds","s")).arg(milliseconds).arg(i18nc("milliseconds","ms"));
108         else if( seconds >= 1 && milliseconds < 100 )
109             prettyString = QString("%1%2 0%3%4").arg(seconds).arg(i18nc("seconds","s")).arg(milliseconds).arg(i18nc("milliseconds","ms"));
110         else if( seconds >= 1 )
111             prettyString = QString("%1%2 %3%4").arg(seconds).arg(i18nc("seconds","s")).arg(milliseconds).arg(i18nc("milliseconds","ms"));
112         else if( milliseconds >= 1 )
113             prettyString = QString("%1%2").arg(milliseconds).arg(i18nc("milliseconds","ms"));
114     }
115     else if( unit == "s" )
116     {
117         short days = (int)(num/86400);
118         short hours = (int)(num/3600)%24;
119         short minutes = (int)(num/60)%60;
120         short seconds = (int)(num)%60;
121 
122         if( days >= 10 )
123             prettyString = QString("%1%2").arg(days).arg(i18nc("days","d"));
124         else if( days >= 1 )
125             prettyString = QString("%1%2 %3%4").arg(days).arg(i18nc("days","d")).arg(hours).arg(i18nc("hours","h"));
126         else if( hours >= 1 )
127             prettyString = QString("%1%2 %3%4").arg(hours).arg(i18nc("hours","h")).arg(minutes).arg(i18nc("minutes","m"));
128         else if( minutes >= 1 && seconds < 10 )
129             prettyString = QString("%1%2 0%3%4").arg(minutes).arg(i18nc("minutes","m")).arg(seconds).arg(i18nc("seconds","s"));
130         else if( minutes >= 1 )
131             prettyString = QString("%1%2 %3%4").arg(minutes).arg(i18nc("minutes","m")).arg(seconds).arg(i18nc("seconds","s"));
132         else if( seconds >= 1 )
133             prettyString = QString("%1%2").arg(seconds).arg(i18nc("seconds","s"));
134     }
135     return prettyString;
136 }
137