summaryrefslogtreecommitdiff
path: root/asciifarm/client/display
diff options
context:
space:
mode:
authortroido <troido@hotmail.com>2018-01-03 18:30:14 +0100
committertroido <troido@hotmail.com>2018-01-03 18:30:14 +0100
commit9ee677665df576fba1713544c761c3ef76dbdadc (patch)
tree2e41f40d6187922f22f3e3f3162b06f2140f9641 /asciifarm/client/display
parent99d7920cb3daf3fc5cb6f824eb4a639542d47974 (diff)
made scrolling of chat log possible
Diffstat (limited to 'asciifarm/client/display')
-rw-r--r--asciifarm/client/display/display.py3
-rw-r--r--asciifarm/client/display/messagepad.py28
2 files changed, 30 insertions, 1 deletions
diff --git a/asciifarm/client/display/display.py b/asciifarm/client/display/display.py
index 7c5384d..d80703c 100644
--- a/asciifarm/client/display/display.py
+++ b/asciifarm/client/display/display.py
@@ -121,6 +121,9 @@ class Display:
def addMessage(self, message):
self.getWidget("msg").addMessage(message)
+ def scrollBack(self, amount, relative=True):
+ self.getWidget("msg").scroll(amount, relative)
+
def getChar(self, sprite):
"""This returns the character belonging to some spritename. This does not read a character"""
return self.characters.get(sprite, self.defaultChar)
diff --git a/asciifarm/client/display/messagepad.py b/asciifarm/client/display/messagepad.py
index cae66a4..88ac3b4 100644
--- a/asciifarm/client/display/messagepad.py
+++ b/asciifarm/client/display/messagepad.py
@@ -8,24 +8,50 @@ class MessagePad():
self.changed = False
self.messages = []
self.widget = None
+ self.scrolledBack = 0
def setWidget(self, widget):
self.widget = widget
def addMessage(self, message):
self.messages.append(message)
+ if self.scrolledBack:
+ self.scrolledBack += 1
self.widget.change()
+ def scroll(self, amount, relative=True):
+ if relative:
+ self.scrolledBack += amount
+ else:
+ self.scrolledBack = amount
+ self.scrolledBack = max(self.scrolledBack, 0)
+ self.widget.update()
+ self.widget.doUpdate()
+
def update(self):
win = self.widget.getWin()
width, height = win.getSize()
if height < 1:
return
lines = []
- for message in self.messages:
+ messages = self.messages
+ for message in messages:
lines += textwrap.wrap(message, width)
+ self.scrolledBack = max(min(self.scrolledBack, len(lines)-height), 0)
+ moreDown = False
+ if self.scrolledBack > 0:
+ lines = lines[:-self.scrolledBack]
+ moreDown = True
+ moreUp = False
if len(lines) > height:
+ moreUp = True
lines = lines[len(lines)-height:]
+ elif len(lines) < height:
+ lines = (height-len(lines)) * [""] + lines
win.erase()
win.addLine((0,0),'\n'.join(lines))
+ if moreUp:
+ win.addLine((width-1, 0), '-')
+ if moreDown:
+ win.addLine((width-1, height-1), '+')
win.noutrefresh()