|
- /*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2016 - ROLI Ltd.
-
- Permission is granted to use this software 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.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD
- TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
- OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
- USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- OF THIS SOFTWARE.
-
- -----------------------------------------------------------------------------
-
- To release a closed-source product which uses other parts of JUCE not
- licensed under the ISC terms, commercial licenses are available: visit
- www.juce.com for more information.
-
- ==============================================================================
- */
-
- RelativeTime::RelativeTime (const double secs) noexcept : numSeconds (secs) {}
- RelativeTime::RelativeTime (const RelativeTime& other) noexcept : numSeconds (other.numSeconds) {}
- RelativeTime::~RelativeTime() noexcept {}
-
- //==============================================================================
- RelativeTime RelativeTime::milliseconds (const int milliseconds) noexcept { return RelativeTime (milliseconds * 0.001); }
- RelativeTime RelativeTime::milliseconds (const int64 milliseconds) noexcept { return RelativeTime (milliseconds * 0.001); }
- RelativeTime RelativeTime::seconds (double s) noexcept { return RelativeTime (s); }
- RelativeTime RelativeTime::minutes (const double numberOfMinutes) noexcept { return RelativeTime (numberOfMinutes * 60.0); }
- RelativeTime RelativeTime::hours (const double numberOfHours) noexcept { return RelativeTime (numberOfHours * (60.0 * 60.0)); }
- RelativeTime RelativeTime::days (const double numberOfDays) noexcept { return RelativeTime (numberOfDays * (60.0 * 60.0 * 24.0)); }
- RelativeTime RelativeTime::weeks (const 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+= (const double secs) noexcept { numSeconds += secs; return *this; }
- RelativeTime RelativeTime::operator-= (const double secs) noexcept { numSeconds -= secs; return *this; }
-
- RelativeTime operator+ (RelativeTime t1, RelativeTime t2) noexcept { return t1 += t2; }
- RelativeTime operator- (RelativeTime t1, RelativeTime t2) noexcept { return t1 -= t2; }
-
- bool operator== (RelativeTime t1, RelativeTime t2) noexcept { return t1.inSeconds() == t2.inSeconds(); }
- bool operator!= (RelativeTime t1, RelativeTime t2) noexcept { return t1.inSeconds() != t2.inSeconds(); }
- bool operator> (RelativeTime t1, RelativeTime t2) noexcept { return t1.inSeconds() > t2.inSeconds(); }
- bool operator< (RelativeTime t1, RelativeTime t2) noexcept { return t1.inSeconds() < t2.inSeconds(); }
- bool operator>= (RelativeTime t1, RelativeTime t2) noexcept { return t1.inSeconds() >= t2.inSeconds(); }
- bool operator<= (RelativeTime t1, RelativeTime t2) noexcept { return t1.inSeconds() <= t2.inSeconds(); }
-
- //==============================================================================
- static void translateTimeField (String& result, int n, const char* singular, const char* plural)
- {
- result << TRANS (n == 1 ? singular : plural)
- .replace (n == 1 ? "1" : "2", String (n))
- << ' ';
- }
-
- String RelativeTime::getDescription (const String& returnValueForZeroTime) const
- {
- if (numSeconds < 0.001 && numSeconds > -0.001)
- return returnValueForZeroTime;
-
- String result;
- result.preallocateBytes (32);
-
- if (numSeconds < 0)
- result << '-';
-
- int fieldsShown = 0;
- int n = std::abs ((int) inWeeks());
- if (n > 0)
- {
- translateTimeField (result, n, NEEDS_TRANS("1 week"), NEEDS_TRANS("2 weeks"));
- ++fieldsShown;
- }
-
- n = std::abs ((int) inDays()) % 7;
- if (n > 0)
- {
- translateTimeField (result, n, NEEDS_TRANS("1 day"), NEEDS_TRANS("2 days"));
- ++fieldsShown;
- }
-
- if (fieldsShown < 2)
- {
- n = std::abs ((int) inHours()) % 24;
- if (n > 0)
- {
- translateTimeField (result, n, NEEDS_TRANS("1 hr"), NEEDS_TRANS("2 hrs"));
- ++fieldsShown;
- }
-
- if (fieldsShown < 2)
- {
- n = std::abs ((int) inMinutes()) % 60;
- if (n > 0)
- {
- translateTimeField (result, n, NEEDS_TRANS("1 min"), NEEDS_TRANS("2 mins"));
- ++fieldsShown;
- }
-
- if (fieldsShown < 2)
- {
- n = std::abs ((int) inSeconds()) % 60;
- if (n > 0)
- {
- translateTimeField (result, n, NEEDS_TRANS("1 sec"), NEEDS_TRANS("2 secs"));
- ++fieldsShown;
- }
-
- if (fieldsShown == 0)
- {
- n = std::abs ((int) inMilliseconds()) % 1000;
- if (n > 0)
- result << n << ' ' << TRANS ("ms");
- }
- }
- }
- }
-
- return result.trimEnd();
- }
|