Add Import/Export menu and commands, start to get them working (finally)

This commit is contained in:
David Vierra 2015-03-19 17:00:32 -10:00
parent 3ce14fd504
commit d9236e697c
5 changed files with 63 additions and 4 deletions

View File

@ -13,6 +13,7 @@ from mcedit2.editorcommands.find_replace import FindReplaceDialog
from mcedit2.editortools.select import SelectCommand
from mcedit2.panels.player import PlayerPanel
from mcedit2.util.dialogs import NotImplementedYet
from mcedit2.util.directories import getUserSchematicsDirectory
from mcedit2.util.lazyprop import weakrefprop
from mcedit2.util.raycast import rayCastInBounds
from mcedit2.util.resources import resourcePath
@ -123,6 +124,8 @@ class EditorSession(QtCore.QObject):
self.menus = []
# - Edit -
self.menuEdit = QtGui.QMenu(self.tr("Edit"))
self.menuEdit.setObjectName("menuEdit")
@ -190,6 +193,8 @@ class EditorSession(QtCore.QObject):
self.menus.append(self.menuEdit)
# - Select -
self.menuSelect = QtGui.QMenu(self.tr("Select"))
self.actionSelectAll = QtGui.QAction(self.tr("Select All"), self, triggered=self.selectAll)
@ -202,6 +207,26 @@ class EditorSession(QtCore.QObject):
self.menus.append(self.menuSelect)
# - Import/Export -
self.menuImportExport = QtGui.QMenu(self.tr("Import/Export"))
self.actionExport = QtGui.QAction(self.tr("Export"), self, triggered=self.export)
self.actionExport.setShortcut(QtGui.QKeySequence("Ctrl+Shift+E"))
self.menuImportExport.addAction(self.actionExport)
self.actionImport = QtGui.QAction(self.tr("Import"), self, triggered=self.import_)
self.actionImport.setShortcut(QtGui.QKeySequence("Ctrl+Shift+D"))
self.menuImportExport.addAction(self.actionImport)
self.actionImport = QtGui.QAction(self.tr("Show Exports Library"), self,
triggered=QtGui.qApp.libraryDockWidget.toggleViewAction().trigger)
self.actionImport.setShortcut(QtGui.QKeySequence("Ctrl+Shift+L"))
self.menuImportExport.addAction(self.actionImport)
self.menus.append(self.menuImportExport)
# --- Resources ---
i, v, p = self.versionInfo
@ -299,6 +324,7 @@ class EditorSession(QtCore.QObject):
self.actionDeleteBlocks.setEnabled(enable)
self.actionDeleteEntities.setEnabled(enable)
self.actionFill.setEnabled(enable)
self.actionExport.setEnabled(enable)
# --- Menu commands ---
@ -378,6 +404,34 @@ class EditorSession(QtCore.QObject):
command.setText(self.tr("Deselect"))
self.pushCommand(command)
# - Import/export -
def import_(self):
# prompt for a file to import
startingDir = Settings().value("import_dialog/starting_dir", getUserSchematicsDirectory())
result = QtGui.QFileDialog.getOpenFileName(self.mainWindow, self.tr("Import"),
startingDir,
"All files (*.*)")
if result:
filename = result[0]
if filename:
self.importSchematic(filename)
def export(self):
# prompt for filename and format. maybe use custom browser to save to export library??
startingDir = Settings().value("import_dialog/starting_dir", getUserSchematicsDirectory())
result = QtGui.QFileDialog.getSaveFileName(QtGui.qApp.mainWindow,
self.tr("Export Schematic"),
startingDir,
"All files (*.*)")
if result:
filename = result[0]
if filename:
task = self.currentDimension.exportSchematicIter(self.currentSelection)
schematic = showProgress("Copying...", task)
schematic.saveToFile(filename)
# --- Library support ---
def importSchematic(self, filename):

View File

@ -75,7 +75,7 @@ class MoveFinishCommand(SimpleRevisionCommand):
def redo(self):
super(MoveFinishCommand, self).redo()
self.previousSelection = self.editorSession.currentSelection
self.editorSession.currentSelection = BoundingBox(self.pendingImport.pos, self.previousSelection.size)
self.editorSession.currentSelection = BoundingBox(self.pendingImport.pos, self.pendingImport.bounds.size)
self.moveTool.removePendingImport(self.pendingImport)

View File

@ -5,7 +5,7 @@ from __future__ import absolute_import, division, print_function
import logging
import os
from PySide import QtGui, QtCore
from mcedit2.util.directories import getUserFilesDirectory
from mcedit2.util.directories import getUserSchematicsDirectory
from mcedit2.widgets.layout import Column
log = logging.getLogger(__name__)
@ -18,7 +18,7 @@ class LibraryWidget(QtGui.QWidget):
def __init__(self):
super(LibraryWidget, self).__init__()
self.folderPath = os.path.join(getUserFilesDirectory(), "schematics")
self.folderPath = getUserSchematicsDirectory()
if not os.path.exists(self.folderPath):
os.makedirs(self.folderPath)

View File

@ -18,4 +18,5 @@ def getUserFilesDirectory():
os.makedirs(dataDir)
return dataDir
def getUserSchematicsDirectory():
return os.path.join(getUserFilesDirectory(), "schematics")

View File

@ -301,6 +301,10 @@ class WorldEditor(object):
self.playerCache.clear()
self.adapter.saveChanges()
def saveToFile(self, filename):
# XXXX only works with .schematics!!!
self.adapter.saveToFile(filename)
def close(self):
"""
Unload all chunks and close all open filehandles.