# This file is part of ranger, the console file manager. # License: GNU GPL version 3, see the file "AUTHORS" for details. """The TaskView allows you to modify what the loader is doing.""" from __future__ import (absolute_import, division, print_function) from ranger.ext.accumulator import Accumulator from . import Widget class TaskView(Widget, Accumulator): old_lst = None def __init__(self, win): Widget.__init__(self, win) Accumulator.__init__(self) self.scroll_begin = 0 def draw(self): base_clr = [] base_clr.append('in_taskview') lst = self.get_list() if self.old_lst != lst: self.old_lst = lst self.need_redraw = True if self.need_redraw: self.win.erase() if not self.pointer_is_synced(): self.sync_index() if self.hei <= 0: return self.addstr(0, 0, "Task View") self.color_at(0, 0, self.wid, tuple(base_clr), 'title') if lst: for i in range(self.hei - 1): i += self.scroll_begin try: obj = lst[i] except IndexError: break y = i + 1 clr = list(base_clr) if self.pointer == i: clr.append('selected') descr = obj.get_description() if obj.progressbar_supported and obj.percent >= 0 and obj.percent <= 100: self.addstr(y, 0, "%3.2f%% - %s" % (obj.percent, descr), self.wid) wid = int((self.wid / 100) * obj.percent) self.color_at(y, 0, self.wid, tuple(clr)) self.color_at(y, 0, wid, tuple(clr), 'loaded') else: self.addstr(y, 0, descr, self.wid) self.color_at(y, 0, self.wid, tuple(clr)) else: if self.hei > 1: self.addstr(1, 0, "No task in the queue.") self.color_at(1, 0, self.wid, tuple(base_clr), 'error') self.color_reset() def finalize(self): y = self.y + 1 + self.pointer - self.scroll_begin self.fm.ui.win.move(y, self.x) def task_remove(self, i=None): if i is None: i = self.pointer if self.fm.loader.queue: self.fm.loader.remove(index=i) def task_move(self, to, i=None): # pylint: disable=invalid-name if i is None: i = self.pointer self.fm.loader.move(pos_src=i, pos_dest=to) def press(self, key): self.fm.ui.keymaps.use_keymap('taskview') self.fm.ui.press(key) def get_list(self): return self.fm.loader.queue