kdenonbeta/kdedebian/kapture
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 ()));
}
Reply to: