Library panel now shows a list of the current session's maps, for dragging and dropping
This commit is contained in:
parent
844049b0d4
commit
31aec2a932
@ -152,6 +152,7 @@ class MCEditApp(QtGui.QApplication):
|
||||
mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.libraryDockWidget)
|
||||
mainWindow.panelsToolBar.addAction(self.libraryDockWidget.toggleViewAction())
|
||||
self.libraryDockWidget.close()
|
||||
self.sessionChanged.connect(self.libraryWidget.sessionDidChange)
|
||||
|
||||
self.libraryWidget.doubleClicked.connect(self.libraryItemDoubleClicked)
|
||||
|
||||
|
@ -5,41 +5,87 @@ from __future__ import absolute_import, division, print_function
|
||||
import logging
|
||||
import os
|
||||
from PySide import QtGui, QtCore
|
||||
from PySide.QtCore import Qt
|
||||
from mcedit2.panels.map import MapListModel
|
||||
from mcedit2.util.directories import getUserSchematicsDirectory
|
||||
from mcedit2.util.load_ui import load_ui
|
||||
from mcedit2.util.mimeformats import MimeFormats
|
||||
from mcedit2.widgets.layout import Column
|
||||
from mceditlib.util.lazyprop import weakrefprop
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
class LibraryTreeModel(QtGui.QFileSystemModel):
|
||||
class LibraryMapListModel(MapListModel):
|
||||
def flags(self, index):
|
||||
return super(LibraryMapListModel, self).flags(index) | Qt.ItemIsDragEnabled
|
||||
|
||||
def mimeData(self, indices):
|
||||
mimeData = QtCore.QMimeData()
|
||||
mapItemData = ", ".join(str(index.data(self.MapIDRole)) for index in indices)
|
||||
mimeData.setData(MimeFormats.MapItem,
|
||||
mapItemData)
|
||||
return mimeData
|
||||
|
||||
|
||||
class LibrarySchematicsTreeModel(QtGui.QFileSystemModel):
|
||||
def columnCount(self, *args, **kwargs):
|
||||
return 1
|
||||
|
||||
def mimeData(self, indices):
|
||||
mimeData = QtCore.QMimeData()
|
||||
mimeData.setUrls([QtCore.QUrl.fromLocalFile(self.filePath(index)) for index in indices])
|
||||
return mimeData
|
||||
|
||||
def mimeTypes(self, indices):
|
||||
return ["text/uri-list"]
|
||||
|
||||
class LibraryWidget(QtGui.QWidget):
|
||||
editorSession = weakrefprop()
|
||||
|
||||
def __init__(self):
|
||||
super(LibraryWidget, self).__init__()
|
||||
load_ui("library.ui", baseinstance=self)
|
||||
|
||||
self.folderPath = getUserSchematicsDirectory()
|
||||
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.schematicsModel = LibrarySchematicsTreeModel()
|
||||
self.schematicsModel.setRootPath(self.folderPath)
|
||||
self.schematicsTreeView.setModel(self.schematicsModel)
|
||||
self.schematicsTreeView.setRootIndex(self.schematicsModel.index(self.folderPath))
|
||||
|
||||
self.treeView.doubleClicked.connect(self.itemDoubleClicked)
|
||||
self.schematicsTreeView.doubleClicked.connect(self.itemDoubleClicked)
|
||||
|
||||
openLibraryButton = QtGui.QPushButton("Open Schematics Folder")
|
||||
openLibraryButton.clicked.connect(self.openFolder)
|
||||
self.mapListModel = None
|
||||
self.editorSession = None
|
||||
|
||||
self.setLayout(Column(self.treeView, openLibraryButton))
|
||||
self.openLibraryButton.clicked.connect(self.openFolder)
|
||||
|
||||
def openFolder(self):
|
||||
QtGui.QDesktopServices.openUrl(QtCore.QUrl.fromLocalFile(self.folderPath))
|
||||
|
||||
def itemDoubleClicked(self, index):
|
||||
filename = self.model.filePath(index)
|
||||
filename = self.schematicsModel.filePath(index)
|
||||
self.doubleClicked.emit(filename)
|
||||
|
||||
doubleClicked = QtCore.Signal(str)
|
||||
doubleClicked = QtCore.Signal(unicode)
|
||||
|
||||
def sessionDidChange(self, session):
|
||||
self.editorSession = session
|
||||
if session is None:
|
||||
self.mapListView.setModel(None)
|
||||
self.mapListModel = None
|
||||
|
||||
else:
|
||||
self.mapListModel = LibraryMapListModel(session)
|
||||
self.mapListView.setModel(self.mapListModel)
|
||||
session.revisionChanged.connect(self.revisionDidChange)
|
||||
|
||||
def revisionDidChange(self, revisionChanges):
|
||||
# xxxx inspect revisionChanges! in fact, create AnvilRevisionChanges so
|
||||
# we don't have to match `data/map_\d+.dat`!!
|
||||
session = self.editorSession
|
||||
if session:
|
||||
self.mapListModel = LibraryMapListModel(session)
|
||||
self.mapListView.setModel(self.mapListModel)
|
||||
|
100
src/mcedit2/ui/library.ui
Normal file
100
src/mcedit2/ui/library.ui
Normal file
@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Dialog</class>
|
||||
<widget class="QDialog" name="Dialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>617</width>
|
||||
<height>646</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="schematicsTab">
|
||||
<attribute name="title">
|
||||
<string>Schematics</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QTreeView" name="schematicsTreeView">
|
||||
<property name="dragEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="dragDropMode">
|
||||
<enum>QAbstractItemView::DragOnly</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="openLibraryButton">
|
||||
<property name="text">
|
||||
<string>Open Schematics Folder</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mapsTab">
|
||||
<attribute name="title">
|
||||
<string>Maps</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QListView" name="mapListView">
|
||||
<property name="dragEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="dragDropMode">
|
||||
<enum>QAbstractItemView::DragOnly</enum>
|
||||
</property>
|
||||
<property name="movement">
|
||||
<enum>QListView::Snap</enum>
|
||||
</property>
|
||||
<property name="resizeMode">
|
||||
<enum>QListView::Adjust</enum>
|
||||
</property>
|
||||
<property name="viewMode">
|
||||
<enum>QListView::IconMode</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="customBlocksTab">
|
||||
<attribute name="title">
|
||||
<string>Custom Blocks</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Reference in New Issue
Block a user