changeset 47:493bfe6b2b90

TilePicker: beginnings of new widget Very cut-n-pastey code right now, will clean up later (haha, maybe)
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Tue, 03 Sep 2019 22:54:24 -0400
parents a66b053697d2
children fa5b36acf03f
files tilerswift
diffstat 1 files changed, 72 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/tilerswift
+++ b/tilerswift
@@ -82,6 +82,8 @@
 
         self.setStyleSheet(CHECKERBOARD_CSS)
 
+        self.picked_tile = None
+
         self.resize()
 
     def paintEvent(self, event):
@@ -111,10 +113,8 @@
             (event.y() - self.spacing)//self.tilesize,
         )
         tile = self.tiles[i*self.numcols + j]
-        print("Tile clicked", i, j)
-        print("Tile values")
-        for row in tile.tile:
-            print(row)
+
+        self.picked_tile = tile
 
     def resize(self):
         self.tilesize = self.spacing + self.scalefactor*8
@@ -141,6 +141,59 @@
         self.resize()
 
 
+class TilePicker(QtWidgets.QWidget):
+
+    def __init__(self, grid_canvas):
+        super().__init__()
+
+        self.grid_canvas = grid_canvas
+        self.setStyleSheet(CHECKERBOARD_CSS)
+        self.numrows = 20
+        self.numcols = 20
+
+        self.picked_tiles = []
+        for i in range(self.numrows):
+            self.picked_tiles.append([None]*self.numcols)
+
+        self.resize()
+
+    def resize(self):
+        self.tilesize = self.grid_canvas.scalefactor*8
+        self.setFixedSize(QtCore.QSize(
+            self.tilesize*self.numcols,
+            self.tilesize*self.numrows
+        ))
+        self.update()
+
+    def paintEvent(self, event):
+        painter = QtGui.QPainter(self)
+
+        # I don't really know what this block of code means, but it's
+        # what I have to do in order to get this widget to obey CSS
+        # styles.
+        opt = QtWidgets.QStyleOption()
+        opt.initFrom(self)
+        style = self.style()
+        style.drawPrimitive(QtWidgets.QStyle.PE_Widget, opt, painter, self)
+
+        for i in range(self.numrows):
+            for j in range(self.numcols):
+                tile = self.picked_tiles[i][j]
+                if tile:
+                    rect = QtCore.QRect(
+                        j*self.tilesize,
+                        i*self.tilesize,
+                        8*self.grid_canvas.scalefactor,
+                        8*self.grid_canvas.scalefactor
+                    )
+                    painter.drawPixmap(rect, tile.pixmap)
+
+    def mousePressEvent(self, event):
+        j, i = event.x()//self.tilesize, event.y()//self.tilesize
+        self.picked_tiles[i][j] = self.grid_canvas.picked_tile
+        self.update()
+
+
 class ColourPicker(QtWidgets.QDialog):
 
     def __init__(self):
@@ -194,11 +247,23 @@
 
         self.grid_widget = GridCanvas(filename[0])
 
-        scroll = QtWidgets.QScrollArea()
-        scroll.setWidget(self.grid_widget)
+        self.tile_picker = TilePicker(self.grid_widget)
+
+        scroll1 = QtWidgets.QScrollArea()
+        scroll1.setWidget(self.grid_widget)
+
+        scroll2 = QtWidgets.QScrollArea()
+        scroll2.setWidget(self.tile_picker)
+
+        horz = QtWidgets.QHBoxLayout()
+        horz.addWidget(scroll1)
+        horz.addWidget(scroll2)
+
+        scrolls = QtWidgets.QWidget()
+        scrolls.setLayout(horz)
 
         vert = QtWidgets.QVBoxLayout()
-        vert.addWidget(scroll)
+        vert.addWidget(scrolls)
 
         self.colour_picker = ColourPicker()