summaryrefslogtreecommitdiffstats
path: root/textw
diff options
context:
space:
mode:
authorJeremy Katz <katzj@redhat.com>2007-02-28 20:18:02 +0000
committerJeremy Katz <katzj@redhat.com>2007-02-28 20:18:02 +0000
commit12d732d6cffeba3b7f7f822050dc3cc886fffa06 (patch)
tree39984096ba52461313e000a09fbe127ef2097e48 /textw
parentad9b3561c8b264c1b760991c41088fc442dfc986 (diff)
downloadanaconda-12d732d6cffeba3b7f7f822050dc3cc886fffa06.tar.gz
anaconda-12d732d6cffeba3b7f7f822050dc3cc886fffa06.tar.xz
anaconda-12d732d6cffeba3b7f7f822050dc3cc886fffa06.zip
2007-02-28 Jeremy Katz <katzj@redhat.com>
* yuminstall.py: Use new progress API * livecd.py: Likewise. * iw/progress_gui.py: New progress screen interface that's more suited to different backends * textw/progress_text.py: Likewise. * cmdline.py (progressDisplay): Likewise.
Diffstat (limited to 'textw')
-rw-r--r--textw/progress_text.py277
1 files changed, 94 insertions, 183 deletions
diff --git a/textw/progress_text.py b/textw/progress_text.py
index dc6f44d0e..007314203 100644
--- a/textw/progress_text.py
+++ b/textw/progress_text.py
@@ -1,7 +1,7 @@
#
# progress_text.py: text mode install/upgrade progress dialog
#
-# Copyright 2001-2002 Red Hat, Inc.
+# Copyright 2001-2007 Red Hat, Inc.
#
# This software may be freely redistributed under the terms of the GNU
# library public license.
@@ -10,7 +10,6 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
-import rpm
from constants import *
from snack import *
from constants_text import *
@@ -19,188 +18,88 @@ from rhpl.translate import _
import logging
log = logging.getLogger("anaconda")
+def strip_markup(text):
+ if text.find("<") == -1:
+ return text
+ r = ""
+ inTag = False
+ for c in text:
+ if c == ">" and inTag:
+ inTag = False
+ continue
+ elif c == "<" and not inTag:
+ inTag = True
+ continue
+ elif not inTag:
+ r += c
+ return r
+
class InstallProgressWindow:
- def completePackage(self, header, timer):
- def formatTime(amt):
- hours = amt / 60 / 60
- amt = amt % (60 * 60)
- min = amt / 60
- amt = amt % 60
- secs = amt
-
- return "%01d:%02d:%02d" % (int(hours) ,int(min), int(secs))
-
- self.numComplete = self.numComplete + 1
- self.sizeComplete = self.sizeComplete + (header[rpm.RPMTAG_SIZE] / 1024)
- self.numCompleteW.setText("%12d" % self.numComplete)
- self.sizeCompleteW.setText("%10dM" % (self.sizeComplete/1024))
- self.numRemainingW.setText("%12d" % (self.numTotal - self.numComplete))
- self.sizeRemainingW.setText("%10dM" % (self.sizeTotal/1024 - self.sizeComplete/1024))
- self.total.set(self.sizeComplete)
-
- elapsedTime = timer.elapsed()
- if not elapsedTime:
- elapsedTime = 1
- self.timeCompleteW.setText("%12s" % formatTime(elapsedTime))
- if self.sizeComplete != 0:
- finishTime = (float (self.sizeTotal) / (self.sizeComplete)) * elapsedTime;
- else:
- finishTime = (float (self.sizeTotal) / (self.sizeComplete+1)) * elapsedTime;
- self.timeTotalW.setText("%12s" % formatTime(finishTime))
- remainingTime = finishTime - elapsedTime;
- self.timeRemainingW.setText("%12s" % formatTime(remainingTime))
-
- self.g.draw()
- self.screen.refresh()
-
- def setPackageScale(self, amount, total):
- self.s.set(int(((amount * 1.0)/ total) * 100))
- self.g.draw()
- self.screen.refresh()
-
- def setPackageStatus(self, state, amount):
- if self.pkgstatus is None:
- return
-
- if state == "downloading":
- msgstr = _("Downloading - %s") % (amount,)
- else:
- msgstr = state
- self.pkgstatus.setText(msgstr)
- self.g.draw()
- self.screen.refresh()
-
- def setPackage(self, header):
- pkgname = "%s-%s-%s-%s" % (header[rpm.RPMTAG_NAME],
- header[rpm.RPMTAG_VERSION],
- header[rpm.RPMTAG_RELEASE],
- header[rpm.RPMTAG_ARCH])
- if len(pkgname) > 48:
- pkgname = "%s..." %(pkgname[:45])
-
- self.name.setText(pkgname)
- self.size.setText("%dk" % (header[rpm.RPMTAG_SIZE] / 1024))
- summary = header[rpm.RPMTAG_SUMMARY]
- if (summary != None):
- self.summ.setText(summary)
- else:
- self.summ.setText("(none)")
-
- self.g.draw()
- self.screen.refresh()
+ def __init__(self, screen):
+ self.screen = screen
+ self.drawn = False
+
+ self.pct = 0
+
+ def __del__ (self):
+ if self.drawn:
+ self.screen.popWindow ()
+
+ def _setupScreen(self):
+ screen = self.screen
+
+ self.grid = GridForm(self.screen, _("Package Installation"), 1, 6)
+
+ self.width = 65
+ self.progress = Scale(self.width, 100)
+ self.grid.add (self.progress, 0, 1, (0, 1, 0, 0))
+
+ self.label = Label("")
+ self.grid.add(self.label, 0, 2, (0, 1, 0, 0), anchorLeft = 1)
+
+ self.info = Textbox(self.width, 4, "", wrap = 1)
+ self.grid.add(self.info, 0, 3, (0, 1, 0, 0))
+
+ self.grid.draw()
+ screen.refresh()
+ self.drawn = True
def processEvents(self):
- pass
+ if not self.drawn:
+ return
+ self.grid.draw()
+ self.screen.refresh()
- def setSizes(self, total, totalSize, totalFiles):
- screen = self.screen
+ def get_fraction(self):
+ return self.pct
- if self.showdownload:
- totlen = 7
- else:
- totlen = 6
-
- toplevel = GridForm(self.screen, _("Package Installation"), 1, totlen)
-
- name = _(" Name : ")
- size = _(" Size : ")
- sum = _(" Summary: ")
+ def set_fraction(self, pct):
+ if not self.drawn:
+ self._setupScreen()
- currow = 0
+ self.progress.set(int(pct * 100))
+ self.pct = pct
+ self.processEvents()
+
+ def set_label(self, txt):
+ if not self.drawn:
+ self._setupScreen()
- width = 47 + max (len (name), len (size), len (sum))
- self.name = Label(" " * 48)
- self.size = Label(" ")
- detail = Grid(2, 2)
- detail.setField(Label(name), 0, 0, anchorLeft = 1)
- detail.setField(Label(size), 0, 1, anchorLeft = 1)
- detail.setField(self.name, 1, 0, anchorLeft = 1)
- detail.setField(self.size, 1, 1, anchorLeft = 1)
- toplevel.add(detail, 0, currow)
- currow += 1
-
- summary = Grid(2, 1)
- summlabel = Label(sum)
- self.summ = Textbox(48, 2, "", wrap = 1)
- summary.setField(summlabel, 0, 0)
- summary.setField(self.summ, 1, 0)
- toplevel.add(summary, 0, currow)
- currow += 1
-
- if self.showdownload:
- toplevel.add(Label(""), 0, currow)
- currow += 1
-
- pkgstatgrid = Grid(2, 1)
- pkgstatlabel = Label(_("Status: "))
- self.pkgstatus = Label(" " * 48)
- pkgstatgrid.setField(pkgstatlabel, 0, 0)
- pkgstatgrid.setField(self.pkgstatus, 1, 0)
- toplevel.add(pkgstatgrid, 0, currow)
- currow += 1
- else:
- self.pkgstatus = None
-
- self.s = Scale (width, 100)
- toplevel.add (self.s, 0, currow, (0, 1, 0, 1))
- currow += 1
-
- overall = Grid(4, 4)
- # don't ask me why, but if this spacer isn"t here then the
- # grid code gets unhappy
- overall.setField (Label (" " * 19), 0, 0, anchorLeft = 1)
- overall.setField (Label (_(" Packages")), 1, 0, anchorLeft = 1)
- overall.setField (Label (_(" Bytes")), 2, 0, anchorLeft = 1)
- overall.setField (Label (_(" Time")), 3, 0, anchorLeft = 1)
-
- overall.setField (Label (_("Total :")), 0, 1, anchorLeft = 1)
- overall.setField (Label ("%12d" % total), 1, 1, anchorLeft = 1)
- overall.setField (Label ("%10dM" % (totalSize/1024)),
- 2, 1, anchorLeft = 1)
- self.timeTotalW = Label("")
- overall.setField(self.timeTotalW, 3, 1, anchorLeft = 1)
-
- overall.setField (Label (_("Completed: ")), 0, 2, anchorLeft = 1)
- self.numComplete = 0
- self.numCompleteW = Label("%12d" % self.numComplete)
- overall.setField(self.numCompleteW, 1, 2, anchorLeft = 1)
- self.sizeComplete = 0
- self.sizeCompleteW = Label("%10dM" % (self.sizeComplete))
- overall.setField(self.sizeCompleteW, 2, 2, anchorLeft = 1)
- self.timeCompleteW = Label("")
- overall.setField(self.timeCompleteW, 3, 2, anchorLeft = 1)
-
- overall.setField (Label (_("Remaining: ")), 0, 3, anchorLeft = 1)
- self.numRemainingW = Label("%12d" % total)
- self.sizeRemainingW = Label("%10dM" % (totalSize/1024))
- overall.setField(self.numRemainingW, 1, 3, anchorLeft = 1)
- overall.setField(self.sizeRemainingW, 2, 3, anchorLeft = 1)
- self.timeRemainingW = Label("")
- overall.setField(self.timeRemainingW, 3, 3, anchorLeft = 1)
-
- toplevel.add(overall, 0, currow)
- currow += 1
-
- self.numTotal = total
- self.sizeTotal = totalSize
- self.total = Scale (width, totalSize)
- toplevel.add(self.total, 0, currow, (0, 1, 0, 0))
- currow += 1
-
- self.timeStarted = -1
-
- toplevel.draw()
- self.g = toplevel
- screen.refresh()
- self.drawn = 1
-
- def __init__(self, screen, showdownload=0):
- self.screen = screen
- self.showdownload = showdownload
- self.drawn = 0
+ self.info.setText(strip_markup(txt))
+ self.processEvents()
- def __del__ (self):
- if self.drawn: self.screen.popWindow ()
+ def set_text(self, txt):
+ if not self.drawn:
+ self._setupScreen()
+
+ if len(txt) > self.width:
+ txt = txt[:self.width]
+ else:
+ spaces = (self.width - len(txt)) / 2
+ txt = (" " * spaces) + txt
+
+ self.label.setText(strip_markup(txt))
+ self.processEvents()
class setupForInstall:
@@ -208,12 +107,24 @@ class setupForInstall:
if anaconda.dir == DISPATCH_BACK:
anaconda.id.setInstallProgressClass(None)
return INSTALL_BACK
- else:
- flag = 0
- if anaconda.methodstr.startswith("http://") or anaconda.methodstr.startswith("ftp://"):
- flag = 1
-
- log.info("anaconda.methodstr = %s %s", anaconda.methodstr, flag)
- anaconda.id.setInstallProgressClass(InstallProgressWindow(screen, showdownload=flag))
+ anaconda.id.setInstallProgressClass(InstallProgressWindow(screen))
return INSTALL_OK
+
+if __name__ == "__main__":
+ screen = SnackScreen()
+ ipw = InstallProgressWindow(screen)
+
+ import time
+ ipw._setupScreen()
+ time.sleep(2)
+
+ ipw.set_label("testing blah\n<b>blahblahb</b>lahbl ahalsdfkj")
+ ipw.set_text("blah blah blah")
+ ipw.set_fraction(0.25)
+ time.sleep(2)
+
+ p = ipw.get_fraction()
+
+ screen.finish()
+ print p