summaryrefslogtreecommitdiff
path: root/asciifarm/client/display/inventory.py
diff options
context:
space:
mode:
Diffstat (limited to 'asciifarm/client/display/inventory.py')
-rw-r--r--asciifarm/client/display/inventory.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/asciifarm/client/display/inventory.py b/asciifarm/client/display/inventory.py
new file mode 100644
index 0000000..0db9037
--- /dev/null
+++ b/asciifarm/client/display/inventory.py
@@ -0,0 +1,60 @@
+
+import curses
+
+class Inventory:
+
+ def __init__(self, title):
+ self.title = title
+ self.widget = None
+ self.items = []
+ self.selector = 0
+
+ def setWidget(self, widget):
+ self.widget = widget
+
+ def getSelector(self):
+ return self.selector
+
+ def select(self, value, relative=False, modular=False):
+ invLen = len(self.items)
+ if relative:
+ value += self.selector
+ if modular and invLen:
+ value %= invLen
+ if value < 0:
+ value = 0
+ if value >= invLen:
+ value = invLen-1
+ if value in range(invLen):
+ self.selector = value
+ self.widget.change()
+
+ def setInventory(self, items):
+ self.items = items
+ self.widget.change()
+
+ def setTitle(self, title):
+ self.title = title
+
+ def getNumItems(self):
+ return len(self.items)
+
+ def update(self):
+ win = self.widget.getWin()
+ width, height = win.getSize()
+ height -= 1
+ selected = self.selector
+ start = min(selected - height//2, len(self.items)-height)
+ start = max(start, 0)
+ end = start + height
+ win.erase()
+ win.addLine((0,0), (self.title + ":")[:width])
+ for i, item in enumerate(self.items[start:end]):
+ if i + start == selected:
+ win.addLine((0, i+1), '*')
+ win.addLine((1, i+1), item)
+ if end < len(self.items):
+ win.addLine((width-1, height), "+")
+ if start > 0:
+ win.addLine((width-1, 1), "-")
+ win.noutrefresh()