CVS commit by mornfall: Only offer actions that makes sense wrt the current package state in the context menu. Probably should change the PkgCElemView analogously... Also make TreeListWidget show "upgradable" as a separate state. Hmm. The first change suggested by ervin.
M +5 -0 libcapture/pkgcache.cpp 1.27 M +1 -0 libcapture/pkgcache.h 1.22 M +17 -5 libkapture/listtreewidget.cpp 1.33 --- kdenonbeta/kdedebian/kapture/libcapture/pkgcache.cpp #1.26:1.27 @@ -723,4 +723,9 @@ PkgCache::Stats PkgCache::getStats (void } /* }}} */ +bool PkgCache::upgradable (PkgIterator P) +{ + return packageState (P) == PkgKeepI + && GetCandidateVer (P) != P . CurrentVer (); +} // CacheFile::CacheFile - Constructor /*{{{*/ --- kdenonbeta/kdedebian/kapture/libcapture/pkgcache.h #1.21:1.22 @@ -184,4 +184,5 @@ namespace capture { std::vector <PkgIterator> allGlobTargets (DepIterator D); bool currentlyInstalled (PkgIterator p); + bool upgradable (PkgIterator P); PkgState packageState (PkgIterator P); --- kdenonbeta/kdedebian/kapture/libkapture/listtreewidget.cpp #1.32:1.33 @@ -106,5 +106,9 @@ void ListTreeWidgetItem::visit (PkgCElem m_item -> setText (1, "uninstall"); break; case PkgCache::PkgKeepI: - m_item -> setText (1, "installed"); break; + if (PkgManager::cache () -> upgradable (*e)) + m_item -> setText (1, "upgradable"); + else + m_item -> setText (1, "installed"); + break; case PkgCache::PkgKeepU: m_item -> setText (1, "uninstalled"); break; @@ -277,7 +281,15 @@ void ListTreeWidget::contextMenu (QListV return; QPopupMenu *m = new QPopupMenu (this); - if (pkgCElem (**m_itemWithMenu)) { + if (PkgCElemPtr e = pkgCElem (**m_itemWithMenu)) { + PkgCache::PkgState s = PkgManager::cache () -> packageState (*e); + if (s != PkgCache::PkgInstall && s != PkgCache::PkgUpgrade) { + if (PkgManager::cache () -> upgradable (*e)) + m -> insertItem ("Upgrade", this, SLOT (contextInstall ())); + else if (!PkgManager::cache () -> currentlyInstalled (*e)) m -> insertItem ("Install", this, SLOT (contextInstall ())); + } + if (s != PkgCache::PkgUninstall && s != PkgCache::PkgKeepU) m -> insertItem ("Uninstall", this, SLOT (contextUninstall ())); + if (s != PkgCache::PkgKeepU && s != PkgCache::PkgKeepI) m -> insertItem ("Keep", this, SLOT (contextKeep ())); }