diff options
| author | troido <troido@tilde.town> | 2018-01-24 13:27:41 +0000 |
|---|---|---|
| committer | troido <troido@tilde.town> | 2018-01-24 13:27:41 +0000 |
| commit | b15f89a3576b98f57ff1ec083e9299c890c1f7fc (patch) | |
| tree | 3e2772610d8d1a91ff2b8ad17d2cd23ad687a8cd /asciifarm/client/display/messages.py | |
| parent | 50321b57b146944399671b6a8b56c6b769d5ddeb (diff) | |
| parent | b1ea1bff79c5e9edf6aedbe8f4183c7e4f92f1e8 (diff) | |
Merge branch 'master' of https://github.com/jmdejong/rooms
Diffstat (limited to 'asciifarm/client/display/messages.py')
| -rw-r--r-- | asciifarm/client/display/messages.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/asciifarm/client/display/messages.py b/asciifarm/client/display/messages.py new file mode 100644 index 0000000..e72c831 --- /dev/null +++ b/asciifarm/client/display/messages.py @@ -0,0 +1,58 @@ + +import curses +import textwrap + +class Messages(): + + def __init__(self): + 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 = [] + 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() + for i, line in enumerate(lines): + win.addLine((0,i),line) + if moreUp: + win.addLine((width-1, 0), '-') + if moreDown: + win.addLine((width-1, height-1), '+') + win.noutrefresh() |
