From 60a0049f4771ee0339efe5bb6042db39a7780d46 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Tue, 7 Mar 2023 10:34:01 +0100 Subject: [PATCH] opkg_manager: add localized separators to describe contents of package list --- data/locale/deutsch.locale | 2 ++ data/locale/english.locale | 2 ++ src/gui/opkg_manager.cpp | 25 +++++++++++++++++++------ src/system/locals.h | 2 ++ src/system/locals_intern.h | 2 ++ 5 files changed, 27 insertions(+), 6 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 0e56091b9..54e4197d7 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -2294,6 +2294,8 @@ opkg.messagebox.remove %s entfernen? opkg.messagebox.size.error Nicht genügend freier Speicher für Paketinstallation verfügbar! opkg.messagebox.updates.available Paket-Aktualisierung(en) verfügbar! opkg.success.install Installation erfolgreich!\nNeustart von Neutrino kann erforderlich sein. Jetzt neu starten? +opkg.separator.packages.available verfügbare Pakete +opkg.separator.packages.installed installierte Pakete opkg.title Paketverwaltung opkg.update.check Prüfe auf Updates ... opkg.update.reading_lists Paketlisten werden eingelesen ... diff --git a/data/locale/english.locale b/data/locale/english.locale index 1c8cd5356..3f0a42d9e 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -2294,6 +2294,8 @@ opkg.messagebox.remove Remove %s? opkg.messagebox.size.error Not enough free memory available for this package! opkg.messagebox.updates.available Package update(s) available! opkg.success.install Install successful!\n restart of Neutrino might be required. Restart now? +opkg.separator.packages.available available packages +opkg.separator.packages.installed installed packages opkg.title Package Management opkg.update.check Checking for updates ... opkg.update.reading_lists Reading package lists ... diff --git a/src/gui/opkg_manager.cpp b/src/gui/opkg_manager.cpp index 743dc8070..77f2d0f65 100644 --- a/src/gui/opkg_manager.cpp +++ b/src/gui/opkg_manager.cpp @@ -521,13 +521,13 @@ void COPKGManager::updateMenu() } std::vector& items = menu->getItems(); -// Sorts the elements of the menu object, starting from the fifth element, because they are intro items. -// The sorting is done in two steps: first, the elements are sorted based on the value of iconName_Info_right. -// The values NEUTRINO_ICON_MARKER_UPDATE_AVAILABLE, NEUTRINO_ICON_MARKER_DOWNLOAD_LATER and NEUTRINO_ICON_MARKER_DIALOG_OK -// are sorted from highest to lowest priority. -// If two elements have the same value for iconName_Info_right, they are sorted by their name using std::strcmp. + // Sorts the elements of the menu object, starting from the fifth element, because previous items are intro items. + // The sorting is done in two steps: first, the elements are sorted based on the value of iconName_Info_right. + // The values NEUTRINO_ICON_MARKER_UPDATE_AVAILABLE, NEUTRINO_ICON_MARKER_DOWNLOAD_LATER and NEUTRINO_ICON_MARKER_DIALOG_OK + // are sorted from highest to lowest priority. + // If two elements have the same value for iconName_Info_right, they are sorted by their names. -// We know position (5) of menu separator from we will start sort. + // We know position (5) of menu separator from we will start sort. std::sort(items.begin() + 5, items.end(), [](CMenuItem* a, CMenuItem* b) { int aValue = 0, bValue = 0; @@ -550,6 +550,19 @@ void COPKGManager::updateMenu() else return aValue > bValue; }); + + // Now we have a sorted list, but we need some menu separators with text that describes what is inside the sections. + for (size_t i = 5; i < items.size()-1; i++) + { + if (items[i]->iconName_Info_right != NULL) + if (items[i]->iconName_Info_right != items[i + 1]->iconName_Info_right) + { + if (items[i + 1]->iconName_Info_right == NEUTRINO_ICON_MARKER_DOWNLOAD_LATER) + menu->insertItem(i + 1, new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_OPKG_SEPARATOR_PACKAGES_AVAILABLE)); + else + menu->insertItem(i + 1, new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_OPKG_SEPARATOR_PACKAGES_INSTALLED)); + } + } } bool COPKGManager::removeInfoBarTxt() diff --git a/src/system/locals.h b/src/system/locals.h index 8c26ced2b..b140053d3 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -2322,6 +2322,8 @@ typedef enum LOCALE_OPKG_MESSAGEBOX_SIZE_ERROR, LOCALE_OPKG_MESSAGEBOX_UPDATES_AVAILABLE, LOCALE_OPKG_SUCCESS_INSTALL, + LOCALE_OPKG_SEPARATOR_PACKAGES_AVAILABLE, + LOCALE_OPKG_SEPARATOR_PACKAGES_INSTALLED, LOCALE_OPKG_TITLE, LOCALE_OPKG_UPDATE_CHECK, LOCALE_OPKG_UPDATE_READING_LISTS, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 3d4f8fb2f..313ca2e2c 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -2322,6 +2322,8 @@ const char * locale_real_names[] = "opkg.messagebox.size.error", "opkg.messagebox.updates.available", "opkg.success.install", + "opkg.separator.packages.available", + "opkg.separator.packages.installed", "opkg.title", "opkg.update.check", "opkg.update.reading_lists",