def __init__(self, rootTag, parent=None): super(NBTTreeModel, self).__init__(parent) self.rootItem = MakeNBTTreeItem(rootTag, None) self.rootTag = rootTag self.allowNameChanges = True self.addIcon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/add.png")) self.removeIcon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/remove.png"))
def loadPNGFile(filename): img = QtGui.QImage() filename = resourcePath("mcedit2/assets/mcedit2/textures/%s" % filename) if not img.load(filename): raise IOError, "Failed to read PNG file " + filename return loadPNGImage(img)
def __init__(self): super(RotationWidget, self).__init__() load_ui("rotation_widget.ui", baseinstance=self) self.xRotSlider.valueChanged.connect(self.setXRot) self.yRotSlider.valueChanged.connect(self.setYRot) self.zRotSlider.valueChanged.connect(self.setZRot) self.xRotSlider.sliderReleased.connect(self.sliderReleased) self.yRotSlider.sliderReleased.connect(self.sliderReleased) self.zRotSlider.sliderReleased.connect(self.sliderReleased) self.xRotSpinBox.valueChanged.connect(self.setXRot) self.yRotSpinBox.valueChanged.connect(self.setYRot) self.zRotSpinBox.valueChanged.connect(self.setZRot) icon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/right_angle.png")) self.xRot90Button.setIcon(icon) self.yRot90Button.setIcon(icon) self.zRot90Button.setIcon(icon) self.xRot90Button.clicked.connect(self.xRot90Clicked) self.yRot90Button.clicked.connect(self.yRot90Clicked) self.zRot90Button.clicked.connect(self.zRot90Clicked) self.xRot = self.yRot = self.zRot = 0
def __init__(self, *args, **kwargs): super(PluginsTableModel, self).__init__(*args, **kwargs) self.pluginRefs = plugins.getAllPlugins() log.info("Plugin count: %d", len(self.pluginRefs)) self.headerTitles = ["", "Plugin Name", "Filename"] self.reloadIcon = QtGui.QIcon( resourcePath("mcedit2/assets/mcedit2/reload.png"))
def __init__(self): super(RotationWidget, self).__init__() self.setupUi(self) self.xRotSlider.valueChanged.connect(self.setXRot) self.yRotSlider.valueChanged.connect(self.setYRot) self.zRotSlider.valueChanged.connect(self.setZRot) self.xRotSlider.sliderReleased.connect(self.sliderReleased) self.yRotSlider.sliderReleased.connect(self.sliderReleased) self.zRotSlider.sliderReleased.connect(self.sliderReleased) self.xRotSpinBox.valueChanged.connect(self.setXRot) self.yRotSpinBox.valueChanged.connect(self.setYRot) self.zRotSpinBox.valueChanged.connect(self.setZRot) icon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/right_angle.png")) self.xRot90Button.setIcon(icon) self.yRot90Button.setIcon(icon) self.zRot90Button.setIcon(icon) self.xRot90Button.clicked.connect(self.xRot90Clicked) self.yRot90Button.clicked.connect(self.yRot90Clicked) self.zRot90Button.clicked.connect(self.zRot90Clicked) self.xRot = self.yRot = self.zRot = 0
def __init__(self, editorSession): """ :type editorSession: mcedit2.editorsession.EditorSession :rtype: MapPanel """ super(MapPanel, self).__init__(QtGui.qApp.mainWindow, f=Qt.Tool) self.editorSession = editorSession self.pixmapItem = None self.mapListModel = None self.setupUi(self) icon = QtGui.QIcon( resourcePath("mcedit2/assets/mcedit2/icons/edit_map.png")) action = QtGui.QAction(icon, self.tr("Edit Maps"), self) action.setCheckable(True) action.triggered.connect(self.toggleView) self._toggleViewAction = action self.reloadModel() self.mapListView.clicked.connect(self.mapListClicked) self.splitter.splitterMoved.connect(self.updatePixmapSize) self.splitter.setStretchFactor(0, 2) self.splitter.setStretchFactor(1, 1) self.importImageButton.clicked.connect(self.importImage) self.deleteMapButton.clicked.connect(self.deleteMap) self.currentlyEditingLabel.setVisible(False) self.displayFirstMap()
def PickToolAction(tool): name = tool.name iconName = tool.iconName if iconName: iconPath = resourcePath( "mcedit2/assets/mcedit2/toolicons/%s.png" % iconName) if not os.path.exists(iconPath): log.error("Tool icon %s not found", iconPath) icon = None else: icon = QtGui.QIcon(iconPath) else: icon = None def _triggered(): self.chooseTool(name) action = QtGui.QAction( self.tr(name), self, #shortcut=self.toolShortcut(name), # xxxx coordinate with view movement keys triggered=_triggered, checkable=True, icon=icon, ) action.toolName = name action._triggered = _triggered # Needed because connecting _triggered doesn't increase its refcount self.toolActionGroup.addAction(action) return action
def pickToolAction(self): name = self.name iconName = self.iconName if iconName: iconPath = resourcePath("mcedit2/assets/mcedit2/toolicons/%s.png" % iconName) if not os.path.exists(iconPath): log.error("Tool icon %s not found", iconPath) icon = None else: icon = QtGui.QIcon(iconPath) else: icon = None action = QtGui.QAction( self.tr(name), self, #shortcut=self.toolShortcut(name), # xxxx coordinate with view movement keys triggered=self.pick, checkable=True, icon=icon, enabled=not(self.editorSession.readonly and self.modifiesWorld) ) action.toolName = name return action
def pickToolAction(self): name = self.name iconName = self.iconName if iconName: iconPath = resourcePath("mcedit2/assets/mcedit2/toolicons/%s.png" % iconName) if not os.path.exists(iconPath): log.error("Tool icon %s not found", iconPath) icon = None else: icon = QtGui.QIcon(iconPath) else: icon = None action = QtGui.QAction( self.tr(name), self, #shortcut=self.toolShortcut(name), # xxxx coordinate with view movement keys triggered=self.pick, checkable=True, icon=icon, ) action.toolName = name return action
def __init__(self, editorSession): """ :type editorSession: mcedit2.editorsession.EditorSession :rtype: MapPanel """ super(MapPanel, self).__init__(QtGui.qApp.mainWindow, f=Qt.Tool) self.editorSession = editorSession self.pixmapItem = None self.mapListModel = None self.setupUi(self) icon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/edit_map.png")) action = QtGui.QAction(icon, self.tr("Edit Maps"), self) action.setCheckable(True) action.triggered.connect(self.toggleView) self._toggleViewAction = action self.reloadModel() self.mapListView.clicked.connect(self.mapListClicked) self.splitter.splitterMoved.connect(self.updatePixmapSize) self.splitter.setStretchFactor(0, 2) self.splitter.setStretchFactor(1, 1) self.importImageButton.clicked.connect(self.importImage) self.deleteMapButton.clicked.connect(self.deleteMap) self.currentlyEditingLabel.setVisible(False) self.displayFirstMap()
def __init__(self, rootTag, blocktypes): """ Parameters ---------- rootTag : mceditlib.nbt.TAG_Compound blocktypes : mceditlib.blocktypes.BlockTypeSet """ super(NBTTreeModel, self).__init__() self.blocktypes = blocktypes self.rootItem = MakeNBTTreeItem(rootTag, None) self.rootTag = rootTag self.allowNameChanges = True self.addIcon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/add.png")) self.removeIcon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/remove.png"))
def __init__(self, *args, **kwargs): addShapes = kwargs.pop('addShapes', None) super(ShapeWidget, self).__init__(*args, **kwargs) buttons = self.buttons = [] self.groupBox = QtGui.QGroupBox("Shape:") flowLayout = flowlayout.FlowLayout() actionGroup = QtGui.QActionGroup(self) actionGroup.setExclusive(True) iconBase = resourcePath("mcedit2/assets/mcedit2/icons") actions = {} shapes = list(getShapes()) if addShapes: shapes.extend(addShapes) for shape in shapes: if shape.icon is not None: filename = os.path.join(iconBase, shape.icon) assert os.path.exists(filename), "%r does not exist" % filename icon = QtGui.QIcon(filename) if icon is None: log.warn("Failed to read shape icon file %s" % filename) else: icon = None def _handler(shape): def handler(): self.currentShape = shape BrushShapeSetting.setValue(shape.ID) self.shapeChanged.emit(shape) return handler if icon is None: action = QtGui.QAction(shape.ID, self, triggered=_handler(shape)) else: action = QtGui.QAction(icon, shape.ID, self, triggered=_handler(shape)) button = QtGui.QToolButton() action.setCheckable(True) button.setDefaultAction(action) button.setIconSize(QtCore.QSize(32, 32)) buttons.append(button) flowLayout.addWidget(button) actionGroup.addAction(action) actions[shape.ID] = action shape.optionsChanged.connect(self.shapeOptionsChanged.emit) self.optionsHolder = QtGui.QStackedWidget() layout = Column(flowLayout, (self.optionsHolder, 1)) self.groupBox.setLayout(layout) self.setLayout(Column(self.groupBox, margin=0)) currentID = BrushShapeSetting.value(shapes[0].ID) shapesByID = {shape.ID: shape for shape in shapes} if currentID not in actions: currentID = shapes[0].ID actions[currentID].setChecked(True) self.currentShape = shapesByID.get(currentID, shapes[0]) self.shapeChanged.connect(self.shapeDidChange) self.shapeDidChange(self.currentShape)
def __init__(self, editorSession): """ :type editorSession: mcedit2.editorsession.EditorSession :rtype: PlayerPanel """ super(PlayerPanel, self).__init__(f=Qt.Tool) self.editorSession = editorSession self.selectedUUID = None load_ui("panels/player.ui", baseinstance=self) self.movePlayerButton.clicked.connect(self.movePlayerToCamera) self.viewPlayerButton.clicked.connect(self.showPlayerView) playerUUIDs = list(editorSession.worldEditor.listPlayers()) try: sp = editorSession.worldEditor.getPlayer("") singlePlayerUUID = sp.UUID except PlayerNotFound: log.info("No single-player.") singlePlayerUUID = None except KeyError: log.info("Failed to get single-player UUID.") singlePlayerUUID = None for UUID in playerUUIDs: # xxx live update? if UUID == "": displayName = "[Single-player](%s)" % singlePlayerUUID else: displayName = UUID # xxx mojang api here try: UUID = uuid.UUID(hex=UUID) if UUID == singlePlayerUUID: continue # Don't count single-player twice when it appears under playerData/ except ValueError: # badly formed uuid? log.warn("Could not get a UUID from %s", UUID) continue self.playerListBox.addItem(displayName, UUID) self.playerListBox.currentIndexChanged[int].connect(self.setSelectedPlayerIndex) if len(playerUUIDs): self.setSelectedPlayerIndex(0) icon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/edit_player.png")) action = QtGui.QAction(icon, "Edit Player", self) action.setCheckable(True) action.triggered.connect(self.toggleView) self._toggleViewAction = action self.editorSession.revisionChanged.connect(self.revisionDidChange) self.initPropertiesWidget() self.nbtEditor.editorSession = self.editorSession self.nbtEditor.editMade.connect(self.nbtEditWasMade) centerWidgetInScreen(self)
def __init__(self, rootTag, blocktypes): """ Parameters ---------- rootTag : mceditlib.nbt.TAG_Compound blocktypes : mceditlib.blocktypes.BlockTypeSet """ super(NBTTreeModel, self).__init__() self.blocktypes = blocktypes self.rootItem = MakeNBTTreeItem(rootTag, None) self.rootTag = rootTag self.allowNameChanges = True self.addIcon = QtGui.QIcon( resourcePath("mcedit2/assets/mcedit2/icons/add.png")) self.removeIcon = QtGui.QIcon( resourcePath("mcedit2/assets/mcedit2/icons/remove.png"))
def __init__(self, editorSession, *args, **kwargs): """ :type editorSession: mcedit2.editorsession.EditorSession :rtype: PlayerPanel """ super(PlayerPanel, self).__init__(QtGui.qApp.mainWindow, *args, f=Qt.Tool, **kwargs) self.editorSession = editorSession self.selectedUUID = None load_ui("panels/player.ui", baseinstance=self) self.movePlayerButton.clicked.connect(self.movePlayerToCamera) self.viewPlayerButton.clicked.connect(self.showPlayerView) playerUUIDs = list(editorSession.worldEditor.listPlayers()) try: sp = editorSession.worldEditor.getPlayer("") singlePlayerUUID = sp.UUID except PlayerNotFound: singlePlayerUUID = None for UUID in playerUUIDs: # xxx live update? if UUID == "": displayName = "[Single-player](%s)" % singlePlayerUUID else: displayName = UUID # xxx mojang api here UUID = uuid.UUID(hex=UUID) if UUID == singlePlayerUUID: continue # Don't count single-player twice when it appears under playerData/ self.playerListBox.addItem(displayName, UUID) self.playerListBox.currentIndexChanged[int].connect( self.setSelectedPlayerIndex) if len(playerUUIDs): self.setSelectedPlayerIndex(0) icon = QtGui.QIcon( resourcePath("mcedit2/assets/mcedit2/icons/edit_player.png")) action = QtGui.QAction(icon, "Edit Player", self) action.setCheckable(True) action.triggered.connect(self.toggleView) self._toggleViewAction = action self.editorSession.revisionChanged.connect(self.revisionDidChange) self.initPropertiesWidget() self.nbtEditor.editorSession = self.editorSession self.nbtEditor.editMade.connect(self.nbtEditWasMade) centerWidgetInScreen(self)
def load_ui(name, parent=None, baseinstance=None): loader = MCEUILoader(baseinstance=baseinstance) loader.setWorkingDirectory(resourcePath(os.path.join("mcedit2", "ui"))) path = resourcePath("mcedit2/ui/" + name) uifile = QtCore.QFile(path) uifile.open(QtCore.QFile.ReadOnly) widget = loader.load(uifile, parent) uifile.close() assert isinstance(widget, QtGui.QWidget) # if not hasattr(sys, 'frozen'): # log.info("Adding debug context menu: %s", name) # # def showUISource(): # url = QtCore.QUrl.fromLocalFile(os.path.dirname(path)) # QtGui.QDesktopServices.openUrl(url) # # def showCallerSource(): # cmd = r'C:\Program Files (x86)\JetBrains\PyCharm Community Edition 3.1\bin\pycharm.exe' # args = [cmd, callerFile, b'--line', b"%s" % callerLine] # subprocess.Popen(args, # stdin = None, # stdout = None, # stderr = None, # #shell=platform.system() == 'Windows' # ) #os.system(" ".join([cmd, callerFile, '/l', "%s" % callerLine])) #log.warn("ARGS: %s", args) # if widget.contextMenuPolicy() == Qt.DefaultContextMenu: # widget.setContextMenuPolicy(Qt.ActionsContextMenu) # showUISourceAction = QtGui.QAction("Reveal .ui file", widget, triggered=showUISource) # widget.addAction(showUISourceAction) # frame = inspect.currentframe() # frame = frame.f_back # callerFile = frame.f_code.co_filename # callerLine = frame.f_lineno # showCallerSourceAction = QtGui.QAction("Open source code", widget, triggered=showCallerSource) # widget.addAction(showCallerSourceAction) return widget
def getDefaultIcon(): global _defaultIcon if _defaultIcon is None: texturePath = resourcePath("mcedit2/assets/mcedit2/block_unknown.png") with open(texturePath, "rb") as f: data = f.read() image = QtGui.QImage.fromData(data).scaled(ICON_SIZE, ICON_SIZE) _defaultIcon = QtGui.QIcon(QtGui.QPixmap.fromImage(image)) return _defaultIcon
def NBTIcon(type): icon = _nbtIcons.get(type) if icon: return icon name = _iconTypes[type] path = resourcePath("mcedit2/assets/mcedit2/nbticons/" + name) assert os.path.exists(path), "%s does not exist" % path icon = QtGui.QIcon(path) assert icon is not None _nbtIcons[type] = icon return icon
def clearTable(self): addButton = QtGui.QPushButton("Add...", flat=True, clicked=self.addNewRow) addButton.setIcon(QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/add.png"))) addButton.setMinimumHeight(48) addButton.setIconSize(QtCore.QSize(32, 32)) addItem = QtGui.QTableWidgetItem(text="Add...") addItem.setSizeHint(addButton.sizeHint()) self.findReplaceTable.clear() self.findReplaceTable.setRowCount(1) self.findReplaceTable.setItem(0, 0, addItem) self.findReplaceTable.setSpan(0, 0, 1, 2) self.findReplaceTable.setCellWidget(0, 0, addButton) self.findReplaceTable.resizeRowsToContents() self.findReplaceTable.resizeColumnsToContents()
def __init__(self): super(ScaleWidget, self).__init__() self.setupUi(self) self.xScaleSpinSlider.valueChanged.connect(self.setXScale) self.yScaleSpinSlider.valueChanged.connect(self.setYScale) self.zScaleSpinSlider.valueChanged.connect(self.setZScale) icon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/mirror.png")) self.xFlipButton.setIcon(icon) self.yFlipButton.setIcon(icon) self.zFlipButton.setIcon(icon) self.xFlipButton.clicked.connect(self.xFlipClicked) self.yFlipButton.clicked.connect(self.yFlipClicked) self.zFlipButton.clicked.connect(self.zFlipClicked) self.xScale = self.yScale = self.zScale = 1.0
def __init__(self): super(ScaleWidget, self).__init__() self.setupUi(self) self.xScaleSpinSlider.valueChanged.connect(self.setXScale) self.yScaleSpinSlider.valueChanged.connect(self.setYScale) self.zScaleSpinSlider.valueChanged.connect(self.setZScale) icon = QtGui.QIcon( resourcePath("mcedit2/assets/mcedit2/icons/mirror.png")) self.xFlipButton.setIcon(icon) self.yFlipButton.setIcon(icon) self.zFlipButton.setIcon(icon) self.xFlipButton.clicked.connect(self.xFlipClicked) self.yFlipButton.clicked.connect(self.yFlipClicked) self.zFlipButton.clicked.connect(self.zFlipClicked) self.xScale = self.yScale = self.zScale = 1.0
def frameButton(button, withRemove=False): frame = QtGui.QFrame() frame.button = button layout = QtGui.QVBoxLayout() layout.addStretch(1) if withRemove: removeButton = QtGui.QPushButton("", flat=True) removeButton.setIcon(QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/remove.png"))) removeButton.setIconSize(QtCore.QSize(24, 24)) def _clicked(): self.removeRow(self.findReplaceTable.row(left)) removeButton.__clicked = _clicked removeButton.clicked.connect(_clicked) layout.addLayout(Row((button, 1), removeButton)) else: layout.addWidget(button) layout.addStretch(1) frame.setLayout(layout) return frame
def __init__(self, editorSession, dialog, *args, **kwargs): super(FindReplaceBlocks, self).__init__(*args, **kwargs) self.editorSession = editorSession self.dialog = dialog header = dialog.findReplaceTable.horizontalHeader() header.setResizeMode(0, QtGui.QHeaderView.Stretch) header.setResizeMode(1, QtGui.QHeaderView.Stretch) dialog.findReplaceTable.setRowCount(1) addButton = QtGui.QPushButton("Add...", flat=True, clicked=self.addNewRow) addButton.setIcon(QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/add.png"))) addButton.setMinimumHeight(48) addButton.setIconSize(QtCore.QSize(32, 32)) addItem = QtGui.QTableWidgetItem(text="Add...") addItem.setSizeHint(addButton.sizeHint()) dialog.findReplaceTable.setItem(0, 0, addItem) dialog.findReplaceTable.setSpan(0, 0, 1, 2) dialog.findReplaceTable.setCellWidget(0, 0, addButton) dialog.findReplaceTable.resizeRowsToContents() dialog.findReplaceTable.resizeColumnsToContents() dialog.blocksReplaceButton.clicked.connect(self.doReplace)
def __init__(self, editorSession, *args, **kwargs): super(ReplaceDialog, self).__init__(*args, **kwargs) self.editorSession = editorSession self.blocktypes = editorSession.worldEditor.blocktypes load_ui("replace.ui", baseinstance=self) header = self.tableWidget.horizontalHeader() header.setResizeMode(0, QtGui.QHeaderView.Stretch) header.setResizeMode(1, QtGui.QHeaderView.Stretch) self.tableWidget.setRowCount(1) addButton = QtGui.QPushButton("Add...", flat=True, clicked=self.addNewRow) addButton.setIcon(QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/add.png"))) addButton.setMinimumHeight(48) addButton.setIconSize(QtCore.QSize(32, 32)) addItem = QtGui.QTableWidgetItem(text="Add...") addItem.setSizeHint(addButton.sizeHint()) self.tableWidget.setItem(0, 0, addItem) self.tableWidget.setSpan(0, 0, 1, 2) self.tableWidget.setCellWidget(0, 0, addButton) self.tableWidget.resizeRowsToContents() self.tableWidget.resizeColumnsToContents()
def __init__(self, editorSession): """ :type editorSession: mcedit2.editorsession.EditorSession :rtype: MapPanel """ super(MapPanel, self).__init__(QtGui.qApp.mainWindow, f=Qt.Tool) self.editorSession = editorSession self.pixmapItem = None self.mapListModel = None load_ui("panels/map.ui", baseinstance=self) icon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/edit_map.png")) action = QtGui.QAction(icon, "Edit Maps", self) action.setCheckable(True) action.triggered.connect(self.toggleView) self._toggleViewAction = action self.reloadModel() self.mapListView.clicked.connect(self.mapListClicked) self.splitter.splitterMoved.connect(self.updatePixmapSize) self.splitter.setStretchFactor(0, 2) self.splitter.setStretchFactor(1, 1) self.importImageButton.clicked.connect(self.importImage) self.currentlyEditingLabel.setVisible(False) if len(self.mapListModel.mapIDs): index = self.mapListModel.index(0, 0) self.mapListView.setCurrentIndex(index) self.displayMapID(index.data(MapListModel.MapIDRole))
def __init__(self, *args, **kwargs): super(ShapeWidget, self).__init__(*args, **kwargs) buttons = self.buttons = [] layout = flowlayout.FlowLayout() actionGroup = QtGui.QActionGroup(self) actionGroup.setExclusive(True) iconBase = resourcePath("mcedit2/assets/mcedit2/icons") actions = {} for shape in Shapes.allShapes: filename = os.path.join(iconBase, shape.icon) assert os.path.exists(filename), "%r does not exist" % filename icon = QtGui.QIcon(filename) if icon is None: raise ValueError("Failed to read shape icon file %s" % filename) def _handler(shape): def handler(): self.currentShape = shape BrushShapeSetting.setValue(shape.ID) self.shapeChanged.emit() return handler action = QtGui.QAction(icon, shape.ID, self, triggered=_handler(shape)) button = QtGui.QToolButton() action.setCheckable(True) button.setDefaultAction(action) button.setIconSize(QtCore.QSize(32, 32)) buttons.append(button) layout.addWidget(button) actionGroup.addAction(action) actions[shape.ID] = action self.setLayout(layout) currentID = BrushShapeSetting.value(Shapes.allShapes[0].ID) shapesByID = {shape.ID:shape for shape in Shapes.allShapes} actions[currentID].setChecked(True) self.currentShape = shapesByID.get(currentID, Shapes.allShapes[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)
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, editorSession): super(WorldInfoPanel, self).__init__(QtGui.qApp.mainWindow, f=Qt.Tool) self.setupUi(self) self.editorSession = editorSession self.worldMeta = self.editorSession.worldEditor.adapter.metadata callIcon = QtGui.QIcon(resourcePath('mcedit2/assets/mcedit2/icons/edit_worldinfo.png')) callButton = QtGui.QAction(callIcon, self.tr('World Info'), self) callButton.setCheckable(True) callButton.triggered.connect(self.toggleView) self._toggleViewAction = callButton self.worldNBTEditor.editorSession = self.editorSession self.editorSession.revisionChanged.connect(self.revisionDidChange) self.gamemodes = [self.tr('Survival'), self.tr('Creative'), self.tr('Adventure'), self.tr('Spectator')] self.difficulties = [self.tr('Peaceful'), self.tr('Easy'), self.tr('Normal'), self.tr('Hard')] self.generatorTypes = [ (self.tr('Default'), 'default'), (self.tr('Flat'), 'flat'), (self.tr('Large Biomes'), 'largeBiomes'), (self.tr('Amplified'), 'amplified'), (self.tr('Customized'), 'customized'), (self.tr('Debug All Block States'), 'debug_all_block_states'), ] self.defaultGamemodeCombo.addItems(self.gamemodes) self.defaultGamemodeCombo.currentIndexChanged.connect(self.defaultGamemodeChanged) self.worldDifficultyCombo.addItems(self.difficulties) self.worldDifficultyCombo.currentIndexChanged.connect(self.worldDifficultyChanged) for name, data in self.generatorTypes: self.generatorTypeCombo.addItem(name, data) self.generatorTypeCombo.currentIndexChanged.connect(self.generatorTypeChanged) # Since QComboBox emits editTextChanged after every keystroke, # we connect to its QLineEdit's editingFinished to only get signaled # after the line edit loses focus (or the user presses return) self.generatorTypeCombo.lineEdit().editingFinished.connect(self.generatorTypeChanged) self.worldNameLineEdit.editingFinished.connect(self.worldNameChanged) self.generatorSeedLineEdit.editingFinished.connect(self.seedChanged) self.generatorOptionsLineEdit.editingFinished.connect(self.generatorOptionsChanged) self.spawnX.editingFinished.connect(self.spawnChanged) self.spawnY.editingFinished.connect(self.spawnChanged) self.spawnZ.editingFinished.connect(self.spawnChanged) self.timeDays.editingFinished.connect(self.timeChanged) self.timeSlider.sliderReleased.connect(self.timeChanged) self.dawnButton.setIcon(QtGui.QIcon(resourcePath('mcedit2/assets/mcedit2/clock/dawn.png'))) self.dawnButton.pressed.connect(self.setTimeDawn) self.noonButton.setIcon(QtGui.QIcon(resourcePath('mcedit2/assets/mcedit2/clock/noon.png'))) self.noonButton.pressed.connect(self.setTimeNoon) self.eveningButton.setIcon(QtGui.QIcon(resourcePath('mcedit2/assets/mcedit2/clock/evening.png'))) self.eveningButton.pressed.connect(self.setTimeEvening) self.nightButton.setIcon(QtGui.QIcon(resourcePath('mcedit2/assets/mcedit2/clock/night.png'))) self.nightButton.pressed.connect(self.setTimeNight) self.lockedDifficultyBool.stateChanged.connect(self.lockedDifficultyChanged) self.commandsBool.stateChanged.connect(self.allowCommandsChanged) self.hardcoreBool.stateChanged.connect(self.hardcoreChanged) self.updatePanel() self.updateNBTTree() centerWidgetInScreen(self)
def __init__(self, *args, **kwargs): super(PluginsTableModel, self).__init__(*args, **kwargs) self.pluginRefs = plugins.getAllPlugins() log.info("Plugin count: %d", len(self.pluginRefs)) self.headerTitles = ["", "Plugin Name", "Filename"] self.reloadIcon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/reload.png"))
def _openImageStream(self, name): if name == "MCEDIT_UNKNOWN": block_unknown = resourcePath("mcedit2/assets/mcedit2/block_unknown.png") return file(block_unknown, "rb") return self.resourceLoader.openStream(name)
def __init__(self, editorSession): """ :type editorSession: mcedit2.editorsession.EditorSession :rtype: PlayerPanel """ super(PlayerPanel, self).__init__(QtGui.qApp.mainWindow, f=Qt.Tool) self.editorSession = editorSession self.selectedUUID = None load_ui("panels/player.ui", baseinstance=self) self.inventoryEditor = InventoryEditor(PLAYER_SLOT_LAYOUT) self.inventoryGroupBox.setLayout(Row(self.inventoryEditor)) self.movePlayerButton.clicked.connect(self.movePlayerToCamera) self.viewPlayerButton.clicked.connect(self.showPlayerView) playerUUIDs = list(editorSession.worldEditor.listPlayers()) try: sp = editorSession.worldEditor.getPlayer("") singlePlayerUUID = sp.UUID except PlayerNotFound: log.info("No single-player.") singlePlayerUUID = None except KeyError: log.info("Failed to get single-player UUID.") singlePlayerUUID = None if "" in playerUUIDs: # Move singleplayer to beginning of list playerUUIDs.remove("") playerUUIDs.insert(0, "") for UUID in playerUUIDs: # xxx live update? if UUID == "": displayName = "[Single-player](%s)" % singlePlayerUUID else: displayName = UUID # xxx mojang api here try: UUID = uuid.UUID(hex=UUID) if UUID == singlePlayerUUID: displayName = "[Multiplayer](%s)" % singlePlayerUUID except ValueError: # badly formed uuid? log.warn("Could not get a UUID from %s", UUID) continue self.playerListBox.addItem(displayName, UUID) self.playerListBox.currentIndexChanged[int].connect(self.setSelectedPlayerIndex) if len(playerUUIDs): self.setSelectedPlayerIndex(0) icon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/edit_player.png")) action = QtGui.QAction(icon, "Edit Player", self) action.setCheckable(True) action.triggered.connect(self.toggleView) self._toggleViewAction = action self.editorSession.revisionChanged.connect(self.revisionDidChange) self.initPropertiesWidget() self.nbtEditor.editorSession = self.editorSession centerWidgetInScreen(self)
def __init__(self, *args, **kwargs): addShapes = kwargs.pop('addShapes', None) super(ShapeWidget, self).__init__(*args, **kwargs) buttons = self.buttons = [] self.groupBox = QtGui.QGroupBox("Shape:") flowLayout = flowlayout.FlowLayout() actionGroup = QtGui.QActionGroup(self) actionGroup.setExclusive(True) iconBase = resourcePath("mcedit2/assets/mcedit2/icons") actions = {} from mcedit2.editortools.brush.shapes import getShapes # xxx circular import shapes = list(getShapes()) if addShapes: shapes.extend(addShapes) for shape in shapes: if shape.icon is not None: filename = os.path.join(iconBase, shape.icon) assert os.path.exists(filename), "%r does not exist" % filename icon = QtGui.QIcon(filename) if icon is None: log.warn("Failed to read shape icon file %s" % filename) else: icon = None def _handler(shape): def handler(): self.currentShape = shape BrushShapeSetting.setValue(shape.ID) self.shapeChanged.emit(shape) return handler if icon is None: action = QtGui.QAction(shape.ID, self, triggered=_handler(shape)) else: action = QtGui.QAction(icon, shape.ID, self, triggered=_handler(shape)) button = QtGui.QToolButton() action.setCheckable(True) button.setDefaultAction(action) button.setIconSize(QtCore.QSize(32, 32)) buttons.append(button) flowLayout.addWidget(button) actionGroup.addAction(action) actions[shape.ID] = action shape.optionsChanged.connect(self.shapeOptionsChanged.emit) self.optionsHolder = QtGui.QStackedWidget() layout = Column(flowLayout, (self.optionsHolder, 1)) self.groupBox.setLayout(layout) self.setLayout(Column(self.groupBox, margin=0)) currentID = BrushShapeSetting.value(shapes[0].ID) shapesByID = {shape.ID: shape for shape in shapes} if currentID not in actions: currentID = shapes[0].ID actions[currentID].setChecked(True) self.currentShape = shapesByID.get(currentID, shapes[0]) self.shapeChanged.connect(self.shapeDidChange) self.shapeDidChange(self.currentShape)
def __init__(self, editorSession): """ :type editorSession: mcedit2.editorsession.EditorSession :rtype: PlayerPanel """ super(PlayerPanel, self).__init__(QtGui.qApp.mainWindow, f=Qt.Tool) self.setupUi(self) self.editorSession = editorSession self.selectedUUID = None self.nbtEditor.editorSession = self.editorSession self.inventoryEditor = InventoryEditor(PLAYER_SLOT_LAYOUT) self.inventoryGroupBox.setLayout(Row(self.inventoryEditor)) self.movePlayerButton.clicked.connect(self.movePlayerToCamera) self.viewPlayerButton.clicked.connect(self.showPlayerView) playerUUIDs = list(editorSession.worldEditor.listPlayers()) try: sp = editorSession.worldEditor.getPlayer("") singlePlayerUUID = sp.UUID except PlayerNotFound: log.info("No single-player.") singlePlayerUUID = None except KeyError: log.info("Failed to get single-player UUID.") singlePlayerUUID = None if "" in playerUUIDs: # Move singleplayer to beginning of list playerUUIDs.remove("") playerUUIDs.insert(0, "") for UUID in playerUUIDs: # xxx live update? if UUID == "": displayName = "[Single-player](%s)" % singlePlayerUUID else: displayName = UUID # xxx mojang api here try: UUID = uuid.UUID(hex=UUID) if UUID == singlePlayerUUID: displayName = "[Multiplayer](%s)" % singlePlayerUUID except ValueError: # badly formed uuid? log.warn("Could not get a UUID from %s", UUID) continue self.playerListBox.addItem(displayName, UUID) self.playerListBox.currentIndexChanged[int].connect( self.setSelectedPlayerIndex) if len(playerUUIDs): self.setSelectedPlayerIndex(0) icon = QtGui.QIcon( resourcePath("mcedit2/assets/mcedit2/icons/edit_player.png")) action = QtGui.QAction(icon, "Edit Player", self) action.setCheckable(True) action.triggered.connect(self.toggleView) self._toggleViewAction = action self.editorSession.revisionChanged.connect(self.revisionDidChange) self.initPropertiesWidget() centerWidgetInScreen(self)
def __init__(self, editorSession): super(WorldInfoPanel, self).__init__(QtGui.qApp.mainWindow, f=Qt.Tool) self.editorSession = editorSession self.worldMeta = self.editorSession.worldEditor.adapter.metadata callIcon = QtGui.QIcon(resourcePath('mcedit2/assets/mcedit2/icons/edit_worldinfo.png')) callButton = QtGui.QAction(callIcon, self.tr('World Info'), self) callButton.setCheckable(True) callButton.triggered.connect(self.toggleView) self._toggleViewAction = callButton load_ui('panels/worldinfo.ui', baseinstance=self) self.worldNBTEditor.editorSession = self.editorSession self.editorSession.revisionChanged.connect(self.revisionDidChange) self.gamemodes = [self.tr('Survival'), self.tr('Creative'), self.tr('Adventure'), self.tr('Spectator')] self.difficulties = [self.tr('Peaceful'), self.tr('Easy'), self.tr('Normal'), self.tr('Hard')] self.generatorTypes = [ (self.tr('Default'), 'default'), (self.tr('Flat'), 'flat'), (self.tr('Large Biomes'), 'largeBiomes'), (self.tr('Amplified'), 'amplified'), (self.tr('Customized'), 'customized'), (self.tr('Debug All Block States'), 'debug_all_block_states'), ] self.defaultGamemodeCombo.addItems(self.gamemodes) self.defaultGamemodeCombo.currentIndexChanged.connect(self.defaultGamemodeChanged) self.worldDifficultyCombo.addItems(self.difficulties) self.worldDifficultyCombo.currentIndexChanged.connect(self.worldDifficultyChanged) for name, data in self.generatorTypes: self.generatorTypeCombo.addItem(name, data) self.generatorTypeCombo.currentIndexChanged.connect(self.generatorTypeChanged) # Since QComboBox emits editTextChanged after every keystroke, # we connect to its QLineEdit's editingFinished to only get signaled # after the line edit loses focus (or the user presses return) self.generatorTypeCombo.lineEdit().editingFinished.connect(self.generatorTypeChanged) self.worldNameLineEdit.editingFinished.connect(self.worldNameChanged) self.generatorSeedLineEdit.editingFinished.connect(self.seedChanged) self.generatorOptionsLineEdit.editingFinished.connect(self.generatorOptionsChanged) self.spawnX.editingFinished.connect(self.spawnChanged) self.spawnY.editingFinished.connect(self.spawnChanged) self.spawnZ.editingFinished.connect(self.spawnChanged) self.timeDays.editingFinished.connect(self.timeChanged) self.timeSlider.sliderReleased.connect(self.timeChanged) self.dawnButton.setIcon(QtGui.QIcon(resourcePath('mcedit2/assets/mcedit2/clock/dawn.png'))) self.dawnButton.pressed.connect(self.setTimeDawn) self.noonButton.setIcon(QtGui.QIcon(resourcePath('mcedit2/assets/mcedit2/clock/noon.png'))) self.noonButton.pressed.connect(self.setTimeNoon) self.eveningButton.setIcon(QtGui.QIcon(resourcePath('mcedit2/assets/mcedit2/clock/evening.png'))) self.eveningButton.pressed.connect(self.setTimeEvening) self.nightButton.setIcon(QtGui.QIcon(resourcePath('mcedit2/assets/mcedit2/clock/night.png'))) self.nightButton.pressed.connect(self.setTimeNight) self.lockedDifficultyBool.stateChanged.connect(self.lockedDifficultyChanged) self.commandsBool.stateChanged.connect(self.allowCommandsChanged) self.hardcoreBool.stateChanged.connect(self.hardcoreChanged) self.updatePanel() self.updateNBTTree() centerWidgetInScreen(self)
def __init__(self, editorSession): """ :type editorSession: mcedit2.editorsession.EditorSession :rtype: PlayerPanel """ super(PlayerPanel, self).__init__(QtGui.qApp.mainWindow, f=Qt.Tool) self.setupUi(self) self.editorSession = editorSession self.selectedUUID = None self.nbtEditor.editorSession = self.editorSession self.inventoryEditor = InventoryEditor(PLAYER_SLOT_LAYOUT) self.inventoryGroupBox.setLayout(Row(self.inventoryEditor)) self.movePlayerButton.clicked.connect(self.movePlayerToCamera) self.viewPlayerButton.clicked.connect(self.showPlayerView) playerUUIDs = list(editorSession.worldEditor.listPlayers()) try: sp = editorSession.worldEditor.getPlayer("") singlePlayerUUID = sp.UUID except (PlayerNotFound, NBTFormatError): log.info("No single-player.") singlePlayerUUID = None except KeyError: log.info("Failed to get single-player UUID.") singlePlayerUUID = None if "" in playerUUIDs: # Move singleplayer to beginning of list playerUUIDs.remove("") playerUUIDs.insert(0, "") for UUID in playerUUIDs: if UUID == "": displayName = "[Single-player](%s)" % singlePlayerUUID else: displayName = UUID try: UUID = uuid.UUID(hex=UUID) if UUID == singlePlayerUUID: displayName = "[Multiplayer](%s)" % singlePlayerUUID except ValueError: # badly formed uuid? log.warn("Could not get a UUID from %s", UUID) continue idx = self.playerListBox.count() self.playerListBox.addItem(displayName, UUID) def _callback(idx, fmt="%s"): def callback(result, error): if result: name = result['name'] self.playerListBox.setItemText(idx, fmt % name) return callback if UUID == "": if singlePlayerUUID: PlayerDataCache.getPlayerInfo(singlePlayerUUID, _callback(idx, "[Single-player]%s")) else: if UUID == singlePlayerUUID: PlayerDataCache.getPlayerInfo(UUID, _callback(idx, "[Multiplayer]%s")) else: PlayerDataCache.getPlayerInfo(UUID, _callback(idx)) self.playerListBox.currentIndexChanged[int].connect(self.setSelectedPlayerIndex) if len(playerUUIDs): self.setSelectedPlayerIndex(0) icon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/edit_player.png")) action = QtGui.QAction(icon, self.tr("Edit Player"), self) action.setCheckable(True) action.triggered.connect(self.toggleView) self._toggleViewAction = action self.editorSession.revisionChanged.connect(self.revisionDidChange) self.initPropertiesWidget() centerWidgetInScreen(self)
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)
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()