diff options
Diffstat (limited to 'asciifarm/client/display')
| -rw-r--r-- | asciifarm/client/display/display.py | 3 | ||||
| -rw-r--r-- | asciifarm/client/display/messagepad.py | 28 |
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() |
