Player Tool is now a Panel

This commit is contained in:
David Vierra 2015-01-08 14:59:44 -10:00
parent a83977da99
commit a206ab5336
9 changed files with 141 additions and 86 deletions

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -98,21 +98,21 @@ class MCEditApp(QtGui.QApplication):
self.tabWidget.tabCloseRequested.connect(self.tabCloseRequested)
self.tabWidget.currentChanged.connect(self.tabChanged)
# --- Sessions
# --- Sessions ---
self._currentSession = None
self.sessions = []
self.sessionDockWidgets = []
self.sessionChanged.connect(self.sessionDidChange)
# --- Dock Widgets ---
# --- Panel Widgets ---
self.undoView = QtGui.QUndoView(self.undoGroup)
undoDockWidget = QtGui.QDockWidget("History", mainWindow, objectName="HistoryWidget")
undoDockWidget.setWidget(self.undoView)
mainWindow.addDockWidget(Qt.RightDockWidgetArea, undoDockWidget)
mainWindow.panelsToolBar.addAction(undoDockWidget.toggleViewAction())
undoDockWidget.close()
self.undoDockWidget = QtGui.QDockWidget("History", mainWindow, objectName="HistoryWidget")
self.undoDockWidget.setWidget(self.undoView)
mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.undoDockWidget)
mainWindow.panelsToolBar.addAction(self.undoDockWidget.toggleViewAction())
self.undoDockWidget.close()
self.logViewWidget = LogViewFrame(mainWindow)
self.logViewDockWidget = QtGui.QDockWidget("Error Log", mainWindow, objectName="ErrorsWidget")
@ -121,6 +121,8 @@ class MCEditApp(QtGui.QApplication):
mainWindow.panelsToolBar.addAction(self.logViewDockWidget.toggleViewAction())
self.logViewDockWidget.close()
self.globalPanels = [self.undoDockWidget, self.logViewDockWidget]
# --- Debug Widgets ---
if DEBUG:
@ -167,6 +169,8 @@ class MCEditApp(QtGui.QApplication):
mainWindow.addDockWidget(Qt.BottomDockWidgetArea, infoDockWidget)
mainWindow.tabifyDockWidget(infoDockWidget, self.logViewDockWidget)
self.globalPanels.append(infoDockWidget)
mainWindow.panelsToolBar.addAction(infoDockWidget.toggleViewAction())
infoDockWidget.close()
@ -199,7 +203,7 @@ class MCEditApp(QtGui.QApplication):
mainWindow.actionAbout_MCEdit.setShortcut(QtGui.QKeySequence.Quit)
# -- Window Menu --
mainWindow.menuWindow.addAction(undoDockWidget.toggleViewAction())
mainWindow.menuWindow.addAction(self.undoDockWidget.toggleViewAction())
mainWindow.menuWindow.addAction(self.logViewDockWidget.toggleViewAction())
# --- World List ---
@ -376,6 +380,11 @@ class MCEditApp(QtGui.QApplication):
for menu in session.menus:
menuBar.insertMenu(self.mainWindow.menuWindow.menuAction(), menu)
self.mainWindow.panelsToolBar.clear()
for panel in self.globalPanels:
self.mainWindow.panelsToolBar.addAction(panel.toggleViewAction())
for panel in session.panels:
self.mainWindow.panelsToolBar.addAction(panel.toggleViewAction())
self.mainWindow.toolsToolBar.clear()
for action in session.toolActions:

View File

@ -8,6 +8,7 @@ from PySide.QtCore import Qt
from mcedit2 import editortools
from mcedit2.command import SimpleRevisionCommand
from mcedit2.rendering.blockmodels import BlockModels
from mcedit2.panels.player import PlayerPanel
from mcedit2.util.dialogs import NotImplementedYet
from mcedit2.util.resources import resourcePath
from mcedit2.util.showprogress import showProgress
@ -131,6 +132,11 @@ class EditorSession(QtCore.QObject):
self.editorOverlay = scenegraph.Node()
# --- Panels ---
self.playerPanel = PlayerPanel(self)
self.panels = [self.playerPanel]
# --- Tools ---
def PickToolAction(tool):
name = tool.name
@ -438,6 +444,7 @@ class EditorTab(QtGui.QWidget):
"""
:type editorSession: mcedit2.editorsession.EditorSession
:rtype: EditorTab
"""
settings = Settings()
@ -467,7 +474,6 @@ class EditorTab(QtGui.QWidget):
self.viewStack = QtGui.QStackedWidget()
self.miniMap = MinimapWorldView(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache)
self.miniMapDockWidget = QtGui.QDockWidget("Minimap", objectName="MinimapWidget", floating=True)
self.miniMapDockWidget.setWidget(self.miniMap)
@ -499,6 +505,7 @@ class EditorTab(QtGui.QWidget):
self.cameraViewFrame = CameraWorldViewFrame(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap)
self.cameraViewFrame.worldView.viewID = "Cam"
self.cameraView = self.cameraViewFrame.worldView
self._addView(self.cameraViewFrame)
self.viewStack.currentChanged.connect(self._viewChanged)

View File

@ -38,7 +38,6 @@ def ToolClasses():
from . import generate
from . import edit_chunk
from . import edit_entity
from . import edit_player
from . import select
from . import flood_fill
@ -49,7 +48,6 @@ def ToolClasses():
generate.GenerateTool,
edit_chunk.ChunkTool,
edit_entity.EntityTool,
edit_player.PlayerTool,
)
# global _scanned_modules

View File

@ -1,74 +0,0 @@
"""
player
"""
from __future__ import absolute_import, division, print_function, unicode_literals
import logging
from PySide.QtCore import Qt
from mcedit2.command import SimpleRevisionCommand
from mcedit2.editortools import EditorTool
from mcedit2.nbt_treemodel import NBTTreeModel, NBTFilterProxyModel
from mcedit2.util.load_ui import load_ui
log = logging.getLogger(__name__)
class PlayerTool(EditorTool):
name = "Edit Player"
iconName = "edit_player"
def __init__(self, editorSession, *args, **kwargs):
"""
:type editorSession: EditorSession
"""
super(PlayerTool, self).__init__(editorSession, *args, **kwargs)
self.toolWidget = load_ui("editortools/edit_player.ui")
self.toolWidget.movePlayerButton.clicked.connect(self.movePlayerToCamera)
self.toolWidget.viewPlayerButton.clicked.connect(self.showPlayerView)
for name in editorSession.worldEditor.listPlayers(): # xxx live update?
self.toolWidget.playerListBox.addItem(name)
self.toolWidget.playerListBox.currentIndexChanged[str].connect(self.setSelectedPlayer)
self.selectedPlayer = None
for playerUUID in editorSession.worldEditor.listPlayers():
self.setSelectedPlayer(playerUUID)
break
def setSelectedPlayer(self, name):
self.selectedPlayer = player = self.editorSession.worldEditor.getPlayer(name)
model = NBTTreeModel(player.rootTag)
proxyModel = NBTFilterProxyModel(self)
proxyModel.setSourceModel(model)
proxyModel.setDynamicSortFilter(True)
self.toolWidget.treeView.setModel(proxyModel)
self.toolWidget.treeView.sortByColumn(0, Qt.AscendingOrder)
def movePlayerToCamera(self):
view = self.editorSession.editorTab.currentView()
if view.viewID == "Cam":
command = SimpleRevisionCommand(self.editorSession, "Move Player")
with command.begin():
self.selectedPlayer.Position = view.centerPoint
try:
self.selectedPlayer.Rotation = view.yawPitch
except AttributeError:
pass
self.selectedPlayer.dirty = True # xxx do in AnvilPlayerRef
self.editorSession.pushCommand(command)
else:
raise ValueError("Current view is not camera view.")
def showPlayerView(self):
self.editorSession.editorTab.showCameraView()
view = self.editorSession.editorTab.currentView()
view.centerPoint = self.selectedPlayer.Position
view.yawPitch = self.selectedPlayer.Rotation

View File

@ -0,0 +1,7 @@
"""
__init__.py
"""
from __future__ import absolute_import, division, print_function
import logging
log = logging.getLogger(__name__)

View File

@ -0,0 +1,105 @@
"""
player
"""
from __future__ import absolute_import, division, print_function, unicode_literals
import logging
from PySide import QtGui
from PySide.QtCore import Qt
from mcedit2.command import SimpleRevisionCommand
from mcedit2.nbt_treemodel import NBTTreeModel, NBTFilterProxyModel
from mcedit2.util.load_ui import load_ui
from mcedit2.util.resources import resourcePath
from mceditlib.exceptions import PlayerNotFound
log = logging.getLogger(__name__)
class PlayerPanel(QtGui.QWidget):
name = "Edit Player"
iconName = "edit_player"
def __init__(self, editorSession, *args, **kwargs):
"""
:type editorSession: mcedit2.editorsession.EditorSession
:rtype: PlayerPanel
"""
super(PlayerPanel, self).__init__(*args, **kwargs)
self.editorSession = editorSession
load_ui("panels/player.ui", baseinstance=self)
self.movePlayerButton.clicked.connect(self.movePlayerToCamera)
self.viewPlayerButton.clicked.connect(self.showPlayerView)
for name in editorSession.worldEditor.listPlayers(): # xxx live update?
if name == "":
displayName = "[Single-player]"
else:
displayName = name
self.playerListBox.addItem(displayName, name)
self.playerListBox.currentIndexChanged[int].connect(self.setSelectedPlayer)
self.selectedPlayer = None
# for playerUUID in editorSession.worldEditor.listPlayers():
# self.setSelectedPlayer(playerUUID)
# break
icon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/edit_player.png"))
action = QtGui.QAction(icon, "Edit Player", self)
action.setCheckable(True)
action.triggered.connect(self.toggleView)
self._toggleViewAction = action
def toggleView(self):
if self.isHidden():
self.show()
self._toggleViewAction.setChecked(True)
else:
self.hide()
self._toggleViewAction.setChecked(False)
def toggleViewAction(self):
return self._toggleViewAction
def setSelectedPlayer(self, index):
name = self.playerListBox.itemData(index)
try:
self.selectedPlayer = player = self.editorSession.worldEditor.getPlayer(name)
except PlayerNotFound:
log.info("PlayerPanel: player %s not found!", name)
self.treeView.setModel(None)
else:
model = NBTTreeModel(player.rootTag)
proxyModel = NBTFilterProxyModel(self)
proxyModel.setSourceModel(model)
proxyModel.setDynamicSortFilter(True)
self.treeView.setModel(proxyModel)
self.treeView.sortByColumn(0, Qt.AscendingOrder)
def movePlayerToCamera(self):
view = self.editorSession.editorTab.currentView()
if view.viewID == "Cam":
command = SimpleRevisionCommand(self.editorSession, "Move Player")
with command.begin():
self.selectedPlayer.Position = view.centerPoint
try:
self.selectedPlayer.Rotation = view.yawPitch
except AttributeError:
pass
self.selectedPlayer.dirty = True # xxx do in AnvilPlayerRef
self.editorSession.pushCommand(command)
else:
raise ValueError("Current view is not camera view.")
def showPlayerView(self):
self.editorSession.editorTab.showCameraView()
view = self.editorSession.editorTab.cameraView
view.setPerspective(False)
view = self.editorSession.editorTab.currentView()
view.centerPoint = self.selectedPlayer.Position
view.yawPitch = self.selectedPlayer.Rotation

View File

@ -87,6 +87,9 @@
<property name="windowTitle">
<string>toolBar</string>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextUnderIcon</enum>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>

View File

@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
<string>Edit Players</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>