-import os
-
-class Progress:
- def __init__(self, context):
- self.task = ""
- self.start = 0.0
- self.delta = 1.0
- self.last = 0.0
- self.stack = []
- if context:
- self.window_manager = context.window_manager
- self.window_manager.progress_begin(0.0, 1.0)
- else:
- self.window_manager = None
-
- def push_task(self, task, low, high):
- self.stack.append((self.task, self.start, self.delta))
- self.set_task(task, low, high)
-
- def push_task_slice(self, task, index, count):
- self.push_task(task, index/count, (index+1)/count)
-
- def pop_task(self):
- if not self.stack:
- return
-
- self.set_progress(1.0)
- self.task, self.start, self.delta = self.stack.pop()
-
- def set_task(self, task, low, high):
- if self.stack:
- outer = self.stack[-1]
- if outer[0]:
- task = "{}: {}".format(outer[0], task)
- low = outer[1]+low*outer[2]
- high = outer[1]+high*outer[2]
-
- self.task = task
- self.start = low
- self.delta = high-low
-
- self.set_progress(0.0)
-
- def set_task_slice(self, task, index, count):
- self.set_task(task, index/count, (index+1)/count)
-
- def set_progress(self, value):
- value = self.start+self.delta*value
- if value>self.last+0.01:
- if self.window_manager:
- self.window_manager.progress_update(value)
- self.last = value
-
-