104 lines
2.6 KiB
Python
104 lines
2.6 KiB
Python
class Screen:
|
|
def __init__(self, width=21, height=6, patern=" ", copy=None):
|
|
if isinstance(copy, Screen):
|
|
self._width = copy._width
|
|
self._height = copy._height
|
|
self._mat = copy._mat
|
|
else:
|
|
self._width = width
|
|
self._height = height
|
|
self.fill(patern)
|
|
|
|
def locate(self, x, y, string):
|
|
string = str(string)
|
|
i = -1
|
|
for char in string:
|
|
if i + x < self._width:
|
|
self._mat[y - 1][x + i] = char
|
|
i += 1
|
|
|
|
def locate_v(self, x, y, string):
|
|
string = str(string)
|
|
i = -1
|
|
for char in string:
|
|
if i + y < self._height:
|
|
self._mat[y + i][x - 1] = char
|
|
i += 1
|
|
|
|
def fill(self, patern=" "):
|
|
self._mat = [[patern[0] for i in range(self._width)] for i in range(self._height)]
|
|
|
|
def refresh(self, ask_for_input=True, endl="\n", fancy=False, fmargin=4):
|
|
to_print = str()
|
|
for line in self._mat[:-1] if fancy else self._mat:
|
|
for cell in line:
|
|
to_print += cell
|
|
to_print += "\n"
|
|
to_print = to_print[:-1]
|
|
print(to_print)
|
|
if ask_for_input or fancy:
|
|
line = ""
|
|
if fancy:
|
|
for cell in self._mat[-1][:-fmargin]:
|
|
line += cell
|
|
return input(line)
|
|
return input("> ")
|
|
else:
|
|
print("", end=endl)
|
|
return None
|
|
|
|
def get_cell(self, x, y):
|
|
return self._mat[y - 1][x - 1]
|
|
|
|
def get_dim(self):
|
|
return self._width, self._height
|
|
|
|
def export(self):
|
|
result = str()
|
|
for line in self._mat:
|
|
for cell in line:
|
|
result += cell
|
|
return result
|
|
|
|
def load(self, string):
|
|
i = 0
|
|
s = 0
|
|
while i != self._height:
|
|
self._mat[i] = list(string[s:s + self._width])
|
|
i += 1
|
|
s += self._width
|
|
|
|
get_cell_content = get_cell # For retro-compability
|
|
|
|
class Pad(Screen):
|
|
def refresh(self, x=1, y=1, width=21, height=7, ask_for_input=True,\
|
|
endl="\n", fancy=True, fmargin=4):
|
|
ogwidth = width
|
|
if width > self._width:
|
|
width = self._width
|
|
if height > self._height:
|
|
height = self._height
|
|
if x < 1:
|
|
x = 1
|
|
if y < 1:
|
|
y = 1
|
|
x -= 1
|
|
y -= 1
|
|
if x + width > self._width:
|
|
x = self._width - width
|
|
if y + height > self._height:
|
|
y = self._height - height
|
|
to_print = str()
|
|
for dy in range(y, height+y):
|
|
dy = dy
|
|
for dx in range(x, width+x):
|
|
to_print += self._mat[dy][dx]
|
|
to_print += "\n"
|
|
to_print = to_print[:-1]
|
|
print(to_print[:-width], end="")
|
|
if ask_for_input or fancy:
|
|
return input(to_print[-width:-1]+ " " * (ogwidth - width - fmargin) if fancy else "> ")
|
|
else:
|
|
print(to_print[-width:], end=endl)
|
|
return None
|