/** * Translate item selections into package[,version] selection signal. * @param item The item that has been selected. */ void PackageListView::emitSelectionChanged( QListViewItem* item ) { QListViewItem* categoryItem; if( item->depth() == 0 ) { // we got a category item categoryItem = item; } else if( item->depth() == 1 ) { // we got a package item categoryItem = item->parent(); } else { // nothing of the previous ones, so it's a version item categoryItem = item->parent()->parent(); } PackageCategory* packageCategory = m_backend->createPackageCategory(); //TODO: We want user visible names, and not this: packageCategory->loadFromUniqueName( categoryItem->text(0) ); PackageCategory* category; // which will be a copy of the above // emit the right signal if( item->depth() == 0 ) // we got a category item { emit selectionChanged( category ); } else if( item->depth() == 1 ) // we got a package item { const QString& packageName = item->text(0); category = m_backend->createPackageCategory(); *category = *packageCategory; Package* package = m_shownPackages->package( category, packageName ); // Retrieve the package's detail info (description and hasUpdates). // The signal is emitted when it's done - mind the connection which // has been set up in the constructor. m_packageLoader->setPackage( package ); m_packageLoader->start(); } else // nothing of the previous ones, so it's a version item { const QString& packageName = item->parent()->text(0); category = m_backend->createPackageCategory(); *category = *packageCategory; Package* package = m_shownPackages->package( category, packageName ); const QString& versionString = item->text(0); if( package->containsVersion(versionString) ) { PackageVersion* version = package->version( versionString ); emit selectionChanged( package, version ); } else { // should not happen, but just to make sure emit selectionChanged( package ); } } }