Move several selection-related commands from SelectionTool's options panel to the Select menu in EditorSession
This commit is contained in:
parent
5bacc8bf4a
commit
402bdb508a
@ -8,6 +8,7 @@ from PySide.QtCore import Qt
|
|||||||
from mcedit2 import editortools
|
from mcedit2 import editortools
|
||||||
from mcedit2.command import SimpleRevisionCommand
|
from mcedit2.command import SimpleRevisionCommand
|
||||||
from mcedit2.rendering.blockmodels import BlockModels
|
from mcedit2.rendering.blockmodels import BlockModels
|
||||||
|
from mcedit2.editorcommands.fill import fillCommand
|
||||||
from mcedit2.editorcommands.find_replace import FindReplaceDialog
|
from mcedit2.editorcommands.find_replace import FindReplaceDialog
|
||||||
from mcedit2.editortools.select import SelectCommand
|
from mcedit2.editortools.select import SelectCommand
|
||||||
from mcedit2.panels.player import PlayerPanel
|
from mcedit2.panels.player import PlayerPanel
|
||||||
@ -29,6 +30,8 @@ from mcedit2.worldview.cutaway import CutawayWorldViewFrame
|
|||||||
from mcedit2.worldview.minimap import MinimapWorldView
|
from mcedit2.worldview.minimap import MinimapWorldView
|
||||||
from mcedit2.worldview.overhead import OverheadWorldViewFrame
|
from mcedit2.worldview.overhead import OverheadWorldViewFrame
|
||||||
from mceditlib.geometry import Vector
|
from mceditlib.geometry import Vector
|
||||||
|
from mceditlib.operations import ComposeOperations
|
||||||
|
from mceditlib.operations.entity import RemoveEntitiesOperation
|
||||||
from mceditlib.selection import BoundingBox
|
from mceditlib.selection import BoundingBox
|
||||||
from mceditlib.exceptions import PlayerNotFound
|
from mceditlib.exceptions import PlayerNotFound
|
||||||
from mceditlib.revisionhistory import UndoFolderExists
|
from mceditlib.revisionhistory import UndoFolderExists
|
||||||
@ -142,10 +145,22 @@ class EditorSession(QtCore.QObject):
|
|||||||
self.actionPaste_Entities.setShortcut(QtGui.QKeySequence("Ctrl+Alt+V"))
|
self.actionPaste_Entities.setShortcut(QtGui.QKeySequence("Ctrl+Alt+V"))
|
||||||
self.actionPaste_Entities.setObjectName("actionPaste_Entities")
|
self.actionPaste_Entities.setObjectName("actionPaste_Entities")
|
||||||
|
|
||||||
self.actionClear = QtGui.QAction(self.tr("Clear"), self, triggered=self.clear, enabled=False)
|
self.actionClear = QtGui.QAction(self.tr("Delete"), self, triggered=self.deleteSelection, enabled=False)
|
||||||
self.actionClear.setShortcut(QtGui.QKeySequence.Delete)
|
self.actionClear.setShortcut(QtGui.QKeySequence.Delete)
|
||||||
self.actionClear.setObjectName("actionClear")
|
self.actionClear.setObjectName("actionClear")
|
||||||
|
|
||||||
|
self.actionDeleteBlocks = QtGui.QAction(self.tr("Delete Blocks"), self, triggered=self.deleteBlocks, enabled=False)
|
||||||
|
self.actionDeleteBlocks.setShortcut(QtGui.QKeySequence("Shift+Del"))
|
||||||
|
self.actionDeleteBlocks.setObjectName("actionDeleteBlocks")
|
||||||
|
|
||||||
|
self.actionDeleteEntities = QtGui.QAction(self.tr("Delete Entities"), self, triggered=self.deleteEntities, enabled=False)
|
||||||
|
self.actionDeleteEntities.setShortcut(QtGui.QKeySequence("Shift+Alt+Del"))
|
||||||
|
self.actionDeleteEntities.setObjectName("actionDeleteEntities")
|
||||||
|
|
||||||
|
self.actionFill = QtGui.QAction(self.tr("Fill"), self, triggered=self.fill, enabled=False)
|
||||||
|
self.actionFill.setShortcut(QtGui.QKeySequence("Shift+Ctrl+F"))
|
||||||
|
self.actionFill.setObjectName("actionFill")
|
||||||
|
|
||||||
self.actionFindReplace = QtGui.QAction(self.tr("Find/Replace"), self, triggered=self.findReplace, enabled=True)
|
self.actionFindReplace = QtGui.QAction(self.tr("Find/Replace"), self, triggered=self.findReplace, enabled=True)
|
||||||
self.actionFindReplace.setShortcut(QtGui.QKeySequence.Find)
|
self.actionFindReplace.setShortcut(QtGui.QKeySequence.Find)
|
||||||
self.actionFindReplace.setObjectName("actionFindReplace")
|
self.actionFindReplace.setObjectName("actionFindReplace")
|
||||||
@ -163,7 +178,12 @@ class EditorSession(QtCore.QObject):
|
|||||||
self.menuEdit.addAction(self.actionPaste)
|
self.menuEdit.addAction(self.actionPaste)
|
||||||
self.menuEdit.addAction(self.actionPaste_Blocks)
|
self.menuEdit.addAction(self.actionPaste_Blocks)
|
||||||
self.menuEdit.addAction(self.actionPaste_Entities)
|
self.menuEdit.addAction(self.actionPaste_Entities)
|
||||||
|
self.menuEdit.addSeparator()
|
||||||
self.menuEdit.addAction(self.actionClear)
|
self.menuEdit.addAction(self.actionClear)
|
||||||
|
self.menuEdit.addAction(self.actionDeleteBlocks)
|
||||||
|
self.menuEdit.addAction(self.actionDeleteEntities)
|
||||||
|
self.menuEdit.addSeparator()
|
||||||
|
self.menuEdit.addAction(self.actionFill)
|
||||||
self.menuEdit.addSeparator()
|
self.menuEdit.addSeparator()
|
||||||
self.menuEdit.addAction(self.actionFindReplace)
|
self.menuEdit.addAction(self.actionFindReplace)
|
||||||
|
|
||||||
@ -175,6 +195,10 @@ class EditorSession(QtCore.QObject):
|
|||||||
self.actionSelectAll.setShortcut(QtGui.QKeySequence.SelectAll)
|
self.actionSelectAll.setShortcut(QtGui.QKeySequence.SelectAll)
|
||||||
self.menuSelect.addAction(self.actionSelectAll)
|
self.menuSelect.addAction(self.actionSelectAll)
|
||||||
|
|
||||||
|
self.actionDeselect = QtGui.QAction(self.tr("Deselect"), self, triggered=self.deselect)
|
||||||
|
self.actionDeselect.setShortcut(QtGui.QKeySequence("Ctrl+D"))
|
||||||
|
self.menuSelect.addAction(self.actionDeselect)
|
||||||
|
|
||||||
self.menus.append(self.menuSelect)
|
self.menus.append(self.menuSelect)
|
||||||
|
|
||||||
# --- Resources ---
|
# --- Resources ---
|
||||||
@ -260,6 +284,9 @@ class EditorSession(QtCore.QObject):
|
|||||||
self.actionPaste_Blocks.setEnabled(enable)
|
self.actionPaste_Blocks.setEnabled(enable)
|
||||||
self.actionPaste_Entities.setEnabled(enable)
|
self.actionPaste_Entities.setEnabled(enable)
|
||||||
self.actionClear.setEnabled(enable)
|
self.actionClear.setEnabled(enable)
|
||||||
|
self.actionDeleteBlocks.setEnabled(enable)
|
||||||
|
self.actionDeleteEntities.setEnabled(enable)
|
||||||
|
self.actionFill.setEnabled(enable)
|
||||||
|
|
||||||
# --- Menu commands ---
|
# --- Menu commands ---
|
||||||
|
|
||||||
@ -299,17 +326,45 @@ class EditorSession(QtCore.QObject):
|
|||||||
def pasteEntities(self):
|
def pasteEntities(self):
|
||||||
NotImplementedYet()
|
NotImplementedYet()
|
||||||
|
|
||||||
def clear(self):
|
|
||||||
self.selectionTool.deleteSelection()
|
|
||||||
|
|
||||||
def findReplace(self):
|
def findReplace(self):
|
||||||
dialog = FindReplaceDialog(self)
|
dialog = FindReplaceDialog(self)
|
||||||
dialog.exec_()
|
dialog.exec_()
|
||||||
|
|
||||||
|
def deleteSelection(self):
|
||||||
|
command = SimpleRevisionCommand(self, "Delete")
|
||||||
|
with command.begin():
|
||||||
|
fillTask = self.currentDimension.fillBlocksIter(self.currentSelection, "air")
|
||||||
|
entitiesTask = RemoveEntitiesOperation(self.currentDimension, self.currentSelection)
|
||||||
|
task = ComposeOperations(fillTask, entitiesTask)
|
||||||
|
showProgress("Deleting...", task)
|
||||||
|
self.pushCommand(command)
|
||||||
|
|
||||||
|
def deleteBlocks(self):
|
||||||
|
command = SimpleRevisionCommand(self, "Delete Blocks")
|
||||||
|
with command.begin():
|
||||||
|
fillTask = self.currentDimension.fillBlocksIter(self.currentSelection, "air")
|
||||||
|
showProgress("Deleting...", fillTask)
|
||||||
|
self.pushCommand(command)
|
||||||
|
|
||||||
|
def deleteEntities(self):
|
||||||
|
command = SimpleRevisionCommand(self, "Delete Entities")
|
||||||
|
with command.begin():
|
||||||
|
entitiesTask = RemoveEntitiesOperation(self.currentDimension, self.currentSelection)
|
||||||
|
showProgress("Deleting...", entitiesTask)
|
||||||
|
self.pushCommand(command)
|
||||||
|
|
||||||
|
def fill(self):
|
||||||
|
fillCommand(self)
|
||||||
|
|
||||||
# - Select -
|
# - Select -
|
||||||
|
|
||||||
def selectAll(self):
|
def selectAll(self):
|
||||||
command = SelectCommand(self.selectionTool, self.currentDimension.bounds, self.tr("Select All"))
|
command = SelectCommand(self, self.currentDimension.bounds, self.tr("Select All"))
|
||||||
|
self.pushCommand(command)
|
||||||
|
|
||||||
|
def deselect(self):
|
||||||
|
command = SelectCommand(self, None)
|
||||||
|
command.setText(self.tr("Deselect"))
|
||||||
self.pushCommand(command)
|
self.pushCommand(command)
|
||||||
|
|
||||||
# --- Library support ---
|
# --- Library support ---
|
||||||
|
@ -7,8 +7,6 @@ import logging
|
|||||||
from OpenGL import GL
|
from OpenGL import GL
|
||||||
from PySide import QtGui, QtCore
|
from PySide import QtGui, QtCore
|
||||||
|
|
||||||
from mcedit2.command import SimpleRevisionCommand
|
|
||||||
from mcedit2.editorcommands.fill import fillCommand
|
|
||||||
from mcedit2.editortools import EditorTool
|
from mcedit2.editortools import EditorTool
|
||||||
from mcedit2.handles.boxhandle import BoxHandle
|
from mcedit2.handles.boxhandle import BoxHandle
|
||||||
from mcedit2.rendering import cubes
|
from mcedit2.rendering import cubes
|
||||||
@ -17,15 +15,12 @@ from mcedit2.util.load_ui import load_ui
|
|||||||
from mcedit2.util.glutils import gl
|
from mcedit2.util.glutils import gl
|
||||||
from mcedit2.rendering.depths import DepthOffset
|
from mcedit2.rendering.depths import DepthOffset
|
||||||
from mcedit2.rendering import scenegraph, rendergraph
|
from mcedit2.rendering import scenegraph, rendergraph
|
||||||
from mcedit2.util.showprogress import showProgress
|
|
||||||
from mcedit2.widgets import shapewidget
|
from mcedit2.widgets import shapewidget
|
||||||
from mcedit2.widgets.layout import Column
|
from mcedit2.widgets.layout import Column
|
||||||
from mcedit2.widgets.shapewidget import ShapeWidget
|
from mcedit2.widgets.shapewidget import ShapeWidget
|
||||||
from mceditlib import faces
|
from mceditlib import faces
|
||||||
from mceditlib.geometry import Vector
|
from mceditlib.geometry import Vector
|
||||||
from mceditlib.selection import BoundingBox
|
from mceditlib.selection import BoundingBox
|
||||||
from mceditlib.operations import ComposeOperations
|
|
||||||
from mceditlib.operations.entity import RemoveEntitiesOperation
|
|
||||||
from mceditlib import selection
|
from mceditlib import selection
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -148,21 +143,21 @@ class SelectionCoordinateWidget(QtGui.QWidget):
|
|||||||
|
|
||||||
|
|
||||||
class SelectCommand(QtGui.QUndoCommand):
|
class SelectCommand(QtGui.QUndoCommand):
|
||||||
def __init__(self, selectionTool, box, text=None, *args, **kwargs):
|
def __init__(self, editorSession, box, text=None, *args, **kwargs):
|
||||||
QtGui.QUndoCommand.__init__(self, *args, **kwargs)
|
QtGui.QUndoCommand.__init__(self, *args, **kwargs)
|
||||||
if text is None:
|
if text is None:
|
||||||
text = QtGui.qApp.tr("Box Selection")
|
text = QtGui.qApp.tr("Box Selection")
|
||||||
self.setText(text)
|
self.setText(text)
|
||||||
self.box = box
|
self.box = box
|
||||||
self.selectionTool = selectionTool
|
self.editorSession = editorSession
|
||||||
self.previousBox = None
|
self.previousBox = None
|
||||||
|
|
||||||
def undo(self):
|
def undo(self):
|
||||||
self.selectionTool.currentSelection = self.previousBox
|
self.editorSession.currentSelection = self.previousBox
|
||||||
|
|
||||||
def redo(self):
|
def redo(self):
|
||||||
self.previousBox = self.selectionTool.currentSelection
|
self.previousBox = self.editorSession.currentSelection
|
||||||
self.selectionTool.currentSelection = self.box
|
self.editorSession.currentSelection = self.box
|
||||||
|
|
||||||
class SelectionTool(EditorTool):
|
class SelectionTool(EditorTool):
|
||||||
name = "Select"
|
name = "Select"
|
||||||
@ -183,23 +178,8 @@ class SelectionTool(EditorTool):
|
|||||||
self.coordInput.boxChanged.connect(self.coordInputChanged)
|
self.coordInput.boxChanged.connect(self.coordInputChanged)
|
||||||
self.shapeInput = ShapeWidget()
|
self.shapeInput = ShapeWidget()
|
||||||
self.shapeInput.shapeChanged.connect(self.shapeDidChange)
|
self.shapeInput.shapeChanged.connect(self.shapeDidChange)
|
||||||
self.deselectButton = QtGui.QPushButton(self.tr("Deselect"))
|
|
||||||
self.deselectButton.clicked.connect(self.deselect)
|
|
||||||
self.deleteSelectionButton = QtGui.QPushButton(self.tr("Delete"))
|
|
||||||
self.deleteSelectionButton.clicked.connect(self.deleteSelection)
|
|
||||||
self.deleteBlocksButton = QtGui.QPushButton(self.tr("Delete Blocks"))
|
|
||||||
self.deleteBlocksButton.clicked.connect(self.deleteBlocks)
|
|
||||||
self.deleteEntitiesButton = QtGui.QPushButton(self.tr("Delete Entities"))
|
|
||||||
self.deleteEntitiesButton.clicked.connect(self.deleteEntities)
|
|
||||||
self.fillButton = QtGui.QPushButton(self.tr("Fill"))
|
|
||||||
self.fillButton.clicked.connect(self.fill)
|
|
||||||
self.toolWidget.setLayout(Column(self.coordInput,
|
self.toolWidget.setLayout(Column(self.coordInput,
|
||||||
self.shapeInput,
|
self.shapeInput,
|
||||||
self.deselectButton,
|
|
||||||
self.deleteSelectionButton,
|
|
||||||
self.deleteBlocksButton,
|
|
||||||
self.deleteEntitiesButton,
|
|
||||||
self.fillButton,
|
|
||||||
None))
|
None))
|
||||||
|
|
||||||
self.cursorNode = SelectionCursor()
|
self.cursorNode = SelectionCursor()
|
||||||
@ -244,8 +224,6 @@ class SelectionTool(EditorTool):
|
|||||||
def currentSelection(self, value):
|
def currentSelection(self, value):
|
||||||
self.editorSession.currentSelection = value
|
self.editorSession.currentSelection = value
|
||||||
|
|
||||||
self.boxHandleNode.bounds = None if value is None else BoundingBox(value.origin, value.size)
|
|
||||||
|
|
||||||
def coordInputChanged(self, box):
|
def coordInputChanged(self, box):
|
||||||
self.currentSelection = self.createShapedSelection(box)
|
self.currentSelection = self.createShapedSelection(box)
|
||||||
|
|
||||||
@ -256,30 +234,14 @@ class SelectionTool(EditorTool):
|
|||||||
def updateNodes(self):
|
def updateNodes(self):
|
||||||
box = self.currentSelection
|
box = self.currentSelection
|
||||||
if box:
|
if box:
|
||||||
|
self.boxHandleNode.bounds = BoundingBox(box.origin, box.size)
|
||||||
self.selectionNode.visible = True
|
self.selectionNode.visible = True
|
||||||
self.selectionNode.selection = box
|
self.selectionNode.selection = box
|
||||||
else:
|
else:
|
||||||
|
self.boxHandleNode.bounds = None
|
||||||
self.selectionNode.visible = False
|
self.selectionNode.visible = False
|
||||||
self.faceHoverNode.visible = False
|
self.faceHoverNode.visible = False
|
||||||
|
|
||||||
def deleteSelection(self):
|
|
||||||
command = SimpleRevisionCommand(self.editorSession, "Delete")
|
|
||||||
with command.begin():
|
|
||||||
fillTask = self.editorSession.currentDimension.fillBlocksIter(self.editorSession.currentSelection, "air")
|
|
||||||
entitiesTask = RemoveEntitiesOperation(self.editorSession.currentDimension, self.editorSession.currentSelection)
|
|
||||||
task = ComposeOperations(fillTask, entitiesTask)
|
|
||||||
showProgress("Deleting...", task)
|
|
||||||
self.editorSession.pushCommand(command)
|
|
||||||
|
|
||||||
def deleteBlocks(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def deleteEntities(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def fill(self):
|
|
||||||
fillCommand(self.editorSession)
|
|
||||||
|
|
||||||
def boxHandleResized(self, box):
|
def boxHandleResized(self, box):
|
||||||
if box is not None:
|
if box is not None:
|
||||||
self.selectionNode.selection = self.createShapedSelection(box)
|
self.selectionNode.selection = self.createShapedSelection(box)
|
||||||
@ -287,7 +249,7 @@ class SelectionTool(EditorTool):
|
|||||||
def boxHandleResizedDone(self, box, newSelection):
|
def boxHandleResizedDone(self, box, newSelection):
|
||||||
if box is not None:
|
if box is not None:
|
||||||
selection = self.createShapedSelection(box)
|
selection = self.createShapedSelection(box)
|
||||||
command = SelectCommand(self, selection)
|
command = SelectCommand(self.editorSession, selection)
|
||||||
if not newSelection:
|
if not newSelection:
|
||||||
command.setText(self.tr("Resize Selection"))
|
command.setText(self.tr("Resize Selection"))
|
||||||
self.editorSession.undoStack.push(command)
|
self.editorSession.undoStack.push(command)
|
||||||
@ -310,12 +272,6 @@ class SelectionTool(EditorTool):
|
|||||||
self.boxHandleNode.mouseRelease(event)
|
self.boxHandleNode.mouseRelease(event)
|
||||||
|
|
||||||
|
|
||||||
def deselect(self):
|
|
||||||
editor = self.editorSession
|
|
||||||
command = SelectCommand(self, None)
|
|
||||||
command.setText(self.tr("Deselect"))
|
|
||||||
editor.undoStack.push(command)
|
|
||||||
|
|
||||||
selectionColor = (0.8, 0.8, 1.0)
|
selectionColor = (0.8, 0.8, 1.0)
|
||||||
alpha = 0.33
|
alpha = 0.33
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user