diff options
| author | Michael Vogt <egon@top> | 2005-12-06 22:59:31 +0100 |
|---|---|---|
| committer | Michael Vogt <egon@top> | 2005-12-06 22:59:31 +0100 |
| commit | a5ffde4fbdcd5a6b4231bb2f1890cd4c7d5bd9cc (patch) | |
| tree | 3166a794d480d1799d49bdd981e34d512e2c837c | |
| parent | a5be3591b8c7b53422b19575a7b085205763c2c3 (diff) | |
| download | python-apt-a5ffde4fbdcd5a6b4231bb2f1890cd4c7d5bd9cc.tar.gz | |
* terminal/install-progress support added
| -rw-r--r-- | DistUpgrade/DistUpgrade.glade | 78 | ||||
| -rw-r--r-- | DistUpgrade/DistUpgrade.py | 54 |
2 files changed, 125 insertions, 7 deletions
diff --git a/DistUpgrade/DistUpgrade.glade b/DistUpgrade/DistUpgrade.glade index 789262d3..f705cf3d 100644 --- a/DistUpgrade/DistUpgrade.glade +++ b/DistUpgrade/DistUpgrade.glade @@ -22,12 +22,13 @@ <child> <widget class="GtkVBox" id="vbox1"> + <property name="border_width">6</property> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">6</property> <child> - <widget class="GtkLabel" id="label2"> + <widget class="GtkLabel" id="label_title"> <property name="visible">True</property> <property name="label" translatable="yes"><big><b>Distribution upgrade</b></big></property> <property name="use_underline">False</property> @@ -52,6 +53,35 @@ </child> <child> + <placeholder/> + </child> + + <child> + <widget class="GtkLabel" id="label_status"> + <property name="visible">True</property> + <property name="label" translatable="yes"></property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> <widget class="GtkProgressBar" id="progressbar_cache"> <property name="visible">True</property> <property name="orientation">GTK_PROGRESS_LEFT_TO_RIGHT</property> @@ -67,7 +97,7 @@ </child> <child> - <widget class="GtkLabel" id="label_status"> + <widget class="GtkLabel" id="label_extra_status"> <property name="visible">True</property> <property name="label" translatable="yes"></property> <property name="use_underline">False</property> @@ -92,7 +122,49 @@ </child> <child> - <placeholder/> + <widget class="GtkExpander" id="expander_terminal"> + <property name="can_focus">True</property> + <property name="expanded">False</property> + <property name="spacing">0</property> + + <child> + <widget class="Custom" id="custom_terminal"> + <property name="visible">True</property> + <property name="creation_function">create_terminal</property> + <property name="int1">0</property> + <property name="int2">0</property> + <property name="last_modification_time">Tue, 06 Dec 2005 20:03:08 GMT</property> + </widget> + </child> + + <child> + <widget class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="label" translatable="yes">Terminal</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="type">label_item</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> </child> </widget> </child> diff --git a/DistUpgrade/DistUpgrade.py b/DistUpgrade/DistUpgrade.py index 6f2010db..932ddba1 100644 --- a/DistUpgrade/DistUpgrade.py +++ b/DistUpgrade/DistUpgrade.py @@ -5,17 +5,21 @@ pygtk.require('2.0') import gtk import gtk.gdk import gtk.glade +import vte import gobject import apt import apt_pkg import sys +import os import subprocess from UpdateManager.Common.SimpleGladeApp import SimpleGladeApp from UpdateManager.GtkProgress import GtkOpProgress from SoftwareProperties.aptsources import SourcesList, SourceEntry from gettext import gettext as _ +from apt.progress import InstallProgress + class MyCache(apt.Cache): @property @@ -34,9 +38,6 @@ class MyCache(apt.Cache): return False return ver.Downloadable - - - class DistUpgradeView(object): " abstraction for the upgrade view " def __init__(self): @@ -83,7 +84,7 @@ class GtkDistUpgradeView(DistUpgradeView,SimpleGladeApp): # FIXME2: we need to thing about mediaCheck here too def __init__(self, parent): # if this is set to false the download will cancel - self.status = parent.label_status + self.status = parent.label_extra_status self.progress = parent.progressbar_cache def start(self): self.progress.show() @@ -107,6 +108,42 @@ class GtkDistUpgradeView(DistUpgradeView,SimpleGladeApp): gtk.main_iteration() return True + class GtkInstallProgressAdapter(InstallProgress): + def __init__(self,parent): + InstallProgress.__init__(self) + self.status = parent.label_extra_status + self.progress = parent.progressbar_cache + self.expander = parent.expander_terminal + self.term = parent._term + # setup the child waiting + reaper = vte.reaper_get() + reaper.connect("child-exited", self.child_exited) + self.finished = False + def startUpdate(self): + self.status.set_text(_("Installing updates ...")) + self.progress.set_fraction(0.0) + self.expander.show() + self.term.show() + self.env = ["VTE_PTY_KEEP_FD=%s"% self.writefd] + def fork(self): + return self.term.forkpty(envv=self.env) + def child_exited(self, term, pid, status): + #print "child_exited: %s %s %s %s" % (self,term,pid,status) + self.apt_status = os.WEXITSTATUS(status) + self.finished = True + def waitChild(self): + while not self.finished: + self.updateInterface() + return self.apt_status + def finishUpdate(self): + pass + def updateInterface(self): + InstallProgress.updateInterface(self) + self.progress.set_fraction(self.percent) + while gtk.events_pending(): + gtk.main_iteration() + + def __init__(self): # FIXME: i18n must be somewhere relative do this dir @@ -114,6 +151,7 @@ class GtkDistUpgradeView(DistUpgradeView,SimpleGladeApp): None, domain="update-manager") self._opCacheProgress = GtkOpProgress(self.progressbar_cache) self._fetchProgress = self.GtkFetchProgressAdapter(self) + self._installProgress = self.GtkInstallProgressAdapter(self) # details dialog self.details_list = gtk.ListStore(gobject.TYPE_STRING) column = gtk.TreeViewColumn("") @@ -123,8 +161,16 @@ class GtkDistUpgradeView(DistUpgradeView,SimpleGladeApp): self.treeview_details.append_column(column) self.treeview_details.set_model(self.details_list) + def create_terminal(self, arg1,arg2,arg3,arg4): + " helper to create a vte terminal " + print "create_vte (for the custom glade widget)" + self._term = vte.Terminal() + self._term.set_font_from_string("monospace 10") + return self._term def getFetchProgress(self): return self._fetchProgress + def getInstallProgress(self): + return self._installProgress def getOpCacheProgress(self): return self._opCacheProgress def updateStatus(self, msg): |
