- Spritz:
- reworked action menu to allow reinstall, remove, purge, update, install, undo reinstall, undo remove, undo purge, undo update, undo install git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@1100 cd1c1023-2f26-0410-ae45-c471fc1f0318
@@ -19,7 +19,7 @@ clean:
|
||||
|
||||
install:
|
||||
mkdir -p $(DESTDIR)/usr/lib/entropy/spritz
|
||||
mkdir -p $(DESTDIR)/usr/share/pixmaps/spritz
|
||||
mkdir -p $(DESTDIR)/usr/share/pixmaps/spritz/packages
|
||||
mkdir -p $(DESTDIR)/usr/share/applications
|
||||
mkdir -p $(DESTDIR)/usr/bin
|
||||
mkdir -p $(DESTDIR)/etc
|
||||
@@ -27,6 +27,7 @@ install:
|
||||
install -m644 COPYING $(DESTDIR)/usr/lib/entropy/spritz/.
|
||||
install -m755 $(MISCDIR)/spritz $(DESTDIR)/usr/bin/.
|
||||
install -m644 $(PIXDIR)/*.png $(DESTDIR)/usr/share/pixmaps/spritz/.
|
||||
install -m644 $(PIXDIR)/packages/*.png $(DESTDIR)/usr/share/pixmaps/spritz/packages/.
|
||||
install -m644 $(MISCDIR)/spritz.pam $(DESTDIR)/etc/pam.d/spritz
|
||||
chmod +x $(DESTDIR)/usr/bin/spritz
|
||||
install -m644 $(MISCDIR)/spritz.desktop $(DESTDIR)/usr/share/applications/.
|
||||
|
||||
|
After Width: | Height: | Size: 605 B |
|
After Width: | Height: | Size: 353 B |
|
After Width: | Height: | Size: 359 B |
|
After Width: | Height: | Size: 719 B |
|
After Width: | Height: | Size: 674 B |
|
After Width: | Height: | Size: 638 B |
|
After Width: | Height: | Size: 520 B |
|
After Width: | Height: | Size: 396 B |
|
After Width: | Height: | Size: 482 B |
|
After Width: | Height: | Size: 833 B |
|
After Width: | Height: | Size: 655 B |
|
After Width: | Height: | Size: 731 B |
|
After Width: | Height: | Size: 385 B |
|
After Width: | Height: | Size: 641 B |
@@ -28,7 +28,7 @@ except:
|
||||
from ConfigParser import ConfigParser,SafeConfigParser
|
||||
|
||||
|
||||
from misc import const,cleanMarkupSting,YumexConf
|
||||
from misc import const,cleanMarkupSting,YumexConf,unicode2htmlentities
|
||||
from i18n import _
|
||||
|
||||
class ConfimationDialog:
|
||||
@@ -79,15 +79,21 @@ class ConfimationDialog:
|
||||
def show_data( self, model, pkgs ):
|
||||
model.clear()
|
||||
for pkg in pkgs:
|
||||
label = "<b>%s</b>" % str(pkg)
|
||||
model.append( None, [label, pkg.description] )
|
||||
label = "<b>%s</b>" % unicode2htmlentities(str(pkg))
|
||||
desc = pkg.description
|
||||
model.append( None, [label, desc] )
|
||||
|
||||
def show_data( self, model, pkgs ):
|
||||
model.clear()
|
||||
install = [x for x in pkgs if x.action == "i"]
|
||||
update = [x for x in pkgs if x.action == "u"]
|
||||
remove = [x for x in pkgs if x.action == "r"]
|
||||
# install
|
||||
reinstall = [x for x in pkgs if x.action == "rr"]
|
||||
if reinstall:
|
||||
label = "<b>%s</b>" % _("To be reinstalled")
|
||||
level1 = model.append( None, [label, " "] )
|
||||
for pkg in reinstall:
|
||||
level2 = model.append( level1, [str(pkg), pkg.description] )
|
||||
if install:
|
||||
label = "<b>%s</b>" % _("To be installed")
|
||||
level1 = model.append( None, [label, " "] )
|
||||
|
||||
@@ -37,7 +37,7 @@ class QueueExecutor:
|
||||
self.Spritz = SpritzApplication
|
||||
self.Entropy = SpritzApplication.Equo
|
||||
|
||||
def run(self, install_queue, removal_queue):
|
||||
def run(self, install_queue, removal_queue, do_purge_cache = []):
|
||||
removalQueue = []
|
||||
runQueue = []
|
||||
if install_queue:
|
||||
@@ -86,6 +86,8 @@ class QueueExecutor:
|
||||
|
||||
metaopts = {}
|
||||
metaopts['removeconfig'] = rem_data[1]
|
||||
if idpackage in do_purge_cache:
|
||||
metaopts['removeconfig'] = True
|
||||
Package = self.Entropy.Package()
|
||||
Package.prepare((idpackage,),"remove", metaopts)
|
||||
|
||||
|
||||
@@ -34,9 +34,10 @@ class PackageWrapper:
|
||||
self.idpackage = self.matched_atom[0]
|
||||
self.Entropy = EquoConnection
|
||||
self.available = avail
|
||||
self.do_purge = False
|
||||
|
||||
def __str__(self):
|
||||
return str(self.dbconn.retrieveAtom(self.idpackage))
|
||||
return str(self.dbconn.retrieveAtom(self.idpackage)+"~"+str(self.dbconn.retrieveRevision(self.idpackage)))
|
||||
|
||||
def __cmp__(self, pkg):
|
||||
n1 = str(self)
|
||||
@@ -72,6 +73,13 @@ class PackageWrapper:
|
||||
def getRevision(self):
|
||||
return self.dbconn.retrieveRevision(self.idpackage)
|
||||
|
||||
def getSysPkg(self):
|
||||
if not self.from_installed:
|
||||
return False
|
||||
# check if it's a system package
|
||||
s = self.Entropy.validatePackageRemoval(self.idpackage)
|
||||
return not s
|
||||
|
||||
# 0: from installed db, so it's installed for sure
|
||||
# 1: not installed
|
||||
# 2: updatable
|
||||
@@ -84,7 +92,7 @@ class PackageWrapper:
|
||||
if not matches:
|
||||
return 1
|
||||
else:
|
||||
rc = self.Entropy.check_package_update(key+":"+slot)
|
||||
rc, matched = self.Entropy.check_package_update(key+":"+slot)
|
||||
if rc:
|
||||
return 2
|
||||
else:
|
||||
@@ -202,4 +210,5 @@ class PackageWrapper:
|
||||
arch = property(fget=getArch)
|
||||
epoch = property(fget=getEpoch)
|
||||
pkgtup = property(fget=getTup)
|
||||
syspkg = property(fget=getSysPkg)
|
||||
install_status = property(fget=getInstallStatus)
|
||||
@@ -274,11 +274,11 @@ class SpritzGUI:
|
||||
self.etpbase = etpbase
|
||||
self.queue = SpritzQueue()
|
||||
self.queueView = YumexQueueView(self.ui.queueView,self.queue)
|
||||
self.pkgView = EntropyPackageView(self.ui.viewPkg,self.queueView, self.ui)
|
||||
self.pkgView = EntropyPackageView(self.ui.viewPkg,self.queueView, self.ui, self.etpbase)
|
||||
self.queue.connect_objects(self.Entropy, self.etpbase, self.pkgView, self.ui)
|
||||
#self.catView = YumexCategoryView(self.ui.tvCategory)
|
||||
self.catsView = CategoriesView(self.ui.tvComps,self.queueView)
|
||||
self.catPackages = EntropyPackageView(self.ui.tvCatPackages,self.queueView, self.ui)
|
||||
self.catPackages = EntropyPackageView(self.ui.tvCatPackages,self.queueView, self.ui, self.etpbase)
|
||||
self.catDesc = TextViewConsole(self.ui.catDesc)
|
||||
self.repoView = EntropyRepoView(self.ui.viewRepo, self.Entropy, self.ui)
|
||||
self.repoMirrorsView = EntropyRepositoryMirrorsView(self.addrepo_ui.mirrorsView)
|
||||
|
||||
@@ -40,6 +40,10 @@ class const:
|
||||
PIXMAPS_PATH = '/usr/share/pixmaps/spritz'
|
||||
else:
|
||||
PIXMAPS_PATH = MAIN_PATH+'/../gfx'
|
||||
if MAIN_PATH == '/usr/lib/entropy/spritz':
|
||||
ICONS_PATH = '/usr/share/pixmaps/spritz'
|
||||
else:
|
||||
ICONS_PATH = MAIN_PATH+'/pixmaps'
|
||||
|
||||
# package categories
|
||||
PACKAGE_CATEGORIES = [
|
||||
@@ -144,19 +148,16 @@ class SpritzQueue:
|
||||
def __init__(self):
|
||||
self.logger = logging.getLogger('yumex.YumexQueue')
|
||||
self.packages = {}
|
||||
self.packages['i'] = []
|
||||
self.packages['u'] = []
|
||||
self.packages['r'] = []
|
||||
self.groups = {}
|
||||
self.groups['i'] = []
|
||||
self.groups['r'] = []
|
||||
self.before = []
|
||||
self.clear()
|
||||
self.Entropy = None
|
||||
self.etpbase = None
|
||||
self.pkgView = None
|
||||
self.queueView = None
|
||||
import dialogs
|
||||
self.dialogs = dialogs
|
||||
self.before = []
|
||||
|
||||
|
||||
def connect_objects(self, EquoConnection, etpbase, pkgView, ui):
|
||||
self.Entropy = EquoConnection
|
||||
@@ -169,6 +170,7 @@ class SpritzQueue:
|
||||
self.packages['i'] = []
|
||||
self.packages['u'] = []
|
||||
self.packages['r'] = []
|
||||
self.packages['rr'] = []
|
||||
self.groups.clear()
|
||||
self.groups['i'] = []
|
||||
self.groups['r'] = []
|
||||
@@ -181,19 +183,22 @@ class SpritzQueue:
|
||||
return self.packages[action]
|
||||
|
||||
def total(self):
|
||||
return len(self.packages['i'])+len(self.packages['u'])+len(self.packages['r'])
|
||||
size = 0
|
||||
for key in self.packages:
|
||||
size += len(self.packages[key])
|
||||
return size
|
||||
|
||||
def add(self, pkgs):
|
||||
|
||||
if type(pkgs) is not list:
|
||||
pkgs = [pkgs]
|
||||
|
||||
action = [pkgs[0].action]
|
||||
if action[0] in ("u","i"): # update/install
|
||||
action = [pkgs[0].queued]
|
||||
if action[0] in ("u","i","rr"): # update/install
|
||||
|
||||
action = ["u","i"]
|
||||
tmpqueue = [x for x in pkgs if x not in self.packages['u']+self.packages['i']]
|
||||
xlist = [x.matched_atom for x in self.packages['u']+self.packages['i']+tmpqueue]
|
||||
action = ["u","i","rr"]
|
||||
tmpqueue = [x for x in pkgs if x not in self.packages['u']+self.packages['i']+self.packages['rr']]
|
||||
xlist = [x.matched_atom for x in self.packages['u']+self.packages['i']+self.packages['rr']+tmpqueue]
|
||||
xlist = list(set(xlist))
|
||||
status = self.elaborateInstall(xlist,action,False)
|
||||
return status,0
|
||||
@@ -223,12 +228,14 @@ class SpritzQueue:
|
||||
install_todo = []
|
||||
if runQueue:
|
||||
#print "runQueue",runQueue
|
||||
for dep_pkg in self.etpbase.getPackages('updates')+self.etpbase.getPackages('available'):
|
||||
for matched_atom in runQueue:
|
||||
if (dep_pkg.matched_atom == matched_atom) and \
|
||||
(dep_pkg not in self.packages[actions[0]]+self.packages[actions[1]]) and \
|
||||
(dep_pkg not in install_todo):
|
||||
install_todo.append(dep_pkg)
|
||||
for dep_pkg in self.etpbase.getPackages('updates') + \
|
||||
self.etpbase.getPackages('available') + \
|
||||
self.etpbase.getPackages('reinstallable'):
|
||||
for matched_atom in runQueue:
|
||||
if (dep_pkg.matched_atom == matched_atom) and \
|
||||
(dep_pkg not in self.packages[actions[0]]+self.packages[actions[1]]+self.packages[actions[2]]) and \
|
||||
(dep_pkg not in install_todo):
|
||||
install_todo.append(dep_pkg)
|
||||
|
||||
# removalQueue
|
||||
if removalQueue:
|
||||
@@ -267,12 +274,10 @@ class SpritzQueue:
|
||||
|
||||
if ok:
|
||||
for rem_pkg in remove_todo:
|
||||
rem_pkg.set_select(False)
|
||||
rem_pkg.queued = rem_pkg.action
|
||||
if rem_pkg not in self.packages['r']:
|
||||
self.packages['r'].append(rem_pkg)
|
||||
for dep_pkg in install_todo:
|
||||
dep_pkg.set_select(True)
|
||||
dep_pkg.queued = dep_pkg.action
|
||||
if dep_pkg not in self.packages[dep_pkg.action]:
|
||||
self.packages[dep_pkg.action].append(dep_pkg)
|
||||
@@ -320,7 +325,6 @@ class SpritzQueue:
|
||||
|
||||
if ok:
|
||||
for rem_pkg in todo:
|
||||
rem_pkg.set_select(False)
|
||||
rem_pkg.queued = rem_pkg.action
|
||||
if rem_pkg not in self.packages[rem_pkg.action]:
|
||||
self.packages[rem_pkg.action].append(rem_pkg)
|
||||
@@ -334,7 +338,6 @@ class SpritzQueue:
|
||||
# check if it's a system package
|
||||
valid = self.Entropy.validatePackageRemoval(pkg.matched_atom[0])
|
||||
if not valid:
|
||||
pkg.set_select(not pkg.selected)
|
||||
pkg.queued = None
|
||||
return valid
|
||||
|
||||
@@ -346,17 +349,17 @@ class SpritzQueue:
|
||||
pkgs = [pkgs]
|
||||
|
||||
action = [pkgs[0].action]
|
||||
if action[0] in ("u","i"): # update/install
|
||||
if action[0] in ("u","i","rr"): # update/install
|
||||
|
||||
action = ["u","i"]
|
||||
action = ["u","i","rr"]
|
||||
|
||||
xlist = [x.matched_atom for x in self.packages['u']+self.packages['i'] if x not in pkgs]
|
||||
self.before = self.packages['u'][:]+self.packages['i'][:]
|
||||
xlist = [x.matched_atom for x in self.packages['u']+self.packages['i']+self.packages['rr'] if x not in pkgs]
|
||||
self.before = self.packages['u'][:]+self.packages['i'][:]+self.packages['rr'][:]
|
||||
for pkg in self.before:
|
||||
pkg.set_select(False)
|
||||
pkg.queued = None
|
||||
del self.packages['u'][:]
|
||||
del self.packages['i'][:]
|
||||
del self.packages['rr'][:]
|
||||
|
||||
if xlist:
|
||||
|
||||
@@ -374,7 +377,6 @@ class SpritzQueue:
|
||||
self.before = self.packages[action[0]][:]
|
||||
# clean, will be refilled
|
||||
for pkg in self.before:
|
||||
pkg.set_select(True)
|
||||
pkg.queued = None
|
||||
del self.packages[action[0]][:]
|
||||
|
||||
@@ -717,3 +719,12 @@ class fakeinfile:
|
||||
def tell(self): raise IOError, (29, 'Illegal seek')
|
||||
truncate = tell
|
||||
|
||||
from htmlentitydefs import codepoint2name
|
||||
def unicode2htmlentities(u):
|
||||
htmlentities = list()
|
||||
for c in u:
|
||||
if ord(c) < 128:
|
||||
htmlentities.append(c)
|
||||
else:
|
||||
htmlentities.append('&%s;' % codepoint2name[ord(c)])
|
||||
return ''.join(htmlentities)
|
||||
@@ -39,7 +39,6 @@ class EntropyPackage( PackageWrapper ):
|
||||
def __init__( self, matched_atom, recentlimit, avail=True ):
|
||||
global color_normal
|
||||
PackageWrapper.__init__( self, matched_atom, avail )
|
||||
self.selected = False
|
||||
self.visible = True
|
||||
self.queued = None
|
||||
self.action = None
|
||||
@@ -52,9 +51,6 @@ class EntropyPackage( PackageWrapper ):
|
||||
else:
|
||||
self.recent = False
|
||||
|
||||
def set_select( self, state ):
|
||||
self.selected = state
|
||||
|
||||
def set_visible( self, state ):
|
||||
self.visible = state
|
||||
|
||||
@@ -157,6 +153,8 @@ class EntropyPackages:
|
||||
pkgs = []
|
||||
pkgs.extend(self.getPackages('installed'))
|
||||
pkgs.extend(self.getPackages('available'))
|
||||
pkgs.extend(self.getPackages('reinstallable'))
|
||||
pkgs.extend(self.getPackages('updates'))
|
||||
return pkgs
|
||||
|
||||
def setFilter(self,fn = None):
|
||||
@@ -224,6 +222,17 @@ class EntropyPackages:
|
||||
yp.action = 'u'
|
||||
yp.color = color_update
|
||||
yield yp
|
||||
elif mask == "reinstallable":
|
||||
for idpackage in self.Entropy.clientDbconn.listAllIdpackages():
|
||||
atom = self.Entropy.clientDbconn.retrieveAtom(idpackage)
|
||||
upd, matched = self.Entropy.check_package_update(atom)
|
||||
if not upd and matched:
|
||||
if matched[0] != -1:
|
||||
yp = EntropyPackage(matched, self.recent, False)
|
||||
yp.selected = True
|
||||
yp.action = 'rr'
|
||||
yp.color = color_install
|
||||
yield yp
|
||||
|
||||
def getByProperty( self, type, category ):
|
||||
list = self.getPackages(type)
|
||||
|
||||
@@ -4263,4 +4263,233 @@ gz</property>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget class="GtkMenu" id="packageInstalled">
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="reinstall">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Reinstall the selected package</property>
|
||||
<property name="label" translatable="yes">Reinstall</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_reinstall_activate" last_modification_time="Sat, 26 Jan 2008 15:45:15 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image266">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-refresh</property>
|
||||
<property name="icon_size">1</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="undoreinstall">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Undo Reinstall action</property>
|
||||
<property name="label" translatable="yes">Undo Reinstall</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_undoreinstall_activate" last_modification_time="Sun, 27 Jan 2008 12:01:59 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image267">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-undo</property>
|
||||
<property name="icon_size">1</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="remove">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Remove the selected package</property>
|
||||
<property name="label" translatable="yes">Remove</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_remove_activate" last_modification_time="Sat, 26 Jan 2008 15:45:15 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image268">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-undo</property>
|
||||
<property name="icon_size">1</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="undoremove">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Undo Remove action</property>
|
||||
<property name="label" translatable="yes">Undo Remove</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_undoremove_activate" last_modification_time="Sun, 27 Jan 2008 12:02:23 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image269">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-undo</property>
|
||||
<property name="icon_size">1</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="purge">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Remove the selected package and its configuration</property>
|
||||
<property name="label" translatable="yes">Purge</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_purge_activate" last_modification_time="Sun, 27 Jan 2008 14:54:43 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image270">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-cancel</property>
|
||||
<property name="icon_size">1</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="undopurge">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Undo Purge action</property>
|
||||
<property name="label" translatable="yes">Undo Purge</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_undopurge_activate" last_modification_time="Sun, 27 Jan 2008 12:03:55 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image271">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-undo</property>
|
||||
<property name="icon_size">1</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget class="GtkMenu" id="packageUpdates">
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="update">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Update the selected package</property>
|
||||
<property name="label" translatable="yes">Update</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_update_activate" last_modification_time="Sun, 27 Jan 2008 15:02:09 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image281">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-refresh</property>
|
||||
<property name="icon_size">1</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="undoupdate">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Undo Update action</property>
|
||||
<property name="label" translatable="yes">Undo Update</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_undoupdate_activate" last_modification_time="Sun, 27 Jan 2008 15:02:28 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image282">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-undo</property>
|
||||
<property name="icon_size">1</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget class="GtkMenu" id="packageInstall">
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="install">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Install the selected package</property>
|
||||
<property name="label" translatable="yes">Install</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_install_activate" last_modification_time="Sun, 27 Jan 2008 15:25:36 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image287">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-refresh</property>
|
||||
<property name="icon_size">1</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="undoinstall">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Undo Install action</property>
|
||||
<property name="label" translatable="yes">Undo Install</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_undoinstall_activate" last_modification_time="Sun, 27 Jan 2008 15:25:58 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image288">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-undo</property>
|
||||
<property name="icon_size">1</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
</glade-interface>
|
||||
|
||||
@@ -67,9 +67,9 @@ class SpritzController(Controller):
|
||||
self.pty = pty.openpty()
|
||||
self.output = fakeoutfile(self.pty[1])
|
||||
self.input = fakeinfile(self.pty[1])
|
||||
sys.stdout = self.output
|
||||
sys.stderr = self.output
|
||||
sys.stdin = self.input
|
||||
#sys.stdout = self.output
|
||||
#sys.stderr = self.output
|
||||
#sys.stdin = self.input
|
||||
|
||||
|
||||
def quit(self, widget=None, event=None ):
|
||||
@@ -460,11 +460,6 @@ class SpritzController(Controller):
|
||||
|
||||
def on_select_clicked(self,widget):
|
||||
''' Package Add All button handler '''
|
||||
if len(self.pkgView.store) > 50:
|
||||
msg = _('You are about to add %s packages and their dependencies\n') % len(self.pkgView.store)
|
||||
msg += _('Do you want to continue ?')
|
||||
if not questionDialog(self.ui.main,msg):
|
||||
return
|
||||
busyCursor(self.ui.main)
|
||||
self.pkgView.selectAll()
|
||||
normalCursor(self.ui.main)
|
||||
@@ -472,11 +467,6 @@ class SpritzController(Controller):
|
||||
def on_deselect_clicked(self,widget):
|
||||
''' Package Remove All button handler '''
|
||||
self.on_clear_clicked(widget)
|
||||
if len(self.pkgView.store) > 50:
|
||||
msg = _('You are about to remove %s packages and their depends\n') % len(self.pkgView.store)
|
||||
msg += _('Do you want to continue ?')
|
||||
if not questionDialog(self.ui.main,msg):
|
||||
return
|
||||
busyCursor(self.ui.main)
|
||||
self.pkgView.deselectAll()
|
||||
normalCursor(self.ui.main)
|
||||
@@ -535,7 +525,7 @@ class SpritzController(Controller):
|
||||
flt.setFilterList(lst)
|
||||
else:
|
||||
flt.activate(False)
|
||||
action = self.lastPkgPB
|
||||
action = self.lastPkgPB
|
||||
rb = self.packageRB[action]
|
||||
self.on_pkgFilter_toggled(rb,action)
|
||||
|
||||
@@ -551,7 +541,7 @@ class SpritzController(Controller):
|
||||
flt.setFilterList(lst)
|
||||
else:
|
||||
flt.activate(False)
|
||||
action = self.lastPkgPB
|
||||
action = self.lastPkgPB
|
||||
rb = self.packageRB[action]
|
||||
self.on_pkgFilter_toggled(rb,action)
|
||||
|
||||
@@ -605,7 +595,7 @@ class SpritzApplication(SpritzController,SpritzGUI):
|
||||
if self.settings.debug:
|
||||
self.spritzOptions.dump()
|
||||
print self.spritzOptions.getArgs()
|
||||
self.logger.info(_('Entropy Config Setuo'))
|
||||
self.logger.info(_('Entropy Config Setup'))
|
||||
self.spritzOptions.parseCmdOptions()
|
||||
self.catsView.etpbase = self.etpbase
|
||||
self.lastPkgPB = "updates"
|
||||
@@ -818,9 +808,10 @@ class SpritzApplication(SpritzController,SpritzGUI):
|
||||
queue = pkgs['i']+pkgs['u']
|
||||
install_queue = [x.matched_atom for x in queue]
|
||||
removal_queue = [x.matched_atom[0] for x in pkgs['r']]
|
||||
do_purge_cache = set([x.matched_atom[0] for x in pkgs['r'] if x.do_purge])
|
||||
if install_queue or removal_queue:
|
||||
controller = QueueExecutor(self)
|
||||
e,i = controller.run(install_queue[:], removal_queue[:])
|
||||
e,i = controller.run(install_queue[:], removal_queue[:], do_purge_cache)
|
||||
print e,i
|
||||
# XXX let it sleep a bit to allow all other threads to flush
|
||||
while gtk.events_pending():
|
||||
|
||||
@@ -22,11 +22,14 @@ import gobject
|
||||
import logging
|
||||
import glob
|
||||
import ConfigParser
|
||||
from misc import const
|
||||
from etpgui.widgets import UI
|
||||
from etpgui import *
|
||||
from entropyConstants import *
|
||||
|
||||
from i18n import _
|
||||
|
||||
TOGGLE_WIDTH = 12
|
||||
|
||||
class YumexCategoryView:
|
||||
def __init__( self, treeview):
|
||||
@@ -55,41 +58,328 @@ class YumexCategoryView:
|
||||
for el in data:
|
||||
self.model.append(None,[el,el])
|
||||
|
||||
|
||||
class EntropyPackageView:
|
||||
def __init__( self, treeview, qview, ui ):
|
||||
def __init__( self, treeview, qview, ui, etpbase ):
|
||||
|
||||
self.selection_width = 20
|
||||
self.loaded_widget = None
|
||||
self.loaded_reinstallable = None
|
||||
self.loaded_event = None
|
||||
self.event_click_pos = 0,0
|
||||
# default for installed packages
|
||||
self.pkg_install_ok = "package-installed-updated.png"
|
||||
self.pkg_install_updatable = "package-installed-outdated.png"
|
||||
self.pkg_install_new = "package-available.png"
|
||||
self.pkg_remove = "package-remove.png"
|
||||
self.pkg_purge = "package-purge.png"
|
||||
self.pkg_reinstall = "package-reinstall.png"
|
||||
self.pkg_install = "package-install.png"
|
||||
self.pkg_update = "package-upgrade.png"
|
||||
self.pkg_downgrade = "package-downgrade.png"
|
||||
self.pkg_undoinstall = "package-undoinstall.png"
|
||||
|
||||
self.img_pkg_install_ok = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_install_ok,self.pkg_install_ok)
|
||||
self.img_pkg_install_updatable = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_install_updatable,self.pkg_install_updatable)
|
||||
self.img_pkg_update = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_update,self.pkg_update)
|
||||
self.img_pkg_downgrade = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_downgrade,self.pkg_downgrade)
|
||||
|
||||
self.img_pkg_install_new = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_install_new,self.pkg_install_new)
|
||||
|
||||
self.img_pkg_remove = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_remove,self.pkg_remove)
|
||||
self.img_pkg_undoremove = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_undoremove,self.pkg_remove)
|
||||
self.img_pkg_purge = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_purge,self.pkg_purge)
|
||||
self.img_pkg_undopurge = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_undopurge,self.pkg_purge)
|
||||
self.img_pkg_reinstall = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_reinstall,self.pkg_reinstall)
|
||||
self.img_pkg_undoreinstall = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_undoreinstall,self.pkg_reinstall)
|
||||
|
||||
self.img_pkg_install = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_install,self.pkg_install)
|
||||
self.img_pkg_undoinstall = gtk.Image()
|
||||
self.set_pixbuf_to_image(self.img_pkg_undoinstall,self.pkg_undoinstall)
|
||||
|
||||
self.view = treeview
|
||||
self.view.connect("button-release-event", self.load_menu)
|
||||
self.headers = [_( "Package" ), _( "Ver" ), _( "Summary" ), _( "Repo" ), _( "Architecture" ), _( "Size" )]
|
||||
self.store = self.setupView()
|
||||
self.queue = qview.queue
|
||||
self.queueView = qview
|
||||
self.ui = ui
|
||||
self.etpbase = etpbase
|
||||
self.clearUpdates()
|
||||
|
||||
# installed packages right click menu
|
||||
self.installed_menu_xml = gtk.glade.XML( const.GLADE_FILE, "packageInstalled",domain="yumex" )
|
||||
self.installed_menu = self.installed_menu_xml.get_widget( "packageInstalled" )
|
||||
self.installed_menu_xml.signal_autoconnect(self)
|
||||
|
||||
self.installed_reinstall = self.installed_menu_xml.get_widget( "reinstall" )
|
||||
self.installed_undoreinstall = self.installed_menu_xml.get_widget( "undoreinstall" )
|
||||
self.installed_purge = self.installed_menu_xml.get_widget( "purge" )
|
||||
self.installed_undopurge = self.installed_menu_xml.get_widget( "undopurge" )
|
||||
self.installed_remove = self.installed_menu_xml.get_widget( "remove" )
|
||||
self.installed_undoremove = self.installed_menu_xml.get_widget( "undoremove" )
|
||||
self.installed_reinstall.set_image(self.img_pkg_reinstall)
|
||||
self.installed_undoreinstall.set_image(self.img_pkg_undoreinstall)
|
||||
self.installed_remove.set_image(self.img_pkg_remove)
|
||||
self.installed_undoremove.set_image(self.img_pkg_undoremove)
|
||||
self.installed_purge.set_image(self.img_pkg_purge)
|
||||
self.installed_undopurge.set_image(self.img_pkg_undopurge)
|
||||
|
||||
# updates right click menu
|
||||
self.updates_menu_xml = gtk.glade.XML( const.GLADE_FILE, "packageUpdates",domain="yumex" )
|
||||
self.updates_menu = self.updates_menu_xml.get_widget( "packageUpdates" )
|
||||
self.updates_menu_xml.signal_autoconnect(self)
|
||||
self.updates_update = self.updates_menu_xml.get_widget( "update" )
|
||||
self.updates_undoupdate = self.updates_menu_xml.get_widget( "undoupdate" )
|
||||
self.updates_update.set_image(self.img_pkg_update)
|
||||
self.updates_undoupdate.set_image(self.img_pkg_downgrade)
|
||||
|
||||
# install right click menu
|
||||
self.install_menu_xml = gtk.glade.XML( const.GLADE_FILE, "packageInstall",domain="yumex" )
|
||||
self.install_menu = self.install_menu_xml.get_widget( "packageInstall" )
|
||||
self.install_menu_xml.signal_autoconnect(self)
|
||||
self.install_install = self.install_menu_xml.get_widget( "install" )
|
||||
self.install_undoinstall = self.install_menu_xml.get_widget( "undoinstall" )
|
||||
self.install_install.set_image(self.img_pkg_install)
|
||||
self.updates_undoupdate.set_image(self.img_pkg_undoinstall)
|
||||
|
||||
def reset_install_menu(self):
|
||||
self.install_install.show()
|
||||
self.install_undoinstall.hide()
|
||||
|
||||
def hide_install_menu(self):
|
||||
self.install_install.hide()
|
||||
self.install_undoinstall.hide()
|
||||
|
||||
def reset_updates_menu(self):
|
||||
self.updates_undoupdate.hide()
|
||||
self.updates_update.show()
|
||||
|
||||
def hide_updates_menu(self):
|
||||
self.updates_undoupdate.hide()
|
||||
self.updates_update.hide()
|
||||
|
||||
def reset_installed_packages_menu(self):
|
||||
self.installed_undoremove.hide()
|
||||
self.installed_undoreinstall.hide()
|
||||
self.installed_undopurge.hide()
|
||||
self.installed_remove.show()
|
||||
self.installed_reinstall.show()
|
||||
self.installed_purge.show()
|
||||
|
||||
def hide_installed_packages_menu(self):
|
||||
self.installed_undoremove.hide()
|
||||
self.installed_undoreinstall.hide()
|
||||
self.installed_undopurge.hide()
|
||||
self.installed_remove.hide()
|
||||
self.installed_reinstall.hide()
|
||||
self.installed_purge.hide()
|
||||
|
||||
def load_menu(self, widget, event):
|
||||
self.loaded_widget = widget
|
||||
self.loaded_event = event
|
||||
#if event.button != 3:
|
||||
# return True
|
||||
row,column, x, y = widget.get_path_at_pos(int(event.x),int(event.y))
|
||||
self.event_click_pos = x,y
|
||||
if column.get_title() != "S":
|
||||
return True
|
||||
model, iter = widget.get_selection().get_selected()
|
||||
if iter:
|
||||
obj = model.get_value( iter, 0 )
|
||||
if obj.action in ["r"]: # installed packages listing
|
||||
self.run_installed_menu_stuff(obj)
|
||||
elif obj.action in ["u"]: # updatable packages listing
|
||||
self.run_updates_menu_stuff(obj)
|
||||
elif obj.action in ["i"]:
|
||||
self.run_install_menu_stuff(obj)
|
||||
|
||||
def reposition_menu(self, menu):
|
||||
# devo tradurre x=0,y=20 in posizioni assolute
|
||||
abs_x, abs_y = self.loaded_event.get_root_coords()
|
||||
#print abs_x,abs_y
|
||||
#print self.loaded_event.x,self.loaded_event.y
|
||||
abs_x -= self.loaded_event.x
|
||||
event_y = self.loaded_event.y
|
||||
# FIXME: find a better way to properly position menu
|
||||
while event_y > self.selection_width+5:
|
||||
event_y -= self.selection_width+4
|
||||
abs_y += (self.selection_width-event_y)
|
||||
return int(abs_x),int(abs_y),True
|
||||
|
||||
def run_install_menu_stuff(self, obj):
|
||||
do_show = True
|
||||
self.reset_install_menu()
|
||||
if obj.queued:
|
||||
self.hide_install_menu()
|
||||
self.install_undoinstall.show()
|
||||
self.install_menu.popup( None, None, self.reposition_menu, self.loaded_event.button, self.loaded_event.time )
|
||||
|
||||
def run_updates_menu_stuff(self, obj):
|
||||
do_show = True
|
||||
self.reset_updates_menu()
|
||||
if obj.queued:
|
||||
self.hide_updates_menu()
|
||||
self.updates_undoupdate.show()
|
||||
self.updates_menu.popup( None, None, self.reposition_menu, self.loaded_event.button, self.loaded_event.time)
|
||||
|
||||
def run_installed_menu_stuff(self, obj):
|
||||
do_show = True
|
||||
self.reset_installed_packages_menu()
|
||||
if obj.queued:
|
||||
self.hide_installed_packages_menu()
|
||||
if obj.queued == "r" and not obj.do_purge:
|
||||
self.installed_undoremove.show()
|
||||
elif obj.queued == "rr":
|
||||
self.installed_undoreinstall.show()
|
||||
self.set_loaded_reinstallable(obj)
|
||||
elif obj.queued == "r" and obj.do_purge:
|
||||
self.installed_undopurge.show()
|
||||
else:
|
||||
# is it a system package ?
|
||||
if obj.syspkg:
|
||||
self.installed_remove.hide()
|
||||
self.installed_purge.hide()
|
||||
|
||||
if str(obj) not in self.etpbase.getPackages("reinstallable"):
|
||||
if obj.syspkg:
|
||||
do_show = False
|
||||
self.installed_reinstall.hide()
|
||||
else:
|
||||
self.set_loaded_reinstallable(obj)
|
||||
if not self.loaded_reinstallable:
|
||||
self.installed_reinstall.hide()
|
||||
if do_show: self.installed_menu.popup( None, None, self.reposition_menu, self.loaded_event.button, self.loaded_event.time )
|
||||
|
||||
def set_loaded_reinstallable(self, obj):
|
||||
reinstallables = self.etpbase.getPackages("reinstallable")
|
||||
self.loaded_reinstallable = None
|
||||
for to_obj in reinstallables:
|
||||
if str(obj) == str(to_obj):
|
||||
self.loaded_reinstallable = to_obj
|
||||
break
|
||||
|
||||
def on_remove_activate(self, widget, do_purge = False):
|
||||
busyCursor(self.ui.main)
|
||||
model, iter = self.loaded_widget.get_selection().get_selected()
|
||||
obj = self.store.get_value( iter, 0 )
|
||||
oldqueued = obj.queued
|
||||
oldpurge = obj.do_purge
|
||||
obj.queued = "r"
|
||||
if do_purge:
|
||||
obj.do_purge = True
|
||||
status, myaction = self.queue.add(obj)
|
||||
if status != 0:
|
||||
obj.queued = oldqueued
|
||||
obj.do_purge = oldpurge
|
||||
self.queueView.refresh()
|
||||
normalCursor(self.ui.main)
|
||||
|
||||
def on_reinstall_activate(self, widget):
|
||||
busyCursor(self.ui.main)
|
||||
model, iter = self.loaded_widget.get_selection().get_selected()
|
||||
obj = self.store.get_value( iter, 0 )
|
||||
oldqueued = obj.queued
|
||||
obj.queued = "rr"
|
||||
oldqueued_reinstallable = self.loaded_reinstallable.queued
|
||||
self.loaded_reinstallable.queued = "rr"
|
||||
status, myaction = self.queue.add(self.loaded_reinstallable)
|
||||
if status != 0:
|
||||
obj.queued = oldqueued
|
||||
self.loaded_reinstallable.queued = oldqueued_reinstallable
|
||||
self.queueView.refresh()
|
||||
normalCursor(self.ui.main)
|
||||
|
||||
def on_undoreinstall_activate(self, widget):
|
||||
busyCursor(self.ui.main)
|
||||
model, iter = self.loaded_widget.get_selection().get_selected()
|
||||
obj = self.store.get_value( iter, 0 )
|
||||
obj.queued = None
|
||||
self.remove_queued(self.loaded_reinstallable)
|
||||
self.queueView.refresh()
|
||||
normalCursor(self.ui.main)
|
||||
|
||||
def on_undoremove_activate(self, widget):
|
||||
busyCursor(self.ui.main)
|
||||
model, iter = self.loaded_widget.get_selection().get_selected()
|
||||
obj = self.store.get_value( iter, 0 )
|
||||
self.remove_queued(obj)
|
||||
obj.do_purge = False
|
||||
self.queueView.refresh()
|
||||
normalCursor(self.ui.main)
|
||||
|
||||
def remove_queued(self, obj):
|
||||
oldqueued = obj.queued
|
||||
obj.queued = None
|
||||
status, myaction = self.queue.remove(obj)
|
||||
if status != 0:
|
||||
obj.queued = oldqueued
|
||||
self.view.queue_draw()
|
||||
return status
|
||||
|
||||
def on_purge_activate(self, widget):
|
||||
self.on_remove_activate(widget, True)
|
||||
|
||||
def on_undopurge_activate(self, widget):
|
||||
self.on_undoremove_activate(widget)
|
||||
|
||||
def on_update_activate(self, widget):
|
||||
self.on_install_update_activate(widget, "u")
|
||||
|
||||
def on_undoupdate_activate(self, widget):
|
||||
self.on_undoinstall_undoupdate_activate(widget)
|
||||
|
||||
def on_install_activate(self, widget):
|
||||
self.on_install_update_activate(widget, "i")
|
||||
|
||||
def on_undoinstall_activate(self, widget):
|
||||
self.on_undoinstall_undoupdate_activate(widget)
|
||||
|
||||
def on_install_update_activate(self, widget, action):
|
||||
busyCursor(self.ui.main)
|
||||
model, iter = self.loaded_widget.get_selection().get_selected()
|
||||
obj = self.store.get_value( iter, 0 )
|
||||
oldqueued = obj.queued
|
||||
obj.queued = action
|
||||
status, myaction = self.queue.add(obj)
|
||||
if status != 0:
|
||||
obj.queued = oldqueued
|
||||
self.queueView.refresh()
|
||||
normalCursor(self.ui.main)
|
||||
|
||||
def on_undoinstall_undoupdate_activate(self, widget):
|
||||
busyCursor(self.ui.main)
|
||||
model, iter = self.loaded_widget.get_selection().get_selected()
|
||||
obj = self.store.get_value( iter, 0 )
|
||||
self.remove_queued(obj)
|
||||
self.queueView.refresh()
|
||||
normalCursor(self.ui.main)
|
||||
|
||||
def setupView( self ):
|
||||
store = gtk.ListStore( gobject.TYPE_PYOBJECT, str )
|
||||
self.view.set_model( store )
|
||||
# Setup selection column
|
||||
cell1 = gtk.CellRendererToggle() # Selection
|
||||
cell1.set_property( 'activatable', True )
|
||||
column1 = gtk.TreeViewColumn( "", cell1 )
|
||||
column1.set_cell_data_func( cell1, self.get_data_bool, 'selected' )
|
||||
|
||||
# Setup resent column
|
||||
cell1 = gtk.CellRendererPixbuf() # new
|
||||
self.set_pixbuf_to_cell(cell1, self.pkg_install_ok )
|
||||
column1 = gtk.TreeViewColumn( "S", cell1 )
|
||||
column1.set_cell_data_func( cell1, self.new_pixbuf )
|
||||
column1.set_sizing( gtk.TREE_VIEW_COLUMN_FIXED )
|
||||
column1.set_fixed_width( 20 )
|
||||
column1.set_fixed_width( self.selection_width )
|
||||
column1.set_sort_column_id( -1 )
|
||||
self.view.append_column( column1 )
|
||||
cell1.connect( "toggled", self.on_toggled )
|
||||
column1.set_clickable( True )
|
||||
# Setup resent column
|
||||
cell2 = gtk.CellRendererPixbuf() # new
|
||||
cell2.set_property( 'stock-id', gtk.STOCK_ADD )
|
||||
column2 = gtk.TreeViewColumn( "", cell2 )
|
||||
column2.set_cell_data_func( cell2, self.new_pixbuf )
|
||||
column2.set_sizing( gtk.TREE_VIEW_COLUMN_FIXED )
|
||||
column2.set_fixed_width( 20 )
|
||||
column2.set_sort_column_id( -1 )
|
||||
self.view.append_column( column2 )
|
||||
column2.set_clickable( True )
|
||||
column1.set_clickable( False )
|
||||
|
||||
self.create_text_column( _( "Package" ), 'name' , size=360)
|
||||
self.create_text_column( _( "Rev." ), 'revision' , size=50 )
|
||||
@@ -103,8 +393,15 @@ class EntropyPackageView:
|
||||
self.view.set_reorderable( True )
|
||||
return store
|
||||
|
||||
def set_pixbuf_to_cell(self, cell, filename):
|
||||
pixbuf = gtk.gdk.pixbuf_new_from_file(const.PIXMAPS_PATH+"/packages/"+filename)
|
||||
cell.set_property( 'pixbuf', pixbuf )
|
||||
|
||||
def set_pixbuf_to_image(self, img, filename):
|
||||
img.set_from_file(const.PIXMAPS_PATH+"/packages/"+filename)
|
||||
|
||||
def create_text_column( self, hdr, property, size, sortcol = None):
|
||||
"""
|
||||
"""
|
||||
Create a TreeViewColumn with text and set
|
||||
the sorting properties and add it to the view
|
||||
"""
|
||||
@@ -124,38 +421,6 @@ class EntropyPackageView:
|
||||
cell.set_property( 'text', getattr( obj, property ) )
|
||||
cell.set_property('foreground',obj.color)
|
||||
|
||||
def get_data_bool( self, column, cell, model, iter, property ):
|
||||
obj = model.get_value( iter, 0 )
|
||||
cell.set_property( "visible", True )
|
||||
if obj:
|
||||
cell.set_property( "active", getattr( obj, property ) )
|
||||
|
||||
def on_toggled( self, widget, path ):
|
||||
busyCursor(self.ui.main)
|
||||
""" Package selection handler """
|
||||
iter = self.store.get_iter( path )
|
||||
obj = self.store.get_value( iter, 0 )
|
||||
self.togglePackage(obj)
|
||||
self.queueView.refresh()
|
||||
normalCursor(self.ui.main)
|
||||
|
||||
def togglePackage(self,obj):
|
||||
oldqueued = obj.queued
|
||||
oldselected = obj.selected
|
||||
if obj.queued == obj.action:
|
||||
obj.queued = None
|
||||
status, myaction = self.queue.remove(obj)
|
||||
if status != 0:
|
||||
obj.queued = oldqueued
|
||||
obj.set_select(oldselected)
|
||||
else:
|
||||
obj.queued = obj.action
|
||||
status, myaction = self.queue.add(obj)
|
||||
if status != 0:
|
||||
obj.queued = oldqueued
|
||||
obj.set_select(oldselected)
|
||||
|
||||
|
||||
def selectAll(self):
|
||||
list = [x[0] for x in self.store if not x[0].queued == x[0].action]
|
||||
if not list:
|
||||
@@ -194,15 +459,6 @@ class EntropyPackageView:
|
||||
for obj in xlist:
|
||||
obj.set_select( False )
|
||||
self.clearUpdates()
|
||||
|
||||
'''
|
||||
for el in self.store:
|
||||
obj = el[0]
|
||||
if obj.queued == obj.action:
|
||||
obj.queued = None
|
||||
self.queue.remove(obj)
|
||||
obj.set_select( not obj.selected )
|
||||
'''
|
||||
self.queueView.refresh()
|
||||
self.view.queue_draw()
|
||||
|
||||
@@ -213,35 +469,31 @@ class EntropyPackageView:
|
||||
"""
|
||||
pkg = model.get_value( iter, 0 )
|
||||
if pkg:
|
||||
action = pkg.queued
|
||||
if action:
|
||||
if action in ( 'u', 'i' ):
|
||||
icon = 'network-server'
|
||||
if not pkg.queued:
|
||||
if pkg.action == "r":
|
||||
self.set_pixbuf_to_cell(cell, self.pkg_install_ok)
|
||||
elif pkg.action == "i":
|
||||
self.set_pixbuf_to_cell(cell, self.pkg_install_new)
|
||||
else:
|
||||
icon = 'edit-delete'
|
||||
cell.set_property( 'visible', True )
|
||||
cell.set_property( 'icon-name', icon )
|
||||
self.set_pixbuf_to_cell(cell, self.pkg_install_updatable)
|
||||
else:
|
||||
cell.set_property( 'visible', pkg.recent )
|
||||
cell.set_property( 'icon-name', 'document-new' )
|
||||
if pkg.queued == "r" and not pkg.do_purge:
|
||||
self.set_pixbuf_to_cell(cell, self.pkg_remove)
|
||||
if pkg.queued == "r" and pkg.do_purge:
|
||||
self.set_pixbuf_to_cell(cell, self.pkg_purge)
|
||||
elif pkg.queued == "rr":
|
||||
self.set_pixbuf_to_cell(cell, self.pkg_reinstall)
|
||||
elif pkg.queued == "i":
|
||||
self.set_pixbuf_to_cell(cell, self.pkg_install)
|
||||
elif pkg.queued == "u":
|
||||
self.set_pixbuf_to_cell(cell, self.pkg_update)
|
||||
|
||||
else:
|
||||
cell.set_property( 'visible', False )
|
||||
|
||||
def get_selected( self, package=True ):
|
||||
""" Get selected packages in current packageList """
|
||||
selected = []
|
||||
for row in self.store:
|
||||
col = row[0]
|
||||
if col:
|
||||
pkg = row[0][0]
|
||||
if pkg.selected:
|
||||
selected.append( pkg )
|
||||
return selected
|
||||
|
||||
|
||||
class YumexQueueView:
|
||||
""" Queue View Class"""
|
||||
def __init__( self, widget,queue ):
|
||||
def __init__( self, widget, queue ):
|
||||
self.view = widget
|
||||
self.model = self.setup_view()
|
||||
self.queue = queue
|
||||
@@ -274,7 +526,7 @@ class YumexQueueView:
|
||||
pkg.queued = None
|
||||
pkg.set_select( not pkg.selected )
|
||||
f = lambda x: str( x ) not in rmvlist
|
||||
for action in ['u', 'i', 'r']:
|
||||
for action in ['u', 'i', 'r','rr']:
|
||||
list = self.queue.get(action)
|
||||
if list:
|
||||
self.queue.packages[action] = filter( f, list )
|
||||
@@ -283,7 +535,7 @@ class YumexQueueView:
|
||||
def getPkgsFromList( self, rlist ):
|
||||
rclist = []
|
||||
f = lambda x: str( x ) in rlist
|
||||
for action in ['u', 'i', 'r']:
|
||||
for action in ['u', 'i', 'r','rr']:
|
||||
list = self.queue.packages[action]
|
||||
if list:
|
||||
rclist += filter( f, list )
|
||||
@@ -292,6 +544,10 @@ class YumexQueueView:
|
||||
def refresh ( self ):
|
||||
""" Populate view with data from queue """
|
||||
self.model.clear()
|
||||
label = _( "<b>Packages To Reinstall</b>" )
|
||||
list = self.queue.packages['rr']
|
||||
if len( list ) > 0:
|
||||
self.populate_list( label, list )
|
||||
label = _( "<b>Packages To Update</b>" )
|
||||
list = self.queue.packages['u']
|
||||
if len( list ) > 0:
|
||||
|
||||