41 #define YUILogComponent "ncurses-pkg"
44 #include "NCPkgFilterRPMGroups.h"
47 #include "YMenuButton.h"
49 #include "YTreeItem.h"
50 #include "NCLayoutBox.h"
51 #include "NCPkgStrings.h"
52 #include "NCPackageSelector.h"
70 YStringTreeItem * rpmGroupItem;
75 const std::string & label,
76 YStringTreeItem * origItem )
77 : YTreeItem( parent, label ),
78 rpmGroupItem( origItem )
84 YStringTreeItem * origItem )
86 rpmGroupItem( origItem )
91 YStringTreeItem * getOrigItem()
const {
return rpmGroupItem; }
105 NCPkgFilterRPMGroups::NCPkgFilterRPMGroups( YWidget *parent, std::string label,
NCPackageSelector * pkg )
106 : NCTree( parent, label )
114 _rpmGroupsTree =
new YRpmGroupsTree ();
116 ZyppPoolIterator b = zyppPkgBegin ();
117 ZyppPoolIterator e = zyppPkgEnd ();
120 for ( i = b; i != e; ++i )
122 ZyppPkg zyppPkg = tryCastToZyppPkg( (*i)->theObj() );
125 _rpmGroupsTree->addRpmGroup (zyppPkg->group ());
126 yuiDebug() <<
"Adding group: " << zyppPkg->group() << endl;
133 cloneTree( _rpmGroupsTree->root(), 0 );
145 NCPkgFilterRPMGroups::~NCPkgFilterRPMGroups()
157 bool NCPkgFilterRPMGroups::handleEvent( )
160 YStringTreeItem * origItem;
161 const YTreeItem * item = filterTree->getCurrentItem();
170 origItem = rpmGroupItem->getOrigItem();
174 std::string label = origItem->value().translation();
177 showRPMGroupPackages( label, origItem );
179 yuiMilestone() <<
"Selected RPM group: " << label << endl;
185 yuiError() <<
"Current item not valid" << endl;
191 YStringTreeItem * NCPkgFilterRPMGroups::getDefaultRpmGroup()
193 if ( _rpmGroupsTree &&
194 _rpmGroupsTree->root() )
195 return _rpmGroupsTree->root()->firstChild();
201 bool NCPkgFilterRPMGroups::checkPackage( ZyppObj opkg, ZyppSel slb,
202 YStringTreeItem * rpmGroup )
204 ZyppPkg pkg = tryCastToZyppPkg (opkg);
205 if ( ! pkg || ! rpmGroup )
208 NCPkgTable * packageList = packager->PackageList();
212 yuiError() <<
"Widget is not a valid NCPkgTable widget" << endl;
216 std::string group_str = _rpmGroupsTree->rpmGroup (rpmGroup);
217 yuiDebug() << group_str << endl;
219 if ( pkg->group ().find (group_str) == 0 )
221 yuiDebug() << slb->name() << endl;
232 bool NCPkgFilterRPMGroups::showRPMGroupPackages (
const std::string & label, YStringTreeItem *rpmGroup )
234 NCPkgTable * packageList = packager->PackageList();
238 yuiError() <<
"No valid NCPkgTable widget" << endl;
246 std::list<ZyppSel> pkgList( zyppPkgBegin (), zyppPkgEnd () );
247 pkgList.sort( sortByName );
250 std::list<ZyppSel>::iterator listIt;
254 for ( listIt = pkgList.begin(); listIt != pkgList.end(); ++listIt )
256 ZyppSel selectable = *listIt;
267 checkPackage( selectable->candidateObj(), selectable, rpmGroup ) ||
268 checkPackage( selectable->installedObj(), selectable, rpmGroup );
274 ! selectable->installedObj() &&
275 ! selectable->candidateObj() )
276 checkPackage( selectable->theObj(), selectable, rpmGroup );
281 packageList->setCurrentItem( 0 );
285 yuiMilestone() <<
"Filling package list" << endl;
287 if ( ! label.empty() )
289 YLabel *packageLabel = packager->PackageLabel();
293 packageLabel->setText( label );
309 void NCPkgFilterRPMGroups::addItem( YTreeItem * newItem )
313 yuiError() <<
"ERROR: rpm groups tree not available" << endl;
317 filterTree->addItem( newItem );
329 NCursesEvent NCPkgFilterRPMGroups::wHandleInput( wint_t ch )
331 return NCTree::wHandleInput( ch );
341 void NCPkgFilterRPMGroups::cloneTree( YStringTreeItem * parentOrig,
NCRpmGroupItem * parentClone )
343 YStringTreeItem * child = parentOrig->firstChild();
348 yuiDebug() <<
"Rpm group (translated): " << child->value().translation() << endl;
354 clone =
new NCRpmGroupItem( parentClone, child->value().translation(), child );
358 clone =
new NCRpmGroupItem( child->value().translation(), child );
363 cloneTree( child, clone );
364 child = child->next();
bool showInformation()
Show the corresponding information (e.g.
bool createListEntry(ZyppPkg pkgPtr, ZyppSel slbPtr)
Creates a line in the package table.
virtual void itemsCleared()
Clears the package list.
void drawList()
Draws the package list (has to be called after the loop with addLine() calls)