Changeset 13996


Ignore:
Timestamp:
Feb 9, 2013, 6:59:05 PM (8 years ago)
Author:
jordan
Message:

(qt) #5282 "Formatter's sizeToString() and memToString() return wrong text for 0 bytes": fixed.

Location:
trunk/qt
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/qt/formatter.cc

    r13978 r13996  
    2525namespace
    2626{
    27     unsigned int speed_K;
    28     unsigned int mem_K;
    29     unsigned int size_K;
     27 unsigned int speed_K;
     28 unsigned int mem_K;
     29 unsigned int size_K;
    3030}
    3131
     
    3333
    3434void
    35 Formatter :: 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                              unitStrings[SPEED][KB].toUtf8().constData(),
    45                              unitStrings[SPEED][MB].toUtf8().constData(),
    46                              unitStrings[SPEED][GB].toUtf8().constData(),
    47                              unitStrings[SPEED][TB].toUtf8().constData() );
    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                             unitStrings[SIZE][KB].toUtf8().constData(),
    57                             unitStrings[SIZE][MB].toUtf8().constData(),
    58                             unitStrings[SIZE][GB].toUtf8().constData(),
    59                             unitStrings[SIZE][TB].toUtf8().constData() );
    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                            unitStrings[MEM][KB].toUtf8().constData(),
    69                            unitStrings[MEM][MB].toUtf8().constData(),
    70                            unitStrings[MEM][GB].toUtf8().constData(),
    71                            unitStrings[MEM][TB].toUtf8().constData() );
     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                          unitStrings[SPEED][KB].toUtf8 ().constData (),
     45                          unitStrings[SPEED][MB].toUtf8 ().constData (),
     46                          unitStrings[SPEED][GB].toUtf8 ().constData (),
     47                          unitStrings[SPEED][TB].toUtf8 ().constData ());
     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                          unitStrings[SIZE][KB].toUtf8 ().constData (),
     57                          unitStrings[SIZE][MB].toUtf8 ().constData (),
     58                          unitStrings[SIZE][GB].toUtf8 ().constData (),
     59                          unitStrings[SIZE][TB].toUtf8 ().constData ());
     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                         unitStrings[MEM][KB].toUtf8 ().constData (),
     69                         unitStrings[MEM][MB].toUtf8 ().constData (),
     70                         unitStrings[MEM][GB].toUtf8 ().constData (),
     71                         unitStrings[MEM][TB].toUtf8 ().constData ());
    7272}
    7373
     
    7777
    7878double
    79 Speed :: KBps( ) const
    80 {
    81     return _Bps / (double)speed_K;
     79Speed :: KBps () const
     80{
     81  return _Bps / (double)speed_K;
    8282}
    8383
    8484Speed
    85 Speed :: fromKBps( double KBps )
    86 {
    87     return int( KBps * speed_K );
     85Speed :: fromKBps (double KBps)
     86{
     87  return int (KBps * speed_K);
    8888}
    8989
     
    9393
    9494QString
    95 Formatter :: memToString( int64_t bytes )
    96 {
    97     if( bytes < 1 )
    98         return tr( "Unknown" );
    99     else if( !bytes )
    100         return tr( "None" );
    101     else {
    102         char buf[128];
    103         tr_formatter_mem_B( buf, bytes, sizeof( buf ) );
    104         return QString::fromUtf8( buf );
    105     }
    106 }
    107 
    108 QString
    109 Formatter :: sizeToString( int64_t bytes )
    110 {
    111     if( bytes < 1 )
    112         return tr( "Unknown" );
    113     else if( !bytes )
    114         return tr( "None" );
    115     else {
    116         char buf[128];
    117         tr_formatter_size_B( buf, bytes, sizeof( buf ) );
    118         return QString::fromUtf8( buf );
    119     }
    120 }
    121 
    122 QString
    123 Formatter :: speedToString( const Speed& speed )
    124 {
    125   char buf[128];
    126   tr_formatter_speed_KBps( buf, speed.KBps( ), sizeof( buf ) );
    127   return QString::fromUtf8( buf );
    128 }
    129 
    130 QString
    131 Formatter :: percentToString( double x )
    132 {
    133     char buf[128];
    134     return QString( tr_strpercent( buf, x, sizeof(buf) ) );
    135 }
    136 
    137 QString
    138 Formatter :: ratioToString( double ratio )
    139 {
    140     char buf[128];
    141     return QString::fromUtf8( tr_strratio( buf, sizeof(buf), ratio, "\xE2\x88\x9E" ) );
    142 }
    143 
    144 QString
    145 Formatter :: 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;
     95Formatter :: memToString (int64_t bytes)
     96{
     97  if (bytes < 0)
     98    return tr ("Unknown");
     99
     100  if (!bytes)
     101    return tr ("None");
     102
     103  char buf[128];
     104  tr_formatter_mem_B (buf, bytes, sizeof (buf));
     105  return QString::fromUtf8 (buf);
     106}
     107
     108QString
     109Formatter :: sizeToString (int64_t bytes)
     110{
     111  if (bytes < 0)
     112    return tr ("Unknown");
     113
     114  if (!bytes)
     115    return tr ("None");
     116
     117  char buf[128];
     118  tr_formatter_size_B (buf, bytes, sizeof (buf));
     119  return QString::fromUtf8 (buf);
     120}
     121
     122QString
     123Formatter :: speedToString (const Speed& speed)
     124{
     125  char buf[128];
     126  tr_formatter_speed_KBps (buf, speed.KBps (), sizeof (buf));
     127  return QString::fromUtf8 (buf);
    191128}
    192129
     
    196133  static const QChar uploadSymbol (0x25B4);
    197134
    198   return tr( "%1 %2").arg(speedToString(uploadSpeed)).arg(uploadSymbol);
     135  return tr ("%1 %2").arg (speedToString (uploadSpeed)).arg (uploadSymbol);
    199136}
    200137
     
    204141  static const QChar downloadSymbol (0x25BE);
    205142
    206   return tr( "%1 %2").arg(speedToString(downloadSpeed)).arg(downloadSymbol);
    207 }
    208 
     143  return tr ("%1 %2").arg (speedToString (downloadSpeed)).arg (downloadSymbol);
     144}
     145
     146QString
     147Formatter :: percentToString (double x)
     148{
     149  char buf[128];
     150  return QString (tr_strpercent (buf, x, sizeof (buf)));
     151}
     152
     153QString
     154Formatter :: ratioToString (double ratio)
     155{
     156  char buf[128];
     157  return QString::fromUtf8 (tr_strratio (buf, sizeof (buf), ratio, "\xE2\x88\x9E"));
     158}
     159
     160QString
     161Formatter :: timeToString (int seconds)
     162{
     163  int days, hours, minutes;
     164  QString d, h, m, s;
     165  QString str;
     166
     167  if (seconds < 0)
     168    seconds = 0;
     169
     170  days = seconds / 86400;
     171  hours = (seconds % 86400) / 3600;
     172  minutes = (seconds % 3600) / 60;
     173  seconds %= 60;
     174
     175  d = tr ("%Ln day (s)", 0, days);
     176  h = tr ("%Ln hour (s)", 0, hours);
     177  m = tr ("%Ln minute (s)", 0, minutes);
     178  s = tr ("%Ln second (s)", 0, seconds);
     179
     180  if (days)
     181    {
     182      if (days >= 4 || !hours)
     183        str = d;
     184      else
     185        str = tr ("%1, %2").arg (d).arg (h);
     186    }
     187  else if (hours)
     188    {
     189      if (hours >= 4 || !minutes)
     190        str = h;
     191      else
     192        str = tr ("%1, %2").arg (h).arg (m);
     193    }
     194  else if (minutes)
     195    {
     196      if (minutes >= 4 || !seconds)
     197        str = m;
     198      else
     199        str = tr ("%1, %2").arg (m).arg (s);
     200    }
     201  else
     202    {
     203      str = s;
     204    }
     205
     206  return str;
     207}
  • trunk/qt/formatter.h

    r13978 r13996  
    11/*
    2  * This file Copyright (C) Mnemosyne LLC
     2 * This file Copyright(C) Mnemosyne LLC
    33 *
    44 * This program is free software; you can redistribute it and/or modify
     
    2424class Formatter: public QObject
    2525{
    26         Q_OBJECT
     26    Q_OBJECT
    2727
    28     public:
     28  public:
    2929
    30         Formatter( ) { }
    31         virtual ~Formatter( ) { }
     30    Formatter() {}
     31    virtual ~Formatter() {}
    3232
    33     public:
     33  public:
    3434
    35         static QString memToString( int64_t bytes );
    36         static QString sizeToString( int64_t bytes );
    37         static QString speedToString( const Speed& speed );
    38         static QString percentToString( double x );
    39         static QString ratioToString( double ratio );
    40         static QString timeToString( int seconds );
    41         static QString uploadSpeedToString (const Speed& up);
    42         static QString downloadSpeedToString (const Speed& down);
     35    static QString memToString (int64_t bytes);
     36    static QString sizeToString (int64_t bytes);
     37    static QString speedToString (const Speed& speed);
     38    static QString percentToString (double x);
     39    static QString ratioToString (double ratio);
     40    static QString timeToString (int seconds);
     41    static QString uploadSpeedToString(const Speed& up);
     42    static QString downloadSpeedToString(const Speed& down);
    4343
    44     public:
     44  public:
    4545
    46         typedef enum { B, KB, MB, GB, TB } Size;
    47         typedef enum { SPEED, SIZE, MEM } Type;
    48         static QString unitStr( Type t, Size s ) { return unitStrings[t][s]; }
    49         static void initUnits( );
     46    typedef enum { B, KB, MB, GB, TB } Size;
     47    typedef enum { SPEED, SIZE, MEM } Type;
     48    static QString unitStr (Type t, Size s) { return unitStrings[t][s]; }
     49    static void initUnits ();
    5050
    51     private:
     51  private:
    5252
    53         static QString unitStrings[3][5];
     53    static QString unitStrings[3][5];
    5454};
    5555
Note: See TracChangeset for help on using the changeset viewer.