class BackgroundSelector(QWidget): """presents all available backgrounds with previews""" def __init__(self, parent): super(BackgroundSelector, self).__init__(parent) loadUi(self) self.kcfg_backgroundName = QLineEdit(self) self.kcfg_backgroundName.setVisible(False) self.kcfg_backgroundName.setObjectName('kcfg_backgroundName') self.setUp() def setUp(self): """fill the selector""" # The lineEdit widget holds our background path, but the user does # not manipulate it directly self.kcfg_backgroundName.hide() self.backgroundNameList.currentRowChanged.connect( self.backgroundRowChanged) self.kcfg_backgroundName.textChanged.connect( self.backgroundNameChanged) self.backgroundList = Background.available() for aset in self.backgroundList: self.backgroundNameList.addItem(aset.name) self.kcfg_backgroundName.setText(Internal.Preferences.backgroundName) def backgroundNameChanged(self, name): """the name changed: update the current row""" igrindex = 0 for idx, aset in enumerate(self.backgroundList): if aset.desktopFileName == name: igrindex = idx break self.backgroundNameList.setCurrentRow(igrindex) def backgroundRowChanged(self): """user selected a new background, update our information about it and paint preview""" selBackground = self.backgroundList[ self.backgroundNameList.currentRow()] self.kcfg_backgroundName.setText(selBackground.desktopFileName) self.backgroundAuthor.setText(selBackground.author) self.backgroundContact.setText(selBackground.authorEmail) self.backgroundDescription.setText(selBackground.description) selBackground.setPalette(self.backgroundPreview) self.backgroundPreview.setAutoFillBackground(True)
class TilesetSelector(QWidget): """presents all available tiles with previews""" def __init__(self, parent): super(TilesetSelector, self).__init__(parent) loadUi(self) self.kcfg_tilesetName = QLineEdit(self) self.kcfg_tilesetName.setVisible(False) self.kcfg_tilesetName.setObjectName('kcfg_tilesetName') self.tileScene = SceneWithFocusRect() self.tileView = FittingView() self.tileView.setScene(self.tileScene) self.tileset = Tileset(Internal.Preferences.tilesetName) self.uiTiles = [UITile('w' + s.char.lower()) for s in Wind.all4] self.board = Board(2, 2, self.tileset) self.board.showShadows = True self.tileScene.addItem(self.board) self.tileView.setParent(self.tilesetPreview) layout = QHBoxLayout(self.tilesetPreview) layout.addWidget(self.tileView) for idx, offsets in enumerate([(0, 0), (0, 1), (1, 0), (1, 1)]): self.uiTiles[idx].setBoard(self.board, *offsets) self.uiTiles[idx].focusable = False self.setUp() def setUp(self): """set-up the selector""" # The lineEdit widget holds our tileset path, but the user does # not manipulate it directly self.kcfg_tilesetName.hide() self.tilesetNameList.currentRowChanged.connect(self.tilesetRowChanged) self.kcfg_tilesetName.textChanged.connect(self.tilesetNameChanged) Tileset.loadAll() # list default tileset first self.tilesetList = Tileset.available() for aset in self.tilesetList: self.tilesetNameList.addItem(aset.name) self.kcfg_tilesetName.setText(Internal.Preferences.tilesetName) def tilesetNameChanged(self, name): """the name changed: update the current row""" igrindex = 0 for idx, aset in enumerate(self.tilesetList): if aset.desktopFileName == name: igrindex = idx break self.tilesetNameList.setCurrentRow(igrindex) def tilesetRowChanged(self): """user selected a new tileset, update our information about it and paint preview""" selTileset = self.tilesetList[self.tilesetNameList.currentRow()] self.kcfg_tilesetName.setText(selTileset.desktopFileName) self.tilesetAuthor.setText(selTileset.author) self.tilesetContact.setText(selTileset.authorEmail) self.tilesetDescription.setText(selTileset.description) with AnimationSpeed(): self.board.tileset = selTileset