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())