diff --git a/src/virt-manager.glade b/src/virt-manager.glade index 620da2ac4..c613ca822 100644 --- a/src/virt-manager.glade +++ b/src/virt-manager.glade @@ -4255,14 +4255,16 @@ For all domains True - Saving VM Image + Operation in progress GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER_ON_PARENT False + 300 + 200 True False True - False + True False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST @@ -4276,10 +4278,10 @@ For all domains 0.5 1 1 - 5 - 5 - 12 - 12 + 0 + 3 + 3 + 3 @@ -4288,18 +4290,73 @@ For all domains 5 - + True - Please wait... + False + 0 + + + + True + 4 + gtk-info + 0.5 + 0 + 3 + 10 + + + 0 + False + False + + + + + + True + Please wait a few moments... + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 0 + 10 + 10 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + True + True + + + + + 0 + True + True + + + + + + True + Processing... False False GTK_JUSTIFY_LEFT False False - 0.5 - 0.5 - 0 - 0 + 0 + 0 + 3 + 3 PANGO_ELLIPSIZE_NONE -1 False diff --git a/src/virtManager/asyncjob.py b/src/virtManager/asyncjob.py index 699e1c198..f25c1b659 100644 --- a/src/virtManager/asyncjob.py +++ b/src/virtManager/asyncjob.py @@ -35,54 +35,68 @@ class vmmAsyncJob(gobject.GObject): def run(self): threading.Thread.run(self) - def __init__(self, config, callback, args=None, title="Progress"): + def __init__(self, config, callback, args=None, text=_("Please wait a few moments..."), title=_("Operation in progress")): self.__gobject_init__() self.config = config - self.pbar_glade = gtk.glade.XML(self.config.get_glade_file(), "vmm-progress", domain="virt-manager") - self.pbar_win = self.pbar_glade.get_widget("vmm-progress") - self.pbar_text = self.pbar_glade.get_widget("pbar-text") - self.pbar = self.pbar_glade.get_widget("pbar") - self.pbar_win.set_title(title) - self.pbar_win.hide() + + self.window = gtk.glade.XML(self.config.get_glade_file(), "vmm-progress", domain="virt-manager") + self.window.get_widget("pbar-text").set_text(text) + + self.topwin = self.window.get_widget("vmm-progress") + self.topwin.set_title(title) + self.topwin.hide() + + self.stage = self.window.get_widget("pbar-stage") + self.pbar = self.window.get_widget("pbar") + args.append(self) self.bg_thread = vmmAsyncJob.asyncJobWorker(callback, args) self.is_pulsing = True def run(self): self.timer = gobject.timeout_add (100, self.exit_if_necessary) - self.pbar_win.present() - self.pbar_win.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + self.topwin.present() + self.topwin.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) self.bg_thread.start() gtk.main() gobject.source_remove(self.timer) self.timer = 0 - self.pbar_win.destroy() + self.topwin.destroy() - def pulse_pbar(self, text=None): + def pulse_pbar(self, progress="", stage=None): self.is_pulsing = True - if text is not None: - self.pbar_text.set_text(text) + self.pbar.set_text(progress) + if stage is not None: + self.stage.set_text(stage) + else: + self.stage.set_text(_("Processing...")) - def set_pbar_fraction(self, frac, text=None): + def set_pbar_fraction(self, frac, progress, stage=None): # callback for progress meter when file size is known self.is_pulsing=False - if text is not None: - self.pbar_text.set_text(text) + if stage is not None: + self.stage.set_text(stage) + else: + self.stage.set_text(_("Processing...")) + self.pbar.set_text(progress) self.pbar.set_fraction(frac) - def set_pbar_done(self, text=None): + def set_pbar_done(self, progress, stage=None): #callback for progress meter when progress is done self.is_pulsing=False - if text is not None: - self.pbar_text.set_text(text) + if stage is not None: + self.stage.set_text(stage) + else: + self.stage.set_text(_("Completed")) + self.pbar.set_text(progress) self.pbar.set_fraction(1) - + def exit_if_necessary(self): - if(self.bg_thread.isAlive()): + if self.bg_thread.isAlive(): if(self.is_pulsing): self.pbar.pulse() return True else: gtk.main_quit() return False - + diff --git a/src/virtManager/create.py b/src/virtManager/create.py index 83129480b..3a1ac6711 100644 --- a/src/virtManager/create.py +++ b/src/virtManager/create.py @@ -58,34 +58,38 @@ class vmmCreateMeter(progress.BaseMeter): else: text = self.basename if self.size is None: - self.asyncjob.pulse_pbar(text) + out = " %5sB" % (0) + self.asyncjob.pulse_pbar(out, text) else: - self.asyncjob.set_pbar_fraction(0, text) + out = "%3i%% %5sB" % (0, 0) + self.asyncjob.set_pbar_fraction(0, out, text) def _do_update(self, amount_read, now=None): - fread = progress.format_number(amount_read) - #self.size = None if self.text is not None: text = self.text else: text = self.basename + fread = progress.format_number(amount_read) if self.size is None: - out = '\r%-60.60s %5sB' % \ - (text, fread) - self.asyncjob.pulse_pbar(out) + out = " %5sB" % (fread) + self.asyncjob.pulse_pbar(out, text) else: frac = self.re.fraction_read() - out = '\r%-25.25s %3i%% %5sB' % \ - (text, frac*100, fread) - self.asyncjob.set_pbar_fraction(frac, out) + out = "%3i%% %5sB" % (frac*100, fread) + self.asyncjob.set_pbar_fraction(frac, out, text) def _do_end(self, amount_read, now=None): if self.text is not None: text = self.text else: text = self.basename - out = '\r%-25.25s 100%%' % text - self.asyncjob.set_pbar_done(out) + fread = progress.format_number(amount_read) + if self.size is None: + out = " %5sB" % (fread) + self.asyncjob.pulse_pbar(out, text) + else: + out = "%3i%% %5sB" % (100, fread) + self.asyncjob.set_pbar_done(out, text) class vmmCreate(gobject.GObject): __gsignals__ = { @@ -399,7 +403,13 @@ class vmmCreate(gobject.GObject): # set the memory try: - guest.memory = int(self.get_config_maximum_memory()) + guest.memory = int(self.get_config_initial_memory()) + except ValueError: + self._validation_error_box(_("Invalid memory setting"), e.args[0]) + return + + try: + guest.maxmemory = int(self.get_config_maximum_memory()) except ValueError: self._validation_error_box(_("Invalid memory setting"), e.args[0]) return @@ -442,6 +452,7 @@ class vmmCreate(gobject.GObject): "\n Source: " + self.get_config_install_source() + \ "\n Kickstart: " + self.get_config_kickstart_source() + \ "\n Memory: " + str(guest.memory) + \ + "\n Max Memory: " + str(guest.maxmemory) + \ "\n # VCPUs: " + str(guest.vcpus) + \ "\n Filesize: " + str(filesize) + \ "\n Disk image: " + str(self.get_config_disk_image()) +\ @@ -457,9 +468,13 @@ class vmmCreate(gobject.GObject): logging.debug("Non-sparse file selected") progWin = vmmAsyncJob(self.config, self.do_install, [guest], - title=_("Creating Virtual Machine")) + title=_("Creating Virtual Machine"), + text=_("The virtual machine is now being created. " + \ + "Allocation of disk storage and retrieval of " + \ + "the installation images may a few minutes " + \ + "to complete.")) progWin.run() - + if self.install_error != None: logging.error("Async job failed to create VM " + str(self.install_error)) self._validation_error_box(_("Guest Install Error"), self.install_error)