Mercurial > hg > tilerswift
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()