class XProgress(XNotifyBase): """XProgress class. See module documentation for more information. """ buttons = ListProperty([XNotifyBase.BUTTON_CANCEL]) '''Default button set for class ''' max = NumericProperty(100.) value = NumericProperty(0.) '''Properties that are binded to the same ProgressBar properties. ''' def __init__(self, **kwargs): self._complete = False self._progress = ProgressBar(max=self.max, value=self.value) self.bind(max=self._progress.setter('max')) self.bind(value=self._progress.setter('value')) super(XProgress, self).__init__(**kwargs) def _get_body(self): layout = BoxLayout(orientation='vertical') layout.add_widget(super(XProgress, self)._get_body()) layout.add_widget(self._progress) return layout def complete(self, text=_('Complete'), show_time=2): """ Sets the progress to 100%, hides the button(s) and automatically closes the popup. .. versionchanged:: 0.2.1 Added parameters 'text' and 'show_time' :param text: text instead of 'Complete', optional :param show_time: time-to-close (in seconds), optional """ self._complete = True n = self.max self.value = n self.text = text self.buttons = [] Clock.schedule_once(self.dismiss, show_time) def inc(self, pn_delta=1): """ Increase current progress by specified number of units. If the result value exceeds the maximum value, this method is "looping" the progress :param pn_delta: number of units """ self.value += pn_delta if self.value > self.max: # create "loop" self.value = self.value % self.max def autoprogress(self, pdt=None): """ .. versionadded:: 0.2.1 Starts infinite progress increase in the separate thread """ if self._window and not self._complete: self.inc() Clock.schedule_once(self.autoprogress, .01)
class XProgress(XNotifyBase): """XProgress class. See module documentation for more information. """ buttons = ListProperty([XNotifyBase.BUTTON_CANCEL]) '''Default button set for class ''' max = NumericProperty(100.) value = NumericProperty(0.) '''Properties that are binded to the same ProgressBar properties. ''' def __init__(self, **kwargs): self._complete = False self._progress = ProgressBar(max=self.max, value=self.value) self.bind(max=self._progress.setter('max')) self.bind(value=self._progress.setter('value')) super(XProgress, self).__init__(**kwargs) def _get_body(self): layout = BoxLayout(orientation='vertical') layout.add_widget(super(XProgress, self)._get_body()) layout.add_widget(self._progress) return layout def complete(self, text='Complete', show_time=2): """ Sets the progress to 100%, hides the button(s) and automatically closes the popup. .. versionchanged:: 0.2.1 Added parameters 'text' and 'show_time' :param text: text instead of 'Complete', optional :param show_time: time-to-close (in seconds), optional """ self._complete = True n = self.max self.value = n self.text = text self.buttons = [] Clock.schedule_once(self.dismiss, show_time) def inc(self, pn_delta=1): """ Increase current progress by specified number of units. If the result value exceeds the maximum value, this method is "looping" the progress :param pn_delta: number of units """ self.value += pn_delta if self.value > self.max: # create "loop" self.value = self.value % self.max def autoprogress(self, pdt=None): """ .. versionadded:: 0.2.1 Starts infinite progress increase in the separate thread """ if self._window and not self._complete: self.inc() Clock.schedule_once(self.autoprogress, .01)