12#include <QApplication>
21#include <QModelIndexList>
32 buf.open (QIODevice::ReadWrite);
33 const auto compression = 100;
34 pix.save (&buf,
"PNG", compression);
35 return QStringLiteral (
"data:image/png;base64,") + buf.buffer ().toBase64 ();
40 QString MakePrettySizeWith (qint64 sourceSize,
const QStringList& units)
43 long double size = sourceSize;
45 for (; strNum < 3 && size >= 1024; ++strNum, size /= 1024)
48 return QString::number (size,
'f', 1) + units.value (strNum);
54 static QStringList units
62 return MakePrettySizeWith (sourcesize, units);
67 static const QStringList units
69 QObject::tr (
"b",
"Short one-character unit for bytes."),
70 QObject::tr (
"K",
"Short one-character unit for kilobytes."),
71 QObject::tr (
"M",
"Short one-character unit for megabytes."),
72 QObject::tr (
"G",
"Short one-character unit for gigabytes.")
75 return MakePrettySizeWith (sourcesize, units);
80 const auto secsPerDay = 86400;
81 int d = time / secsPerDay;
82 time -= d * secsPerDay;
85 result += QObject::tr (
"%n day(s), ",
"", d);
86 result += QTime (0, 0, 0).addSecs (time).toString ();
91 const QString& localeName,
92 const QString& prefix,
93 const QString& appName)
95 auto filename = prefix;
96 filename.append (
"_");
97 if (!baseName.isEmpty ())
98 filename.append (baseName).append (
"_");
99 filename.append (localeName);
101 auto transl =
new QTranslator;
104 if (transl->load (filename,
":/") ||
105 transl->load (filename,
106 QCoreApplication::applicationDirPath () +
"/translations"))
107 #elif defined (Q_OS_MAC) && !defined (USE_UNIX_LAYOUT)
109 if (transl->load (filename,
":/") ||
110 transl->load (filename,
111 QCoreApplication::applicationDirPath () +
"/../Resources/translations"))
112 #elif defined (INSTALL_PREFIX)
113 if (transl->load (filename,
":/") ||
114 transl->load (filename,
115 QString (INSTALL_PREFIX
"/share/%1/translations").arg (appName)))
117 if (transl->load (filename,
":/") ||
118 transl->load (filename,
119 QString (
"/usr/local/share/%1/translations").arg (appName)) ||
120 transl->load (filename,
121 QString (
"/usr/share/%1/translations").arg (appName)))
131 const QString& prefix,
132 const QString& appName)
135 if (
auto transl =
LoadTranslator (baseName, localeName, prefix, appName))
137 QCoreApplication::installTranslator (transl);
141 qWarning () << Q_FUNC_INFO
142 <<
"could not load translation file for locale"
152 QSettings settings (QCoreApplication::organizationName (),
153 QCoreApplication::applicationName ());
154 QString localeName = settings.value (QStringLiteral (
"Language"), QStringLiteral (
"system")).toString ();
156 if (localeName ==
"system"_ql)
158 const auto localeLen = 5;
159 localeName = qEnvironmentVariable (
"LANG").left (localeLen);
161 if (localeName ==
"C"_ql || localeName.isEmpty ())
162 localeName = QStringLiteral (
"en_US");
164 if (localeName.isEmpty () || localeName.size () != localeLen)
165 localeName = QLocale::system ().name ().left (localeLen);
168 if (localeName.size () == 2)
170 auto lang = QLocale (localeName).language ();
171 const auto& cs = QLocale::countriesForLanguage (lang);
173 localeName +=
"_00"_ql;
175 localeName = QLocale (lang, cs.at (0)).name ();
183 if (locale.language () == QLocale::AnyLanguage)
184 return QStringLiteral (
"*");
186 auto locStr = locale.name ();
187 locStr.replace (
'_',
'-');
198 const auto senderAct = qobject_cast<QAction*> (sender);
203 QDebug d (&debugString);
204 d <<
"sender is not a QAction*"
207 throw std::runtime_error (qPrintable (debugString));
215 const auto result =
new QAction (parent);
216 result->setSeparator (
true);
QString MakePrettySizeShort(qint64 sourcesize)
Converts a bytes count to a string representation with appropriately chosen units.
QString GetLocaleName()
Returns the current locale name, like en_US.
QTranslator * LoadTranslator(const QString &baseName, const QString &localeName, const QString &prefix, const QString &appName)
QString MakeTimeFromLong(ulong time)
Makes a formatted time from number.
QModelIndexList GetSummarySelectedRows(QObject *sender)
QString GetAsBase64Src(const QImage &pix)
Returns the given image in a Base64-encoded form.
QString GetLanguage()
Returns the current language name.
QAction * CreateSeparator(QObject *parent)
Returns the action that is set to act as a separator.
const QString LCLowercase
The "leechcraft" literal, with no run-time overhead.
QString MakePrettySize(qint64 sourcesize)
Makes a formatted size from number.
QTranslator * InstallTranslator(const QString &baseName, const QString &prefix, const QString &appName)
Loads and installs a translator.
QString GetInternetLocaleName(const QLocale &locale)