From 3d61d7bccae54de9ae336f5b638fa2e1c279d9ba Mon Sep 17 00:00:00 2001 From: David Vierra Date: Sun, 30 Aug 2015 08:06:57 -1000 Subject: [PATCH] Add toolbar buttons to change MC version and resource pack. TODO: Reconsider the global settings for MC version and resource pack... --- src/mcedit2/editorapp.py | 3 +- src/mcedit2/editorsession.py | 85 +++++++++++++++++++++++++--- src/mcedit2/util/minecraftinstall.py | 3 + 3 files changed, 82 insertions(+), 9 deletions(-) diff --git a/src/mcedit2/editorapp.py b/src/mcedit2/editorapp.py index af0ee3c..7e2db0c 100644 --- a/src/mcedit2/editorapp.py +++ b/src/mcedit2/editorapp.py @@ -509,7 +509,8 @@ class MCEditApp(QtGui.QApplication): self.mainWindow.panelsToolBar.addAction(panel.toggleViewAction()) self.mainWindow.panelsToolBar.addSeparator() - self.mainWindow.panelsToolBar.addAction(session.changeDimensionAction) + for action in session.panelActions: + self.mainWindow.panelsToolBar.addAction(action) for action in session.toolActions: self.mainWindow.toolsToolBar.addAction(action) diff --git a/src/mcedit2/editorsession.py b/src/mcedit2/editorsession.py index b0fc3eb..0138825 100644 --- a/src/mcedit2/editorsession.py +++ b/src/mcedit2/editorsession.py @@ -16,6 +16,7 @@ from mcedit2.editortools.select import SelectCommand from mcedit2.panels.player import PlayerPanel from mcedit2.panels.map import MapPanel from mcedit2.panels.worldinfo import WorldInfoPanel +from mcedit2.util import minecraftinstall from mcedit2.util.dialogs import NotImplementedYet from mcedit2.util.directories import getUserSchematicsDirectory from mcedit2.util.mimeformats import MimeFormats @@ -124,6 +125,7 @@ class EditorSession(QtCore.QObject): self.loader = None self.blockModels = None self.textureAtlas = None + self.editorTab = None self.filename = filename self.dockWidgets = [] @@ -319,6 +321,7 @@ class EditorSession(QtCore.QObject): self.mapPanel = MapPanel(self) self.worldInfoPanel = WorldInfoPanel(self) self.panels = [self.playerPanel, self.worldInfoPanel, self.mapPanel] + self.panelActions = [] # --- Tools --- @@ -358,7 +361,29 @@ class EditorSession(QtCore.QObject): action.triggered.connect(action._changed) dimButton.setMenu(dimMenu) - dimButton.setPopupMode(dimButton.InstantPopup) + dimButton.setPopupMode(QtGui.QToolButton.InstantPopup) + + self.panelActions.append(dimAction) + + mcVersionButton = self.changeMCVersionButton = QtGui.QToolButton() + mcVersionButton.setText(self.minecraftVersionLabel()) + mcVersionAction = self.changeMCVersionAction = QtGui.QWidgetAction(self) + mcVersionAction.setDefaultWidget(mcVersionButton) + self.mcVersionMenu = QtGui.QMenu() + mcVersionButton.setMenu(self.mcVersionMenu) + mcVersionButton.setPopupMode(QtGui.QToolButton.InstantPopup) + self.panelActions.append(mcVersionAction) + + resourcePackButton = self.changeResourcePackButton = QtGui.QToolButton() + resourcePackButton.setText(self.resourcePackLabel()) + resourcePackAction = self.changeResourcePackAction = QtGui.QWidgetAction(self) + resourcePackAction.setDefaultWidget(resourcePackButton) + self.resourcePackMenu = QtGui.QMenu() + resourcePackButton.setMenu(self.resourcePackMenu) + resourcePackButton.setPopupMode(QtGui.QToolButton.InstantPopup) + self.panelActions.append(resourcePackAction) + + self._updateVersionsAndResourcePacks() progress("Loading overworld dimension") self.gotoDimension("") @@ -391,6 +416,50 @@ class EditorSession(QtCore.QObject): if hasattr(progress, 'progressCount') and progress.progressCount != progressMax: log.info("Update progressMax to %d, please.", progress.progressCount) + def minecraftVersionLabel(self): + version = minecraftinstall.currentVersionOption.value() + return "Minecraft Version: %s" % version + + def resourcePackLabel(self): + resourcePack = minecraftinstall.currentResourcePackOption.value() + return "Resource Pack: %s" % resourcePack + + + def _updateVersionsAndResourcePacks(self): + self.mcVersionMapper = QtCore.QSignalMapper() + self.mcVersionMapper.mapped[str].connect(self.changeMCVersion) + self.resourcePackMapper = QtCore.QSignalMapper() + self.resourcePackMapper.mapped[str].connect(self.changeResourcePack) + + self.mcVersionMenu.clear() + self.resourcePackMenu.clear() + defaultAction = self.resourcePackMenu.addAction(self.tr("(No resource pack)")) + self.resourcePackMapper.setMapping(defaultAction, "") + + install = minecraftinstall.GetInstalls().getCurrentInstall() + + for version in sorted(install.versions, reverse=True): + versionAction = self.mcVersionMenu.addAction(version) + self.mcVersionMapper.setMapping(versionAction, version) + versionAction.triggered.connect(self.mcVersionMapper.map) + + for resourcePack in sorted(install.resourcePacks): + resourcePackAction = self.resourcePackMenu.addAction(resourcePack) + self.resourcePackMapper.setMapping(resourcePackAction, resourcePack) + resourcePackAction.triggered.connect(self.resourcePackMapper.map) + + def changeResourcePack(self, packName): + minecraftinstall.currentResourcePackOption.setValue(packName or "") + self.resourceLoader = minecraftinstall.getResourceLoaderForFilename(self.filename) + self.changeResourcePackButton.setText(self.resourcePackLabel()) + self.reloadModels() + + def changeMCVersion(self, version): + minecraftinstall.currentVersionOption.setValue(version) + self.resourceLoader = minecraftinstall.getResourceLoaderForFilename(self.filename) + self.changeMCVersionButton.setText(self.minecraftVersionLabel()) + self.reloadModels() + # Connecting these signals to the EditorTab creates a circular reference through # the Qt objects, preventing the EditorSession from being destroyed @@ -467,11 +536,17 @@ class EditorSession(QtCore.QObject): blockJson['__configured__'] = True self.configuredBlocks = configuredBlocks + self.reloadModels() + self.configuredBlocksChanged.emit() + def reloadModels(self): self.blockModels = BlockModels(self.worldEditor.blocktypes, self.resourceLoader) self.textureAtlas = TextureAtlas(self.worldEditor, self.resourceLoader, self.blockModels) + # May be called before editorTab is created + if self.editorTab: + for view in self.editorTab.views: + view.setTextureAtlas(self.textureAtlas) - self.configuredBlocksChanged.emit() # --- Selection --- @@ -1044,8 +1119,6 @@ class EditorTab(QtGui.QWidget): currentViewName = "Cam" self.viewButtons[currentViewName].click() - self.editorSession.configuredBlocksChanged.connect(self.configuredBlocksDidChange) - def destroy(self): self.editorSession = None for view in self.views: @@ -1058,10 +1131,6 @@ class EditorTab(QtGui.QWidget): urlsDropped = QtCore.Signal(QtCore.QMimeData, Vector, faces.Face) mapItemDropped = QtCore.Signal(QtCore.QMimeData, Vector, faces.Face) - def configuredBlocksDidChange(self): - for view in self.views: - view.setTextureAtlas(self.editorSession.textureAtlas) - def dimensionDidChange(self, dim): for view in self.views: view.setDimension(dim) diff --git a/src/mcedit2/util/minecraftinstall.py b/src/mcedit2/util/minecraftinstall.py index 9a1620e..1a65504 100644 --- a/src/mcedit2/util/minecraftinstall.py +++ b/src/mcedit2/util/minecraftinstall.py @@ -136,6 +136,9 @@ class MCInstallGroup(object): def getInstall(self, index): return self._installations[index] + def getCurrentInstall(self): + return self.getInstall(self.selectedInstallIndex()) + def addInstall(self, install): self._installations.append(install) self._saveInstalls()