return item.isLink();
}
-QString KFileItemListWidgetInformant::roleText(const QByteArray &role, const QHash<QByteArray, QVariant> &values) const
+QString KFileItemListWidgetInformant::roleText(const QByteArray &role, const QHash<QByteArray, QVariant> &values, ForUsageAs forUsageAs) const
{
QString text;
const QVariant roleValue = values.value(role);
// Implementation note: In case if more roles require a custom handling
// use a hash + switch for a linear runtime.
- auto formatDate = [formatter, local](const QDateTime &time) {
+ auto formatDate = [formatter, local, forUsageAs](const QDateTime &time) {
if (ContentDisplaySettings::useShortRelativeDates()) {
- return formatter.formatRelativeDateTime(time, QLocale::ShortFormat);
+ return formatter.formatRelativeDateTime(time,
+ forUsageAs == KStandardItemListWidgetInformant::ForUsageAs::DisplayedText ? QLocale::ShortFormat
+ : QLocale::LongFormat);
} else {
- return local.toString(time, QLocale::ShortFormat);
+ return local.toString(time, forUsageAs == KStandardItemListWidgetInformant::ForUsageAs::DisplayedText ? QLocale::ShortFormat : QLocale::LongFormat);
}
};
if (values.value("isDir").toBool()) {
if (!roleValue.isNull() && roleValue != -1) {
// The item represents a directory.
- if (ContentDisplaySettings::directorySizeCount() || roleValue == -2 /* size is invalid */) {
+ if (ContentDisplaySettings::directorySizeMode() == ContentDisplaySettings::EnumDirectorySizeMode::ContentCount
+ || roleValue == -2 /* size is invalid */) {
// Show the number of sub directories instead of the file size of the directory.
const int count = values.value("count").toInt();
text = i18ncp("@item:intable", "%1 item", "%1 items", count);
text = QString::number(permissions.at(1).toInt(), 8);
break;
case ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat:
- text = QString("%1 (%2)").arg(permissions.at(0).toString()).arg(permissions.at(1).toInt(), 0, 8);
+ text = QLatin1String("%1 (%2)").arg(permissions.at(0).toString()).arg(permissions.at(1).toInt(), 0, 8);
break;
}
} else {
- text = KStandardItemListWidgetInformant::roleText(role, values);
+ text = KStandardItemListWidgetInformant::roleText(role, values, forUsageAs);
}
return text;
int KFileItemListWidget::selectionLength(const QString &text) const
{
- // Select the text without MIME-type extension
- int selectionLength = text.length();
-
// If item is a directory, use the whole text length for
// selection (ignore all points)
if (data().value("isDir").toBool()) {
- return selectionLength;
+ return numberOfUnicodeCharactersIn(text);
}
+ int indexOfExtension = text.length();
+
QMimeDatabase db;
const QString extension = db.suffixForFileName(text);
if (extension.isEmpty()) {
// For an unknown extension just exclude the extension after
- // the last point. This does not work for multiple extensions like
+ // the last dot. This does not work for multiple extensions like
// *.tar.gz but usually this is anyhow a known extension.
- selectionLength = text.lastIndexOf(QLatin1Char('.'));
+ indexOfExtension = text.lastIndexOf(QLatin1Char('.'));
- // If no point could be found, use whole text length for selection.
- if (selectionLength < 1) {
- selectionLength = text.length();
+ // if there either is no dot, or the last dot is the first or last char, treat as no extension.
+ if (indexOfExtension < 1 || indexOfExtension == text.length() - 1) {
+ indexOfExtension = text.length();
}
-
} else {
- selectionLength -= extension.length() + 1;
+ indexOfExtension -= extension.length() + 1;
}
- return selectionLength;
+ return numberOfUnicodeCharactersIn(text.left(indexOfExtension));
}
void KFileItemListWidget::hoverSequenceStarted()