mirror of
https://github.com/transmission/transmission
synced 2024-12-23 08:13:27 +00:00
d7930984ef
There're places where manual intervention is still required as uncrustify is not ideal (unfortunately), but at least one may rely on it to do the right thing most of the time (e.g. when sending in a patch). The style itself is quite different from what we had before but making it uniform across all the codebase is the key. I also hope that it'll make the code more readable (YMMV) and less sensitive to further changes.
99 lines
2.3 KiB
C++
99 lines
2.3 KiB
C++
/*
|
|
* This file Copyright (C) 2009-2015 Mnemosyne LLC
|
|
*
|
|
* It may be used under the GNU GPL versions 2 or 3
|
|
* or any future license endorsed by Mnemosyne LLC.
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <cctype> // isxdigit()
|
|
|
|
#include <QPointer>
|
|
#include <QRect>
|
|
#include <QString>
|
|
|
|
class QAbstractItemView;
|
|
class QColor;
|
|
class QHeaderView;
|
|
class QIcon;
|
|
class QModelIndex;
|
|
|
|
class Utils
|
|
{
|
|
public:
|
|
static QIcon guessMimeIcon(const QString& filename);
|
|
static QIcon getIconFromIndex(const QModelIndex& index);
|
|
|
|
// Test if string is UTF-8 or not
|
|
static bool isValidUtf8(const char* s);
|
|
|
|
static QString removeTrailingDirSeparator(const QString& path);
|
|
|
|
static void narrowRect(QRect& rect, int dx1, int dx2, Qt::LayoutDirection direction)
|
|
{
|
|
if (direction == Qt::RightToLeft)
|
|
{
|
|
qSwap(dx1, dx2);
|
|
}
|
|
|
|
rect.adjust(dx1, 0, -dx2, 0);
|
|
}
|
|
|
|
static int measureViewItem(QAbstractItemView* view, const QString& text);
|
|
static int measureHeaderItem(QHeaderView* view, const QString& text);
|
|
|
|
static QColor getFadedColor(const QColor& color);
|
|
|
|
template<typename DialogT, typename... ArgsT>
|
|
static void openDialog(QPointer<DialogT>& dialog, ArgsT&& ... args)
|
|
{
|
|
if (dialog.isNull())
|
|
{
|
|
dialog = new DialogT(std::forward<ArgsT>(args) ...);
|
|
dialog->setAttribute(Qt::WA_DeleteOnClose);
|
|
dialog->show();
|
|
}
|
|
else
|
|
{
|
|
dialog->raise();
|
|
dialog->activateWindow();
|
|
}
|
|
}
|
|
|
|
///
|
|
/// URLs
|
|
///
|
|
|
|
static bool isMagnetLink(const QString& s)
|
|
{
|
|
return s.startsWith(QString::fromUtf8("magnet:?"));
|
|
}
|
|
|
|
static bool isHexHashcode(const QString& s)
|
|
{
|
|
if (s.length() != 40)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
for (const QChar ch : s)
|
|
{
|
|
if (!isxdigit(ch.unicode()))
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
static bool isUriWithSupportedScheme(const QString& s)
|
|
{
|
|
static const QString ftp = QString::fromUtf8("ftp://");
|
|
static const QString http = QString::fromUtf8("http://");
|
|
static const QString https = QString::fromUtf8("https://");
|
|
return s.startsWith(http) || s.startsWith(https) || s.startsWith(ftp);
|
|
}
|
|
};
|