| 
							- /*
 -   ==============================================================================
 - 
 -    This file is part of the JUCE library.
 -    Copyright (c) 2022 - Raw Material Software Limited
 - 
 -    JUCE is an open source library subject to commercial or open-source
 -    licensing.
 - 
 -    The code included in this file is provided under the terms of the ISC license
 -    http://www.isc.org/downloads/software-support-policy/isc-license. Permission
 -    To use, copy, modify, and/or distribute this software for any purpose with or
 -    without fee is hereby granted provided that the above copyright notice and
 -    this permission notice appear in all copies.
 - 
 -    JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
 -    EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
 -    DISCLAIMED.
 - 
 -   ==============================================================================
 - */
 - 
 - namespace juce
 - {
 - 
 - RelativeTime::RelativeTime (const double secs) noexcept           : numSeconds (secs) {}
 - RelativeTime::RelativeTime (const RelativeTime& other) noexcept   : numSeconds (other.numSeconds) {}
 - RelativeTime::~RelativeTime() noexcept {}
 - 
 - //==============================================================================
 - RelativeTime RelativeTime::milliseconds (int milliseconds) noexcept         { return RelativeTime ((double) milliseconds * 0.001); }
 - RelativeTime RelativeTime::milliseconds (int64 milliseconds) noexcept       { return RelativeTime ((double) milliseconds * 0.001); }
 - RelativeTime RelativeTime::seconds (double s) noexcept                      { return RelativeTime (s); }
 - RelativeTime RelativeTime::minutes (double numberOfMinutes) noexcept        { return RelativeTime (numberOfMinutes * 60.0); }
 - RelativeTime RelativeTime::hours (double numberOfHours) noexcept            { return RelativeTime (numberOfHours * (60.0 * 60.0)); }
 - RelativeTime RelativeTime::days (double numberOfDays) noexcept              { return RelativeTime (numberOfDays  * (60.0 * 60.0 * 24.0)); }
 - RelativeTime RelativeTime::weeks (double numberOfWeeks) noexcept            { return RelativeTime (numberOfWeeks * (60.0 * 60.0 * 24.0 * 7.0)); }
 - 
 - //==============================================================================
 - int64 RelativeTime::inMilliseconds() const noexcept { return (int64) (numSeconds * 1000.0); }
 - double RelativeTime::inMinutes() const noexcept     { return numSeconds / 60.0; }
 - double RelativeTime::inHours() const noexcept       { return numSeconds / (60.0 * 60.0); }
 - double RelativeTime::inDays() const noexcept        { return numSeconds / (60.0 * 60.0 * 24.0); }
 - double RelativeTime::inWeeks() const noexcept       { return numSeconds / (60.0 * 60.0 * 24.0 * 7.0); }
 - 
 - //==============================================================================
 - RelativeTime& RelativeTime::operator= (const RelativeTime& other) noexcept      { numSeconds = other.numSeconds; return *this; }
 - 
 - RelativeTime RelativeTime::operator+= (RelativeTime t) noexcept     { numSeconds += t.numSeconds; return *this; }
 - RelativeTime RelativeTime::operator-= (RelativeTime t) noexcept     { numSeconds -= t.numSeconds; return *this; }
 - RelativeTime RelativeTime::operator+= (double secs) noexcept        { numSeconds += secs; return *this; }
 - RelativeTime RelativeTime::operator-= (double secs) noexcept        { numSeconds -= secs; return *this; }
 - 
 - JUCE_API RelativeTime JUCE_CALLTYPE operator+ (RelativeTime t1, RelativeTime t2) noexcept  { return t1 += t2; }
 - JUCE_API RelativeTime JUCE_CALLTYPE operator- (RelativeTime t1, RelativeTime t2) noexcept  { return t1 -= t2; }
 - 
 - JUCE_API bool JUCE_CALLTYPE operator== (RelativeTime t1, RelativeTime t2) noexcept
 - {
 -     return exactlyEqual (t1.inSeconds(), t2.inSeconds());
 - }
 - 
 - JUCE_API bool JUCE_CALLTYPE operator!= (RelativeTime t1, RelativeTime t2) noexcept
 - {
 -     return ! (t1 == t2);
 - }
 - 
 - JUCE_API bool JUCE_CALLTYPE operator>  (RelativeTime t1, RelativeTime t2) noexcept       { return t1.inSeconds() >  t2.inSeconds(); }
 - JUCE_API bool JUCE_CALLTYPE operator<  (RelativeTime t1, RelativeTime t2) noexcept       { return t1.inSeconds() <  t2.inSeconds(); }
 - JUCE_API bool JUCE_CALLTYPE operator>= (RelativeTime t1, RelativeTime t2) noexcept       { return t1.inSeconds() >= t2.inSeconds(); }
 - JUCE_API bool JUCE_CALLTYPE operator<= (RelativeTime t1, RelativeTime t2) noexcept       { return t1.inSeconds() <= t2.inSeconds(); }
 - 
 - //==============================================================================
 - static String translateTimeField (int n, const char* singular, const char* plural)
 - {
 -     return TRANS (n == 1 ? singular : plural).replace (n == 1 ? "1" : "2", String (n));
 - }
 - 
 - static String describeYears   (int n)      { return translateTimeField (n, NEEDS_TRANS ("1 year"),  NEEDS_TRANS ("2 years")); }
 - static String describeMonths  (int n)      { return translateTimeField (n, NEEDS_TRANS ("1 month"), NEEDS_TRANS ("2 months")); }
 - static String describeWeeks   (int n)      { return translateTimeField (n, NEEDS_TRANS ("1 week"),  NEEDS_TRANS ("2 weeks")); }
 - static String describeDays    (int n)      { return translateTimeField (n, NEEDS_TRANS ("1 day"),   NEEDS_TRANS ("2 days")); }
 - static String describeHours   (int n)      { return translateTimeField (n, NEEDS_TRANS ("1 hr"),    NEEDS_TRANS ("2 hrs")); }
 - static String describeMinutes (int n)      { return translateTimeField (n, NEEDS_TRANS ("1 min"),   NEEDS_TRANS ("2 mins")); }
 - static String describeSeconds (int n)      { return translateTimeField (n, NEEDS_TRANS ("1 sec"),   NEEDS_TRANS ("2 secs")); }
 - 
 - String RelativeTime::getApproximateDescription() const
 - {
 -     if (numSeconds <= 1.0)
 -         return "< 1 sec";
 - 
 -     auto weeks = (int) inWeeks();
 - 
 -     if (weeks > 52)   return describeYears (weeks / 52);
 -     if (weeks > 8)    return describeMonths ((weeks * 12) / 52);
 -     if (weeks > 1)    return describeWeeks (weeks);
 - 
 -     auto days = (int) inDays();
 - 
 -     if (days > 1)
 -         return describeDays (days);
 - 
 -     auto hours = (int) inHours();
 - 
 -     if (hours > 0)
 -         return describeHours (hours);
 - 
 -     auto minutes = (int) inMinutes();
 - 
 -     if (minutes > 0)
 -         return describeMinutes (minutes);
 - 
 -     return describeSeconds ((int) numSeconds);
 - }
 - 
 - String RelativeTime::getDescription (const String& returnValueForZeroTime) const
 - {
 -     if (std::abs (numSeconds) < 0.001)
 -         return returnValueForZeroTime;
 - 
 -     if (numSeconds < 0)
 -         return "-" + RelativeTime (-numSeconds).getDescription();
 - 
 -     StringArray fields;
 - 
 -     auto n = (int) inWeeks();
 - 
 -     if (n > 0)
 -         fields.add (describeWeeks (n));
 - 
 -     n = ((int) inDays()) % 7;
 - 
 -     if (n > 0)
 -         fields.add (describeDays (n));
 - 
 -     if (fields.size() < 2)
 -     {
 -         n = ((int) inHours()) % 24;
 - 
 -         if (n > 0)
 -             fields.add (describeHours (n));
 - 
 -         if (fields.size() < 2)
 -         {
 -             n = ((int) inMinutes()) % 60;
 - 
 -             if (n > 0)
 -                 fields.add (describeMinutes (n));
 - 
 -             if (fields.size() < 2)
 -             {
 -                 n = ((int) inSeconds()) % 60;
 - 
 -                 if (n > 0)
 -                     fields.add (describeSeconds (n));
 - 
 -                 if (fields.isEmpty())
 -                     fields.add (String (((int) inMilliseconds()) % 1000) + " " + TRANS ("ms"));
 -             }
 -         }
 -     }
 - 
 -     return fields.joinIntoString (" ");
 - }
 - 
 - } // namespace juce
 
 
  |