[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: