File indexing completed on 2024-04-14 03:59:14

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