44 #define YUILogComponent "qt-pkg" 47 #include <QApplication> 49 #include "YQPackageSelector.h" 50 #include "zypp/sat/LookupAttr.h" 52 #include "YQPkgPackageKitGroupsFilterView.h" 59 translatedText( YPkgGroupEnum group )
63 case PK_GROUP_ENUM_ACCESSIBILITY:
return _(
"Accessibility" );
64 case PK_GROUP_ENUM_ACCESSORIES:
return _(
"Accessories" );
65 case PK_GROUP_ENUM_EDUCATION:
return _(
"Education" );
66 case PK_GROUP_ENUM_GAMES:
return _(
"Games" );
67 case PK_GROUP_ENUM_GRAPHICS:
return _(
"Graphics" );
68 case PK_GROUP_ENUM_INTERNET:
return _(
"Internet" );
69 case PK_GROUP_ENUM_OFFICE:
return _(
"Office" );
70 case PK_GROUP_ENUM_OTHER:
return _(
"Other" );
71 case PK_GROUP_ENUM_PROGRAMMING:
return _(
"Programming" );
72 case PK_GROUP_ENUM_MULTIMEDIA:
return _(
"Multimedia" );
73 case PK_GROUP_ENUM_SYSTEM:
return _(
"System" );
74 case PK_GROUP_ENUM_DESKTOP_GNOME:
return _(
"GNOME Desktop" );
75 case PK_GROUP_ENUM_DESKTOP_KDE:
return _(
"KDE Desktop" );
76 case PK_GROUP_ENUM_DESKTOP_XFCE:
return _(
"XFCE Desktop" );
77 case PK_GROUP_ENUM_DESKTOP_OTHER:
return _(
"Other Desktops" );
78 case PK_GROUP_ENUM_PUBLISHING:
return _(
"Publishing" );
79 case PK_GROUP_ENUM_SERVERS:
return _(
"Servers" );
80 case PK_GROUP_ENUM_FONTS:
return _(
"Fonts" );
81 case PK_GROUP_ENUM_ADMIN_TOOLS:
return _(
"Admin Tools" );
82 case PK_GROUP_ENUM_LEGACY:
return _(
"Legacy" );
83 case PK_GROUP_ENUM_LOCALIZATION:
return _(
"Localization" );
84 case PK_GROUP_ENUM_VIRTUALIZATION:
return _(
"Virtualization" );
85 case PK_GROUP_ENUM_SECURITY:
return _(
"Security" );
86 case PK_GROUP_ENUM_POWER_MANAGEMENT:
return _(
"Power Management" );
87 case PK_GROUP_ENUM_COMMUNICATION:
return _(
"Communication" );
88 case PK_GROUP_ENUM_NETWORK:
return _(
"Network" );
89 case PK_GROUP_ENUM_MAPS:
return _(
"Maps" );
90 case PK_GROUP_ENUM_REPOS:
return _(
"Software Sources" );
91 case PK_GROUP_ENUM_UNKNOWN:
return _(
"Unknown Group" );
93 case YPKG_GROUP_ALL:
return _(
"All Packages" );
94 case YPKG_GROUP_SUGGESTED:
return _(
"Suggested Packages" );
95 case YPKG_GROUP_RECOMMENDED:
return _(
"Recommended Packages");
96 case YPKG_GROUP_ORPHANED:
return _(
"Orphaned Packages" );
97 case YPKG_GROUP_UNNEEDED:
return _(
"Unneeded Packages" );
98 case YPKG_GROUP_MULTIVERSION:
return _(
"Multiversion Packages" );
103 return _(
"Unknown Group");
108 groupIcon( YPkgGroupEnum group )
112 case PK_GROUP_ENUM_ACCESSIBILITY:
return(
"preferences-other" );
113 case PK_GROUP_ENUM_ACCESSORIES:
return(
"applications-accessories" );
114 case PK_GROUP_ENUM_EDUCATION:
return(
"applications-science" );
115 case PK_GROUP_ENUM_GAMES:
return(
"applications-games" );
116 case PK_GROUP_ENUM_GRAPHICS:
return(
"applications-graphics" );
117 case PK_GROUP_ENUM_INTERNET:
return(
"applications-internet" );
118 case PK_GROUP_ENUM_OFFICE:
return(
"applications-office" );
119 case PK_GROUP_ENUM_OTHER:
return(
"applications-other" );
120 case PK_GROUP_ENUM_PROGRAMMING:
return(
"applications-development" );
121 case PK_GROUP_ENUM_MULTIMEDIA:
return(
"applications-multimedia" );
122 case PK_GROUP_ENUM_SYSTEM:
return(
"applications-system" );
123 case PK_GROUP_ENUM_DESKTOP_GNOME:
return(
"preferences-desktop" );
124 case PK_GROUP_ENUM_DESKTOP_KDE:
return(
"preferences-desktop" );
125 case PK_GROUP_ENUM_DESKTOP_XFCE:
return(
"preferences-desktop" );
126 case PK_GROUP_ENUM_DESKTOP_OTHER:
return(
"preferences-desktop" );
127 case PK_GROUP_ENUM_PUBLISHING:
return(
"applications-office" );
128 case PK_GROUP_ENUM_SERVERS:
return(
"applications-system" );
129 case PK_GROUP_ENUM_FONTS:
return(
"applications-graphics" );
130 case PK_GROUP_ENUM_ADMIN_TOOLS:
return(
"applications-utilities" );
131 case PK_GROUP_ENUM_LEGACY:
return(
"applications-other" );
132 case PK_GROUP_ENUM_LOCALIZATION:
return(
"preferences-desktop-locale" );
133 case PK_GROUP_ENUM_VIRTUALIZATION:
return(
"applications-system" );
134 case PK_GROUP_ENUM_SECURITY:
return(
"preferences-other" );
135 case PK_GROUP_ENUM_POWER_MANAGEMENT:
return(
"utilities-system-monitor" );
136 case PK_GROUP_ENUM_COMMUNICATION:
return(
"applications-internet" );
137 case PK_GROUP_ENUM_NETWORK:
return(
"applications-internet" );
138 case PK_GROUP_ENUM_MAPS:
return(
"preferences-desktop-locale" );
139 case PK_GROUP_ENUM_REPOS:
return(
"preferences-system-network" );
140 case PK_GROUP_ENUM_UNKNOWN:
return(
"preferences-other" );
142 case YPKG_GROUP_SUGGESTED:
return(
"preferences-desktop-locale" );
143 case YPKG_GROUP_RECOMMENDED:
return(
"preferences-desktop-locale" );
144 case YPKG_GROUP_ORPHANED:
return(
"preferences-desktop-locale" );
145 case YPKG_GROUP_UNNEEDED:
return(
"preferences-desktop-locale" );
146 case YPKG_GROUP_MULTIVERSION:
return(
"preferences-desktop-locale" );
147 case YPKG_GROUP_ALL:
return(
"preferences-other" );
157 rpmGroupToPackageKitGroup(
const string & rpmGroup )
159 string group = zypp::str::toLower( rpmGroup );
161 if ( group.find(
"amusements/teaching" ) != string::npos )
return PK_GROUP_ENUM_EDUCATION;
162 if ( group.find(
"amusements" ) != string::npos )
return PK_GROUP_ENUM_GAMES;
163 if ( group.find(
"development" ) != string::npos )
return PK_GROUP_ENUM_PROGRAMMING;
164 if ( group.find(
"hardware" ) != string::npos )
return PK_GROUP_ENUM_SYSTEM;
165 if ( group.find(
"archiving" ) != string::npos )
return PK_GROUP_ENUM_ADMIN_TOOLS;
166 if ( group.find(
"clustering" ) != string::npos )
return PK_GROUP_ENUM_ADMIN_TOOLS;
167 if ( group.find(
"system/monitoring" ) != string::npos )
return PK_GROUP_ENUM_ADMIN_TOOLS;
168 if ( group.find(
"databases" ) != string::npos )
return PK_GROUP_ENUM_ADMIN_TOOLS;
169 if ( group.find(
"system/management" ) != string::npos )
return PK_GROUP_ENUM_ADMIN_TOOLS;
170 if ( group.find(
"graphics" ) != string::npos )
return PK_GROUP_ENUM_GRAPHICS;
171 if ( group.find(
"multimedia" ) != string::npos )
return PK_GROUP_ENUM_MULTIMEDIA;
172 if ( group.find(
"network" ) != string::npos )
return PK_GROUP_ENUM_NETWORK;
173 if ( group.find(
"office" ) != string::npos )
return PK_GROUP_ENUM_OFFICE;
174 if ( group.find(
"text" ) != string::npos )
return PK_GROUP_ENUM_OFFICE;
175 if ( group.find(
"editors" ) != string::npos )
return PK_GROUP_ENUM_OFFICE;
176 if ( group.find(
"publishing" ) != string::npos )
return PK_GROUP_ENUM_PUBLISHING;
177 if ( group.find(
"security" ) != string::npos )
return PK_GROUP_ENUM_SECURITY;
178 if ( group.find(
"telephony" ) != string::npos )
return PK_GROUP_ENUM_COMMUNICATION;
179 if ( group.find(
"gnome" ) != string::npos )
return PK_GROUP_ENUM_DESKTOP_GNOME;
180 if ( group.find(
"kde" ) != string::npos )
return PK_GROUP_ENUM_DESKTOP_KDE;
181 if ( group.find(
"xfce" ) != string::npos )
return PK_GROUP_ENUM_DESKTOP_XFCE;
182 if ( group.find(
"gui/other" ) != string::npos )
return PK_GROUP_ENUM_DESKTOP_OTHER;
183 if ( group.find(
"localization" ) != string::npos )
return PK_GROUP_ENUM_LOCALIZATION;
184 if ( group.find(
"system" ) != string::npos )
return PK_GROUP_ENUM_SYSTEM;
185 if ( group.find(
"scientific" ) != string::npos )
return PK_GROUP_ENUM_EDUCATION;
187 return PK_GROUP_ENUM_UNKNOWN;
194 : QTreeWidget( parent )
195 , _selectedGroup(YPKG_GROUP_ALL)
197 setIconSize(QSize(32,32));
198 setHeaderLabels( QStringList(_(
"Package Groups" )) );
199 setRootIsDecorated(
false );
200 setSortingEnabled(
true );
201 connect(
this, SIGNAL( currentItemChanged ( QTreeWidgetItem *, QTreeWidgetItem * ) ),
202 this, SLOT ( slotSelectionChanged ( QTreeWidgetItem * ) ) );
215 YQPkgPackageKitGroupsFilterView::fillGroups()
217 if ( _groupsMap.empty() )
219 zypp::sat::LookupAttr rpmgroups( zypp::sat::SolvAttr::group );
220 for ( zypp::sat::LookupAttr::iterator it = rpmgroups.begin();
221 it != rpmgroups.end();
225 std::map<std::string, YPkgGroupEnum>::const_iterator itg = _groupsCache.find(it.asString());
226 if ( itg == _groupsCache.end() )
228 group = rpmGroupToPackageKitGroup( it.asString() );
229 _groupsCache[it.asString()] = group;
236 if ( _groupsMap.find(group) == _groupsMap.end() )
243 _groupsMap[ YPKG_GROUP_RECOMMENDED ] =
new YQPkgPackageKitGroup(
this, YPKG_GROUP_RECOMMENDED );
247 if ( ! zypp::sat::Pool::instance().multiversion().empty() )
248 _groupsMap[ YPKG_GROUP_MULTIVERSION] =
new YQPkgPackageKitGroup(
this, YPKG_GROUP_MULTIVERSION );
281 for ( ZyppPoolIterator it = zyppPkgBegin();
285 ZyppSel selectable = *it;
291 if ( selectable->installedObj())
293 match =
check( selectable, tryCastToZyppPkg( selectable->installedObj() ) );
295 if ( selectable->candidateObj() && !match)
297 match =
check( selectable, tryCastToZyppPkg( selectable->candidateObj() ) );
304 zypp::ui::Selectable::picklist_iterator it = selectable->picklistBegin();
305 while ( it != selectable->picklistEnd() && !match )
307 check( selectable, tryCastToZyppPkg( *it ) );
318 YQPkgPackageKitGroupsFilterView::slotSelectionChanged( QTreeWidgetItem * newSelection )
324 _selectedGroup = sel->group();
327 if ( _selectedGroup == YPKG_GROUP_SUGGESTED ||
328 _selectedGroup == YPKG_GROUP_RECOMMENDED ||
329 _selectedGroup == YPKG_GROUP_ORPHANED ||
330 _selectedGroup == YPKG_GROUP_UNNEEDED )
333 QApplication::setOverrideCursor(Qt::WaitCursor);
334 zypp::getZYpp()->resolver()->resolvePool();
335 QApplication::restoreOverrideCursor();
341 _selectedGroup = YPKG_GROUP_ALL;
355 if (
selection()->group() == YPKG_GROUP_ALL )
361 YPkgGroupEnum pk_group = rpmGroupToPackageKitGroup( pkg->group() );
370 zypp::PoolItem(pkg).status().isRecommended() )
376 zypp::PoolItem(pkg).status().isSuggested() )
382 zypp::PoolItem(pkg).status().isOrphaned() )
388 zypp::PoolItem(pkg).status().isUnneeded() )
395 selectable->multiversionInstall() )
409 QTreeWidgetItem * item = currentItem();
421 YPkgGroupEnum group )
422 : QTreeWidgetItem( parentFilterView )
423 , _filterView( parentFilterView )
428 f.setPixelSize( (
int) ( fm.height() * 1.1 ) );
431 string iconName = groupIcon( group );
432 setIcon( 0, YQUI::ui()->loadIcon( iconName ) );
433 setText( 0, translatedText( group ) );
437 YQPkgPackageKitGroup::~YQPkgPackageKitGroup()
444 YQPkgPackageKitGroup::operator< (
const QTreeWidgetItem & otherListViewItem )
const 449 if ( otherCategoryItem )
450 return group() > otherCategoryItem->group();
void filterMatch(ZyppSel selectable, ZyppPkg pkg)
Emitted during filtering for each pkg that matches the filter.
YPkgGroupEnum selectedGroup() const
Returns the (untranslated!) currently selected group enum.
Filter view for PackageKit groups.
bool check(ZyppSel selectable, ZyppPkg pkg)
Check if 'pkg' matches the selected group.
YQPkgPackageKitGroupsFilterView(QWidget *parent)
Constructor.
void filterStart()
Emitted when the filtering starts.
void filterIfVisible()
Same as filter(), but only if this widget is currently visible.
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.