Extract block replacement list to its own widget
This commit is contained in:
parent
14702978f5
commit
bfafe53209
@ -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))
|
||||
|
@ -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__()
|
||||
|
@ -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
|
||||
|
47
src/mcedit2/ui/block_replacements.ui
Normal file
47
src/mcedit2/ui/block_replacements.ui
Normal file
@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>BlockReplacements</class>
|
||||
<widget class="QWidget" name="BlockReplacements">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>607</width>
|
||||
<height>337</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QTableWidget" name="findReplaceTable">
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOn</enum>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::NoSelection</enum>
|
||||
</property>
|
||||
<attribute name="verticalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Old Blocks</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>New Blocks</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>768</width>
|
||||
<height>369</height>
|
||||
<width>781</width>
|
||||
<height>416</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -17,79 +17,17 @@
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>4</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="findBlocksTab">
|
||||
<attribute name="title">
|
||||
<string>Find Blocks</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab">
|
||||
<widget class="QWidget" name="replaceBlocksTab">
|
||||
<attribute name="title">
|
||||
<string>Replace Blocks</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QTableWidget" name="findReplaceTable">
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOn</enum>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::NoSelection</enum>
|
||||
</property>
|
||||
<attribute name="verticalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Old Blocks</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>New Blocks</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="replaceBlocksInSelectionCheckbox">
|
||||
<property name="text">
|
||||
<string>In Selection</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="blocksReplaceButton">
|
||||
<property name="text">
|
||||
<string>Replace</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="itemsTab">
|
||||
<attribute name="title">
|
||||
|
73
src/mcedit2/ui/find_replace_blocks.ui
Normal file
73
src/mcedit2/ui/find_replace_blocks.ui
Normal file
@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>FindReplaceBlocks</class>
|
||||
<widget class="QWidget" name="FindReplaceBlocks">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="BlockReplacementList" name="replacementList" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="replaceBlocksInSelectionCheckbox">
|
||||
<property name="text">
|
||||
<string>In Selection</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="blocksReplaceButton">
|
||||
<property name="text">
|
||||
<string>Replace</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>BlockReplacementList</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>mcedit2/widgets/block_replacement_list.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
111
src/mcedit2/widgets/block_replacement_list.py
Normal file
111
src/mcedit2/widgets/block_replacement_list.py
Normal file
@ -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())
|
Reference in New Issue
Block a user