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

View File

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

View File

@ -38,7 +38,6 @@ def ToolClasses():
from . import generate from . import generate
from . import edit_chunk from . import edit_chunk
from . import edit_entity from . import edit_entity
from . import edit_player
from . import select from . import select
from . import flood_fill from . import flood_fill
@ -49,7 +48,6 @@ def ToolClasses():
generate.GenerateTool, generate.GenerateTool,
edit_chunk.ChunkTool, edit_chunk.ChunkTool,
edit_entity.EntityTool, edit_entity.EntityTool,
edit_player.PlayerTool,
) )
# global _scanned_modules # 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"> <property name="windowTitle">
<string>toolBar</string> <string>toolBar</string>
</property> </property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextUnderIcon</enum>
</property>
<attribute name="toolBarArea"> <attribute name="toolBarArea">
<enum>TopToolBarArea</enum> <enum>TopToolBarArea</enum>
</attribute> </attribute>

View File

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