def __init__(self, *args, **kwargs): super(ConfigureBlocksItemModel, self).__init__(*args, **kwargs) self.headerTitles = ["Icon", "Block ID", "Rotation Flags", "Meta", "Opacity", "Brightness", "Unlocalized Name", "Name"] definedBlocksFilename = "defined_blocks.json" self.definedBlocksFilePath = os.path.join(getUserFilesDirectory(), definedBlocksFilename) try: definedBlocks = json.load(file(self.definedBlocksFilePath, "r")) except (ValueError, EnvironmentError) as e: log.warn("Failed to read definitions file %s", definedBlocksFilename) definedBlocks = [] if not isinstance(definedBlocks, list): definedBlocks = [] self.definedBlocks = [] for defJson in definedBlocks: try: self.definedBlocks.append(BlockDefinition(defJson=defJson)) except (KeyError, ValueError) as e: log.warn("Failed to load a definition from %s: %r", definedBlocksFilename, e)
def __init__(self, *args, **kwargs): super(ConfigureBlocksItemModel, self).__init__(*args, **kwargs) self.headerTitles = [ "Icon", "Block ID", "Rotation Flags", "Meta", "Opacity", "Brightness", "Unlocalized Name", "Name" ] definedBlocksFilename = "defined_blocks.json" self.definedBlocksFilePath = os.path.join(getUserFilesDirectory(), definedBlocksFilename) try: definedBlocks = json.load(file(self.definedBlocksFilePath, "r")) except (ValueError, EnvironmentError) as e: log.warn("Failed to read definitions file %s", definedBlocksFilename) definedBlocks = [] if not isinstance(definedBlocks, list): definedBlocks = [] self.definedBlocks = [] for defJson in definedBlocks: try: self.definedBlocks.append(BlockDefinition(defJson=defJson)) except (KeyError, ValueError) as e: log.warn("Failed to load a definition from %s: %r", definedBlocksFilename, e)
def export_txt(self): startingDir = getUserFilesDirectory() name = self.worldName + "_" + arrow.now().format("DD_MM_YYYY_HH_mm_ss") result = QtGui.QFileDialog.getSaveFileName( QtGui.qApp.mainWindow, self.tr("Export as .txt"), startingDir + "\\" + name, "Text File (*.txt)" ) if result and result[0]: sep = "\t" self.writeFile(result[0], sep)
def export_txt(self): startingDir = getUserFilesDirectory() name = self.worldName + "_" + arrow.now().format('DD_MM_YYYY_HH_mm_ss') result = QtGui.QFileDialog.getSaveFileName(QtGui.qApp.mainWindow, self.tr("Export as .txt"), startingDir + "\\" + name, "Text File (*.txt)") if result and result[0]: sep = "\t" self.writeFile(result[0], sep)
def setup_logging(): root_logger = logging.getLogger() root_logger.setLevel(logging.DEBUG) log_debug("Logging level set") from mcedit2.util.directories import getUserFilesDirectory mceditUserData = getUserFilesDirectory() logfilename = os.path.join(mceditUserData, 'mcedit.log') abslogfile = os.path.abspath(logfilename) if hasattr(sys, 'frozen'): log_debug("sys.frozen is set") if sys.platform == "darwin": log_debug("OS X found.") logfile = os.path.expanduser(b"~/Library/Logs/" + logfilename) else: logfile = abslogfile else: logfile = abslogfile fmt = logging.Formatter( '[%(levelname)s][%(filename)s:%(lineno)d]:%(message)s' ) log_debug("Logging to %s" % logfile) logfileHandler = logging.FileHandler(logfile, mode="w") logfileHandler.setLevel(logging.INFO) logfileHandler.setFormatter(fmt) root_logger.addHandler(logfileHandler) closeStdouterr = False if closeStdouterr: sys.stdout = logfileHandler.stream sys.stderr = logfileHandler.stream else: log_debug("Setting up console handler") consoleHandler = logging.StreamHandler() consoleHandler.setLevel(logging.WARN) if "-v" in sys.argv: sys.argv.remove("-v") consoleHandler.setLevel(logging.INFO) if "-vv" in sys.argv: sys.argv.remove("-vv") consoleHandler.setLevel(logging.DEBUG) logfileHandler.setLevel(logging.DEBUG) consoleHandler.setFormatter(fmt) root_logger.addHandler(consoleHandler)
def setup_logging(): root_logger = logging.getLogger() root_logger.setLevel(logging.DEBUG) log_debug("Logging level set") from mcedit2.util.directories import getUserFilesDirectory mceditUserData = getUserFilesDirectory() logfilename = os.path.join(mceditUserData, 'mcedit.log') abslogfile = os.path.abspath(logfilename) if hasattr(sys, 'frozen'): log_debug("sys.frozen is set") if sys.platform == "darwin": log_debug("OS X found.") logfile = os.path.expanduser(b"~/Library/Logs/" + logfilename) else: logfile = abslogfile else: logfile = abslogfile fmt = logging.Formatter( '[%(levelname)s][%(filename)s:%(lineno)d]:%(message)s') log_debug("Logging to %s" % logfile) logfileHandler = logging.FileHandler(logfile, mode="w") logfileHandler.setLevel(logging.INFO) logfileHandler.setFormatter(fmt) root_logger.addHandler(logfileHandler) closeStdouterr = False if closeStdouterr: sys.stdout = logfileHandler.stream sys.stderr = logfileHandler.stream else: log_debug("Setting up console handler") consoleHandler = logging.StreamHandler() consoleHandler.setLevel(logging.WARN) if "-v" in sys.argv: sys.argv.remove("-v") consoleHandler.setLevel(logging.INFO) if "-vv" in sys.argv: sys.argv.remove("-vv") consoleHandler.setLevel(logging.DEBUG) logfileHandler.setLevel(logging.DEBUG) consoleHandler.setFormatter(fmt) root_logger.addHandler(consoleHandler)
def export_csv(self): startingDir = getUserFilesDirectory() name = self.worldName + "_" + arrow.now().format('DD_MM_YYYY_HH_mm_ss') result = QtGui.QFileDialog.getSaveFileName(QtGui.qApp.mainWindow, self.tr("Export as .csv"), startingDir + "\\" + name, "Comma Separated Values (*.csv);;Semicolon Separated Values (*.csv)") if result and result[0]: """ Depending on your region, your OS uses ";" or "," as a seperator in .csv files. (Some countries write 0.5 as 0,5; so they use ; to separate values). If the user selects Semicolon Separated Values, we separate with ";" instead of "," """ sep = (";" if (result[1] == "Semicolon Separated Values (*.csv)") else ",") self.writeFile(result[0], sep)
def __init__(self, *args, **kwargs): """ Subclass of QSettings. Adds a `getOption` method which returns an individual option as its own object. Adds one signal for each setting, emitted when its value is changed. Also provides json encoded methods to work around a bug in PySide. QSettings, under PySide, does not reliably infer that a settings value should be read as a QStringList. jsonValue and setJsonValue methods are provided that will automatically encode/decode the given value to or from json :rtype: MCESettings """ dataDir = directories.getUserFilesDirectory() iniPath = os.path.join(dataDir, "mcedit2.ini") log.info("Loading app settings from %s", iniPath) super(MCESettings, self).__init__(iniPath, QtCore.QSettings.IniFormat, *args, **kwargs) self.options = {}
def __init__(self, *args, **kwargs): """ Subclass of QSettings. Adds a `getOption` method which returns an individual option as its own object. Adds one signal for each setting, emitted when its value is changed. Also provides json encoded methods to work around a bug in PySide. QSettings, under PySide, does not reliably infer that a settings value should be read as a QStringList. jsonValue and setJsonValue methods are provided that will automatically encode/decode the given value to or from json :rtype: MCESettings """ dataDir = directories.getUserFilesDirectory() super(MCESettings, self).__init__(os.path.join(dataDir, "mcedit2.ini"), QtCore.QSettings.IniFormat, *args, **kwargs) self.options = {}
def __init__(self): super(LibraryWidget, self).__init__() self.folderPath = os.path.join(getUserFilesDirectory(), "schematics") if not os.path.exists(self.folderPath): os.makedirs(self.folderPath) self.treeView = QtGui.QTreeView() self.model = LibraryTreeModel() self.model.setRootPath(self.folderPath) self.treeView.setModel(self.model) self.treeView.setRootIndex(self.model.index(self.folderPath)) self.treeView.doubleClicked.connect(self.itemDoubleClicked) openLibraryButton = QtGui.QPushButton("Open Schematics Folder") openLibraryButton.clicked.connect(self.openFolder) self.setLayout(Column(self.treeView, openLibraryButton))
def setup_logging(): root_logger = logging.getLogger() root_logger.setLevel(logging.DEBUG) log_debug("Logging level set") class MCELogRecord(logging.LogRecord): """ Override of LogRecord with 100% unicode-safe message formatting """ def getMessage(self): """ Return the message for this LogRecord. Return the message for this LogRecord after merging any user-supplied arguments with the message. """ msg = self.msg if not isinstance(msg, basestring): try: msg = str(self.msg) except UnicodeError: msg = self.msg #Defer encoding till later if self.args: try: msg = msg % self.args except UnicodeDecodeError: # 'msg' is unicode, but 'args' contains a str with non-ascii chars # round-trip to str and decode with escapes to avoid encode errors msg = msg.encode(b'ascii', b'backslashreplace') msg = msg % self.args msg = msg.decode(b'ascii', b'replace') return msg logging.LogRecord = MCELogRecord logging.captureWarnings(True) from mcedit2.util.directories import getUserFilesDirectory mceditUserData = getUserFilesDirectory() logfilename = os.path.join(mceditUserData, 'mcedit.log') abslogfile = os.path.abspath(logfilename) if hasattr(sys, 'frozen'): log_debug("sys.frozen is set") if sys.platform == "darwin": log_debug("OS X found.") logfile = os.path.expanduser(b"~/Library/Logs/" + logfilename) else: logfile = abslogfile else: logfile = abslogfile fmt = logging.Formatter( '[%(levelname)s][%(filename)s:%(lineno)d]:%(message)s' ) log_debug("Logging to %s" % logfile) logfileHandler = logging.FileHandler(logfile, mode="w") logfileHandler.setLevel(logging.INFO) logfileHandler.setFormatter(fmt) root_logger.addHandler(logfileHandler) closeStdouterr = False if closeStdouterr: sys.stdout = logfileHandler.stream sys.stderr = logfileHandler.stream else: log_debug("Setting up console handler") consoleHandler = logging.StreamHandler() consoleHandler.setLevel(logging.WARN) if "-v" in sys.argv: sys.argv.remove("-v") consoleHandler.setLevel(logging.INFO) if "-vv" in sys.argv: sys.argv.remove("-vv") consoleHandler.setLevel(logging.DEBUG) logfileHandler.setLevel(logging.DEBUG) consoleHandler.setFormatter(fmt) root_logger.addHandler(consoleHandler)
def setup_logging(): root_logger = logging.getLogger() root_logger.setLevel(logging.DEBUG) log_debug("Logging level set") class MCELogRecord(logging.LogRecord): """ Override of LogRecord with 100% unicode-safe message formatting """ def getMessage(self): """ Return the message for this LogRecord. Return the message for this LogRecord after merging any user-supplied arguments with the message. """ msg = self.msg if not isinstance(msg, basestring): try: msg = str(self.msg) except UnicodeError: msg = self.msg #Defer encoding till later if self.args: try: msg = msg % self.args except UnicodeDecodeError: # 'msg' is unicode, but 'args' contains a str with non-ascii chars # round-trip to str and decode with escapes to avoid encode errors msg = msg.encode(b'ascii', b'backslashreplace') msg = msg % self.args msg = msg.decode(b'ascii', b'replace') return msg logging.LogRecord = MCELogRecord logging.captureWarnings(True) from mcedit2.util.directories import getUserFilesDirectory mceditUserData = getUserFilesDirectory() logfilename = os.path.join(mceditUserData, 'mcedit2.log') abslogfile = os.path.abspath(logfilename) if hasattr(sys, 'frozen'): log_debug("sys.frozen is set") if sys.platform == "darwin": log_debug("OS X found.") logfile = os.path.expanduser(b"~/Library/Logs/" + 'mcedit2.log') else: logfile = abslogfile else: logfile = abslogfile fmt = logging.Formatter( '[%(levelname)s][%(filename)s:%(lineno)d]:%(message)s') log_debug("Logging to %s" % logfile) logfileHandler = logging.FileHandler(logfile, mode="w") logfileHandler.setLevel(logging.INFO) logfileHandler.setFormatter(fmt) root_logger.addHandler(logfileHandler) closeStdouterr = False if closeStdouterr: sys.stdout = logfileHandler.stream sys.stderr = logfileHandler.stream else: log_debug("Setting up console handler") consoleHandler = logging.StreamHandler() consoleHandler.setLevel(logging.WARN) if "-v" in sys.argv: sys.argv.remove("-v") consoleHandler.setLevel(logging.INFO) if "-vv" in sys.argv: sys.argv.remove("-vv") consoleHandler.setLevel(logging.DEBUG) logfileHandler.setLevel(logging.DEBUG) consoleHandler.setFormatter(fmt) root_logger.addHandler(consoleHandler)
def __init__(self, argv): super(MCEditApp, self).__init__(argv) MCEditApp.app = self minecraftinstall.GetInstalls().ensureValidInstall() self.ensureSingle() self.commandLineWorlds = [] self.parseArgs(argv) log.warn("UserFilesDirectory: %s", getUserFilesDirectory()) # --- Necessities --- translator = QtCore.QTranslator() translator.load(resourcePath('mcedit2/i18n/en_US.ts')) self.installTranslator(translator) log.info("Loaded translator.") self.setOrganizationName("MCEdit") self.setOrganizationDomain("mcedit.net") self.setApplicationName("MCEdit") self.setWindowIcon(QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/mcediticon.png"))) styleSheet = file(resourcePath("mcedit2/styles/mcedit2.qcss")).read() self.setStyleSheet(styleSheet) log.info("Loaded stylesheet.") # --- Main Window --- self.mainWindow = mainWindow = MCEditMainWindow() self.undoGroup = QtGui.QUndoGroup() self.tabWidget = self.mainWindow.tabWidget self.tabWidget.tabCloseRequested.connect(self.tabCloseRequested) self.tabWidget.currentChanged.connect(self.tabChanged) log.info("Loaded main window.") tttIcon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/toolbar_text.png")) self.toggleToolbarTextAction = QtGui.QAction(tttIcon, "Toolbar Text", self) self.toggleToolbarTextAction.setCheckable(True) self.toggleToolbarTextAction.setChecked(True) self.toggleToolbarTextAction.toggled.connect(self.toggleToolbarText) # --- OpenGL --- setDefaultFormat() # --- Sessions --- self._currentSession = None self.sessions = [] self.sessionDockWidgets = [] self.sessionChanged.connect(self.sessionDidChange) # --- Panel Widgets --- historyIcon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/history.png")) self.undoView = QtGui.QUndoView(self.undoGroup) self.undoDockWidget = MCEDockWidget("History", mainWindow, objectName="HistoryWidget") self.undoDockWidget.setWidget(self.undoView) self.undoDockWidget.setWindowIcon(historyIcon) self.undoDockWidget.setUnfocusedOpacity(0.8) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.undoDockWidget) undoToggleAction = self.undoDockWidget.toggleViewAction() undoToggleAction.setIcon(historyIcon) mainWindow.panelsToolBar.addAction(undoToggleAction) self.undoDockWidget.close() libraryIcon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/library.png")) self.libraryWidget = LibraryWidget() self.libraryDockWidget = MCEDockWidget("Library", mainWindow, objectName="LibraryWidget") self.libraryDockWidget.setWidget(self.libraryWidget) self.libraryDockWidget.setWindowIcon(libraryIcon) self.libraryDockWidget.setUnfocusedOpacity(0.8) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.libraryDockWidget) libraryToggleAction = self.libraryDockWidget.toggleViewAction() libraryToggleAction.setIcon(libraryIcon) mainWindow.panelsToolBar.addAction(libraryToggleAction) self.libraryDockWidget.close() self.sessionChanged.connect(self.libraryWidget.sessionDidChange) self.libraryWidget.doubleClicked.connect(self.libraryItemDoubleClicked) self.globalPanels = [self.undoDockWidget, self.libraryDockWidget] log.info("Loaded panels.") # --- Debug Widgets --- self.debugMenu = self.createDebugMenu() self.debugObjectInspector = ObjectInspector(mainWindow) self.inspectorDockWidget = MCEDockWidget("Object Inspector", mainWindow, objectName="InspectorWidget") self.inspectorDockWidget.setWidget(self.debugObjectInspector) self.debugMenu.addAction(self.inspectorDockWidget.toggleViewAction()) self.inspectorDockWidget.close() self.profileView = ProfilerWidget() self.profileDockWidget = MCEDockWidget("Profiler", mainWindow, objectName="ProfilerWidget") self.profileDockWidget.setWidget(self.profileView) self.debugMenu.addAction(self.profileDockWidget.toggleViewAction()) self.profileDockWidget.close() self.textureAtlasView = QtGui.QLabel() self.textureAtlasView.setScaledContents(True) self.textureAtlasDockWidget = MCEDockWidget("Texture Atlas", mainWindow, objectName="TextureAtlasWidget") self.textureAtlasArea = QtGui.QScrollArea() self.textureAtlasArea.setWidget(self.textureAtlasView) self.textureAtlasDockWidget.setWidget(self.textureAtlasArea) self.debugMenu.addAction(self.textureAtlasDockWidget.toggleViewAction()) self.textureAtlasDockWidget.close() infoTabs = QtGui.QTabWidget() self.cursorInfo = WorldCursorInfo() infoTabs.addTab(self.cursorInfo, "Cursor") self.viewInfo = WorldViewInfo() infoTabs.addTab(self.viewInfo, "View") self.loaderInfo = ChunkLoaderInfo() infoTabs.addTab(self.loaderInfo, "Loader") self.infoDockWidget = MCEDockWidget("Debug Info", mainWindow, objectName="DebugInfo") self.infoDockWidget.setWidget(infoTabs) self.infoDockWidget.close() log.info("Loaded debug widgets.") # --- Menu Actions --- # -- MCEdit menu -- mainWindow.actionNew_World.triggered.connect(self.createNewWorld) mainWindow.actionNew_World.setShortcut(QtGui.QKeySequence.New) mainWindow.actionOpen_World.triggered.connect(self.chooseOpenWorld) mainWindow.actionOpen_World.setShortcut(QtGui.QKeySequence.Open) mainWindow.actionShow_World_List.triggered.connect(self.showWorldList) mainWindow.actionShow_World_List.setShortcut(QtGui.QKeySequence("Ctrl+L")) mainWindow.actionSave_World.triggered.connect(self.saveCurrentWorld) mainWindow.actionSave_World.setShortcut(QtGui.QKeySequence.Save) mainWindow.actionSave_World_As.triggered.connect(self.saveCurrentWorldAs) mainWindow.actionSave_World_As.setShortcut(QtGui.QKeySequence.SaveAs) mainWindow.actionClose_World.triggered.connect(self.closeCurrentTab) mainWindow.actionClose_World.setShortcut(QtGui.QKeySequence.Close) mainWindow.actionExit_MCEdit.triggered.connect(self.exitEditor) mainWindow.actionExit_MCEdit.setShortcut(QtGui.QKeySequence.Quit) # -- Help menu -- mainWindow.actionAbout_MCEdit.triggered.connect(self.showAbout) mainWindow.actionAbout_MCEdit.setShortcut(QtGui.QKeySequence.Quit) # -- Window Menu -- mainWindow.menuWindow.addAction(self.undoDockWidget.toggleViewAction()) mainWindow.menuWindow.addAction(self.libraryDockWidget.toggleViewAction()) # -- Options Menu -- mainWindow.actionEnable_Lighting_Updates.setChecked(EnableLightingSetting.value()) mainWindow.actionEnable_Lighting_Updates.toggled.connect(EnableLightingSetting.setValue) EnableLightingSetting.valueChanged.connect(self.enableLightingChanged) self.enableLightingChanged(EnableLightingSetting.value()) mainWindow.actionPreferences.triggered.connect(self.showPrefsDialog) mainWindow.actionConfigure_Blocks_Items.triggered.connect(self.showConfigureBlocksDialog) mainWindow.actionPlugins.triggered.connect(self.showPluginsDialog) mainWindow.actionEnable_Developer_Mode.setChecked(DevModeSetting.value()) mainWindow.actionEnable_Developer_Mode.toggled.connect(DevModeSetting.setValue) DevModeSetting.valueChanged.connect(self.toggleDeveloperMode) self.toggleDeveloperMode(DevModeSetting.value()) log.info("Loaded menus.") # --- World List --- self.worldList = WorldListWidget(mainWindow) self.worldList.editWorldClicked.connect(self.editWorldFromList) self.worldList.viewWorldClicked.connect(self.viewWorldFromList) self.worldList.backupWorldClicked.connect(self.backupWorldFromList) self.worldList.repairWorldClicked.connect(self.repairWorldFromList) log.info("Loaded world list.") # --- Status Bar --- self.positionLabel = QtGui.QLabel("xx, yy, zz", minimumWidth=100) self.biomeLabel = QtGui.QLabel("Nowhere", minimumWidth=100) self.blocktypeLabel = QtGui.QLabel("(-1:-1)minecraft:rocktonium", minimumWidth=250) self.blockNameLabel = QtGui.QLabel("rocktonium", minimumWidth=150) self.cpsLabel = QtGui.QLabel("-1 cps", minimumWidth=65) self.fpsLabel = QtGui.QLabel("-1 fps", minimumWidth=65) statusBar = mainWindow.statusBar() statusBar.addPermanentWidget(self.positionLabel) statusBar.addPermanentWidget(self.biomeLabel) statusBar.addPermanentWidget(self.blocktypeLabel) statusBar.addPermanentWidget(self.blockNameLabel) statusBar.addPermanentWidget(self.cpsLabel) statusBar.addPermanentWidget(self.fpsLabel) log.info("Loaded status bar.") # --- Load settings --- mainWindow.loadSettings() self.updateRecentFilesMenu() log.info("Loaded settings.") # --- App Dialogs --- # Qt weirdness - initializing QDialog with parent puts the dialog at 0, # 0 instead of centering it on the parent. Have to set the parent explicitly # and put the Qt.Dialog flag back on since changing the parent resets the # window flags... self.prefsDialog = prefsdialog.PrefsDialog(None) self.prefsDialog.setParent(mainWindow) self.prefsDialog.setWindowFlags(Qt.Dialog) self.configureBlocksDialog = configure_blocks.ConfigureBlocksDialog(None) self.configureBlocksDialog.finished.connect(self.configureBlocksFinished) self.configureBlocksDialog.setParent(mainWindow) self.configureBlocksDialog.setWindowFlags(Qt.Dialog) self.pluginsDialog = PluginsDialog() self.pluginsDialog.setParent(mainWindow) self.pluginsDialog.setWindowFlags(Qt.Dialog) log.info("Loaded app dialogs.") # --- Loader timer --- self.loadTimer = timer = LoaderTimer(self) timer.setInterval(0) timer.timeout.connect(self.loadTimerFired) timer.start() log.info("Loading timer started") mainWindow.showMaximized() QtCore.QTimer.singleShot(0, self.didFinishLaunching)
from __future__ import absolute_import, division, print_function, unicode_literals import json import logging import os from uuid import UUID import sys from PySide import QtNetwork, QtCore from mcedit2.util import directories from mcedit2.util.load_png import loadPNGTexture log = logging.getLogger(__name__) _playerDataFolder = os.path.join(directories.getUserFilesDirectory(), "player_data") _playerSkinsFolder = os.path.join(_playerDataFolder, "skins") _playerDataCachePath = os.path.join(_playerDataFolder, "players.json") if not os.path.exists(_playerSkinsFolder): os.makedirs(_playerSkinsFolder) _netManager = QtNetwork.QNetworkAccessManager() class PlayerServerError(IOError): pass class PlayerDataCache(QtCore.QObject):
def __init__(self, argv): super(MCEditApp, self).__init__(argv) MCEditApp.app = self self.ensureSingle() self.commandLineWorlds = [] self.parseArgs(argv) log.warn("UserFilesDirectory: %s", getUserFilesDirectory()) # --- Translations --- self.transDir = resourcePath('mcedit2/i18n') self.transLangs = [ f[:-3] for f in os.listdir(self.transDir) if f.endswith(".qm") ] lang = LangSetting.value() langFile = self.findLangFile(lang) if langFile is None: systemLocale = QtCore.QLocale.system() lang = systemLocale.name() # "en_US" langFile = self.findLangFile(lang) if langFile is None: lang = "en" langFile = os.path.join(self.transDir, "en.qm") chosenLang = lang self.translator = QtCore.QTranslator() self.translator.load(langFile) self.installTranslator(self.translator) log.info("Loaded translator. Selected language: %s", lang) self.translationsMenu = QtGui.QMenu() self.translationsMenu.setTitle(self.tr("Language")) self.langActions = [] for lang in self.transLangs: locale = QtCore.QLocale(lang) language = locale.nativeLanguageName().title() or lang if lang == "pr": language = "Pirate" langAction = self.translationsMenu.addAction(language) langAction.setData(lang) langAction.setCheckable(True) if lang == chosenLang: langAction.setChecked(True) self.langActions.append(langAction) self.translationsMenu.triggered.connect(self.changeLanguage) # --- Necessities --- self.setOrganizationName("MCEdit") self.setOrganizationDomain("mcedit.net") self.setApplicationName("MCEdit") self.setWindowIcon( QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/mcediticon.png"))) styleSheet = file(resourcePath("mcedit2/styles/mcedit2.qcss")).read() self.setStyleSheet(styleSheet) log.info("Loaded stylesheet.") # --- Main Window --- self.mainWindow = mainWindow = MCEditMainWindow() self.undoGroup = QtGui.QUndoGroup() self.tabWidget = self.mainWindow.tabWidget self.tabWidget.tabCloseRequested.connect(self.tabCloseRequested) self.tabWidget.currentChanged.connect(self.tabChanged) log.info("Loaded main window.") tttIcon = QtGui.QIcon( resourcePath("mcedit2/assets/mcedit2/icons/toolbar_text.png")) self.toggleToolbarTextAction = QtGui.QAction(tttIcon, "Toolbar Text", self) self.toggleToolbarTextAction.setCheckable(True) self.toggleToolbarTextAction.setChecked(True) self.toggleToolbarTextAction.toggled.connect(self.toggleToolbarText) # --- OpenGL --- setDefaultFormat() # --- Sessions --- self._currentSession = None self.sessions = [] self.sessionDockWidgets = [] self.sessionChanged.connect(self.sessionDidChange) # --- Panel Widgets --- historyIcon = QtGui.QIcon( resourcePath("mcedit2/assets/mcedit2/icons/history.png")) self.undoView = QtGui.QUndoView(self.undoGroup) self.undoDockWidget = MCEDockWidget("History", mainWindow, objectName="HistoryWidget") self.undoDockWidget.setWidget(self.undoView) self.undoDockWidget.setWindowIcon(historyIcon) self.undoDockWidget.setUnfocusedOpacity(0.8) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.undoDockWidget) undoToggleAction = self.undoDockWidget.toggleViewAction() undoToggleAction.setIcon(historyIcon) mainWindow.panelsToolBar.addAction(undoToggleAction) self.undoDockWidget.close() libraryIcon = QtGui.QIcon( resourcePath("mcedit2/assets/mcedit2/icons/library.png")) self.libraryWidget = LibraryWidget() self.libraryDockWidget = MCEDockWidget("Library", mainWindow, objectName="LibraryWidget") self.libraryDockWidget.setWidget(self.libraryWidget) self.libraryDockWidget.setWindowIcon(libraryIcon) self.libraryDockWidget.setUnfocusedOpacity(0.8) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.libraryDockWidget) libraryToggleAction = self.libraryDockWidget.toggleViewAction() libraryToggleAction.setIcon(libraryIcon) mainWindow.panelsToolBar.addAction(libraryToggleAction) self.libraryDockWidget.close() self.sessionChanged.connect(self.libraryWidget.sessionDidChange) self.libraryWidget.doubleClicked.connect(self.libraryItemDoubleClicked) self.globalPanels = [self.undoDockWidget, self.libraryDockWidget] log.info("Loaded panels.") # --- Debug Widgets --- self.debugMenu = self.createDebugMenu() self.debugObjectInspector = ObjectInspector(mainWindow) self.inspectorDockWidget = MCEDockWidget("Object Inspector", mainWindow, objectName="InspectorWidget") self.inspectorDockWidget.setWidget(self.debugObjectInspector) self.debugMenu.addAction(self.inspectorDockWidget.toggleViewAction()) self.inspectorDockWidget.close() self.profileView = ProfilerWidget() self.profileDockWidget = MCEDockWidget("Profiler", mainWindow, objectName="ProfilerWidget") self.profileDockWidget.setWidget(self.profileView) self.debugMenu.addAction(self.profileDockWidget.toggleViewAction()) self.profileDockWidget.close() self.textureAtlasView = QtGui.QLabel() self.textureAtlasView.setScaledContents(True) self.textureAtlasDockWidget = MCEDockWidget( "Texture Atlas", mainWindow, objectName="TextureAtlasWidget") self.textureAtlasArea = QtGui.QScrollArea() self.textureAtlasArea.setWidget(self.textureAtlasView) self.textureAtlasDockWidget.setWidget(self.textureAtlasArea) self.debugMenu.addAction( self.textureAtlasDockWidget.toggleViewAction()) self.textureAtlasDockWidget.close() infoTabs = QtGui.QTabWidget() self.cursorInfo = WorldCursorInfo() infoTabs.addTab(self.cursorInfo, "Cursor") self.viewInfo = WorldViewInfo() infoTabs.addTab(self.viewInfo, "View") self.loaderInfo = ChunkLoaderInfo() infoTabs.addTab(self.loaderInfo, "Loader") self.infoDockWidget = MCEDockWidget("Debug Info", mainWindow, objectName="DebugInfo") self.infoDockWidget.setWidget(infoTabs) self.infoDockWidget.close() log.info("Loaded debug widgets.") # --- Menu Actions --- # -- MCEdit menu -- mainWindow.actionNew_World.triggered.connect(self.createNewWorld) mainWindow.actionNew_World.setShortcut(QtGui.QKeySequence.New) mainWindow.actionOpen_World.triggered.connect(self.chooseOpenWorld) mainWindow.actionOpen_World.setShortcut(QtGui.QKeySequence.Open) mainWindow.actionShow_World_List.triggered.connect(self.showWorldList) mainWindow.actionShow_World_List.setShortcut( QtGui.QKeySequence("Ctrl+L")) mainWindow.actionSave_World.triggered.connect(self.saveCurrentWorld) mainWindow.actionSave_World.setShortcut(QtGui.QKeySequence.Save) mainWindow.actionSave_World_As.triggered.connect( self.saveCurrentWorldAs) mainWindow.actionSave_World_As.setShortcut(QtGui.QKeySequence.SaveAs) mainWindow.actionClose_World.triggered.connect(self.closeCurrentTab) mainWindow.actionClose_World.setShortcut(QtGui.QKeySequence.Close) mainWindow.actionExit_MCEdit.triggered.connect(self.exitEditor) mainWindow.actionExit_MCEdit.setShortcut(QtGui.QKeySequence.Quit) # -- Help menu -- mainWindow.actionAbout_MCEdit.triggered.connect(self.showAbout) mainWindow.actionAbout_MCEdit.setShortcut(QtGui.QKeySequence.Quit) # -- Window Menu -- mainWindow.menuWindow.addAction(self.undoDockWidget.toggleViewAction()) mainWindow.menuWindow.addAction( self.libraryDockWidget.toggleViewAction()) # -- Options Menu -- mainWindow.actionEnable_Lighting_Updates.setChecked( EnableLightingSetting.value()) mainWindow.actionEnable_Lighting_Updates.toggled.connect( EnableLightingSetting.setValue) EnableLightingSetting.valueChanged.connect(self.enableLightingChanged) self.enableLightingChanged(EnableLightingSetting.value()) mainWindow.actionPreferences.triggered.connect(self.showPrefsDialog) mainWindow.actionConfigure_Blocks_Items.triggered.connect( self.showConfigureBlocksDialog) mainWindow.actionConfigure_Blocks_Items.setEnabled(False) mainWindow.actionPlugins.triggered.connect(self.showPluginsDialog) mainWindow.actionEnable_Developer_Mode.setChecked( DevModeSetting.value()) mainWindow.actionEnable_Developer_Mode.toggled.connect( DevModeSetting.setValue) DevModeSetting.valueChanged.connect(self.toggleDeveloperMode) self.toggleDeveloperMode(DevModeSetting.value()) mainWindow.menuOptions.addMenu(self.translationsMenu) log.info("Loaded menus.") # --- World List --- self.worldList = WorldListWidget(mainWindow) self.worldList.editWorldClicked.connect(self.editWorldFromList) self.worldList.viewWorldClicked.connect(self.viewWorldFromList) self.worldList.backupWorldClicked.connect(self.backupWorldFromList) self.worldList.repairWorldClicked.connect(self.repairWorldFromList) log.info("Loaded world list.") # --- Status Bar --- self.positionLabel = QtGui.QLabel("xx, yy, zz", minimumWidth=100) self.biomeLabel = QtGui.QLabel("Nowhere", minimumWidth=100) self.blocktypeLabel = QtGui.QLabel("(-1:-1)minecraft:rocktonium", minimumWidth=250) self.blockNameLabel = QtGui.QLabel("rocktonium", minimumWidth=150) self.cpsLabel = QtGui.QLabel("-1 cps", minimumWidth=65) self.fpsLabel = QtGui.QLabel("-1 fps", minimumWidth=65) statusBar = mainWindow.statusBar() statusBar.addPermanentWidget(self.positionLabel) statusBar.addPermanentWidget(self.biomeLabel) statusBar.addPermanentWidget(self.blocktypeLabel) statusBar.addPermanentWidget(self.blockNameLabel) statusBar.addPermanentWidget(self.cpsLabel) statusBar.addPermanentWidget(self.fpsLabel) log.info("Loaded status bar.") # --- Load settings --- mainWindow.loadSettings() self.updateRecentFilesMenu() log.info("Loaded settings.") # --- App Dialogs --- # Qt weirdness - initializing QDialog with parent puts the dialog at 0, # 0 instead of centering it on the parent. Have to set the parent explicitly # and put the Qt.Dialog flag back on since changing the parent resets the # window flags... self.prefsDialog = prefsdialog.PrefsDialog(None) self.prefsDialog.setParent(mainWindow) self.prefsDialog.setWindowFlags(Qt.Dialog) self.configureBlocksDialog = configure_blocks.ConfigureBlocksDialog( None) self.configureBlocksDialog.finished.connect( self.configureBlocksFinished) self.configureBlocksDialog.setParent(mainWindow) self.configureBlocksDialog.setWindowFlags(Qt.Dialog) self.pluginsDialog = PluginsDialog() self.pluginsDialog.setParent(mainWindow) self.pluginsDialog.setWindowFlags(Qt.Dialog) log.info("Loaded app dialogs.") # --- Loader timer --- self.loadTimer = timer = LoaderTimer(self) timer.setInterval(0) timer.timeout.connect(self.loadTimerFired) timer.start() log.info("Loading timer started") mainWindow.showMaximized()
multiMCInstallsOption = settings.Settings().getOption( "minecraft_installs/multimc_installs", "json", []) currentInstallOption = settings.Settings().getOption( "minecraft_installs/current_install_path", unicode, "") currentVersionOption = settings.Settings().getOption( "minecraft_installs/current_version", unicode, "") currentResourcePackOption = settings.Settings().getOption( "minecraft_installs/current_resource_pack", unicode, "") allowSnapshotsOption = settings.Settings().getOption( "minecraft_installs/allow_snapshots_", bool, False) _installs = None _netManager = QtNetwork.QNetworkAccessManager() _versionCacheDir = os.path.join(getUserFilesDirectory(), 'versionCache') def getResourceLoaderForFilename(filename): filename = os.path.normpath(filename) installs = GetInstalls() # Is this world inside a MultiMC instance? for instance in installs.instances: savesFolder = os.path.normpath(instance.saveFileDir) if filename.startswith(savesFolder): return instance.getResourceLoader() # Nope. Use the version and respack chosen in the world list. # ... should search for installs matching this one, but vanilla installs are still multi-version... loader = getSelectedResourceLoader()
import json import logging import os from uuid import UUID import sys from PySide import QtNetwork, QtCore from mcedit2.util import directories from mcedit2.util.load_png import loadPNGTexture log = logging.getLogger(__name__) _playerDataFolder = os.path.join(directories.getUserFilesDirectory(), "player_data") _playerSkinsFolder = os.path.join(_playerDataFolder, "skins") _playerDataCachePath = os.path.join(_playerDataFolder, "players.json") if not os.path.exists(_playerSkinsFolder): os.makedirs(_playerSkinsFolder) _netManager = QtNetwork.QNetworkAccessManager() class PlayerServerError(IOError): pass class PlayerDataCache(QtCore.QObject): def __init__(self):
def __init__(self, argv, DEBUG=False): super(MCEditApp, self).__init__(argv) self.DEBUG = DEBUG MCEditApp.app = self minecraftinstall.GetInstalls().ensureValidInstall() self.ensureSingle() self.commandLineWorlds = [] self.parseArgs(argv) log.warn("UserFilesDirectory: %s", getUserFilesDirectory()) # --- Necessities --- translator = QtCore.QTranslator() translator.load(resourcePath('mcedit2/i18n/en_US.ts')) self.installTranslator(translator) self.setOrganizationName("MCEdit") self.setOrganizationDomain("mcedit.net") self.setApplicationName("MCEdit") self.setWindowIcon( QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/mcediticon.png"))) styleSheet = file(resourcePath("mcedit2/styles/mcedit2.qcss")).read() self.setStyleSheet(styleSheet) # --- Main Window --- self.mainWindow = mainWindow = MCEditMainWindow() self.undoGroup = QtGui.QUndoGroup() self.tabWidget = self.mainWindow.tabWidget self.tabWidget.tabCloseRequested.connect(self.tabCloseRequested) self.tabWidget.currentChanged.connect(self.tabChanged) # --- Sessions --- self._currentSession = None self.sessions = [] self.sessionDockWidgets = [] self.sessionChanged.connect(self.sessionDidChange) # --- Panel Widgets --- self.undoView = QtGui.QUndoView(self.undoGroup) 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") self.logViewDockWidget.setWidget(self.logViewWidget) mainWindow.addDockWidget(Qt.BottomDockWidgetArea, self.logViewDockWidget) mainWindow.panelsToolBar.addAction( self.logViewDockWidget.toggleViewAction()) self.logViewDockWidget.close() self.libraryView = LibraryWidget() self.libraryDockWidget = QtGui.QDockWidget("Library", mainWindow, objectName="LibraryWidget") self.libraryDockWidget.setWidget(self.libraryView) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.libraryDockWidget) mainWindow.panelsToolBar.addAction( self.libraryDockWidget.toggleViewAction()) self.libraryDockWidget.close() self.libraryView.doubleClicked.connect(self.libraryItemDoubleClicked) self.globalPanels = [ self.undoDockWidget, self.logViewDockWidget, self.libraryDockWidget ] # --- Debug Widgets --- if DEBUG: debugMenu = self.createDebugMenu() self.debugObjectInspector = ObjectInspector(mainWindow) self.inspectorDockWidget = QtGui.QDockWidget( "Inspector", mainWindow, objectName="InspectorWidget") self.inspectorDockWidget.setWidget(self.debugObjectInspector) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.inspectorDockWidget) debugMenu.addAction(self.inspectorDockWidget.toggleViewAction()) self.inspectorDockWidget.close() self.profileView = ProfilerWidget() profileDockWidget = QtGui.QDockWidget("Profiler", mainWindow, objectName="ProfilerWidget") profileDockWidget.setWidget(self.profileView) mainWindow.addDockWidget(Qt.RightDockWidgetArea, profileDockWidget) debugMenu.addAction(profileDockWidget.toggleViewAction()) profileDockWidget.close() self.textureAtlasView = QtGui.QLabel() self.textureAtlasView.setScaledContents(True) self.textureAtlasDockWidget = QtGui.QDockWidget( "Texture Atlas", mainWindow, objectName="TextureAtlasWidget") self.textureAtlasArea = QtGui.QScrollArea() self.textureAtlasArea.setWidget(self.textureAtlasView) self.textureAtlasDockWidget.setWidget(self.textureAtlasArea) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.textureAtlasDockWidget) debugMenu.addAction(self.textureAtlasDockWidget.toggleViewAction()) self.textureAtlasDockWidget.close() infoTabs = QtGui.QTabWidget() self.cursorInfo = WorldCursorInfo() infoTabs.addTab(self.cursorInfo, "Cursor") self.viewInfo = WorldViewInfo() infoTabs.addTab(self.viewInfo, "View") self.loaderInfo = ChunkLoaderInfo() infoTabs.addTab(self.loaderInfo, "Loader") infoDockWidget = QtGui.QDockWidget("Debug Info", mainWindow, objectName="DebugInfo") infoDockWidget.setWidget(infoTabs) mainWindow.addDockWidget(Qt.BottomDockWidgetArea, infoDockWidget) mainWindow.tabifyDockWidget(infoDockWidget, self.logViewDockWidget) self.globalPanels.append(infoDockWidget) mainWindow.panelsToolBar.addAction( infoDockWidget.toggleViewAction()) infoDockWidget.close() # --- Menu Actions --- # -- MCEdit menu -- mainWindow.actionNew_World.triggered.connect(self.createNewWorld) mainWindow.actionNew_World.setShortcut(QtGui.QKeySequence.New) mainWindow.actionOpen_World.triggered.connect(self.chooseOpenWorld) mainWindow.actionOpen_World.setShortcut(QtGui.QKeySequence.Open) mainWindow.actionShow_World_List.triggered.connect(self.showWorldList) mainWindow.actionShow_World_List.setShortcut( QtGui.QKeySequence("Ctrl+L")) mainWindow.actionSave_World.triggered.connect(self.saveCurrentWorld) mainWindow.actionSave_World.setShortcut(QtGui.QKeySequence.Save) mainWindow.actionSave_World_As.triggered.connect( self.saveCurrentWorldAs) mainWindow.actionSave_World_As.setShortcut(QtGui.QKeySequence.SaveAs) mainWindow.actionClose_World.triggered.connect(self.closeCurrentTab) mainWindow.actionClose_World.setShortcut(QtGui.QKeySequence.Close) mainWindow.actionExit_MCEdit.triggered.connect(self.exitEditor) mainWindow.actionExit_MCEdit.setShortcut(QtGui.QKeySequence.Quit) # -- Help menu -- mainWindow.actionAbout_MCEdit.triggered.connect(self.showAbout) mainWindow.actionAbout_MCEdit.setShortcut(QtGui.QKeySequence.Quit) # -- Window Menu -- mainWindow.menuWindow.addAction(self.undoDockWidget.toggleViewAction()) mainWindow.menuWindow.addAction( self.logViewDockWidget.toggleViewAction()) mainWindow.menuWindow.addAction( self.libraryDockWidget.toggleViewAction()) # --- World List --- self.worldList = WorldListWidget(mainWindow) self.worldList.editWorldClicked.connect(self.editWorldFromList) self.worldList.viewWorldClicked.connect(self.viewWorldFromList) self.worldList.backupWorldClicked.connect(self.backupWorldFromList) self.worldList.repairWorldClicked.connect(self.repairWorldFromList) # --- Status Bar --- self.positionLabel = QtGui.QLabel("xx, yy, zz", minimumWidth=100) self.blocktypeLabel = QtGui.QLabel("(-1:-1)minecraft:rocktonium", minimumWidth=250) self.blockNameLabel = QtGui.QLabel("rocktonium", minimumWidth=150) self.cpsLabel = QtGui.QLabel("-1 cps", minimumWidth=65) self.fpsLabel = QtGui.QLabel("-1 fps", minimumWidth=65) statusBar = mainWindow.statusBar() statusBar.addPermanentWidget(self.positionLabel) statusBar.addPermanentWidget(self.blocktypeLabel) statusBar.addPermanentWidget(self.blockNameLabel) statusBar.addPermanentWidget(self.cpsLabel) statusBar.addPermanentWidget(self.fpsLabel) # --- Load settings --- mainWindow.loadSettings() self.updateRecentFilesMenu() self.loadTimer = timer = LoaderTimer(self) timer.setInterval(0) timer.timeout.connect(self.loadTimerFired) timer.start() log.info("Loading timer started") mainWindow.showMaximized() QtCore.QTimer.singleShot(0, self.didFinishLaunching)
def __init__(self, argv): super(MCEditApp, self).__init__(argv) MCEditApp.app = self minecraftinstall.GetInstalls().ensureValidInstall() self.ensureSingle() self.commandLineWorlds = [] self.parseArgs(argv) log.warn("UserFilesDirectory: %s", getUserFilesDirectory()) # --- Necessities --- translator = QtCore.QTranslator() translator.load(resourcePath('mcedit2/i18n/en_US.ts')) self.installTranslator(translator) log.info("Loaded translator.") self.setOrganizationName("MCEdit") self.setOrganizationDomain("mcedit.net") self.setApplicationName("MCEdit") self.setWindowIcon( QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/mcediticon.png"))) styleSheet = file(resourcePath("mcedit2/styles/mcedit2.qcss")).read() self.setStyleSheet(styleSheet) log.info("Loaded stylesheet.") # --- Main Window --- self.mainWindow = mainWindow = MCEditMainWindow() self.undoGroup = QtGui.QUndoGroup() self.tabWidget = self.mainWindow.tabWidget self.tabWidget.tabCloseRequested.connect(self.tabCloseRequested) self.tabWidget.currentChanged.connect(self.tabChanged) log.info("Loaded main window.") # --- OpenGL --- setDefaultFormat() # --- Sessions --- self._currentSession = None self.sessions = [] self.sessionDockWidgets = [] self.sessionChanged.connect(self.sessionDidChange) # --- Panel Widgets --- self.undoView = QtGui.QUndoView(self.undoGroup) 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") self.logViewDockWidget.setWidget(self.logViewWidget) mainWindow.addDockWidget(Qt.BottomDockWidgetArea, self.logViewDockWidget) mainWindow.panelsToolBar.addAction( self.logViewDockWidget.toggleViewAction()) self.logViewDockWidget.close() self.libraryView = LibraryWidget() self.libraryDockWidget = QtGui.QDockWidget("Library", mainWindow, objectName="LibraryWidget") self.libraryDockWidget.setWidget(self.libraryView) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.libraryDockWidget) mainWindow.panelsToolBar.addAction( self.libraryDockWidget.toggleViewAction()) self.libraryDockWidget.close() self.libraryView.doubleClicked.connect(self.libraryItemDoubleClicked) self.globalPanels = [ self.undoDockWidget, self.logViewDockWidget, self.libraryDockWidget ] log.info("Loaded panels.") # --- Debug Widgets --- self.debugMenu = self.createDebugMenu() self.debugObjectInspector = ObjectInspector(mainWindow) self.inspectorDockWidget = QtGui.QDockWidget( "Inspector", mainWindow, objectName="InspectorWidget") self.inspectorDockWidget.setWidget(self.debugObjectInspector) self.debugMenu.addAction(self.inspectorDockWidget.toggleViewAction()) self.inspectorDockWidget.close() self.profileView = ProfilerWidget() self.profileDockWidget = QtGui.QDockWidget("Profiler", mainWindow, objectName="ProfilerWidget") self.profileDockWidget.setWidget(self.profileView) self.debugMenu.addAction(self.profileDockWidget.toggleViewAction()) self.profileDockWidget.close() self.textureAtlasView = QtGui.QLabel() self.textureAtlasView.setScaledContents(True) self.textureAtlasDockWidget = QtGui.QDockWidget( "Texture Atlas", mainWindow, objectName="TextureAtlasWidget") self.textureAtlasArea = QtGui.QScrollArea() self.textureAtlasArea.setWidget(self.textureAtlasView) self.textureAtlasDockWidget.setWidget(self.textureAtlasArea) self.debugMenu.addAction( self.textureAtlasDockWidget.toggleViewAction()) self.textureAtlasDockWidget.close() infoTabs = QtGui.QTabWidget() self.cursorInfo = WorldCursorInfo() infoTabs.addTab(self.cursorInfo, "Cursor") self.viewInfo = WorldViewInfo() infoTabs.addTab(self.viewInfo, "View") self.loaderInfo = ChunkLoaderInfo() infoTabs.addTab(self.loaderInfo, "Loader") self.infoDockWidget = QtGui.QDockWidget("Debug Info", mainWindow, objectName="DebugInfo") self.infoDockWidget.setWidget(infoTabs) self.infoDockWidget.close() log.info("Loaded debug widgets.") # --- Menu Actions --- # -- MCEdit menu -- mainWindow.actionNew_World.triggered.connect(self.createNewWorld) mainWindow.actionNew_World.setShortcut(QtGui.QKeySequence.New) mainWindow.actionOpen_World.triggered.connect(self.chooseOpenWorld) mainWindow.actionOpen_World.setShortcut(QtGui.QKeySequence.Open) mainWindow.actionShow_World_List.triggered.connect(self.showWorldList) mainWindow.actionShow_World_List.setShortcut( QtGui.QKeySequence("Ctrl+L")) mainWindow.actionSave_World.triggered.connect(self.saveCurrentWorld) mainWindow.actionSave_World.setShortcut(QtGui.QKeySequence.Save) mainWindow.actionSave_World_As.triggered.connect( self.saveCurrentWorldAs) mainWindow.actionSave_World_As.setShortcut(QtGui.QKeySequence.SaveAs) mainWindow.actionClose_World.triggered.connect(self.closeCurrentTab) mainWindow.actionClose_World.setShortcut(QtGui.QKeySequence.Close) mainWindow.actionExit_MCEdit.triggered.connect(self.exitEditor) mainWindow.actionExit_MCEdit.setShortcut(QtGui.QKeySequence.Quit) # -- Help menu -- mainWindow.actionAbout_MCEdit.triggered.connect(self.showAbout) mainWindow.actionAbout_MCEdit.setShortcut(QtGui.QKeySequence.Quit) # -- Window Menu -- mainWindow.menuWindow.addAction(self.undoDockWidget.toggleViewAction()) mainWindow.menuWindow.addAction( self.logViewDockWidget.toggleViewAction()) mainWindow.menuWindow.addAction( self.libraryDockWidget.toggleViewAction()) # -- Options Menu -- mainWindow.actionEnable_Lighting_Updates.setChecked( EnableLightingSetting.value()) mainWindow.actionEnable_Lighting_Updates.toggled.connect( EnableLightingSetting.setValue) EnableLightingSetting.valueChanged.connect(self.enableLightingChanged) self.enableLightingChanged(EnableLightingSetting.value()) mainWindow.actionPreferences.triggered.connect(self.showPrefsDialog) mainWindow.actionConfigure_Blocks_Items.triggered.connect( self.showConfigureBlocksDialog) mainWindow.actionPlugins.triggered.connect(self.showPluginsDialog) mainWindow.actionEnable_Developer_Mode.setChecked( DevModeSetting.value()) mainWindow.actionEnable_Developer_Mode.toggled.connect( DevModeSetting.setValue) DevModeSetting.valueChanged.connect(self.toggleDeveloperMode) self.toggleDeveloperMode(DevModeSetting.value()) log.info("Loaded menus.") # --- World List --- self.worldList = WorldListWidget(mainWindow) self.worldList.editWorldClicked.connect(self.editWorldFromList) self.worldList.viewWorldClicked.connect(self.viewWorldFromList) self.worldList.backupWorldClicked.connect(self.backupWorldFromList) self.worldList.repairWorldClicked.connect(self.repairWorldFromList) log.info("Loaded world list.") # --- Status Bar --- self.positionLabel = QtGui.QLabel("xx, yy, zz", minimumWidth=100) self.biomeLabel = QtGui.QLabel("Nowhere", minimumWidth=100) self.blocktypeLabel = QtGui.QLabel("(-1:-1)minecraft:rocktonium", minimumWidth=250) self.blockNameLabel = QtGui.QLabel("rocktonium", minimumWidth=150) self.cpsLabel = QtGui.QLabel("-1 cps", minimumWidth=65) self.fpsLabel = QtGui.QLabel("-1 fps", minimumWidth=65) statusBar = mainWindow.statusBar() statusBar.addPermanentWidget(self.positionLabel) statusBar.addPermanentWidget(self.biomeLabel) statusBar.addPermanentWidget(self.blocktypeLabel) statusBar.addPermanentWidget(self.blockNameLabel) statusBar.addPermanentWidget(self.cpsLabel) statusBar.addPermanentWidget(self.fpsLabel) log.info("Loaded status bar.") # --- Load settings --- mainWindow.loadSettings() self.updateRecentFilesMenu() log.info("Loaded settings.") # --- App Dialogs --- self.prefsDialog = prefsdialog.PrefsDialog(None) self.configureBlocksDialog = configureblocksdialog.ConfigureBlocksDialog( None) self.configureBlocksDialog.finished.connect( self.configureBlocksFinished) # Qt weirdness - initializing QDialog with parent puts the dialog at 0,0 instead of # centering it on the parent. Have to set the parent explicitly and put the Qt.Dialog flag back on # since changing the parent resets the window flags... self.prefsDialog.setParent(mainWindow) self.prefsDialog.setWindowFlags(Qt.Dialog) self.configureBlocksDialog.setParent(mainWindow) self.configureBlocksDialog.setWindowFlags(Qt.Dialog) self.pluginsDialog = PluginsDialog() self.pluginsDialog.setParent(mainWindow) self.pluginsDialog.setWindowFlags(Qt.Dialog) log.info("Loaded app dialogs.") # --- Loader timer --- self.loadTimer = timer = LoaderTimer(self) timer.setInterval(0) timer.timeout.connect(self.loadTimerFired) timer.start() log.info("Loading timer started") mainWindow.showMaximized() QtCore.QTimer.singleShot(0, self.didFinishLaunching)
from mceditlib import directories log = logging.getLogger(__name__) installationsOption = settings.Settings().getOption("minecraft_installs/installations", "json", []) multiMCInstallsOption = settings.Settings().getOption("minecraft_installs/multimc_installs", "json", []) currentInstallOption = settings.Settings().getOption("minecraft_installs/current_install_path", unicode, "") currentVersionOption = settings.Settings().getOption("minecraft_installs/current_version", unicode, "") currentResourcePackOption = settings.Settings().getOption("minecraft_installs/current_resource_pack", unicode, "") allowSnapshotsOption = settings.Settings().getOption("minecraft_installs/allow_snapshots_", bool, False) _installs = None _netManager = QtNetwork.QNetworkAccessManager() _versionCacheDir = os.path.join(getUserFilesDirectory(), 'versionCache') def getResourceLoaderForFilename(filename): filename = os.path.normpath(filename) installs = GetInstalls() # Is this world inside a MultiMC instance? for instance in installs.instances: savesFolder = os.path.normpath(instance.saveFileDir) if filename.startswith(savesFolder): return instance.getResourceLoader() # Nope. Use the version and respack chosen in the world list. # ... should search for installs matching this one, but vanilla installs are still multi-version... loader = getSelectedResourceLoader() if not os.path.isdir(filename):