+QList<KLoadMetaDataThread::Item>
+ KMetaDataWidget::Private::mergedItems(const QList<KLoadMetaDataThread::Item>& items)
+{
+ // TODO: Currently only "width" and "height" are merged as "width x height". If
+ // other kind of merges should be done too, a more general approach is required.
+ QList<KLoadMetaDataThread::Item> mergedItems;
+
+ KLoadMetaDataThread::Item width;
+ KLoadMetaDataThread::Item height;
+
+ foreach (const KLoadMetaDataThread::Item& item, items) {
+ if (item.name == "width") {
+ width = item;
+ } else if (item.name == "height") {
+ height = item;
+ } else {
+ // insert the item sorted by the label
+ bool inserted = false;
+ int i = 0;
+ const int count = mergedItems.count();
+ while (!inserted && (i < count)) {
+ if (item.label < mergedItems[i].label) {
+ mergedItems.insert(i, item);
+ inserted = true;
+ }
+ ++i;
+ }
+ if (!inserted) {
+ mergedItems.append(item);
+ }
+ }
+ }
+
+ const bool foundWidth = !width.name.isEmpty();
+ const bool foundHeight = !height.name.isEmpty();
+ if (foundWidth && !foundHeight) {
+ mergedItems.insert(0, width);
+ } else if (foundHeight && !foundWidth) {
+ mergedItems.insert(0, height);
+ } else if (foundWidth && foundHeight) {
+ KLoadMetaDataThread::Item size;
+ size.label = i18nc("@label", "Width x Height:");
+ size.value = width.value + " x " + height.value;
+ mergedItems.insert(0, size);
+ }
+
+ return mergedItems;
+}
+