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.ui.block_replacements import Ui_BlockReplacements
|
||||||
from mcedit2.util.resources import resourcePath
|
from mcedit2.util.resources import resourcePath
|
||||||
from mcedit2.widgets.blockpicker import BlockTypeButton
|
from mcedit2.widgets.blockpicker import BlockTypeButton
|
||||||
from mcedit2.widgets.layout import Row
|
from mcedit2.widgets.layout import Row, Column
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
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):
|
class BlockReplacementList(QtGui.QWidget, Ui_BlockReplacements):
|
||||||
def __init__(self, parent):
|
def __init__(self, parent=None):
|
||||||
super(BlockReplacementList, self).__init__(parent)
|
super(BlockReplacementList, self).__init__(parent)
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
|
|
||||||
header = self.findReplaceTable.horizontalHeader()
|
header = self.findReplaceTable.horizontalHeader()
|
||||||
header.setResizeMode(0, QtGui.QHeaderView.Stretch)
|
header.setResizeMode(0, QtGui.QHeaderView.Stretch)
|
||||||
header.setResizeMode(1, 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 = QtGui.QPushButton("Add...", flat=True, clicked=self.addNewRow)
|
||||||
addButton.setIcon(QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/add.png")))
|
addButton.setIcon(QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/add.png")))
|
||||||
addButton.setMinimumHeight(48)
|
addButton.setMinimumHeight(48)
|
||||||
addButton.setIconSize(QtCore.QSize(32, 32))
|
addButton.setIconSize(QtCore.QSize(32, 32))
|
||||||
|
|
||||||
addItem = QtGui.QTableWidgetItem(text="Add...")
|
addItem = QtGui.QTableWidgetItem(text="Add...")
|
||||||
addItem.setSizeHint(addButton.sizeHint())
|
addItem.setSizeHint(addButton.sizeHint())
|
||||||
|
|
||||||
|
self.findReplaceTable.clear()
|
||||||
|
self.findReplaceTable.setRowCount(1)
|
||||||
self.findReplaceTable.setItem(0, 0, addItem)
|
self.findReplaceTable.setItem(0, 0, addItem)
|
||||||
self.findReplaceTable.setSpan(0, 0, 1, 2)
|
self.findReplaceTable.setSpan(0, 0, 1, 2)
|
||||||
self.findReplaceTable.setCellWidget(0, 0, addButton)
|
self.findReplaceTable.setCellWidget(0, 0, addButton)
|
||||||
self.findReplaceTable.resizeRowsToContents()
|
self.findReplaceTable.resizeRowsToContents()
|
||||||
self.findReplaceTable.resizeColumnsToContents()
|
self.findReplaceTable.resizeColumnsToContents()
|
||||||
|
|
||||||
self.editorSession = None
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def blocktypes(self):
|
def blocktypes(self):
|
||||||
@ -109,3 +208,12 @@ class BlockReplacementList(QtGui.QWidget, Ui_BlockReplacements):
|
|||||||
yield left.blocks, right.block
|
yield left.blocks, right.block
|
||||||
|
|
||||||
return list(_get())
|
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