Add a button widget for selecting block replacements
This commit is contained in:
parent
fb20234fd4
commit
106623f240
@ -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)
|
||||
|
||||
|
Reference in New Issue
Block a user