Split Image Size into Width/Height

Summary:
This patch splits the single property "Image Size" into "Width" and "Height", providing more fine-tuned control for power users.

FEATURE: 374559

Test Plan:
- Sorting works correctly
- No real change, only exposed differently

Reviewers: #dolphin, elvisangelaccio, ngraham

Reviewed By: #dolphin, elvisangelaccio, ngraham

Subscribers: ngraham, elvisangelaccio

Differential Revision: https://phabricator.kde.org/D11816
This commit is contained in:
Julian Schraner 2018-04-01 11:26:49 -06:00 committed by Nathaniel Graham
parent 6f3b0e3d00
commit 1441fefc07
4 changed files with 12 additions and 37 deletions

View file

@ -1846,16 +1846,10 @@ int KFileItemModel::sortRoleCompare(const ItemData* a, const ItemData* b, const
break;
}
case RatingRole: {
result = a->values.value("rating").toInt() - b->values.value("rating").toInt();
break;
}
case ImageSizeRole: {
// Alway use a natural comparing to interpret the numbers of a string like
// "1600 x 1200" for having a correct sorting.
result = collator.compare(a->values.value("imageSize").toString(),
b->values.value("imageSize").toString());
case RatingRole:
case WidthRole:
case HeightRole: {
result = a->values.value(roleForType(m_sortRole)).toInt() - b->values.value(roleForType(m_sortRole)).toInt();
break;
}
@ -2305,7 +2299,8 @@ const KFileItemModel::RoleInfoMap* KFileItemModel::rolesInfoMap(int& count)
{ "wordCount", WordCountRole, I18N_NOOP2_NOSTRIP("@label", "Word Count"), I18N_NOOP2_NOSTRIP("@label", "Document"), true, true },
{ "lineCount", LineCountRole, I18N_NOOP2_NOSTRIP("@label", "Line Count"), I18N_NOOP2_NOSTRIP("@label", "Document"), true, true },
{ "imageDateTime", ImageDateTimeRole, I18N_NOOP2_NOSTRIP("@label", "Date Photographed"), I18N_NOOP2_NOSTRIP("@label", "Image"), true, true },
{ "imageSize", ImageSizeRole, I18N_NOOP2_NOSTRIP("@label", "Image Size"), I18N_NOOP2_NOSTRIP("@label", "Image"), true, true },
{ "width", WidthRole, I18N_NOOP2_NOSTRIP("@label", "Width"), I18N_NOOP2_NOSTRIP("@label", "Image"), true, true },
{ "height", HeightRole, I18N_NOOP2_NOSTRIP("@label", "Height"), I18N_NOOP2_NOSTRIP("@label", "Image"), true, true },
{ "orientation", OrientationRole, I18N_NOOP2_NOSTRIP("@label", "Orientation"), I18N_NOOP2_NOSTRIP("@label", "Image"), true, true },
{ "artist", ArtistRole, I18N_NOOP2_NOSTRIP("@label", "Artist"), I18N_NOOP2_NOSTRIP("@label", "Audio"), true, true },
{ "genre", GenreRole, I18N_NOOP2_NOSTRIP("@label", "Genre"), I18N_NOOP2_NOSTRIP("@label", "Audio"), true, true },

View file

@ -286,7 +286,7 @@ private:
NoRole, NameRole, SizeRole, ModificationTimeRole, CreationTimeRole, AccessTimeRole, PermissionsRole, OwnerRole,
GroupRole, TypeRole, DestinationRole, PathRole, DeletionTimeRole,
// User visible roles available with Baloo:
CommentRole, TagsRole, RatingRole, ImageSizeRole, ImageDateTimeRole, OrientationRole,
CommentRole, TagsRole, RatingRole, WidthRole, HeightRole, ImageDateTimeRole, OrientationRole,
WordCountRole, TitleRole, LineCountRole, ArtistRole, GenreRole, AlbumRole, DurationRole, TrackRole, ReleaseYearRole,
BitrateRole, OriginUrlRole,
// Non-visible roles:

View file

@ -56,9 +56,6 @@ QHash<QByteArray, QVariant> KBalooRolesProvider::roleValues(const Baloo::File& f
{
QHash<QByteArray, QVariant> values;
int width = -1;
int height = -1;
QMapIterator<KFileMetaData::Property::Property, QVariant> it(file.properties());
while (it.hasNext()) {
it.next();
@ -72,23 +69,7 @@ QHash<QByteArray, QVariant> KBalooRolesProvider::roleValues(const Baloo::File& f
const QVariant value = it.value();
if (role == "imageSize") {
// Merge the two properties for width and height
// as one string into the "imageSize" role
if (property == QLatin1String("width")) {
width = value.toInt();
}
else if (property == QLatin1String("height")) {
height = value.toInt();
}
if (width >= 0 && height >= 0) {
QString widthAndHeight = QString::number(width);
widthAndHeight += QLatin1String(" x ");
widthAndHeight += QString::number(height);
values.insert(role, widthAndHeight);
}
} else if (role == "orientation") {
if (role == "orientation") {
const QString orientation = orientationFromValue(value.toInt());
values.insert(role, orientation);
} else if (role == "duration") {
@ -135,8 +116,7 @@ KBalooRolesProvider::KBalooRolesProvider() :
};
// Mapping from the URIs to the KFileItemModel roles. Note that this must not be
// a 1:1 mapping: One role may contain several URI-values (e.g. the URIs for height and
// width of an image are mapped to the role "imageSize")
// a 1:1 mapping: One role may contain several URI-values
static const PropertyInfo propertyInfoList[] = {
{ "rating", "rating" },
{ "tag", "tags" },
@ -144,8 +124,8 @@ KBalooRolesProvider::KBalooRolesProvider() :
{ "title", "title" },
{ "wordCount", "wordCount" },
{ "lineCount", "lineCount" },
{ "width", "imageSize" },
{ "height", "imageSize" },
{ "width", "width" },
{ "height", "height" },
{ "imageDateTime", "imageDateTime"},
{ "nexif.orientation", "orientation", },
{ "artist", "artist" },

View file

@ -456,7 +456,7 @@ void PlacesItemModel::initializeDefaultViewProperties() const
} else if (path == QLatin1String("/images")) {
props.setViewMode(DolphinView::IconsView);
props.setPreviewsShown(true);
props.setVisibleRoles({"text", "imageSize"});
props.setVisibleRoles({"text", "height", "width"});
} else if (path == QLatin1String("/audio")) {
props.setViewMode(DolphinView::DetailsView);
props.setPreviewsShown(false);