Author: rpmcruz
Date: Wed May 28 20:38:59 2008
New Revision: 47930
URL: http://svn.opensuse.org/viewcvs/yast?rev=47930&view=rev
Log:
* src/yzyppwrapper.h/cc: some hacks to add a second categories tree
for the yast-qt groups.
* src/yzypptags.h/cc: copied yast-qt categories treatment.
* src/YGPackageSelector.cc: added Groups option to type combo.
Added:
trunk/gtk/src/yzypptags.cc
trunk/gtk/src/yzypptags.h
Modified:
trunk/gtk/ChangeLog
trunk/gtk/src/Makefile.am
trunk/gtk/src/YGPackageSelector.cc
trunk/gtk/src/yzyppwrapper.cc
trunk/gtk/src/yzyppwrapper.h
Modified: trunk/gtk/ChangeLog
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/ChangeLog?rev=47930&r1=47929&r2=47930&view=diff
==============================================================================
--- trunk/gtk/ChangeLog (original)
+++ trunk/gtk/ChangeLog Wed May 28 20:38:59 2008
@@ -4,6 +4,11 @@
cursor -- GdkWindow will do that for us. This was crashing
for bug 393143...
+ * src/yzyppwrapper.h/cc: some hacks to add a second categories tree
+ for the yast-qt groups.
+ * src/yzypptags.h/cc: copied yast-qt categories treatment.
+ * src/YGPackageSelector.cc: added Groups option to type combo.
+
2008-05-26 Ricardo Cruz
* src/YGTextView.cc, src/YGUI.cc & src/ygtkwizard.c: changed
Modified: trunk/gtk/src/Makefile.am
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/Makefile.am?rev=47930&r1=47929&r2=47930&view=diff
==============================================================================
--- trunk/gtk/src/Makefile.am (original)
+++ trunk/gtk/src/Makefile.am Wed May 28 20:38:59 2008
@@ -54,6 +54,7 @@
ygtkhtmlwrap.c \
ygtkrichtext.c \
yzyppwrapper.cc \
+ yzypptags.cc \
ygtkzyppwrapper.cc
# should only append ygtkrichtext.c if USE_GTKHTML is set
Modified: trunk/gtk/src/YGPackageSelector.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGPackageSelector.cc?rev=47930&r1=47929&r2=47930&view=diff
==============================================================================
--- trunk/gtk/src/YGPackageSelector.cc (original)
+++ trunk/gtk/src/YGPackageSelector.cc Wed May 28 20:38:59 2008
@@ -899,29 +899,6 @@
}
};
-// Maps icons to top package groups
-struct CategoriesIconMap {
- const char *category, *icon;
-};
-static const CategoriesIconMap catIconMap[] = {
- { "Amusements", "package_games" },
- { "Games", "package_games" },
- { "Applications", "package_system" },
- { "Development", "applications-development" },
- { "Libraries", "package_development" },
- { "Documentation", "package_documentation" },
- { "Hardware", "package_settings_peripherals" },
- { "Productivity", "package_applications" },
- { "System", "package_settings" },
- { "Multimedia", "package_multimedia" },
- { "Video", "package_multimedia" },
- { "Office", "applications-office" },
- { "Publishing", "applications-office" },
- { "X11", "applications-other" },
- { "Metapackages", "package_network" },
-};
-#define CAT_SIZE (sizeof (catIconMap)/sizeof (CategoriesIconMap))
-
#include "icons/pkg-installed.xpm"
#include "icons/pkg-installed-upgradable.xpm"
#include "icons/pkg-available.xpm"
@@ -952,12 +929,13 @@
struct Categories : public View
{
GtkWidget *m_scroll, *m_view;
+ bool m_alternative; // use second categories...
public:
virtual GtkWidget *getWidget()
{ return m_scroll; }
- Categories (Collections::Listener *listener, Ypp::Package::Type type)
- : View (listener)
+ Categories (Collections::Listener *listener, Ypp::Package::Type type, bool alternative)
+ : View (listener), m_alternative (alternative)
{
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
@@ -1002,32 +980,25 @@
struct inner {
static void populate (GtkTreeStore *store, GtkTreeIter *parent,
- Ypp::Node *category)
+ Ypp::Node *category, Categories *pThis)
{
if (!category)
return;
GtkTreeIter iter;
gtk_tree_store_append (store, &iter, parent);
const std::string &name = category->name;
+ const char *icon = category->icon;
gtk_tree_store_set (store, &iter, 0, name.c_str(), 1, category, -1);
- if (!parent) {
- const gchar *icon = 0;
- for (unsigned int i = 0; i < CAT_SIZE; i++)
- if (name == catIconMap[i].category) {
- icon = catIconMap[i].icon;
- break;
- }
- if (icon) {
- GdkPixbuf *pixbuf = loadIcon (icon);
- gtk_tree_store_set (store, &iter, 2, pixbuf, -1);
- if (pixbuf)
- g_object_unref (G_OBJECT (pixbuf));
- }
+ if (icon) {
+ GdkPixbuf *pixbuf = loadThemeIcon (icon);
+ gtk_tree_store_set (store, &iter, 2, pixbuf, -1);
+ if (pixbuf)
+ g_object_unref (G_OBJECT (pixbuf));
}
- populate (store, &iter, category->child());
- populate (store, parent, category->next());
+ populate (store, &iter, category->child(), pThis);
+ populate (store, parent, category->next(), pThis);
}
- static GdkPixbuf *loadIcon (const char *icon)
+ static GdkPixbuf *loadThemeIcon (const char *icon)
{
GtkIconTheme *icons = gtk_icon_theme_get_default();
GdkPixbuf *pixbuf = gtk_icon_theme_load_icon (icons, icon, 22,
@@ -1049,15 +1020,23 @@
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter, 0, _("All"), 1, NULL, -1);
- inner::populate (store, NULL, Ypp::get()->getFirstCategory (type));
- GdkPixbuf *pixbuf = inner::loadIcon (GTK_STOCK_ABOUT);
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, _("Recommended"), 1, GINT_TO_POINTER (1),
- 2, pixbuf, -1);
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, _("Suggested"), 1, GINT_TO_POINTER (2),
- 2, pixbuf, -1);
- g_object_unref (G_OBJECT (pixbuf));
+ Ypp::Node *first_category;
+ if (m_alternative)
+ first_category = Ypp::get()->getFirstCategory2 (type);
+ else
+ first_category = Ypp::get()->getFirstCategory (type);
+ inner::populate (store, NULL, first_category, this);
+ if (m_alternative) {
+ GdkPixbuf *pixbuf = inner::loadThemeIcon (GTK_STOCK_ABOUT);
+ gtk_tree_store_append (store, &iter, NULL);
+ gtk_tree_store_set (store, &iter, 0, _("Recommended"), 1, GINT_TO_POINTER (1),
+ 2, pixbuf, -1);
+ gtk_tree_store_append (store, &iter, NULL);
+ gtk_tree_store_set (store, &iter, 0, _("Suggested"), 1, GINT_TO_POINTER (2),
+ 2, pixbuf, -1);
+ g_object_unref (G_OBJECT (pixbuf));
+ gtk_tree_view_set_show_expanders (view, FALSE);
+ }
gtk_tree_view_set_model (view, model);
g_object_unref (G_OBJECT (model));
@@ -1108,8 +1087,12 @@
else
node = (Ypp::Node *) ptr;
}
- if (node)
- query->addCategory (node);
+ if (node) {
+ if (m_alternative)
+ query->addCategory2 (node);
+ else
+ query->addCategory (node);
+ }
}
};
@@ -1206,7 +1189,7 @@
GtkWidget *getWidget()
{ return m_bin; }
- void setType (Ypp::Package::Type type)
+ void setType (Ypp::Package::Type type, bool alternative = false)
{
if (m_view)
gtk_container_remove (GTK_CONTAINER (m_bin), m_view->getWidget());
@@ -1216,7 +1199,7 @@
{
case Ypp::Package::PACKAGE_TYPE:
case Ypp::Package::PATCH_TYPE:
- m_view = new Categories (m_listener, type);
+ m_view = new Categories (m_listener, type, alternative);
break;
case Ypp::Package::PATTERN_TYPE:
//case Ypp::Package::LANGUAGE_TYPE:
@@ -1319,9 +1302,11 @@
GtkWidget *m_name, *m_repos, *m_type;
Listener *m_listener;
guint timeout_id;
- int m_selectedType;
bool m_updateMode, m_enableRepoMgr;
+ enum PaneType { GROUPS_TYPE, CATEGORIES_TYPE, PATTERNS_TYPE };
+ int m_selectedType;
+
public:
GtkWidget *getCollectionWidget() { return m_collection->getWidget(); }
GtkWidget *getStatusesWidget() { return m_statuses->getWidget(); }
@@ -1330,8 +1315,8 @@
GtkWidget *getTypeWidget() { return m_type; }
Filters (bool updateMode, bool enableRepoMgr)
- : m_listener (NULL), timeout_id (0), m_selectedType (-1),
- m_updateMode (updateMode), m_enableRepoMgr (enableRepoMgr)
+ : m_listener (NULL), timeout_id (0), m_updateMode (updateMode),
+ m_enableRepoMgr (enableRepoMgr), m_selectedType (-1)
{
m_collection = new Collections (this);
m_statuses = new StatusButtons (this, updateMode);
@@ -1384,6 +1369,7 @@
if (updateMode)
gtk_combo_box_append_text (GTK_COMBO_BOX (m_type), _("Patches"));
else {
+ gtk_combo_box_append_text (GTK_COMBO_BOX (m_type), _("Groups"));
gtk_combo_box_append_text (GTK_COMBO_BOX (m_type), _("Categories"));
gtk_combo_box_append_text (GTK_COMBO_BOX (m_type), _("Patterns"));
#if 0
@@ -1435,16 +1421,24 @@
{
if (!m_listener) return;
+ PaneType t = (PaneType) gtk_combo_box_get_active (GTK_COMBO_BOX (m_type));
+ bool alternative = false;
Ypp::Package::Type type;
if (m_updateMode)
type = Ypp::Package::PATCH_TYPE;
- else
- type = (Ypp::Package::Type) gtk_combo_box_get_active (GTK_COMBO_BOX (m_type));
+ else {
+ if (t == PATTERNS_TYPE)
+ type = Ypp::Package::PATTERN_TYPE;
+ else {
+ type = Ypp::Package::PACKAGE_TYPE;
+ alternative = t == GROUPS_TYPE;
+ }
+ }
// adjust interface
- if (type != m_selectedType) {
- m_collection->setType (type);
- m_selectedType = type;
+ if (t != m_selectedType) {
+ m_collection->setType (type, alternative);
+ m_selectedType = t;
}
// create query
Added: trunk/gtk/src/yzypptags.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/yzypptags.cc?rev=47930&view=auto
==============================================================================
--- trunk/gtk/src/yzypptags.cc (added)
+++ trunk/gtk/src/yzypptags.cc Wed May 28 20:38:59 2008
@@ -0,0 +1,290 @@
+/********************************************************************
+ * YaST2-GTK - http://en.opensuse.org/YaST2-GTK *
+ ********************************************************************/
+
+/*
+ Textdomain "yast2-gtk"
+ */
+
+/* Tags PackageKit translator */
+// check the header file for information about this translator
+
+#include
+#include "YGi18n.h"
+#define YUILogComponent "gtk-pkg"
+#include
+#include
+#include "yzypptags.h"
+
+/**
+ * translations taken from packagekit
+ **/
+const char *
+zypp_tag_group_enum_to_localised_text (YPkgGroupEnum group)
+{
+ const char *text = 0;
+ switch (group)
+ {
+ case PK_GROUP_ENUM_ACCESSIBILITY:
+ text = _("Accessibility");
+ break;
+ case PK_GROUP_ENUM_ACCESSORIES:
+ text = _("Accessories");
+ break;
+ case PK_GROUP_ENUM_EDUCATION:
+ text = _("Education");
+ break;
+ case PK_GROUP_ENUM_GAMES:
+ text = _("Games");
+ break;
+ case PK_GROUP_ENUM_GRAPHICS:
+ text = _("Graphics");
+ break;
+ case PK_GROUP_ENUM_INTERNET:
+ text = _("Internet");
+ break;
+ case PK_GROUP_ENUM_OFFICE:
+ text = _("Office");
+ break;
+ case PK_GROUP_ENUM_OTHER:
+ text = _("Other");
+ break;
+ case PK_GROUP_ENUM_PROGRAMMING:
+ text = _("Programming");
+ break;
+ case PK_GROUP_ENUM_MULTIMEDIA:
+ text = _("Multimedia");
+ break;
+ case PK_GROUP_ENUM_SYSTEM:
+ text = _("System");
+ break;
+ case PK_GROUP_ENUM_DESKTOP_GNOME:
+ text = _("GNOME desktop");
+ break;
+ case PK_GROUP_ENUM_DESKTOP_KDE:
+ text = _("KDE desktop");
+ break;
+ case PK_GROUP_ENUM_DESKTOP_XFCE:
+ text = _("XFCE desktop");
+ break;
+ case PK_GROUP_ENUM_DESKTOP_OTHER:
+ text = _("Other desktops");
+ break;
+ case PK_GROUP_ENUM_PUBLISHING:
+ text = _("Publishing");
+ break;
+ case PK_GROUP_ENUM_SERVERS:
+ text = _("Servers");
+ break;
+ case PK_GROUP_ENUM_FONTS:
+ text = _("Fonts");
+ break;
+ case PK_GROUP_ENUM_ADMIN_TOOLS:
+ text = _("Admin tools");
+ break;
+ case PK_GROUP_ENUM_LEGACY:
+ text = _("Legacy");
+ break;
+ case PK_GROUP_ENUM_LOCALIZATION:
+ text = _("Localization");
+ break;
+ case PK_GROUP_ENUM_VIRTUALIZATION:
+ text = _("Virtualization");
+ break;
+ case PK_GROUP_ENUM_SECURITY:
+ text = _("Security");
+ break;
+ case PK_GROUP_ENUM_POWER_MANAGEMENT:
+ text = _("Power management");
+ break;
+ case PK_GROUP_ENUM_COMMUNICATION:
+ text = _("Communication");
+ break;
+ case PK_GROUP_ENUM_NETWORK:
+ text = _("Network");
+ break;
+ case PK_GROUP_ENUM_MAPS:
+ text = _("Maps");
+ break;
+ case PK_GROUP_ENUM_REPOS:
+ text = _("Software sources");
+ break;
+ case YPKG_GROUP_ALL:
+ text = _("All packages");
+ break;
+
+ case YPKG_GROUP_SUGGESTED:
+ text = _("Suggested packages");
+ break;
+
+ case YPKG_GROUP_RECOMMENDED:
+ text = _("Recommended packages");
+ break;
+
+ case PK_GROUP_ENUM_UNKNOWN:
+ text = _("Unknown group");
+ break;
+
+ }
+ return text;
+}
+
+const char *
+zypp_tag_enum_to_icon (YPkgGroupEnum group)
+{
+ const char *text;
+ switch (group)
+ {
+ case PK_GROUP_ENUM_ACCESSIBILITY:
+ text = "package_main";
+ break;
+ case PK_GROUP_ENUM_ACCESSORIES:
+ text = "package_applications";
+ break;
+ case PK_GROUP_ENUM_EDUCATION:
+ text = "package_edutainment";
+ break;
+ case PK_GROUP_ENUM_GAMES:
+ text = "package_games";
+ break;
+ case PK_GROUP_ENUM_GRAPHICS:
+ text = "package_graphics";
+ break;
+ case PK_GROUP_ENUM_INTERNET:
+ text = "package_network";
+ break;
+ case PK_GROUP_ENUM_OFFICE:
+ text = "package_office_addressbook";
+ break;
+ case PK_GROUP_ENUM_OTHER:
+ text = "package_main";
+ break;
+ case PK_GROUP_ENUM_PROGRAMMING:
+ text = "package_development";
+ break;
+ case PK_GROUP_ENUM_MULTIMEDIA:
+ text = "package_multimedia";
+ break;
+ case PK_GROUP_ENUM_SYSTEM:
+ text = "yast-system";
+ break;
+ case PK_GROUP_ENUM_DESKTOP_GNOME:
+ text = "pattern-gnome";
+ break;
+ case PK_GROUP_ENUM_DESKTOP_KDE:
+ text = "pattern-kde";
+ break;
+ case PK_GROUP_ENUM_DESKTOP_XFCE:
+ text = "package_utility_desktop";
+ break;
+ case PK_GROUP_ENUM_DESKTOP_OTHER:
+ text = "package_utility_desktop";
+ break;
+ case PK_GROUP_ENUM_PUBLISHING:
+ text = "package_main";
+ break;
+ case PK_GROUP_ENUM_SERVERS:
+ text = "package_editors";
+ break;
+ case PK_GROUP_ENUM_FONTS:
+ text = "package_main";
+ break;
+ case PK_GROUP_ENUM_ADMIN_TOOLS:
+ text = "yast-sysconfig";
+ break;
+ case PK_GROUP_ENUM_LEGACY:
+ text = "package_main";
+ break;
+ case PK_GROUP_ENUM_LOCALIZATION:
+ text = "yast-language";
+ break;
+ case PK_GROUP_ENUM_VIRTUALIZATION:
+ text = "yast-create-new-vm";
+ break;
+ case PK_GROUP_ENUM_SECURITY:
+ text = "yast-security";
+ break;
+ case PK_GROUP_ENUM_POWER_MANAGEMENT:
+ text = "package_settings_power";
+ break;
+ case PK_GROUP_ENUM_COMMUNICATION:
+ text = "yast-modem";
+ break;
+ case PK_GROUP_ENUM_NETWORK:
+ text = "package_network";
+ break;
+ case PK_GROUP_ENUM_MAPS:
+ text = "package_main";
+ break;
+ case PK_GROUP_ENUM_REPOS:
+ text = "package_main";
+ break;
+ case YPKG_GROUP_SUGGESTED:
+ case YPKG_GROUP_RECOMMENDED:
+ text = "package_edutainment_languages";
+
+ break;
+ case PK_GROUP_ENUM_UNKNOWN:
+ case YPKG_GROUP_ALL:
+ text = "package_main";
+ break;
+
+ }
+ return text;
+}
+
+
+YPkgGroupEnum
+zypp_tag_convert (const std::string &groupu)
+{
+ // TODO Look for a faster and nice way to do this conversion
+
+ std::string group = zypp::str::toLower(groupu);
+
+ if (group.find ("amusements") != std::string::npos) {
+ return PK_GROUP_ENUM_GAMES;
+ } else if (group.find ("development") != std::string::npos) {
+ return PK_GROUP_ENUM_PROGRAMMING;
+ } else if (group.find ("hardware") != std::string::npos) {
+ return PK_GROUP_ENUM_SYSTEM;
+ } else if (group.find ("archiving") != std::string::npos
+ || group.find("clustering") != std::string::npos
+ || group.find("system/monitoring") != std::string::npos
+ || group.find("databases") != std::string::npos
+ || group.find("system/management") != std::string::npos) {
+ return PK_GROUP_ENUM_ADMIN_TOOLS;
+ } else if (group.find ("graphics") != std::string::npos) {
+ return PK_GROUP_ENUM_GRAPHICS;
+ } else if (group.find ("multimedia") != std::string::npos) {
+ return PK_GROUP_ENUM_MULTIMEDIA;
+ } else if (group.find ("network") != std::string::npos) {
+ return PK_GROUP_ENUM_NETWORK;
+ } else if (group.find ("office") != std::string::npos
+ || group.find("text") != std::string::npos
+ || group.find("editors") != std::string::npos) {
+ return PK_GROUP_ENUM_OFFICE;
+ } else if (group.find ("publishing") != std::string::npos) {
+ return PK_GROUP_ENUM_PUBLISHING;
+ } else if (group.find ("security") != std::string::npos) {
+ return PK_GROUP_ENUM_SECURITY;
+ } else if (group.find ("telephony") != std::string::npos) {
+ return PK_GROUP_ENUM_COMMUNICATION;
+ } else if (group.find ("gnome") != std::string::npos) {
+ return PK_GROUP_ENUM_DESKTOP_GNOME;
+ } else if (group.find ("kde") != std::string::npos) {
+ return PK_GROUP_ENUM_DESKTOP_KDE;
+ } else if (group.find ("xfce") != std::string::npos) {
+ return PK_GROUP_ENUM_DESKTOP_XFCE;
+ } else if (group.find ("gui/other") != std::string::npos) {
+ return PK_GROUP_ENUM_DESKTOP_OTHER;
+ } else if (group.find ("localization") != std::string::npos) {
+ return PK_GROUP_ENUM_LOCALIZATION;
+ } else if (group.find ("system") != std::string::npos) {
+ return PK_GROUP_ENUM_SYSTEM;
+ } else if (group.find ("scientific") != std::string::npos) {
+ return PK_GROUP_ENUM_EDUCATION;
+ }
+
+ return PK_GROUP_ENUM_UNKNOWN;
+}
+
Added: trunk/gtk/src/yzypptags.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/yzypptags.h?rev=47930&view=auto
==============================================================================
--- trunk/gtk/src/yzypptags.h (added)
+++ trunk/gtk/src/yzypptags.h Wed May 28 20:38:59 2008
@@ -0,0 +1,51 @@
+/********************************************************************
+ * YaST2-GTK - http://en.opensuse.org/YaST2-GTK *
+ ********************************************************************/
+
+/* Converts RPM to PackageKit-like terminology.
+ Code from yast-qt-pkg.
+*/
+
+typedef enum {
+ /* PackageKit values */
+ PK_GROUP_ENUM_ACCESSIBILITY,
+ PK_GROUP_ENUM_ACCESSORIES,
+ PK_GROUP_ENUM_EDUCATION,
+ PK_GROUP_ENUM_GAMES,
+ PK_GROUP_ENUM_GRAPHICS,
+ PK_GROUP_ENUM_INTERNET,
+ PK_GROUP_ENUM_OFFICE,
+ PK_GROUP_ENUM_OTHER,
+ PK_GROUP_ENUM_PROGRAMMING,
+ PK_GROUP_ENUM_MULTIMEDIA,
+ PK_GROUP_ENUM_SYSTEM,
+ PK_GROUP_ENUM_DESKTOP_GNOME,
+ PK_GROUP_ENUM_DESKTOP_KDE,
+ PK_GROUP_ENUM_DESKTOP_XFCE,
+ PK_GROUP_ENUM_DESKTOP_OTHER,
+ PK_GROUP_ENUM_PUBLISHING,
+ PK_GROUP_ENUM_SERVERS,
+ PK_GROUP_ENUM_FONTS,
+ PK_GROUP_ENUM_ADMIN_TOOLS,
+ PK_GROUP_ENUM_LEGACY,
+ PK_GROUP_ENUM_LOCALIZATION,
+ PK_GROUP_ENUM_VIRTUALIZATION,
+ PK_GROUP_ENUM_SECURITY,
+ PK_GROUP_ENUM_POWER_MANAGEMENT,
+ PK_GROUP_ENUM_COMMUNICATION,
+ PK_GROUP_ENUM_NETWORK,
+ PK_GROUP_ENUM_MAPS,
+ PK_GROUP_ENUM_REPOS,
+ PK_GROUP_ENUM_UNKNOWN,
+ /* Other values */
+ YPKG_GROUP_SUGGESTED,
+ YPKG_GROUP_RECOMMENDED,
+ YPKG_GROUP_ALL,
+} YPkgGroupEnum;
+
+
+YPkgGroupEnum zypp_tag_convert (const std::string &rpm_group);
+
+const char *zypp_tag_group_enum_to_localised_text (YPkgGroupEnum group);
+const char *zypp_tag_enum_to_icon (YPkgGroupEnum group);
+
Modified: trunk/gtk/src/yzyppwrapper.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/yzyppwrapper.cc?rev=47930&r1=47929&r2=47930&view=diff
==============================================================================
--- trunk/gtk/src/yzyppwrapper.cc (original)
+++ trunk/gtk/src/yzyppwrapper.cc Wed May 28 20:38:59 2008
@@ -12,6 +12,7 @@
#include
#include "YGi18n.h"
#include "yzyppwrapper.h"
+#include "yzypptags.h"
#include
#include <string>
#include <sstream>
@@ -83,7 +84,7 @@
return (Ypp::Node *) root->children->data;
}
- Ypp::Node *add (const std::string &tree_str)
+ Ypp::Node *add (const std::string &tree_str, const char *icon)
{
const std::list std::string nodes_str = YGUtils::splitString (tree_str, delim);
GNode *parent = root, *sibling = 0;
@@ -112,6 +113,7 @@
Ypp::Node *yNode = new Ypp::Node();
GNode *n = g_node_new ((void *) yNode);
yNode->name = *it;
+ yNode->icon = icon;
yNode->impl = (void *) n;
g_node_insert_before (parent, sibling, n);
parent = n;
@@ -161,13 +163,14 @@
bool resolveProblems();
Node *addCategory (Ypp::Package::Type type, const std::string &str);
void polishCategories (Ypp::Package::Type type);
+ Node *addCategory2 (Ypp::Package::Type type, const std::string &str);
void startTransactions();
void finishTransactions();
friend class Ypp;
GSList *packages [Package::TOTAL_TYPES]; // primitive pools
- StringTree *categories [Package::TOTAL_TYPES];
+ StringTree *categories [Package::TOTAL_TYPES], *categories2;
GSList *repos;
const Repository *favoriteRepo;
int favoriteRepoPriority;
@@ -182,8 +185,8 @@
struct Ypp::Package::Impl
{
- Impl (Type type, ZyppSelectable sel, Node *category)
- : type (type), zyppSel (sel), category (category),
+ Impl (Type type, ZyppSelectable sel, Node *category, Node *category2)
+ : type (type), zyppSel (sel), category (category), category2 (category2),
availableVersions (NULL), installedVersion (NULL)
{
// don't use getAvailableVersion(0) for hasUpgrade() has its inneficient.
@@ -228,7 +231,7 @@
std::string name, summary;
Type type;
ZyppSelectable zyppSel;
- Ypp::Node *category;
+ Ypp::Node *category, *category2;
GSList *availableVersions;
Version *installedVersion;
bool hasUpgrade;
@@ -358,7 +361,7 @@
const std::list std::string &filesList = package->filenames();
for (std::list std::string::const_iterator it = filesList.begin();
it != filesList.end(); it++)
- tree.add (*it);
+ tree.add (*it, 0);
struct inner {
static std::string getPath (GNode *node)
@@ -513,9 +516,10 @@
}
Ypp::Node *Ypp::Package::category()
-{
- return impl->category;
-}
+{ return impl->category; }
+
+Ypp::Node *Ypp::Package::category2()
+{ return impl->category2; }
bool Ypp::Package::fromCollection (const Ypp::Package *collection) const
{
@@ -870,7 +874,7 @@
Keys Ypp::Package::Type types;
Keys std::string names;
- Keys categories;
+ Keys categories, categories2;
Keys collections;
Keys repositories;
Key <bool> isInstalled;
@@ -934,6 +938,17 @@
}
match = it != values.end();
}
+ if (match && categories2.defined) {
+ Ypp::Node *pkg_category = package->category2();
+ const std::list &values = categories2.values;
+ std::list ::const_iterator it;
+ for (it = values.begin(); it != values.end(); it++) {
+ GNode *node = (GNode *) (*it)->impl;
+ if (g_node_find (node, G_PRE_ORDER, G_TRAVERSE_ALL, pkg_category))
+ break;
+ }
+ match = it != values.end();
+ }
if (match && repositories.defined) {
const std::list &values = repositories.values;
std::list ::const_iterator it;
@@ -989,6 +1004,8 @@
}
void Ypp::QueryPool::Query::addCategory (Ypp::Node *value)
{ impl->categories.add (value); }
+void Ypp::QueryPool::Query::addCategory2 (Ypp::Node *value)
+{ impl->categories2.add (value); }
void Ypp::QueryPool::Query::addCollection (const Ypp::Package *value)
{ impl->collections.add (value); }
void Ypp::QueryPool::Query::addRepository (const Repository *value)
@@ -1345,6 +1362,13 @@
return impl->categories[type]->getFirst();
}
+Ypp::Node *Ypp::getFirstCategory2 (Ypp::Package::Type type)
+{
+ if (!impl->getPackages (type))
+ return NULL;
+ return impl->categories2->getFirst();
+}
+
Ypp::Node *Ypp::Node::next()
{
GNode *ret = ((GNode *) impl)->next;
@@ -1375,9 +1399,59 @@
if (!categories[type])
categories[type] = new StringTree (inner::cmp, '/');
- return categories[type]->add (category_str);
+ return categories[type]->add (category_str, 0);
}
+Ypp::Node *Ypp::Impl::addCategory2 (Ypp::Package::Type type, const std::string &category_str)
+{
+ struct inner {
+ static int cmp (const char *a, const char *b)
+ {
+ int r = strcmp (a, b);
+ if (r != 0) {
+ const char *unknown = zypp_tag_group_enum_to_localised_text
+ (PK_GROUP_ENUM_UNKNOWN);
+ if (!strcmp (a, unknown))
+ return 1;
+ if (!strcmp (b, unknown))
+ return -1;
+ }
+ return r;
+ }
+ };
+
+ YPkgGroupEnum group = zypp_tag_convert (category_str);
+ const char *group_name = zypp_tag_group_enum_to_localised_text (group);
+ const char *group_icon = zypp_tag_enum_to_icon (group);
+
+ if (!categories2)
+ categories2 = new StringTree (inner::cmp, '/');
+ return categories2->add (group_name, group_icon);
+}
+
+// Maps icons to top package groups
+struct CategoriesIconMap {
+ const char *category, *icon;
+};
+static const CategoriesIconMap catIconMap[] = {
+ { "Amusements", "package_games" },
+ { "Games", "package_games" },
+ { "Applications", "package_system" },
+ { "Development", "applications-development" },
+ { "Libraries", "package_development" },
+ { "Documentation", "package_documentation" },
+ { "Hardware", "package_settings_peripherals" },
+ { "Productivity", "package_applications" },
+ { "System", "package_settings" },
+ { "Multimedia", "package_multimedia" },
+ { "Video", "package_multimedia" },
+ { "Office", "applications-office" },
+ { "Publishing", "applications-office" },
+ { "X11", "applications-other" },
+ { "Metapackages", "package_network" },
+};
+#define CAT_SIZE (sizeof (catIconMap)/sizeof (CategoriesIconMap))
+
void Ypp::Impl::polishCategories (Ypp::Package::Type type)
{
// some treatment on categories
@@ -1397,12 +1471,22 @@
Ypp::Node *yN = new Ypp::Node();
GNode *n = g_node_new ((void *) yN);
yN->name = "Other";
+ yN->icon = NULL;
yN->impl = (void *) n;
g_node_insert_before (node, NULL, n);
pkg->impl->category = yN;
}
}
}
+
+ Node *first = categories [Package::PACKAGE_TYPE]->getFirst();
+ for (Node *n = first; n; n = n->next()) {
+ for (unsigned int i = 0; i < CAT_SIZE; i++)
+ if (n->name == catIconMap[i].category) {
+ n->icon = catIconMap[i].icon;
+ break;
+ }
+ }
}
}
@@ -1415,6 +1499,7 @@
for (int i = 0; i < Package::TOTAL_TYPES; i++) {
packages[i] = NULL;
categories[i] = NULL;
+ categories2 = NULL;
}
}
@@ -1432,6 +1517,7 @@
g_slist_free (packages[t]);
delete categories[t];
}
+ delete categories2;
g_slist_foreach (repos, inner::free_repo, NULL);
g_slist_free (repos);
@@ -1665,7 +1751,7 @@
break;
}
for (; it != end; it++) {
- Ypp::Node *category = 0;
+ Ypp::Node *category = 0, *category2 = 0;
ZyppObject object = (*it)->theObj();
// add category and test visibility
switch (type) {
@@ -1675,6 +1761,7 @@
if (!zpackage)
continue;
category = addCategory (type, zpackage->group());
+ category2 = addCategory2 (type, zpackage->group());
break;
}
case Package::PATTERN_TYPE:
@@ -1700,7 +1787,7 @@
break;
}
- Package *package = new Package (new Package::Impl (type, *it, category));
+ Package *package = new Package (new Package::Impl (type, *it, category, category2));
pool = g_slist_prepend (pool, package);
}
// its faster to prepend then reverse, as we avoid iterating for each append
Modified: trunk/gtk/src/yzyppwrapper.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/yzyppwrapper.h?rev=47930&r1=47929&r2=47930&view=diff
==============================================================================
--- trunk/gtk/src/yzyppwrapper.h (original)
+++ trunk/gtk/src/yzyppwrapper.h Wed May 28 20:38:59 2008
@@ -32,6 +32,7 @@
// Utilities
struct Node {
std::string name;
+ const char *icon;
Node *next();
Node *child();
void *impl;
@@ -47,6 +48,7 @@
const std::string &name() const;
const std::string &summary();
Node *category();
+ Node *category2();
bool fromCollection (const Ypp::Package *collection) const;
std::string description();
@@ -134,6 +136,7 @@
void addType (Package::Type type);
void addNames (std::string name, char separator = 0);
void addCategory (Ypp::Node *category);
+ void addCategory2 (Ypp::Node *category);
void addCollection (const Ypp::Package *package);
void addRepository (const Ypp::Repository *repositories);
void setIsInstalled (bool installed);
@@ -228,6 +231,7 @@
Package *findPackage (Package::Type type, const std::string &name);
Node *getFirstCategory (Package::Type type);
+ Node *getFirstCategory2 (Package::Type type);
struct Disk
{
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org