hrev54440 adds 1 changeset to branch 'master'
old head: ebcb6f5f4fbfdc446c21783815fec2e1b27664df
new head: 24f8ae41567182dc1ba3521b5738ea34b87bb4f2
overview:
https://git.haiku-os.org/haiku/log/?qt=range&q=24f8ae415671+%5Eebcb6f5f4fbf
----------------------------------------------------------------------------
24f8ae415671: DataTranslations: sort by supertype before name
Fixes #9618 (which suggested using a tree view, but I think that's not
useful, just proper sorting of the items seems fine to me)
Change-Id: Ie1298eec048f9cb42528b8420a91e807e8f00eab
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3030
Reviewed-by: waddlesplash <waddlesplash@xxxxxxxxx>
[ Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> ]
----------------------------------------------------------------------------
Revision: hrev54440
Commit: 24f8ae41567182dc1ba3521b5738ea34b87bb4f2
URL: https://git.haiku-os.org/haiku/commit/?id=24f8ae415671
Author: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Date: Mon Jul 13 12:57:11 2020 UTC
Committer: waddlesplash <waddlesplash@xxxxxxxxx>
Commit-Date: Sat Jul 18 19:35:19 2020 UTC
Ticket: https://dev.haiku-os.org/ticket/9618
----------------------------------------------------------------------------
2 files changed, 26 insertions(+), 3 deletions(-)
.../datatranslations/TranslatorListView.cpp | 26 +++++++++++++++++---
.../datatranslations/TranslatorListView.h | 3 +++
----------------------------------------------------------------------------
diff --git a/src/preferences/datatranslations/TranslatorListView.cpp
b/src/preferences/datatranslations/TranslatorListView.cpp
index d7cf40a9c6..b4a9df8f6d 100644
--- a/src/preferences/datatranslations/TranslatorListView.cpp
+++ b/src/preferences/datatranslations/TranslatorListView.cpp
@@ -14,15 +14,22 @@
#include <string.h>
#include <Application.h>
+#include <String.h>
+#include <TranslatorRoster.h>
static int
compare_items(const void* a, const void* b)
{
- const BStringItem* stringA = *(const BStringItem**)a;
- const BStringItem* stringB = *(const BStringItem**)b;
+ const TranslatorItem* itemA = *(const TranslatorItem**)a;
+ const TranslatorItem* itemB = *(const TranslatorItem**)b;
- return strcmp(stringA->Text(), stringB->Text());
+ // Compare by supertype, then by name
+ int typeDiff = itemA->Supertype().Compare(itemB->Supertype());
+ if (typeDiff != 0)
+ return typeDiff;
+
+ return strcmp(itemA->Text(), itemB->Text());
}
@@ -34,6 +41,19 @@ TranslatorItem::TranslatorItem(translator_id id, const char*
name)
BStringItem(name),
fID(id)
{
+ static BTranslatorRoster* roster = BTranslatorRoster::Default();
+
+ const translation_format* format;
+ int32 count;
+ roster->GetOutputFormats(id, &format, &count);
+
+ // Find a supertype to categorize the item in ("application" is too
generic,
+ // so exclude it unless it's the only one available)
+ do {
+ fSupertype = format->MIME;
+ int32 slash = fSupertype.FindFirst('/');
+ fSupertype.Truncate(slash);
+ } while (fSupertype == "application" && --count != 0);
}
diff --git a/src/preferences/datatranslations/TranslatorListView.h
b/src/preferences/datatranslations/TranslatorListView.h
index 60400d8ca8..ad9c06c006 100644
--- a/src/preferences/datatranslations/TranslatorListView.h
+++ b/src/preferences/datatranslations/TranslatorListView.h
@@ -12,6 +12,7 @@
#include <ListView.h>
+#include <String.h>
#include <TranslationDefs.h>
@@ -21,9 +22,11 @@ public:
virtual ~TranslatorItem();
translator_id ID() const { return fID; }
+ const BString& Supertype() const { return fSupertype; }
private:
translator_id fID;
+ BString fSupertype;
};