Entropy/Spritz:

- implement package sets add/removal feature
- InputDialog: implement ListStore/TreeView for EquoInterface.inputBox()
Entropy/TODO:
- update TODO


git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@2901 cd1c1023-2f26-0410-ae45-c471fc1f0318
This commit is contained in:
lxnay
2009-01-14 22:39:39 +00:00
parent 7c1623dfc9
commit aa307fe4b8
7 changed files with 2098 additions and 1855 deletions
+2 -3
View File
@@ -3,7 +3,6 @@ TODO list
- server-side db backup tool
- implement pdepend support in dependencies sorting
- add changelog to packages
- split entropy.py into entropy package (move exceptionTools to something saner)
- move etpConst['conflicting_tagged_packages'] elsewhere
- move etpConst['filesystemdirs'] and etpConst['filesystemdirsmask'] to config file
- automatic client db backup
@@ -16,10 +15,10 @@ TODO list
- implement packages.db.system_mask management
Spritz:
- package sets add/remove tool
- allow package remasking
-
Proposed for Entropy >1.0 (require API changes):
- entropy.py refactoring (incl. exceptionTools)
- UGC: personal package sets
- UGC: bug report documents?
- UGC: bbcode docs?
+64 -3
View File
@@ -5651,13 +5651,16 @@ class InputDialog:
def __init__(self, parent, title, input_parameters, cancel = True):
mywin = gtk.Window()
# avoids to taint the returning elements
# when running nested
self.parameters = self.parameters.copy()
mywin.set_title(_("Please fill the following form"))
myvbox = gtk.VBox()
mylabel = gtk.Label()
mylabel.set_markup(cleanMarkupString(title))
myhbox = gtk.HBox()
myvbox.pack_start(mylabel)
myvbox.pack_start(mylabel, expand = False, fill = False)
mytable = gtk.Table(rows = len(input_parameters), columns = 2)
self.identifiers_table = {}
self.cb_table = {}
@@ -5678,16 +5681,65 @@ class InputDialog:
input_label.set_markup(text)
if input_type == "checkbox":
input_widget = gtk.CheckButton(text)
input_widget.set_alignment(0.0,0.5)
input_widget.set_active(passworded)
elif input_type == "combo":
input_widget = gtk.combo_box_new_text()
for opt in combo_options:
input_widget.append_text(opt)
if combo_options:
input_widget.set_active(0)
mytable.attach(input_label, 0, 1, row_count, row_count+1)
elif input_type == "list":
myhbox_l = gtk.HBox()
input_widget = gtk.ListStore(gobject.TYPE_STRING)
view = gtk.TreeView()
cell = gtk.CellRendererText()
column = gtk.TreeViewColumn( text, cell, markup = 0 )
column.set_resizable( True )
column.set_sizing( gtk.TREE_VIEW_COLUMN_FIXED )
column.set_expand(True)
view.append_column( column )
view.set_model(input_widget)
for opt in combo_options:
input_widget.append((opt,))
myhbox_l.pack_start(view, expand = True, fill = True)
myvbox_l = gtk.VBox()
add_button = gtk.Button()
add_image = gtk.Image()
add_image.set_from_stock("gtk-add", gtk.ICON_SIZE_BUTTON)
add_button.add(add_image)
rm_button = gtk.Button()
rm_image = gtk.Image()
rm_image.set_from_stock("gtk-remove", gtk.ICON_SIZE_BUTTON)
rm_button.add(rm_image)
myvbox_l.pack_start(add_button, expand = False, fill = False)
myvbox_l.pack_start(rm_button, expand = False, fill = False)
def on_add_button(widget):
mydata = inputDialog(mywin, _("Add atom"), [('atom',_('Atom'),input_cb,False)], True)
if mydata == None: return
atom = mydata.get('atom')
input_widget.append((atom,))
def on_remove_button(widget):
model, iterator = view.get_selection().get_selected()
if iterator == None: return
model.remove(iterator)
add_button.connect("clicked",on_add_button)
rm_button.connect("clicked",on_remove_button)
myhbox_l.pack_start(myvbox_l, expand = False, fill = False)
mytable.attach(myhbox_l, 0, 2, row_count, row_count+1)
elif input_type == "text":
def rescroll_output(adj, scroll):
@@ -5710,13 +5762,16 @@ class InputDialog:
scrolled_win.add_with_viewport(my_tv)
mytable.attach(input_label, 0, 1, row_count, row_count+1)
mytable.attach(scrolled_win, 1, 2, row_count, row_count+1)
else:
continue
self.entry_text_table[input_id] = text
self.identifiers_table[input_id] = input_widget
if input_type in ["list"]:
def input_cb(s): return s
self.cb_table[input_widget] = input_cb
if input_type != "text":
if input_type not in ["text","list"]:
mytable.attach(input_widget, 1, 2, row_count, row_count+1)
@@ -5747,7 +5802,7 @@ class InputDialog:
mycancel = gtk.Button(stock = "gtk-cancel")
mycancel.connect('clicked', self.do_cancel )
bbox.pack_start(mycancel)
myvbox.pack_start(bbox)
myvbox.pack_start(bbox, expand = False, fill = False)
myvbox.set_spacing(10)
myvbox.show()
myhbox.pack_start(myvbox, padding = 10)
@@ -5778,6 +5833,12 @@ class InputDialog:
content = mywidget.get_active(),mywidget.get_active_text()
elif isinstance(mywidget,gtk.TextBuffer):
content = mywidget.get_text(mywidget.get_start_iter(),mywidget.get_end_iter(), True)
elif isinstance(mywidget,(gtk.ListStore,gtk.TreeStore,)):
myiter = mywidget.get_iter_first()
content = []
while myiter:
content.append(mywidget.get_value(myiter, 0))
myiter = mywidget.iter_next(myiter)
else:
continue
verify_cb = self.cb_table.get(mywidget)
+4
View File
@@ -45,6 +45,8 @@ class DummyEntropyPackage:
self.set_from = None
self.set_cat_namedesc = None
self.set_category = False
self.set_install_incomplete = False
self.set_remove_incomplete = False
class EntropyPackage:
@@ -67,6 +69,8 @@ class EntropyPackage:
self.set_from = None
self.set_cat_namedesc = None
self.set_category = False
self.set_install_incomplete = False
self.set_remove_incomplete = False
self.matched_atom = matched_atom
self.installed_match = None
+18 -13
View File
@@ -226,18 +226,20 @@ class EntropyPackages:
def _pkg_get_pkgset_matches_installed_matches(self, set_deps):
set_matches = []
set_installed_matches = []
install_incomplete = False
remove_incomplete = False
for set_dep in set_deps:
if set_dep.startswith(etpConst['packagesetprefix']):
set_matches.append((set_dep,None,))
set_installed_matches.append((set_dep,None,))
else:
set_match = self.Entropy.atomMatch(set_dep)
if set_match[0] != -1:
set_matches.append(set_match)
if set_match[0] != -1: set_matches.append(set_match)
else: install_incomplete = True
set_installed_match = self.Entropy.clientDbconn.atomMatch(set_dep)
if set_match[0] != -1:
set_installed_matches.append(set_installed_match)
return set_matches,set_installed_matches
if set_match[0] != -1: set_installed_matches.append(set_installed_match)
else: remove_incomplete = True
return set_matches, set_installed_matches, install_incomplete, remove_incomplete
def _pkg_get_pkgset_set_from_desc(self, set_from):
my_set_from = _('Set from')
@@ -264,7 +266,7 @@ class EntropyPackages:
pkgsets = self.getPackageSets()
for set_from, set_name, set_deps in pkgsets:
set_matches, set_installed_matches = self._pkg_get_pkgset_matches_installed_matches(set_deps)
set_matches, set_installed_matches, install_incomplete, remove_incomplete = self._pkg_get_pkgset_matches_installed_matches(set_deps)
if not (set_matches and set_installed_matches): continue
cat_namedesc = self._pkg_get_pkgset_set_from_desc(set_from)
set_objects = []
@@ -277,10 +279,8 @@ class EntropyPackages:
yp.set_matches = set_matches
yp.set_installed_matches = set_installed_matches
# add myself, to make sure we have an element in cache
#yp, new = gp_call("%s%s" % (etpConst['packagesetprefix'],set_name,),True)
#update_yp(yp)
myobjs = []
broken = False
for match in set_matches:
# set dependency
if match[1] == None:
@@ -290,9 +290,14 @@ class EntropyPackages:
try:
yp, new = gp_call(match,True)
except exceptionTools.RepositoryError:
continue
update_yp(yp)
objects.append(yp)
broken = True
break
myobjs.append(yp)
if broken: continue
for yp in myobjs: yp.set_names.clear()
for yp in myobjs: update_yp(yp)
objects += myobjs
return objects
+1934 -1831
View File
File diff suppressed because it is too large Load Diff
+69 -1
View File
@@ -2128,6 +2128,9 @@ class SpritzApplication(Controller):
else:
self.ui.maskedWarningBox.hide()
if action == "pkgsets": self.ui.pkgsetsButtonBox.show()
else: self.ui.pkgsetsButtonBox.hide()
if action == "queued": self.ui.queueReviewAndInstallBox.show()
else: self.ui.queueReviewAndInstallBox.hide()
@@ -2433,6 +2436,72 @@ class SpritzApplication(Controller):
def on_noticeBoardMenuItem_activate(self, widget):
self.showNoticeBoard()
def on_pkgsetAddButton_clicked(self, widget):
current_sets = self.Equo.packageSetList()
def fake_callback(s):
if (s not in current_sets) and (" " not in s) and (not s.startswith(etpConst['packagesetprefix'])):
return True
return False
def lv_callback(atom):
c_id, c_rc = self.Equo.clientDbconn.atomMatch(atom)
if c_id != -1: return True
c_id, c_rc = self.Equo.atomMatch(atom)
if c_id != -1: return True
return False
input_params = [
('name',_("Package Set name"),fake_callback,False),
('atoms',('list',(_('Package atoms'),[],),),lv_callback,False)
]
data = self.Equo.inputBox(
_('Choose what Package Set you want to add'),
input_params,
cancel_button = True
)
if data == None: return
rc, msg = self.Equo.add_user_package_set(data.get("name"), data.get("atoms"))
if rc != 0:
okDialog(self.ui.main,"%s: %s" % (_("Error"),msg,))
return
self.etpbase.clearPackagesSingle("pkgsets")
self.addPackages()
def on_pkgsetRemoveButton_clicked(self, widget):
def mymf(m):
set_from, set_name, set_deps = m
if set_from == etpConst['userpackagesetsid']:
return set_name
return 0
avail_pkgsets = [x for x in map(mymf,self.Equo.packageSetList()) if x != 0]
def fake_callback(s):
return True
input_params = [
('pkgset',('combo',(_('Removable Package Set'),avail_pkgsets),),fake_callback,False)
]
data = self.Equo.inputBox(
_('Choose what Package Set you want to remove'),
input_params,
cancel_button = True
)
if data == None: return
x_id,set_name = data.get("pkgset")
rc, msg = self.Equo.remove_user_package_set(set_name)
if rc != 0:
okDialog(self.ui.main,"%s: %s" % (_("Error"),msg,))
return
self.etpbase.clearPackagesSingle("pkgsets")
self.addPackages()
def on_deptestButton_clicked(self, widget):
self.switchNotebookPage("output")
self.uiLock(True)
@@ -2556,7 +2625,6 @@ class SpritzApplication(Controller):
do_stop()
def on_color_reset(self, widget):
# get parent
parent = widget.get_parent()
+7 -4
View File
@@ -771,8 +771,13 @@ class EntropyPackageView:
pkgsets, exp_matches, objs, set_objs, exp_atoms = self._get_pkgset_data(self.selected_objs, add = install)
if not objs+set_objs: return
q_cache = {}
install_incomplete = [x for x in self.selected_objs if x.set_install_incomplete]
remove_incomplete = [x for x in self.selected_objs if x.set_remove_incomplete]
if (install and install_incomplete) or ((not install) and remove_incomplete):
okDialog(self.ui.main,_("There are incomplete package sets, continue at your own risk"))
q_cache = {}
for obj in objs+set_objs:
q_cache[obj.matched_atom] = obj.queued
if install:
@@ -1113,13 +1118,11 @@ class EntropyPackageView:
mydummy = DummyEntropyPackage(namedesc = cat_text, dummy_type = SpritzConf.dummy_category, onlyname = category)
mydummy.color = SpritzConf.color_package_category
if pkgsets:
set_from, set_name, set_deps = self.Equo.packageSetMatch(category)[0]
mydummy.set_category = category
mydummy.set_from = set_from
mydummy.set_matches, mydummy.set_installed_matches = self.etpbase._pkg_get_pkgset_matches_installed_matches(set_deps)
mydummy.set_matches, mydummy.set_installed_matches, mydummy.set_install_incomplete, mydummy.set_remove_incomplete = self.etpbase._pkg_get_pkgset_matches_installed_matches(set_deps)
mydummy.namedesc = "<b><big>%s</big></b>\n<small>%s</small>" % (category,cleanMarkupString(self.etpbase._pkg_get_pkgset_set_from_desc(set_from)),)
self.dummyCats[category] = mydummy
parent = self.store.append( None, (mydummy,) )
for po in categories[category]: