summaryrefslogtreecommitdiffstats
path: root/Demo/cwilib/vt100win.py
blob: dcaf17bd1c7ce423ebb13f95e8e5134d5745bcbd (plain)
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
# VT100 terminal emulator in a STDWIN window.

import stdwin
from stdwinevents import *
from vt100 import VT100

class VT100win(VT100):

	def __init__(self):
		VT100.__init__(self)
		self.window = None
##		self.last_x = -1
##		self.last_y = -1

	def __del__(self):
		self.close()

	def open(self, title):
		stdwin.setfont('7x14')
		self.docwidth = self.width * stdwin.textwidth('m')
		self.docheight = self.height * stdwin.lineheight()
		stdwin.setdefwinsize(self.docwidth + 2, self.docheight + 2)
		stdwin.setdefscrollbars(0, 0)
		self.window = stdwin.open(title)
		self.window.setdocsize(self.docwidth + 2, self.docheight + 2)

	def close(self):
		if self.window:
			self.window.close()
		self.window = None

	def show(self):
		if not self.window: return
		self.draw(((-10, -10), (self.docwidth+10, self.docheight+10)))

	def draw(self, detail):
		d = self.window.begindrawing()
		fg = stdwin.getfgcolor()
		red = stdwin.fetchcolor('red')
		d.cliprect(detail)
		d.erase(detail)
		lh = d.lineheight()
		cw = d.textwidth('m')
		for y in range(self.height):
			d.text((0, y*lh), self.lines[y].tostring())
			if self.attrs[y] <> self.blankattr:
				for x in range(len(self.attrs[y])):
					if self.attrs[y][x] == 7:
						p1 = x*cw, y*lh
						p2 = (x+1)*cw, (y+1)*lh
						d.invert((p1, p2))
		x = self.x * cw
		y = self.y * lh
		d.setfgcolor(red)
		d.invert((x, y), (x+cw, y+lh))
		d.setfgcolor(fg)
		d.close()

##	def move_to(self, x, y):
##		VT100.move_to(self, x, y)
##		if self.y != self.last_y:
##			self.show()
##		self.last_x = self.x
##		self.last_y = y

	def send(self, str):
		VT100.send(self, str)
		self.show()