diff --git a/src/mcedit2/editorcommands/find_replace/__init__.py b/src/mcedit2/editorcommands/find_replace/__init__.py index 257a95a..6379d0d 100644 --- a/src/mcedit2/editorcommands/find_replace/__init__.py +++ b/src/mcedit2/editorcommands/find_replace/__init__.py @@ -25,6 +25,7 @@ class FindReplaceDialog(QtGui.QDialog, Ui_findReplaceDialog): self.setupUi(self) self.findReplaceBlocks = FindReplaceBlocks(editorSession, self) + self.replaceBlocksTab.setLayout(Column(self.findReplaceBlocks.widget, margin=0)) self.findReplaceCommandText = FindReplaceCommandText(editorSession, self) self.commandBlocksTab.setLayout(Column(self.findReplaceCommandText.widget, margin=0)) diff --git a/src/mcedit2/editorcommands/find_replace/command_text.py b/src/mcedit2/editorcommands/find_replace/command_text.py index 0f60ec4..53a87c5 100644 --- a/src/mcedit2/editorcommands/find_replace/command_text.py +++ b/src/mcedit2/editorcommands/find_replace/command_text.py @@ -9,6 +9,7 @@ from mcedit2.ui.find_replace_commands import Ui_findCommandsWidget log = logging.getLogger(__name__) + class FindReplaceCommandWidget(QtGui.QWidget, Ui_findCommandsWidget): def __init__(self): super(FindReplaceCommandWidget, self).__init__() diff --git a/src/mcedit2/editorcommands/find_replace/replace_blocks.py b/src/mcedit2/editorcommands/find_replace/replace_blocks.py index 4c84fcd..9aadf63 100644 --- a/src/mcedit2/editorcommands/find_replace/replace_blocks.py +++ b/src/mcedit2/editorcommands/find_replace/replace_blocks.py @@ -7,6 +7,7 @@ import logging from PySide import QtCore, QtGui from mcedit2.command import SimpleRevisionCommand +from mcedit2.ui.find_replace_blocks import Ui_FindReplaceBlocks from mcedit2.util.resources import resourcePath from mcedit2.util.showprogress import showProgress from mcedit2.widgets.blockpicker import BlockTypeButton @@ -15,104 +16,27 @@ from mcedit2.widgets.layout import Row log = logging.getLogger(__name__) +class FindReplaceBlocksWidget(QtGui.QWidget, Ui_FindReplaceBlocks): + def __init__(self): + super(FindReplaceBlocksWidget, self).__init__() + self.setupUi(self) + + class FindReplaceBlocks(QtCore.QObject): def __init__(self, editorSession, dialog, *args, **kwargs): super(FindReplaceBlocks, self).__init__(*args, **kwargs) self.editorSession = editorSession self.dialog = dialog - header = dialog.findReplaceTable.horizontalHeader() - header.setResizeMode(0, QtGui.QHeaderView.Stretch) - header.setResizeMode(1, QtGui.QHeaderView.Stretch) - dialog.findReplaceTable.setRowCount(1) - 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()) - dialog.findReplaceTable.setItem(0, 0, addItem) - dialog.findReplaceTable.setSpan(0, 0, 1, 2) - dialog.findReplaceTable.setCellWidget(0, 0, addButton) - dialog.findReplaceTable.resizeRowsToContents() - dialog.findReplaceTable.resizeColumnsToContents() - dialog.blocksReplaceButton.clicked.connect(self.doReplace) + self.widget = FindReplaceBlocksWidget() - @property - def blocktypes(self): - return self.editorSession.worldEditor.blocktypes - - def addNewRow(self): - self.addRow([self.blocktypes["air"]], self.blocktypes["air"]) - - def addRow(self, oldBlocks, newBlock): - row = self.dialog.findReplaceTable.rowCount() - 1 - - self.dialog.findReplaceTable.insertRow(row) - log.info("Row inserted") - - left = QtGui.QTableWidgetItem() - right = QtGui.QTableWidgetItem() - log.info("Items created") - - def frameButton(button, withRemove=False): - frame = QtGui.QFrame() - frame.button = button - layout = QtGui.QVBoxLayout() - layout.addStretch(1) - if withRemove: - removeButton = QtGui.QPushButton("", flat=True) - removeButton.setIcon(QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/remove.png"))) - removeButton.setIconSize(QtCore.QSize(24, 24)) - - def _clicked(): - self.removeRow(self.dialog.findReplaceTable.row(left)) - removeButton.__clicked = _clicked - removeButton.clicked.connect(_clicked) - layout.addLayout(Row((button, 1), removeButton)) - else: - layout.addWidget(button) - layout.addStretch(1) - frame.setLayout(layout) - return frame - - leftButton = BlockTypeButton(flat=True, multipleSelect=True) - leftButton.editorSession = self.editorSession - leftButton.blocks = oldBlocks - leftFramedButton = frameButton(leftButton) - left.setSizeHint(leftFramedButton.sizeHint()) - log.info("Left button") - - rightButton = BlockTypeButton(flat=True) - rightButton.editorSession = self.editorSession - rightButton.block = newBlock - rightFramedButton = frameButton(rightButton, True) - right.setSizeHint(rightFramedButton.sizeHint()) - log.info("Right button") - self.dialog.findReplaceTable.setItem(row, 0, left) - self.dialog.findReplaceTable.setItem(row, 1, right) - self.dialog.findReplaceTable.setCellWidget(row, 0, leftFramedButton) - self.dialog.findReplaceTable.setCellWidget(row, 1, rightFramedButton) - self.dialog.findReplaceTable.resizeRowsToContents() - #self.findReplaceTable.resizeColumnsToContents() - log.info("Done") - - def removeRow(self, row): - self.dialog.findReplaceTable.removeRow(row) - - def getReplacements(self): - def _get(): - for row in range(self.dialog.findReplaceTable.rowCount()-1): - left = self.dialog.findReplaceTable.cellWidget(row, 0).button - right = self.dialog.findReplaceTable.cellWidget(row, 1).button - yield left.blocks, right.block - - return list(_get()) + self.widget.replacementList.editorSession = editorSession + self.widget.blocksReplaceButton.clicked.connect(self.doReplace) def doReplace(self): - replacements = self.getReplacements() + replacements = self.widget.replacementList.getReplacements() command = SimpleRevisionCommand(self.editorSession, "Replace") - if self.dialog.replaceBlocksInSelectionCheckbox.isChecked(): + if self.widget.replaceBlocksInSelectionCheckbox.isChecked(): selection = self.editorSession.currentSelection else: selection = self.editorSession.currentDimension.bounds diff --git a/src/mcedit2/ui/block_replacements.ui b/src/mcedit2/ui/block_replacements.ui new file mode 100644 index 0000000..7e5d472 --- /dev/null +++ b/src/mcedit2/ui/block_replacements.ui @@ -0,0 +1,47 @@ + + + BlockReplacements + + + + 0 + 0 + 607 + 337 + + + + Form + + + + + + Qt::ScrollBarAlwaysOn + + + true + + + QAbstractItemView::NoSelection + + + false + + + + Old Blocks + + + + + New Blocks + + + + + + + + + diff --git a/src/mcedit2/ui/find_replace.ui b/src/mcedit2/ui/find_replace.ui index 4f6dccb..fc6f9da 100644 --- a/src/mcedit2/ui/find_replace.ui +++ b/src/mcedit2/ui/find_replace.ui @@ -6,8 +6,8 @@ 0 0 - 768 - 369 + 781 + 416 @@ -17,79 +17,17 @@ - 4 + 1 Find Blocks - + Replace Blocks - - - - - Qt::ScrollBarAlwaysOn - - - true - - - QAbstractItemView::NoSelection - - - false - - - - Old Blocks - - - - - New Blocks - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - In Selection - - - true - - - - - - - Replace - - - - - - diff --git a/src/mcedit2/ui/find_replace_blocks.ui b/src/mcedit2/ui/find_replace_blocks.ui new file mode 100644 index 0000000..8587a5f --- /dev/null +++ b/src/mcedit2/ui/find_replace_blocks.ui @@ -0,0 +1,73 @@ + + + FindReplaceBlocks + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + 0 + 0 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + In Selection + + + true + + + + + + + Replace + + + + + + + + + + BlockReplacementList + QWidget +
mcedit2/widgets/block_replacement_list.h
+ 1 +
+
+ + +
diff --git a/src/mcedit2/widgets/block_replacement_list.py b/src/mcedit2/widgets/block_replacement_list.py new file mode 100644 index 0000000..6ca6256 --- /dev/null +++ b/src/mcedit2/widgets/block_replacement_list.py @@ -0,0 +1,111 @@ +""" + block_replacements +""" +from __future__ import absolute_import, division, print_function, unicode_literals +import logging + +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 + +log = logging.getLogger(__name__) + + +class BlockReplacementList(QtGui.QWidget, Ui_BlockReplacements): + def __init__(self, parent): + 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) + 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.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): + return self.editorSession.worldEditor.blocktypes if self.editorSession else None + + def addNewRow(self): + self.addRow([self.blocktypes["air"]], self.blocktypes["air"]) + + def addRow(self, oldBlocks, newBlock): + assert self.editorSession is not None, "Must set BlockReplacementList.editorSession before using" + + row = self.findReplaceTable.rowCount() - 1 + + self.findReplaceTable.insertRow(row) + log.info("Row inserted") + + left = QtGui.QTableWidgetItem() + right = QtGui.QTableWidgetItem() + log.info("Items created") + + def frameButton(button, withRemove=False): + frame = QtGui.QFrame() + frame.button = button + layout = QtGui.QVBoxLayout() + layout.addStretch(1) + if withRemove: + removeButton = QtGui.QPushButton("", flat=True) + removeButton.setIcon(QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/remove.png"))) + removeButton.setIconSize(QtCore.QSize(24, 24)) + + def _clicked(): + self.removeRow(self.findReplaceTable.row(left)) + removeButton.__clicked = _clicked + removeButton.clicked.connect(_clicked) + layout.addLayout(Row((button, 1), removeButton)) + else: + layout.addWidget(button) + layout.addStretch(1) + frame.setLayout(layout) + return frame + + leftButton = BlockTypeButton(flat=True, multipleSelect=True) + leftButton.editorSession = self.editorSession + leftButton.blocks = oldBlocks + leftFramedButton = frameButton(leftButton) + left.setSizeHint(leftFramedButton.sizeHint()) + log.info("Left button") + + rightButton = BlockTypeButton(flat=True) + rightButton.editorSession = self.editorSession + rightButton.block = newBlock + rightFramedButton = frameButton(rightButton, True) + right.setSizeHint(rightFramedButton.sizeHint()) + log.info("Right button") + self.findReplaceTable.setItem(row, 0, left) + self.findReplaceTable.setItem(row, 1, right) + self.findReplaceTable.setCellWidget(row, 0, leftFramedButton) + self.findReplaceTable.setCellWidget(row, 1, rightFramedButton) + self.findReplaceTable.resizeRowsToContents() + #self.findReplaceTable.resizeColumnsToContents() + log.info("Done") + + def removeRow(self, row): + self.findReplaceTable.removeRow(row) + + def getReplacements(self): + def _get(): + for row in range(self.findReplaceTable.rowCount()-1): + left = self.findReplaceTable.cellWidget(row, 0).button + right = self.findReplaceTable.cellWidget(row, 1).button + yield left.blocks, right.block + + return list(_get())