changeset 65:a53572bf5a26

Tile: use descriptors for tile property The real reason I want to do this is so that later when editing tiles, I can ensure that the raw tile bytes match the modified tile rows.
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Sun, 08 Sep 2019 21:10:03 -0400
parents 10476f40ec9d
children 21a2bde995be
files tilerswift
diffstat 1 files changed, 18 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/tilerswift
+++ b/tilerswift
@@ -1,5 +1,6 @@
 #!/usr/bin/python3
 import sys
+
 from PyQt5 import QtCore, QtGui, QtWidgets
 
 from colors import NES_PALETTE
@@ -41,11 +42,10 @@
         1,
     ]
 
-    def __init__(self, tile):
+    def __init__(self, raw_tile):
         super().__init__()
 
-        self.raw_tile = tile
-        self.tile = self.parse_tile(self.raw_tile)
+        self.raw_tile = raw_tile
         self.img_data = bytes(sum(self.tile, []))
 
         self.set_palette(self.default_palette)
@@ -66,6 +66,21 @@
         image.setColorTable(self.palette_to_qt())
         self.pixmap = QtGui.QPixmap(image)
 
+    def get_tile(self):
+        if getattr(self, "_tile", None) is None:
+            self._tile = self.parse_tile(self.raw_tile)
+        return self._tile
+
+    def set_tile(self, tile):
+        del self._tile
+        self.raw_tile = self.unparse_tile(tile)
+
+    def del_tile(self):
+        del self._tile
+        del self.raw_tile
+
+    tile = property(get_tile, set_tile, del_tile, "A tile parsed as an 8x8 array of ints")
+
     @classmethod
     def parse_tile(cls, tile):
         """Given a raw tile's bytes, convert it to an 8x8 array of integers."""