Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
 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)
Пример #4
0
 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)
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
 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)
Пример #8
0
 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)
Пример #9
0
    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 = {}
Пример #10
0
    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 = {}
Пример #11
0
    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))
Пример #12
0
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)
Пример #13
0
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)
Пример #14
0
    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)
Пример #15
0
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):
Пример #16
0
    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()
Пример #17
0
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()
Пример #18
0
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):
Пример #19
0
    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)
Пример #20
0
    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)
Пример #21
0
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):