summaryrefslogtreecommitdiff
path: root/asciifarm/client/display/messages.py
diff options
context:
space:
mode:
authortroido <troido@hotmail.com>2018-01-17 20:26:16 +0100
committertroido <troido@hotmail.com>2018-01-17 20:26:16 +0100
commitf72c658220a78ec058ceca25118e3e9a499a6c2b (patch)
tree2a965a693d95f0ee651732ddc47b7e22bd188030 /asciifarm/client/display/messages.py
parent0bed6616326348b41c6a907552fff62956ce6f18 (diff)
updated maps and refactored client: renamed display parts and removed selector
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()