Viewing file: InstallProgressDialog.py (7.71 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
import gtk import gtk.glade import os import locale import rpm
from ProgressDialog import ProgressDialog from config import * from constants import * from GroupSet import tenevra from rhpl.translate import _, N_, textdomain from size_string import size_string from SummaryModel import SummaryModel, setup_summary_tree
textdomain(PROGNAME)
MODE_PROGRESS='progress' MODE_INFO='info' MODE_INSTALL='install' MODE_POST_INSTALL='post-install' MODE_PACKAGE_INSTALL='package-install'
INFO_TEXT="<span weight=\"bold\" size=\"larger\">" + _("Completed System Preparation") + "</span>\n\n" INSTALL_TEXT="<span weight=\"bold\" size=\"larger\">" + _("Updating System") + "</span>\n\ \n" + \ _("Installing and removing individual packages.\n")
POST_INSTALL_TEXT="<span weight=\"bold\" size=\"larger\">"+ _("Update Complete") + "</span>\n\ \n" + \ _("The system update was successfully completed.\n")
class CancelInstallation (Exception): pass
class InstallProgressDialog (ProgressDialog): def __init__ (self, parent=None): glade_file = 'InstallProgressDialog.glade' if not os.path.isfile(glade_file): glade_file = GLADEDIR + glade_file xml = gtk.glade.XML (glade_file, domain=PROGNAME)
self.notebook = xml.get_widget ('label_notebook') self.progress_label = xml.get_widget ('progress_label') self.summary_label = xml.get_widget ('summary_label') self.info_label = xml.get_widget ('info_label') self.progressbar = xml.get_widget ('progress_progressbar') self.dialog = xml.get_widget ('install_progress_dialog') self.continue_button = xml.get_widget ('continue_button') self.details_hbox = xml.get_widget ('details_hbox') self.cancel_button = xml.get_widget ('cancel_button') self.ok_button = xml.get_widget ('ok_button') self.details_button = xml.get_widget ('details_button') self.details_swindow = xml.get_widget ('details_swindow') self.details_tree_view = xml.get_widget ('details_tree_view') self.install_progress_progressbar = xml.get_widget ('install_progress_progressbar') self.install_progress_label = xml.get_widget ('install_progress_label') self.install_info_label = xml.get_widget ('install_info_label') self.response_cb_id = 0 ProgressDialog.__init__ (self, parent)
# Details tree self.details_button.connect ('clicked', self.details_clicked_cb) setup_summary_tree (self.details_tree_view) self.details_swindow.set_size_request (-1, 300)
self.dialog.show () self.switch_mode (MODE_PROGRESS)
def toggle_details_state (self): if not self.details_swindow.flags () & gtk.VISIBLE: self.details_button.set_label (_("Hide _Details")) self.details_swindow.show () self.dialog.set_resizable (True) else: self.details_button.set_label (_("Show _Details")) self.details_swindow.hide () self.dialog.set_resizable (False)
def details_clicked_cb (self, button): self.toggle_details_state ()
def switch_mode (self, mode): if mode == MODE_PROGRESS: self.dialog.set_resizable (False) def response_cb (dialog, response_id, self): if response_id == 0: return self.cancel()
if self.response_cb_id != 0: self.dialog.disconnect (self.response_cb_id) self.response_cb_id = self.dialog.connect ('response', response_cb, self)
self.notebook.set_current_page (0) self.continue_button.set_sensitive(False) elif mode == MODE_INFO: if self.response_cb_id != 0: self.dialog.disconnect (self.response_cb_id) self.response_cb_id = 0 self.notebook.set_current_page (1) self.continue_button.set_sensitive(True) elif mode == MODE_INSTALL: if self.details_swindow.flags () & gtk.VISIBLE: self.toggle_details_state () if self.response_cb_id != 0: self.dialog.disconnect (self.response_cb_id) self.response_cb_id = 0 message = "<span weight=\"bold\" size=\"larger\">" + _("Updating system") + "</span>\n\n" if self.install_count > 0 and self.uninstall_count > 0: message += _("Installing and removing individual packages.\n") elif self.install_count > 0: message += _("Installing individual packages.\n") elif self.uninstall_count > 0: message += _("Remove individual packages.\n")
self.install_progress_label.set_markup (message) self.info_label = self.install_info_label self.progressbar = self.install_progress_progressbar self.clear () self.dialog.set_resizable (False) self.continue_button.set_sensitive(False) self.notebook.set_current_page (2) def response_cb (dialog, response_id, self): return True self.response_cb_id = self.dialog.connect ('response', response_cb, self) self.cancel_button.hide () elif mode == MODE_POST_INSTALL: self.notebook.set_current_page (2) self.install_progress_label.set_markup (POST_INSTALL_TEXT) self.ok_button.show () self.continue_button.hide () self.info_label.set_markup ('<i>Done</i>') def response_cb (dialog, response_id, self): self.destroy () return True self.response_cb_id = self.dialog.connect ('response', response_cb, self)
def info_from_comps (self, ts, hdrlist): self.install_count = 0 self.uninstall_count = 0 size_delta = 0 install_list = [] remove_list = [] for te in ts: package_name = tenevra(te) package = hdrlist[package_name] if te.Type() == (1 << 0): # TR_ADDED self.install_count += 1 size_delta += package[rpm.RPMTAG_SIZE] install_list.append ( (package_name, size_string (package[rpm.RPMTAG_SIZE]))) elif package.installState == TOREMOVE: self.uninstall_count += 1 size_delta -= package[rpm.RPMTAG_SIZE] remove_list.append ( (package_name, size_string (package[rpm.RPMTAG_SIZE]))) summary_label_text = INFO_TEXT if self.install_count > 0: summary_label_text += _("%d packages are queued for installation\n") % self.install_count if self.uninstall_count > 0: summary_label_text += _("%d packages are queued for removal\n") % self.uninstall_count if size_delta < 0: summary_label_text += _("This will free up %s of diskspace.") % size_string (size_delta * -1) else: summary_label_text += _("This will take %s of diskspace.") % size_string (size_delta) summary_label_text += "\n" if len(remove_list) > MAX_PACKAGE_REMOVE_WARN: summary_label_text += "\n\n<b>" + _("Warning:") + "</b> " summary_label_text += _("An excessive number of packages are queued for removal. Please check the list below to confirm that all the packages should be removed.") if not self.details_swindow.flags () & gtk.VISIBLE: self.toggle_details_state () self.summary_label.set_markup (summary_label_text)
model = SummaryModel () model.set_packages (install_list, remove_list) self.details_tree_view.set_model (model)
def continue_install_test (self): if self.dialog.run () == 0: return True self.destroy () return False
|