summary refs log tree commit diff stats
path: root/ranger/gui/ui.py
blob: a54003dc5a1cc200e1c2dfc624c3ffd43f59e221 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import curses
from ranger.api import log
class UI():
	def __init__(self, env, commandlist, colorscheme):
		self.env = env
		self.commandlist = commandlist
		self.colorscheme = colorscheme

		self.widgets = []
		self.win = curses.initscr()
		self.win.leaveok(1)

		self.initialize()

		self.setup()
		self.resize()

	def initialize(self):
		curses.noecho()
		curses.halfdelay(20)
		curses.curs_set(0)
		curses.start_color()
		curses.use_default_colors()

	def setup(self):
		pass

	def resize(self):
		self.env.termsize = self.win.getmaxyx()

	def redraw(self):
		self.win.redrawwin()
		self.win.refresh()
		self.win.redrawwin()

	def add_widget(self, widg):
		self.widgets.append(widg)

	def feed_env(self, env):
		self.env = env

	def press(self, key, fm):
		self.env.key_append(key)
		log(self.env.keybuffer)

		try:
			cmd = self.commandlist.paths[self.env.keybuffer]
		except KeyError:
			self.env.key_clear()
			return

		if cmd == self.commandlist.dummy_object:
			return

		cmd.execute(fm)
		self.env.key_clear()

	def exit(self):
		curses.nocbreak()
		curses.echo()
		curses.endwin()

	def draw(self):
		self.win.erase()
		for widg in self.widgets:
			widg.feed_env(self.env)
			widg.draw()
		self.win.refresh()
#		log(self.env.cf)

	def get_next_key(self):
		key = self.win.getch()
		curses.flushinp()
		return key