summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--comps.py48
-rw-r--r--textw/packages_text.py59
2 files changed, 89 insertions, 18 deletions
diff --git a/comps.py b/comps.py
index 85af57884..3d1a8e97e 100644
--- a/comps.py
+++ b/comps.py
@@ -45,6 +45,9 @@ class HeaderList:
def __getitem__(self, item):
return self.packages[item]
+ def list(self):
+ return self.packages.values()
+
def __init__(self, hdlist):
self.hdlist = hdlist
self.packages = {}
@@ -77,6 +80,9 @@ class Component:
def __getitem__(self, key):
return self.items[key]
+ def __repr__(self):
+ return "comp %s" % (self.name)
+
def addPackage(self, package):
self.items[package] = package
@@ -171,6 +177,48 @@ class ComponentSet:
return self.comps[key]
return self.compsDict[key]
+ def getSelectionState(self):
+ compsSelected = []
+ pkgsSelected = []
+ for comp in self.comps:
+ if comp.selected:
+ compsSelected.append(comp)
+
+ for pkg in self.packages.list():
+ if pkg.selected:
+ pkgsSelected.append(pkg)
+
+ return (compsSelected, pkgsSelected)
+
+ def setSelectionState(self, pickle):
+ (compsSelected, pkgsSelected) = pickle
+
+ for comp in self.comps:
+ if not comp.hidden: comp.unselect(0)
+ for comp in compsSelected:
+ comp.select(1)
+ self['Base'].select(1)
+
+ for pkg in self.packages.list():
+ pkg.selected = 0
+ for pkg in pkgsSelected:
+ pkg.selected = 1
+
+ def sizeStr(self):
+ megs = self.size() / 1024 / 1024
+ if (megs >= 1000):
+ big = megs / 1000
+ little = megs % 1000
+ return "%d,%dM" % (big, little)
+
+ return "%dM" % (megs)
+
+ def size(self):
+ total = 0
+ for pkg in self.packages.list():
+ if pkg.selected: total = total + pkg['size']
+ return total
+
def keys(self):
return self.compsDict.keys()
diff --git a/textw/packages_text.py b/textw/packages_text.py
index e315f3c6c..23f7aeba2 100644
--- a/textw/packages_text.py
+++ b/textw/packages_text.py
@@ -5,41 +5,62 @@ from constants_text import *
from translate import _
class PackageGroupWindow:
+
+ def size(self, comps):
+ return _("Total install size: %s") % comps.sizeStr()
+
+ def updateSize(self, args):
+ (label, comps, ct) = args
+
+ # turn off all the comps
+ for comp in comps:
+ if not comp.hidden: comp.unselect(0)
+
+ # it's a shame component selection sucks
+
+ # turn on all the comps we selected
+ comps['Base'].select (1)
+ for comp in ct.getSelection():
+ comp.select (1)
+
+ label.setText(self.size(comps))
+
def __call__(self, screen, todo, individual):
# be sure that the headers and comps files have been read.
todo.getHeaderList()
todo.getCompsList()
- ct = CheckboxTree(height = 10, scroll = 1)
+ origSelection = todo.comps.getSelectionState()
+
+ ct = CheckboxTree(height = 8, scroll = 1)
for comp in todo.comps:
if not comp.hidden:
ct.append(comp.name, comp, comp.selected)
cb = Checkbox (_("Select individual packages"), individual.get ())
-
bb = ButtonBar (screen, ((_("OK"), "ok"), (_("Back"), "back")))
+ la = Label(self.size(todo.comps))
- g = GridFormHelp (screen, _("Package Group Selection"),
- "components", 1, 3)
- g.add (ct, 0, 0, (0, 0, 0, 1))
- g.add (cb, 0, 1, (0, 0, 0, 1))
- g.add (bb, 0, 2, growx = 1)
+ ct.setCallback(self.updateSize, (la, todo.comps, ct))
- result = g.runOnce()
+ g = GridFormHelp (screen, _("Package Group Selection"),
+ "components", 1, 4)
- individual.set (cb.selected())
- # turn off all the comps
- for comp in todo.comps:
- if not comp.hidden: comp.unselect(0)
+ g.add (la, 0, 0, (0, 0, 0, 1), anchorLeft = 1)
+ g.add (ct, 0, 1, (0, 0, 0, 1))
+ g.add (cb, 0, 2, (0, 0, 0, 1))
+ g.add (bb, 0, 3, growx = 1)
- # turn on all the comps we selected
- for comp in ct.getSelection():
- comp.select (1)
+ result = g.runOnce()
rc = bb.buttonPressed (result)
if rc == "back":
+ todo.comps.setSelectionState(origSelection)
return INSTALL_BACK
+
+ individual.set (cb.selected())
+
return INSTALL_OK
class IndividualPackageWindow:
@@ -79,7 +100,7 @@ class IndividualPackageWindow:
def printTotal(self):
size = self.total / 1024
- self.lbl.setText("%4d.%dM" % (size / 1024, (((size * 10) / 1024) % 10)))
+ self.lbl.setText("%-*s %4d.%dM" % (self.length, _("Total size"), size / 1024, (((size * 10) / 1024) % 10)))
def printNum(self, group):
if self.groupCount[group] == self.groupSelCount[group]:
@@ -130,6 +151,7 @@ class IndividualPackageWindow:
return
todo.getHeaderList()
todo.getCompsList()
+ origSelection = todo.comps.getSelectionState()
ct = CheckboxTree(height = 10, scroll = 1)
self.ct = ct
@@ -201,7 +223,7 @@ class IndividualPackageWindow:
g = GridFormHelp (screen, _("Package Group Selection"), "packagetree",
1, 3)
g.add (ct, 0, 0, (0, 0, 0, 0))
- g.add (self.lbl, 0, 1, (self.length + 5, 0, 0, 1))
+ g.add (self.lbl, 0, 1, (4, 0, 0, 1), anchorLeft = 1)
g.add (bb, 0, 2, growx = 1)
g.addHotKey("F2")
@@ -219,11 +241,12 @@ class IndividualPackageWindow:
screen.popWindow()
- screen.pushHelpLine (_(" <Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"))
+ screen.popHelpLine ()
rc = bb.buttonPressed (result)
if rc == "back":
+ todo.comps.setSelectionState(origSelection)
return INSTALL_BACK
return INSTALL_OK