def showWorld(self, filename): if filename == self._currentFilename: return self._currentFilename = filename self.removeWorldView() try: worldEditor = worldeditor.WorldEditor(filename, readonly=True) except Exception as e: self.errorWidget = QtGui.QWidget() setWidgetError( self.errorWidget, e, "An error occurred while reading the file %s. This file might not be a Minecraft world. If it is, please file a bug report." % filename) self.stackedWidget.addWidget(self.errorWidget) self.stackedWidget.setCurrentWidget(self.errorWidget) else: dim = worldEditor.getDimension() self.setWorldView(MinimapWorldView(dim)) self.chunkLoader = ChunkLoader(dim) self.chunkLoader.addClient(self.worldView) self.chunkLoader.chunkCompleted.connect(self.worldView.update) try: try: player = worldEditor.getPlayer() log.info("Centering on single-player player.") except (PlayerNotFound, NBTFormatError): try: center = worldEditor.getWorldMetadata().Spawn log.info("Centering on spawn position.") except AttributeError: log.info("Centering on world center") center = dim.bounds.origin + (dim.bounds.size * 0.5) else: if player.dimName == dim.dimName: center = Vector(*player.Position) self.worldView.centerOnPoint(center) else: center = dim.bounds.origin + (dim.bounds.size * 0.5) self.worldView.centerOnPoint(center) except Exception as e: log.exception("Error while centering view in world list: %s", e) log.info("Switched world view")
def worldListItemClicked(self, i): if self.selectedWorldIndex == i: return self.selectedWorldIndex = i import gc gc.collect() models = {} try: worldEditor = worldeditor.WorldEditor(self.itemWidgets[i].filename, readonly=True) except (EnvironmentError, LevelFormatError) as e: setWidgetError(self.errorWidget, e) while self.stackedWidget.count(): self.stackedWidget.removeWidget(self.stackedWidget.widget(0)) self.worldViewBox.addWidget(self.errorWidget) else: i, v, p = self.getSelectedIVP() blockModels = models.get(worldEditor.blocktypes) resLoader = i.getResourceLoader(v, p) if blockModels is None: models[worldEditor.blocktypes] = blockModels = BlockModels( worldEditor.blocktypes, resLoader) textureAtlas = TextureAtlas(worldEditor, resLoader, blockModels) dim = worldEditor.getDimension() self.setWorldView(MinimapWorldView(dim, textureAtlas)) self.chunkLoader = ChunkLoader(dim) self.chunkLoader.addClient(self.worldView) self.chunkLoader.chunkCompleted.connect(self.worldView.update) try: player = worldEditor.getPlayer() log.info("Centering on single-player player.") except PlayerNotFound: try: center = worldEditor.worldSpawnPosition() log.info("Centering on spawn position.") except AttributeError: log.info("Centering on world center") center = dim.bounds.origin + (dim.bounds.size * 0.5) else: if player.dimName == dim.dimName: center = Vector(*player.Position) self.worldView.centerOnPoint(center) else: center = dim.bounds.origin + (dim.bounds.size * 0.5) self.worldView.centerOnPoint(center) log.info("Switched world view")
def showWorld(self, filename): self.removeWorldView() try: worldEditor = worldeditor.WorldEditor(filename, readonly=True) resLoader = QtGui.qApp.getResourceLoaderForFilename(filename) blockModels = BlockModels(worldEditor.blocktypes, resLoader) textureAtlas = TextureAtlas(worldEditor, resLoader, blockModels) except (EnvironmentError, LevelFormatError, zipfile.BadZipfile) as e: self.errorWidget = QtGui.QWidget() setWidgetError(self.errorWidget, e) self.stackedWidget.addWidget(self.errorWidget) self.stackedWidget.setCurrentWidget(self.errorWidget) else: dim = worldEditor.getDimension() self.setWorldView(MinimapWorldView(dim, textureAtlas)) self.chunkLoader = ChunkLoader(dim) self.chunkLoader.addClient(self.worldView) self.chunkLoader.chunkCompleted.connect(self.worldView.update) try: try: player = worldEditor.getPlayer() log.info("Centering on single-player player.") except PlayerNotFound: try: center = worldEditor.getWorldMetadata().Spawn log.info("Centering on spawn position.") except AttributeError: log.info("Centering on world center") center = dim.bounds.origin + (dim.bounds.size * 0.5) else: if player.dimName == dim.dimName: center = Vector(*player.Position) self.worldView.centerOnPoint(center) else: center = dim.bounds.origin + (dim.bounds.size * 0.5) self.worldView.centerOnPoint(center) except Exception as e: log.exception("Error while centering view in world list: %s", e) log.info("Switched world view")
def __init__(self, editorSession): """ EditorTab is the widget containing the editor viewports, the minimap, and the settings panel for the currently selected tool and its dockwidget. :type editorSession: mcedit2.editorsession.EditorSession :rtype: EditorTab """ QtGui.QWidget.__init__(self) self.setContentsMargins(0, 0, 0, 0) self.editorSession = editorSession self.editorSession.dimensionChanged.connect(self.dimensionDidChange) self.debugLastCenters = [] self.viewButtonGroup = QtGui.QButtonGroup(self) self.viewButtonToolbar = QtGui.QToolBar() self.viewButtons = {} self.views = [] for name, handler in ( ("2D", self.showCutawayView), ("Over", self.showOverheadView), # ("Iso", self.showIsoView), ("Cam", self.showCameraView), # ("4-up", self.showFourUpView), ): button = QtGui.QToolButton(text=name, checkable=True) button.clicked.connect(handler) self.viewButtonGroup.addButton(button) self.viewButtonToolbar.addWidget(button) self.viewButtons[name] = button 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) self.miniMapDockWidget.setFixedSize(256, 256) self.views.append(self.miniMap) self.toolOptionsArea = QtGui.QScrollArea() self.toolOptionsArea.setWidgetResizable(True) self.toolOptionsDockWidget = QtGui.QDockWidget("Tool Options", objectName="ToolOptionsWidget", floating=True) self.toolOptionsDockWidget.setWidget(self.toolOptionsArea) editorSession.dockWidgets.append((Qt.LeftDockWidgetArea, self.miniMapDockWidget)) editorSession.dockWidgets.append((Qt.LeftDockWidgetArea, self.toolOptionsDockWidget)) editorSession.loader.addClient(self.miniMap) self.overheadViewFrame = OverheadWorldViewFrame(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap) self.overheadViewFrame.worldView.viewID = "Over" self._addView(self.overheadViewFrame) self.cutawayViewFrame = CutawayWorldViewFrame(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap) self.cutawayViewFrame.worldView.viewID = "2D" self._addView(self.cutawayViewFrame) # # self.fourUpViewFrame = FourUpWorldViewFrame(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap) # self.fourUpViewFrame.worldView.viewID = "4-up" # self._addView(self.fourUpViewFrame) 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) self.viewChanged.connect(self.viewDidChange) self.setLayout(Column(self.viewButtonToolbar, Row(self.viewStack, margin=0), margin=0)) currentViewName = currentViewSetting.value() if currentViewName not in self.viewButtons: currentViewName = "Cam" self.viewButtons[currentViewName].click()
class EditorTab(QtGui.QWidget): def __init__(self, editorSession): """ EditorTab is the widget containing the editor viewports, the minimap, and the settings panel for the currently selected tool and its dockwidget. :type editorSession: mcedit2.editorsession.EditorSession :rtype: EditorTab """ QtGui.QWidget.__init__(self) self.setContentsMargins(0, 0, 0, 0) self.editorSession = editorSession self.editorSession.dimensionChanged.connect(self.dimensionDidChange) self.debugLastCenters = [] self.viewButtonGroup = QtGui.QButtonGroup(self) self.viewButtonToolbar = QtGui.QToolBar() self.viewButtons = {} self.views = [] for name, handler in ( ("2D", self.showCutawayView), ("Over", self.showOverheadView), # ("Iso", self.showIsoView), ("Cam", self.showCameraView), # ("4-up", self.showFourUpView), ): button = QtGui.QToolButton(text=name, checkable=True) button.clicked.connect(handler) self.viewButtonGroup.addButton(button) self.viewButtonToolbar.addWidget(button) self.viewButtons[name] = button 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) self.miniMapDockWidget.setFixedSize(256, 256) self.views.append(self.miniMap) self.toolOptionsArea = QtGui.QScrollArea() self.toolOptionsArea.setWidgetResizable(True) self.toolOptionsDockWidget = QtGui.QDockWidget("Tool Options", objectName="ToolOptionsWidget", floating=True) self.toolOptionsDockWidget.setWidget(self.toolOptionsArea) editorSession.dockWidgets.append((Qt.LeftDockWidgetArea, self.miniMapDockWidget)) editorSession.dockWidgets.append((Qt.LeftDockWidgetArea, self.toolOptionsDockWidget)) editorSession.loader.addClient(self.miniMap) self.overheadViewFrame = OverheadWorldViewFrame(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap) self.overheadViewFrame.worldView.viewID = "Over" self._addView(self.overheadViewFrame) self.cutawayViewFrame = CutawayWorldViewFrame(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap) self.cutawayViewFrame.worldView.viewID = "2D" self._addView(self.cutawayViewFrame) # # self.fourUpViewFrame = FourUpWorldViewFrame(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap) # self.fourUpViewFrame.worldView.viewID = "4-up" # self._addView(self.fourUpViewFrame) 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) self.viewChanged.connect(self.viewDidChange) self.setLayout(Column(self.viewButtonToolbar, Row(self.viewStack, margin=0), margin=0)) currentViewName = currentViewSetting.value() if currentViewName not in self.viewButtons: currentViewName = "Cam" self.viewButtons[currentViewName].click() def destroy(self): self.editorSession = None for view in self.views: view.destroy() super(EditorTab, self).destroy() editorSession = weakrefprop() urlsDropped = QtCore.Signal(QtCore.QMimeData, Vector, faces.Face) mapItemDropped = QtCore.Signal(QtCore.QMimeData, Vector, faces.Face) def dimensionDidChange(self, dim): for view in self.views: view.setDimension(dim) # EditorSession has a new loader now, so re-add minimap and current view self.editorSession.loader.addClient(self.miniMap) view = self.currentView() if view is not None: self.editorSession.loader.addClient(view) def toolDidChange(self, tool): if tool.toolWidget: self.toolOptionsArea.takeWidget() # setWidget gives ownership to the scroll area self.toolOptionsArea.setWidget(tool.toolWidget) self.toolOptionsDockWidget.setWindowTitle(self.tr(tool.name) + self.tr(" Tool Options")) log.info("Setting cursor %r for tool %r on view %r", tool.cursorNode, tool, self.currentView()) self.currentView().setToolCursor(tool.cursorNode) def saveState(self): pass viewChanged = QtCore.Signal(object) def _viewChanged(self, index): self.viewChanged.emit(self.currentView()) def viewDidChange(self, view): self.miniMap.centerOnPoint(view.viewCenter()) if self.editorSession.currentTool: view.setToolCursor(self.editorSession.currentTool.cursorNode) overlayNodes = [tool.overlayNode for tool in self.editorSession.tools if tool.overlayNode is not None] overlayNodes.insert(0, self.editorSession.editorOverlay) view.setToolOverlays(overlayNodes) view.setFocus() def viewOffsetChanged(self, view): self.miniMap.centerOnPoint(view.viewCenter()) self.miniMap.currentViewMatrixChanged(view) def _addView(self, frame): self.views.append(frame.worldView) frame.stackIndex = self.viewStack.addWidget(frame) frame.worldView.viewportMoved.connect(self.viewOffsetChanged) frame.worldView.viewActions.extend([ UseToolMouseAction(self), TrackingMouseAction(self) ]) frame.worldView.urlsDropped.connect(self.urlsDropped.emit) frame.worldView.mapItemDropped.connect(self.mapItemDropped.emit) def currentView(self): """ :rtype: mcedit2.worldview.worldview.WorldView """ widget = self.viewStack.currentWidget() if widget is None: return None return widget.worldView def showViewFrame(self, frame): center = self.currentView().viewCenter() self.debugLastCenters.append(center) log.info("Going from %s to %s: Center was %s", self.currentView(), frame.worldView, center) self.editorSession.loader.removeClient(self.currentView()) self.editorSession.loader.addClient(frame.worldView, 0) self.viewStack.setCurrentIndex(frame.stackIndex) frame.worldView.centerOnPoint(center) log.info("Center is now %s", self.currentView().viewCenter()) def showOverheadView(self): self.showViewFrame(self.overheadViewFrame) # # def showIsoView(self): # self.showViewFrame(self.isoViewFrame) # # def showFourUpView(self): # self.showViewFrame(self.fourUpViewFrame) def showCutawayView(self): self.showViewFrame(self.cutawayViewFrame) def showCameraView(self): self.showViewFrame(self.cameraViewFrame)
def __init__(self, editorSession): """ :type editorSession: mcedit2.editorsession.EditorSession :rtype: EditorTab """ settings = Settings() QtGui.QWidget.__init__(self) self.setContentsMargins(0, 0, 0, 0) self.editorSession = editorSession self.editorSession.dimensionChanged.connect(self.dimensionDidChange) self.debugLastCenters = [] self.viewButtonGroup = QtGui.QButtonGroup(self) self.viewButtonToolbar = QtGui.QToolBar() self.viewButtons = {} self.viewFrames = [] self.views = [] for name, handler in ( ("2D", self.showCutawayView), ("Over", self.showOverheadView), # ("Iso", self.showIsoView), ("Cam", self.showCameraView), # ("4-up", self.showFourUpView), ): button = QtGui.QToolButton(text=name, checkable=True) button.clicked.connect(handler) self.viewButtonGroup.addButton(button) self.viewButtonToolbar.addWidget(button) self.viewButtons[name] = button 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) self.miniMapDockWidget.setFixedSize(256, 256) self.viewFrames.append(self.miniMap) self.toolOptionsArea = QtGui.QScrollArea() self.toolOptionsArea.setWidgetResizable(True) self.toolOptionsDockWidget = QtGui.QDockWidget( "Tool Options", objectName="ToolOptionsWidget", floating=True) self.toolOptionsDockWidget.setWidget(self.toolOptionsArea) editorSession.dockWidgets.append( (Qt.LeftDockWidgetArea, self.miniMapDockWidget)) editorSession.dockWidgets.append( (Qt.LeftDockWidgetArea, self.toolOptionsDockWidget)) editorSession.loader.addClient(self.miniMap) self.overheadViewFrame = OverheadWorldViewFrame( editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap) self.overheadViewFrame.worldView.viewID = "Over" self._addView(self.overheadViewFrame) self.cutawayViewFrame = CutawayWorldViewFrame( editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap) self.cutawayViewFrame.worldView.viewID = "2D" self._addView(self.cutawayViewFrame) # # self.fourUpViewFrame = FourUpWorldViewFrame(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap) # self.fourUpViewFrame.worldView.viewID = "4-up" # self._addView(self.fourUpViewFrame) 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) self.viewChanged.connect(self.viewDidChange) self.setLayout( Column(self.viewButtonToolbar, Row(self.viewStack, margin=0), margin=0)) currentViewName = settings.value("mainwindow/currentview", "Cam") if currentViewName not in self.viewButtons: currentViewName = "Cam" self.viewButtons[currentViewName].click()
class EditorTab(QtGui.QWidget): """ EditorTab is the widget containing the editor viewports, the minimap, and the settings panel for the currently selected tool. """ def __init__(self, editorSession): """ :type editorSession: mcedit2.editorsession.EditorSession :rtype: EditorTab """ settings = Settings() QtGui.QWidget.__init__(self) self.setContentsMargins(0, 0, 0, 0) self.editorSession = editorSession self.editorSession.dimensionChanged.connect(self.dimensionDidChange) self.debugLastCenters = [] self.viewButtonGroup = QtGui.QButtonGroup(self) self.viewButtonToolbar = QtGui.QToolBar() self.viewButtons = {} self.viewFrames = [] self.views = [] for name, handler in ( ("2D", self.showCutawayView), ("Over", self.showOverheadView), # ("Iso", self.showIsoView), ("Cam", self.showCameraView), # ("4-up", self.showFourUpView), ): button = QtGui.QToolButton(text=name, checkable=True) button.clicked.connect(handler) self.viewButtonGroup.addButton(button) self.viewButtonToolbar.addWidget(button) self.viewButtons[name] = button 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) self.miniMapDockWidget.setFixedSize(256, 256) self.viewFrames.append(self.miniMap) self.toolOptionsArea = QtGui.QScrollArea() self.toolOptionsArea.setWidgetResizable(True) self.toolOptionsDockWidget = QtGui.QDockWidget( "Tool Options", objectName="ToolOptionsWidget", floating=True) self.toolOptionsDockWidget.setWidget(self.toolOptionsArea) editorSession.dockWidgets.append( (Qt.LeftDockWidgetArea, self.miniMapDockWidget)) editorSession.dockWidgets.append( (Qt.LeftDockWidgetArea, self.toolOptionsDockWidget)) editorSession.loader.addClient(self.miniMap) self.overheadViewFrame = OverheadWorldViewFrame( editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap) self.overheadViewFrame.worldView.viewID = "Over" self._addView(self.overheadViewFrame) self.cutawayViewFrame = CutawayWorldViewFrame( editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap) self.cutawayViewFrame.worldView.viewID = "2D" self._addView(self.cutawayViewFrame) # # self.fourUpViewFrame = FourUpWorldViewFrame(editorSession.currentDimension, editorSession.textureAtlas, editorSession.geometryCache, self.miniMap) # self.fourUpViewFrame.worldView.viewID = "4-up" # self._addView(self.fourUpViewFrame) 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) self.viewChanged.connect(self.viewDidChange) self.setLayout( Column(self.viewButtonToolbar, Row(self.viewStack, margin=0), margin=0)) currentViewName = settings.value("mainwindow/currentview", "Cam") if currentViewName not in self.viewButtons: currentViewName = "Cam" self.viewButtons[currentViewName].click() def destroy(self): self.editorSession = None for view in self.viewFrames: view.destroy() super(EditorTab, self).destroy() editorSession = weakrefprop() def dimensionDidChange(self, dim): for view in self.views: view.setDimension(dim) self.editorSession.loader.addClient(view) def toolDidChange(self, tool): if tool.toolWidget: self.toolOptionsArea.takeWidget( ) # setWidget gives ownership to the scroll area self.toolOptionsArea.setWidget(tool.toolWidget) self.toolOptionsDockWidget.setWindowTitle( self.tr(tool.name) + self.tr(" Tool Options")) log.info("Setting cursor %r for tool %r on view %r", tool.cursorNode, tool, self.currentView()) self.currentView().setToolCursor(tool.cursorNode) def saveState(self): pass viewChanged = QtCore.Signal(object) def _viewChanged(self, index): self.viewChanged.emit(self.currentView()) def viewDidChange(self, view): self.miniMap.centerOnPoint(view.viewCenter()) Settings().setValue("mainwindow/currentview", view.viewID) if self.editorSession.currentTool: view.setToolCursor(self.editorSession.currentTool.cursorNode) overlayNodes = [ tool.overlayNode for tool in self.editorSession.tools if tool.overlayNode is not None ] overlayNodes.insert(0, self.editorSession.editorOverlay) view.setToolOverlays(overlayNodes) view.setFocus() def viewOffsetChanged(self, view): self.miniMap.centerOnPoint(view.viewCenter()) self.miniMap.currentViewMatrixChanged(view) def _addView(self, frame): self.viewFrames.append(frame) self.views.append(frame.worldView) frame.stackIndex = self.viewStack.addWidget(frame) frame.worldView.viewportMoved.connect(self.viewOffsetChanged) frame.worldView.viewActions.extend( [UseToolMouseAction(self), TrackingMouseAction(self)]) def currentView(self): """ :rtype: mcedit2.worldview.worldview.WorldView """ return self.viewStack.currentWidget().worldView def showViewFrame(self, frame): center = self.currentView().viewCenter() self.debugLastCenters.append(center) log.info("Going from %s to %s: Center was %s", self.currentView(), frame.worldView, center) self.editorSession.loader.removeClient(self.currentView()) self.editorSession.loader.addClient(frame.worldView, 0) self.viewStack.setCurrentIndex(frame.stackIndex) frame.worldView.centerOnPoint(center) log.info("Center is now %s", self.currentView().viewCenter()) def showOverheadView(self): self.showViewFrame(self.overheadViewFrame) # # def showIsoView(self): # self.showViewFrame(self.isoViewFrame) # # def showFourUpView(self): # self.showViewFrame(self.fourUpViewFrame) def showCutawayView(self): self.showViewFrame(self.cutawayViewFrame) def showCameraView(self): self.showViewFrame(self.cameraViewFrame)