Add toolbar buttons to change MC version and resource pack.

TODO: Reconsider the global settings for MC version and resource pack...
This commit is contained in:
David Vierra 2015-08-30 08:06:57 -10:00
parent d011eb8ba6
commit 3d61d7bcca
3 changed files with 82 additions and 9 deletions

View File

@ -509,7 +509,8 @@ class MCEditApp(QtGui.QApplication):
self.mainWindow.panelsToolBar.addAction(panel.toggleViewAction()) self.mainWindow.panelsToolBar.addAction(panel.toggleViewAction())
self.mainWindow.panelsToolBar.addSeparator() 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: for action in session.toolActions:
self.mainWindow.toolsToolBar.addAction(action) self.mainWindow.toolsToolBar.addAction(action)

View File

@ -16,6 +16,7 @@ from mcedit2.editortools.select import SelectCommand
from mcedit2.panels.player import PlayerPanel from mcedit2.panels.player import PlayerPanel
from mcedit2.panels.map import MapPanel from mcedit2.panels.map import MapPanel
from mcedit2.panels.worldinfo import WorldInfoPanel from mcedit2.panels.worldinfo import WorldInfoPanel
from mcedit2.util import minecraftinstall
from mcedit2.util.dialogs import NotImplementedYet from mcedit2.util.dialogs import NotImplementedYet
from mcedit2.util.directories import getUserSchematicsDirectory from mcedit2.util.directories import getUserSchematicsDirectory
from mcedit2.util.mimeformats import MimeFormats from mcedit2.util.mimeformats import MimeFormats
@ -124,6 +125,7 @@ class EditorSession(QtCore.QObject):
self.loader = None self.loader = None
self.blockModels = None self.blockModels = None
self.textureAtlas = None self.textureAtlas = None
self.editorTab = None
self.filename = filename self.filename = filename
self.dockWidgets = [] self.dockWidgets = []
@ -319,6 +321,7 @@ class EditorSession(QtCore.QObject):
self.mapPanel = MapPanel(self) self.mapPanel = MapPanel(self)
self.worldInfoPanel = WorldInfoPanel(self) self.worldInfoPanel = WorldInfoPanel(self)
self.panels = [self.playerPanel, self.worldInfoPanel, self.mapPanel] self.panels = [self.playerPanel, self.worldInfoPanel, self.mapPanel]
self.panelActions = []
# --- Tools --- # --- Tools ---
@ -358,7 +361,29 @@ class EditorSession(QtCore.QObject):
action.triggered.connect(action._changed) action.triggered.connect(action._changed)
dimButton.setMenu(dimMenu) 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") progress("Loading overworld dimension")
self.gotoDimension("") self.gotoDimension("")
@ -391,6 +416,50 @@ class EditorSession(QtCore.QObject):
if hasattr(progress, 'progressCount') and progress.progressCount != progressMax: if hasattr(progress, 'progressCount') and progress.progressCount != progressMax:
log.info("Update progressMax to %d, please.", progress.progressCount) 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 # Connecting these signals to the EditorTab creates a circular reference through
# the Qt objects, preventing the EditorSession from being destroyed # the Qt objects, preventing the EditorSession from being destroyed
@ -467,11 +536,17 @@ class EditorSession(QtCore.QObject):
blockJson['__configured__'] = True blockJson['__configured__'] = True
self.configuredBlocks = configuredBlocks self.configuredBlocks = configuredBlocks
self.reloadModels()
self.configuredBlocksChanged.emit()
def reloadModels(self):
self.blockModels = BlockModels(self.worldEditor.blocktypes, self.resourceLoader) self.blockModels = BlockModels(self.worldEditor.blocktypes, self.resourceLoader)
self.textureAtlas = TextureAtlas(self.worldEditor, self.resourceLoader, self.blockModels) 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 --- # --- Selection ---
@ -1044,8 +1119,6 @@ class EditorTab(QtGui.QWidget):
currentViewName = "Cam" currentViewName = "Cam"
self.viewButtons[currentViewName].click() self.viewButtons[currentViewName].click()
self.editorSession.configuredBlocksChanged.connect(self.configuredBlocksDidChange)
def destroy(self): def destroy(self):
self.editorSession = None self.editorSession = None
for view in self.views: for view in self.views:
@ -1058,10 +1131,6 @@ class EditorTab(QtGui.QWidget):
urlsDropped = QtCore.Signal(QtCore.QMimeData, Vector, faces.Face) urlsDropped = QtCore.Signal(QtCore.QMimeData, Vector, faces.Face)
mapItemDropped = 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): def dimensionDidChange(self, dim):
for view in self.views: for view in self.views:
view.setDimension(dim) view.setDimension(dim)

View File

@ -136,6 +136,9 @@ class MCInstallGroup(object):
def getInstall(self, index): def getInstall(self, index):
return self._installations[index] return self._installations[index]
def getCurrentInstall(self):
return self.getInstall(self.selectedInstallIndex())
def addInstall(self, install): def addInstall(self, install):
self._installations.append(install) self._installations.append(install)
self._saveInstalls() self._saveInstalls()