summaryrefslogtreecommitdiff
path: root/asciifarm/client/display/messages.py
diff options
context:
space:
mode:
authortroido <troido@tilde.town>2018-01-24 13:27:41 +0000
committertroido <troido@tilde.town>2018-01-24 13:27:41 +0000
commitb15f89a3576b98f57ff1ec083e9299c890c1f7fc (patch)
tree3e2772610d8d1a91ff2b8ad17d2cd23ad687a8cd /asciifarm/client/display/messages.py
parent50321b57b146944399671b6a8b56c6b769d5ddeb (diff)
parentb1ea1bff79c5e9edf6aedbe8f4183c7e4f92f1e8 (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.py58
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()