44 #define YUILogComponent "qt-pkg"
47 #include <QApplication>
49 #include "YQPackageSelector.h"
50 #include "zypp/sat/LookupAttr.h"
52 #include "YQPkgPackageKitGroupsFilterView.h"
58 translatedText( YPkgGroupEnum group )
62 case PK_GROUP_ENUM_ACCESSIBILITY:
return _(
"Accessibility" );
63 case PK_GROUP_ENUM_ACCESSORIES:
return _(
"Accessories" );
64 case PK_GROUP_ENUM_EDUCATION:
return _(
"Education" );
65 case PK_GROUP_ENUM_GAMES:
return _(
"Games" );
66 case PK_GROUP_ENUM_GRAPHICS:
return _(
"Graphics" );
67 case PK_GROUP_ENUM_INTERNET:
return _(
"Internet" );
68 case PK_GROUP_ENUM_OFFICE:
return _(
"Office" );
69 case PK_GROUP_ENUM_OTHER:
return _(
"Other" );
70 case PK_GROUP_ENUM_PROGRAMMING:
return _(
"Programming" );
71 case PK_GROUP_ENUM_MULTIMEDIA:
return _(
"Multimedia" );
72 case PK_GROUP_ENUM_SYSTEM:
return _(
"System" );
73 case PK_GROUP_ENUM_DESKTOP_GNOME:
return _(
"GNOME Desktop" );
74 case PK_GROUP_ENUM_DESKTOP_KDE:
return _(
"KDE Desktop" );
75 case PK_GROUP_ENUM_DESKTOP_XFCE:
return _(
"XFCE Desktop" );
76 case PK_GROUP_ENUM_DESKTOP_OTHER:
return _(
"Other Desktops" );
77 case PK_GROUP_ENUM_PUBLISHING:
return _(
"Publishing" );
78 case PK_GROUP_ENUM_SERVERS:
return _(
"Servers" );
79 case PK_GROUP_ENUM_FONTS:
return _(
"Fonts" );
80 case PK_GROUP_ENUM_ADMIN_TOOLS:
return _(
"Admin Tools" );
81 case PK_GROUP_ENUM_LEGACY:
return _(
"Legacy" );
82 case PK_GROUP_ENUM_LOCALIZATION:
return _(
"Localization" );
83 case PK_GROUP_ENUM_VIRTUALIZATION:
return _(
"Virtualization" );
84 case PK_GROUP_ENUM_SECURITY:
return _(
"Security" );
85 case PK_GROUP_ENUM_POWER_MANAGEMENT:
return _(
"Power Management" );
86 case PK_GROUP_ENUM_COMMUNICATION:
return _(
"Communication" );
87 case PK_GROUP_ENUM_NETWORK:
return _(
"Network" );
88 case PK_GROUP_ENUM_MAPS:
return _(
"Maps" );
89 case PK_GROUP_ENUM_REPOS:
return _(
"Software Sources" );
90 case PK_GROUP_ENUM_UNKNOWN:
return _(
"Unknown Group" );
92 case YPKG_GROUP_ALL:
return _(
"All Packages" );
93 case YPKG_GROUP_SUGGESTED:
return _(
"Suggested Packages" );
94 case YPKG_GROUP_RECOMMENDED:
return _(
"Recommended Packages");
95 case YPKG_GROUP_ORPHANED:
return _(
"Orphaned Packages" );
96 case YPKG_GROUP_UNNEEDED:
return _(
"Unneeded Packages" );
97 case YPKG_GROUP_MULTIVERSION:
return _(
"Multiversion Packages" );
102 return _(
"Unknown Group");
107 groupIcon( YPkgGroupEnum group )
111 case PK_GROUP_ENUM_ACCESSIBILITY:
return(
"package_main" );
112 case PK_GROUP_ENUM_ACCESSORIES:
return(
"package_applications" );
113 case PK_GROUP_ENUM_EDUCATION:
return(
"package_edutainment" );
114 case PK_GROUP_ENUM_GAMES:
return(
"package_games" );
115 case PK_GROUP_ENUM_GRAPHICS:
return(
"package_graphics" );
116 case PK_GROUP_ENUM_INTERNET:
return(
"package_network" );
117 case PK_GROUP_ENUM_OFFICE:
return(
"package_office_addressbook" );
118 case PK_GROUP_ENUM_OTHER:
return(
"package_main" );
119 case PK_GROUP_ENUM_PROGRAMMING:
return(
"package_development" );
120 case PK_GROUP_ENUM_MULTIMEDIA:
return(
"package_multimedia" );
121 case PK_GROUP_ENUM_SYSTEM:
return(
"yast-system" );
122 case PK_GROUP_ENUM_DESKTOP_GNOME:
return(
"pattern-gnome" );
123 case PK_GROUP_ENUM_DESKTOP_KDE:
return(
"pattern-kde" );
124 case PK_GROUP_ENUM_DESKTOP_XFCE:
return(
"package_utility_desktop" );
125 case PK_GROUP_ENUM_DESKTOP_OTHER:
return(
"package_utility_desktop" );
126 case PK_GROUP_ENUM_PUBLISHING:
return(
"package_main" );
127 case PK_GROUP_ENUM_SERVERS:
return(
"package_editors" );
128 case PK_GROUP_ENUM_FONTS:
return(
"package_main" );
129 case PK_GROUP_ENUM_ADMIN_TOOLS:
return(
"yast-sysconfig" );
130 case PK_GROUP_ENUM_LEGACY:
return(
"package_main" );
131 case PK_GROUP_ENUM_LOCALIZATION:
return(
"yast-language" );
132 case PK_GROUP_ENUM_VIRTUALIZATION:
return(
"yast-create-new-vm" );
133 case PK_GROUP_ENUM_SECURITY:
return(
"yast-security" );
134 case PK_GROUP_ENUM_POWER_MANAGEMENT:
return(
"package_settings_power" );
135 case PK_GROUP_ENUM_COMMUNICATION:
return(
"yast-modem" );
136 case PK_GROUP_ENUM_NETWORK:
return(
"package_network" );
137 case PK_GROUP_ENUM_MAPS:
return(
"package_main" );
138 case PK_GROUP_ENUM_REPOS:
return(
"package_main" );
139 case PK_GROUP_ENUM_UNKNOWN:
return(
"package_main" );
141 case YPKG_GROUP_SUGGESTED:
return(
"package_edutainment_languages" );
142 case YPKG_GROUP_RECOMMENDED:
return(
"package_edutainment_languages" );
143 case YPKG_GROUP_ORPHANED:
return(
"package_edutainment_languages" );
144 case YPKG_GROUP_UNNEEDED:
return(
"package_edutainment_languages" );
145 case YPKG_GROUP_MULTIVERSION:
return(
"package_edutainment_languages" );
146 case YPKG_GROUP_ALL:
return(
"package_main" );
156 rpmGroupToPackageKitGroup(
const string & rpmGroup )
158 string group = zypp::str::toLower( rpmGroup );
160 if ( group.find(
"amusements/teaching" ) != string::npos )
return PK_GROUP_ENUM_EDUCATION;
161 if ( group.find(
"amusements" ) != string::npos )
return PK_GROUP_ENUM_GAMES;
162 if ( group.find(
"development" ) != string::npos )
return PK_GROUP_ENUM_PROGRAMMING;
163 if ( group.find(
"hardware" ) != string::npos )
return PK_GROUP_ENUM_SYSTEM;
164 if ( group.find(
"archiving" ) != string::npos )
return PK_GROUP_ENUM_ADMIN_TOOLS;
165 if ( group.find(
"clustering" ) != string::npos )
return PK_GROUP_ENUM_ADMIN_TOOLS;
166 if ( group.find(
"system/monitoring" ) != string::npos )
return PK_GROUP_ENUM_ADMIN_TOOLS;
167 if ( group.find(
"databases" ) != string::npos )
return PK_GROUP_ENUM_ADMIN_TOOLS;
168 if ( group.find(
"system/management" ) != string::npos )
return PK_GROUP_ENUM_ADMIN_TOOLS;
169 if ( group.find(
"graphics" ) != string::npos )
return PK_GROUP_ENUM_GRAPHICS;
170 if ( group.find(
"multimedia" ) != string::npos )
return PK_GROUP_ENUM_MULTIMEDIA;
171 if ( group.find(
"network" ) != string::npos )
return PK_GROUP_ENUM_NETWORK;
172 if ( group.find(
"office" ) != string::npos )
return PK_GROUP_ENUM_OFFICE;
173 if ( group.find(
"text" ) != string::npos )
return PK_GROUP_ENUM_OFFICE;
174 if ( group.find(
"editors" ) != string::npos )
return PK_GROUP_ENUM_OFFICE;
175 if ( group.find(
"publishing" ) != string::npos )
return PK_GROUP_ENUM_PUBLISHING;
176 if ( group.find(
"security" ) != string::npos )
return PK_GROUP_ENUM_SECURITY;
177 if ( group.find(
"telephony" ) != string::npos )
return PK_GROUP_ENUM_COMMUNICATION;
178 if ( group.find(
"gnome" ) != string::npos )
return PK_GROUP_ENUM_DESKTOP_GNOME;
179 if ( group.find(
"kde" ) != string::npos )
return PK_GROUP_ENUM_DESKTOP_KDE;
180 if ( group.find(
"xfce" ) != string::npos )
return PK_GROUP_ENUM_DESKTOP_XFCE;
181 if ( group.find(
"gui/other" ) != string::npos )
return PK_GROUP_ENUM_DESKTOP_OTHER;
182 if ( group.find(
"localization" ) != string::npos )
return PK_GROUP_ENUM_LOCALIZATION;
183 if ( group.find(
"system" ) != string::npos )
return PK_GROUP_ENUM_SYSTEM;
184 if ( group.find(
"scientific" ) != string::npos )
return PK_GROUP_ENUM_EDUCATION;
186 return PK_GROUP_ENUM_UNKNOWN;
193 : QTreeWidget( parent )
194 , _selectedGroup(YPKG_GROUP_ALL)
196 setIconSize(QSize(32,32));
197 setHeaderLabels( QStringList(_(
"Package Groups" )) );
198 setRootIsDecorated(
false );
199 setSortingEnabled(
true );
200 connect(
this, SIGNAL( currentItemChanged ( QTreeWidgetItem *, QTreeWidgetItem * ) ),
201 this, SLOT ( slotSelectionChanged ( QTreeWidgetItem * ) ) );
214 YQPkgPackageKitGroupsFilterView::fillGroups()
216 if ( _groupsMap.empty() )
218 zypp::sat::LookupAttr rpmgroups( zypp::sat::SolvAttr::group );
219 for ( zypp::sat::LookupAttr::iterator it = rpmgroups.begin();
220 it != rpmgroups.end();
224 std::map<std::string, YPkgGroupEnum>::const_iterator itg = _groupsCache.find(it.asString());
225 if ( itg == _groupsCache.end() )
227 group = rpmGroupToPackageKitGroup( it.asString() );
228 _groupsCache[it.asString()] = group;
237 if ( _groupsMap.find(group) == _groupsMap.end() )
244 _groupsMap[ YPKG_GROUP_RECOMMENDED ] =
new YQPkgPackageKitGroup(
this, YPKG_GROUP_RECOMMENDED );
248 if ( ! zypp::sat::Pool::instance().multiversion().empty() )
249 _groupsMap[ YPKG_GROUP_MULTIVERSION] =
new YQPkgPackageKitGroup(
this, YPKG_GROUP_MULTIVERSION );
282 for ( ZyppPoolIterator it = zyppPkgBegin();
286 ZyppSel selectable = *it;
292 if ( selectable->installedObj() )
294 match =
check( selectable, tryCastToZyppPkg( selectable->installedObj() ) );
300 zypp::ui::Selectable::picklist_iterator it = selectable->picklistBegin();
301 while ( it != selectable->picklistEnd() && !match )
303 check( selectable, tryCastToZyppPkg( *it ) );
314 YQPkgPackageKitGroupsFilterView::slotSelectionChanged( QTreeWidgetItem * newSelection )
320 _selectedGroup = sel->group();
323 if ( _selectedGroup == YPKG_GROUP_SUGGESTED ||
324 _selectedGroup == YPKG_GROUP_RECOMMENDED ||
325 _selectedGroup == YPKG_GROUP_ORPHANED ||
326 _selectedGroup == YPKG_GROUP_UNNEEDED )
329 QApplication::setOverrideCursor(Qt::WaitCursor);
330 zypp::getZYpp()->resolver()->resolvePool();
331 QApplication::restoreOverrideCursor();
337 _selectedGroup = YPKG_GROUP_ALL;
351 if (
selection()->group() == YPKG_GROUP_ALL )
357 YPkgGroupEnum pk_group = rpmGroupToPackageKitGroup( pkg->group() );
366 zypp::PoolItem(pkg).status().isRecommended() )
372 zypp::PoolItem(pkg).status().isSuggested() )
378 zypp::PoolItem(pkg).status().isOrphaned() )
384 zypp::PoolItem(pkg).status().isUnneeded() )
391 selectable->multiversionInstall() )
405 QTreeWidgetItem * item = currentItem();
417 YPkgGroupEnum group )
418 : QTreeWidgetItem( parentFilterView )
419 , _filterView( parentFilterView )
424 f.setPixelSize( (
int) ( fm.height() * 1.1 ) );
427 string iconName = groupIcon( group );
428 setText( 0, translatedText( group ) );
433 YQPkgPackageKitGroup::~YQPkgPackageKitGroup()
440 YQPkgPackageKitGroup::operator< (
const QTreeWidgetItem & otherListViewItem )
const
445 if ( otherCategoryItem )
446 return group() > otherCategoryItem->group();
452 #include "YQPkgPackageKitGroupsFilterView.moc"
void filterMatch(ZyppSel selectable, ZyppPkg pkg)
Emitted during filtering for each pkg that matches the filter.
Filter view for PackageKit groups.
bool check(ZyppSel selectable, ZyppPkg pkg)
Check if 'pkg' matches the selected group.
static std::string iconPath(const std::string &name, int size)
returns the full path for an icon of a given size
YQPkgPackageKitGroupsFilterView(QWidget *parent)
Constructor.
void filterStart()
Emitted when the filtering starts.
void filterIfVisible()
Same as filter(), but only if this widget is currently visible.
YPkgGroupEnum selectedGroup() const
Returns the (untranslated!) currently selected group enum.
void filter()
Filter according to the view's rules and current selection.
YQPkgPackageKitGroup * selection() const
Returns the currently selected item or 0 if there is none.
void selectSomething()
Select a list entry (if there is any).
virtual ~YQPkgPackageKitGroupsFilterView()
Destructor.
void filterFinished()
Emitted when filtering is finished.