File indexing completed on 2024-04-28 07:51:12
0001 """ 0002 Copyright (C) 2008-2016 Wolfgang Rohdewald <wolfgang@rohdewald.de> 0003 0004 partially based on C++ code from: 0005 Copyright (C) 2006 Mauricio Piacentini <mauricio@tabuleiro.com> 0006 0007 SPDX-License-Identifier: GPL-2.0 0008 0009 """ 0010 0011 from qt import QWidget, QHBoxLayout, QLineEdit 0012 from tileset import Tileset 0013 from uitile import UITile 0014 from board import Board, FittingView 0015 from scene import SceneWithFocusRect 0016 from common import Internal 0017 from wind import Wind 0018 from guiutil import loadUi 0019 from animation import AnimationSpeed 0020 0021 0022 class TilesetSelector(QWidget): 0023 0024 """presents all available tiles with previews""" 0025 0026 def __init__(self, parent): 0027 super().__init__(parent) 0028 0029 loadUi(self) 0030 self.kcfg_tilesetName = QLineEdit(self) 0031 self.kcfg_tilesetName.setVisible(False) 0032 self.kcfg_tilesetName.setObjectName('kcfg_tilesetName') 0033 0034 self.tileScene = SceneWithFocusRect() 0035 self.tileView = FittingView() 0036 self.tileView.setScene(self.tileScene) 0037 self.tileset = Tileset(Internal.Preferences.tilesetName) 0038 self.uiTiles = [UITile('w' + s.char.lower()) for s in Wind.all4] 0039 self.board = Board(2, 2, self.tileset) 0040 self.board.showShadows = True 0041 self.tileScene.addItem(self.board) 0042 self.tileView.setParent(self.tilesetPreview) 0043 layout = QHBoxLayout(self.tilesetPreview) 0044 layout.addWidget(self.tileView) 0045 for idx, offsets in enumerate([(0, 0), (0, 1), (1, 0), (1, 1)]): 0046 self.uiTiles[idx].setBoard( 0047 self.board, 0048 *offsets) 0049 self.uiTiles[idx].focusable = False 0050 self.setUp() 0051 0052 def setUp(self): 0053 """set-up the selector""" 0054 0055 # The lineEdit widget holds our tileset path, but the user does 0056 # not manipulate it directly 0057 self.kcfg_tilesetName.hide() 0058 0059 self.tilesetNameList.currentRowChanged.connect(self.tilesetRowChanged) 0060 self.kcfg_tilesetName.textChanged.connect(self.tilesetNameChanged) 0061 0062 Tileset.loadAll() 0063 # list default tileset first 0064 self.tilesetList = Tileset.available() 0065 for aset in self.tilesetList: 0066 self.tilesetNameList.addItem(aset.name) 0067 self.kcfg_tilesetName.setText(Internal.Preferences.tilesetName) 0068 0069 def tilesetNameChanged(self, name): 0070 """the name changed: update the current row""" 0071 igrindex = 0 0072 for idx, aset in enumerate(self.tilesetList): 0073 if aset.desktopFileName == name: 0074 igrindex = idx 0075 break 0076 self.tilesetNameList.setCurrentRow(igrindex) 0077 0078 def tilesetRowChanged(self): 0079 """user selected a new tileset, update our information about it and 0080 paint preview""" 0081 selTileset = self.tilesetList[self.tilesetNameList.currentRow()] 0082 self.kcfg_tilesetName.setText(selTileset.desktopFileName) 0083 self.tilesetAuthor.setText(selTileset.author) 0084 self.tilesetContact.setText(selTileset.authorEmail) 0085 self.tilesetDescription.setText(selTileset.description) 0086 with AnimationSpeed(): 0087 self.board.tileset = selTileset