Source code for stoqlib.gui.dialogs.progressdialog

# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4

##
## Copyright (C) 2007 Async Open Source <http://www.async.com.br>
## All rights reserved
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU Lesser General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., or visit: http://www.gnu.org/.
##
## Author(s): Stoq Team <stoq-devel@async.com.br>
##
##

import glib
import gtk
from kiwi.ui.delegates import GladeDelegate
from kiwi.utils import gsignal


[docs]class ProgressDialog(GladeDelegate): """This is a dialog you use to show the progress of a certain task. It's just a label, progress bar and button. it'll always be displayed in the center of a screen. The progress is pulsating and updated every 100 ms. Signals: * *cancel* (): Emitted when a the cancel button is clicked """ domain = 'stoq' gladefile = "ProgressDialog" toplevel_name = "ProgressDialog" gsignal('cancel') def __init__(self, label='', pulse=True): """ Create a new ProgressDialog object. :param label: initial content of the label """ GladeDelegate.__init__(self, gladefile=self.gladefile) self.set_title(label) self._pulse = pulse self._timeout_id = -1 self._start_id = -1 self.label.set_label(label) self.toplevel.set_position(gtk.WIN_POS_CENTER)
[docs] def start(self, wait=50): """Start the task, it'll pulsate the progress bar until stop() is called :param wait: how many ms to wait before showing the dialog, defaults to 50 """ if self._pulse: self._timeout_id = glib.timeout_add(100, self._pulse_timeout) self._start_id = glib.timeout_add(wait, self._real_start)
[docs] def stop(self): """Stops pulsating and hides the dialog """ self.hide() if self._timeout_id != -1: glib.source_remove(self._timeout_id) self._timeout_id = -1 if self._start_id != -1: glib.source_remove(self._start_id) self._start_id = -1
[docs] def set_label(self, label): """Update the label of the dialog :param label: the new content of the label """ self.label.set_label(label)
[docs] def set_text(self, text): """Update the progress bar text :param text: the text to set the progress bar to """ self.progressbar.set_text(text)
# # Private and callbacks # def _real_start(self): self.show() # self.toplevel.present() self._start_id = -1 return False def _pulse_timeout(self): self.progressbar.pulse() return True
[docs] def on_cancel__clicked(self, button): self.emit('cancel') self.stop()