Add a button widget for selecting block replacements

This commit is contained in:
David Vierra 2016-02-09 16:40:20 -10:00
parent fb20234fd4
commit 106623f240

View File

@ -9,33 +9,132 @@ from PySide import QtCore, QtGui
from mcedit2.ui.block_replacements import Ui_BlockReplacements
from mcedit2.util.resources import resourcePath
from mcedit2.widgets.blockpicker import BlockTypeButton
from mcedit2.widgets.layout import Row
from mcedit2.widgets.layout import Row, Column
log = logging.getLogger(__name__)
class BlockReplacementButton(QtGui.QWidget):
def __init__(self, parent=None):
super(BlockReplacementButton, self).__init__()
self.replacementList = BlockReplacementList()
self.replacementDialog = QtGui.QDialog(QtGui.qApp.mainWindow)
self.replacementOk = QtGui.QPushButton(self.tr("OK"))
self.replacementOk.clicked.connect(self.replacementDialog.accept)
self.replacementDialog.setWindowTitle(self.tr("Choose blocks to replace"))
self.replacementDialog.setLayout(Column(self.replacementList,
Row(None, self.replacementOk)))
self.oldBlockButton = BlockTypeButton(multipleSelect=True)
self.newBlockButton = BlockTypeButton()
self.advancedButton = QtGui.QPushButton(self.tr("Advanced..."))
self.simpleButton = QtGui.QPushButton(self.tr("No, simple!"))
self.simpleButton.setVisible(False)
self.simpleButton.clicked.connect(self.goSimple)
self.setLayout(Column(self.oldBlockButton,
self.newBlockButton,
self.advancedButton,
self.simpleButton,
margin=0))
self.oldBlockButton.blocksChanged.connect(self.simpleBlocksChanged)
self.newBlockButton.blocksChanged.connect(self.simpleBlocksChanged)
self.advancedButton.clicked.connect(self.displayDialog)
replacementsChanged = QtCore.Signal()
_editorSession = None
@property
def editorSession(self):
return self._editorSession
@editorSession.setter
def editorSession(self, session):
self._editorSession = session
self.oldBlockButton.editorSession = session
self.newBlockButton.editorSession = session
self.replacementList.editorSession = session
def displayDialog(self):
self.replacementDialog.exec_()
replacements = self.replacementList.getReplacements()
if len(replacements) == 0:
self.oldBlockButton.blocks = []
self.newBlockButton.blocks = []
elif len(replacements) == 1:
old, new = replacements[0]
self.oldBlockButton.blocks = old
self.newBlockButton.block = new
if len(replacements) > 1:
self.oldBlockButton.blocks = []
self.newBlockButton.blocks = []
self.oldBlockButton.setEnabled(False)
self.newBlockButton.setEnabled(False)
self.simpleButton.setVisible(True)
else:
self.oldBlockButton.setEnabled(True)
self.newBlockButton.setEnabled(True)
self.simpleButton.setVisible(False)
self.replacementsChanged.emit()
def goSimple(self):
self.oldBlockButton.blocks = []
self.newBlockButton.blocks = []
self.simpleButton.setVisible(False)
def simpleBlocksChanged(self):
old = self.oldBlockButton.blocks
new = self.newBlockButton.block
if new is not None:
replacements = [(old, new)]
else:
replacements = []
log.info("Replacements button: %s", replacements)
self.replacementList.setReplacements(replacements)
self.replacementsChanged.emit()
def getReplacements(self):
return self.replacementList.getReplacements()
class BlockReplacementList(QtGui.QWidget, Ui_BlockReplacements):
def __init__(self, parent):
def __init__(self, parent=None):
super(BlockReplacementList, self).__init__(parent)
self.setupUi(self)
header = self.findReplaceTable.horizontalHeader()
header.setResizeMode(0, QtGui.QHeaderView.Stretch)
header.setResizeMode(1, QtGui.QHeaderView.Stretch)
self.findReplaceTable.setRowCount(1)
self.editorSession = None
self.clearTable()
def clearTable(self):
addButton = QtGui.QPushButton("Add...", flat=True, clicked=self.addNewRow)
addButton.setIcon(QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/add.png")))
addButton.setMinimumHeight(48)
addButton.setIconSize(QtCore.QSize(32, 32))
addItem = QtGui.QTableWidgetItem(text="Add...")
addItem.setSizeHint(addButton.sizeHint())
self.findReplaceTable.clear()
self.findReplaceTable.setRowCount(1)
self.findReplaceTable.setItem(0, 0, addItem)
self.findReplaceTable.setSpan(0, 0, 1, 2)
self.findReplaceTable.setCellWidget(0, 0, addButton)
self.findReplaceTable.resizeRowsToContents()
self.findReplaceTable.resizeColumnsToContents()
self.editorSession = None
@property
def blocktypes(self):
@ -109,3 +208,12 @@ class BlockReplacementList(QtGui.QWidget, Ui_BlockReplacements):
yield left.blocks, right.block
return list(_get())
def setReplacements(self, replacements):
if replacements == self.getReplacements():
return
self.clearTable()
for old, new in replacements:
self.addRow(old, new)