// This file Copyright © Mnemosyne LLC. // It may be used under GPLv2 (SPDX: GPL-2.0-only), GPLv3 (SPDX: GPL-3.0-only), // or any future license endorsed by Mnemosyne LLC. // License text can be found in the licenses/ folder. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "Utils.h" // --- namespace { bool isSlashChar(QChar const& c) { return c == QLatin1Char('/') || c == QLatin1Char('\\'); } } // namespace QIcon Utils::getIconFromIndex(QModelIndex const& index) { QVariant const variant = index.data(Qt::DecorationRole); #if QT_VERSION >= QT_VERSION_CHECK(6, 2, 0) switch (variant.typeId()) #else switch (static_cast(variant.type())) #endif { case QMetaType::QIcon: return qvariant_cast(variant); case QMetaType::QPixmap: return qvariant_cast(variant); default: return {}; } } QString Utils::removeTrailingDirSeparator(QString const& path) { int i = path.size(); while (i > 1 && isSlashChar(path[i - 1])) { --i; } return path.left(i); } int Utils::measureViewItem(QAbstractItemView const* view, QString const& text) { QStyleOptionViewItem option; option.initFrom(view); option.features = QStyleOptionViewItem::HasDisplay; option.text = text; option.textElideMode = Qt::ElideNone; option.font = view->font(); return view->style() ->sizeFromContents(QStyle::CT_ItemViewItem, &option, QSize{ QWIDGETSIZE_MAX, QWIDGETSIZE_MAX }, view) .width(); } int Utils::measureHeaderItem(QHeaderView const* view, QString const& text) { QStyleOptionHeader option; option.initFrom(view); option.text = text; option.sortIndicator = view->isSortIndicatorShown() ? QStyleOptionHeader::SortDown : QStyleOptionHeader::None; return view->style()->sizeFromContents(QStyle::CT_HeaderSection, &option, QSize{}, view).width(); } QColor Utils::getFadedColor(QColor const& color) { QColor faded_color(color); faded_color.setAlpha(128); return faded_color; } void Utils::updateSpinBoxFormat(QSpinBox* spinBox, char const* context, char const* format, QString const& placeholder) { QString const units_format = QCoreApplication::translate(context, format, nullptr, spinBox->value()); auto const placeholder_pos = units_format.indexOf(placeholder); if (placeholder_pos == -1) { return; } auto const units_prefix = units_format.left(placeholder_pos); auto const units_suffix = units_format.mid(placeholder_pos + placeholder.size()); if (spinBox->prefix() != units_prefix) { spinBox->setPrefix(units_prefix); } if (spinBox->suffix() != units_suffix) { spinBox->setSuffix(units_suffix); } }