class FileSystemBrowser(QTreeView): """simple file system browser""" def __init__(self): QTreeView.__init__(self) self.model = QDirModel() self.setModel(self.model) self.setSortingEnabled(True) self.setAlternatingRowColors(True) self.setEditTriggers(QAbstractItemView.NoEditTriggers) self.setContextMenuPolicy(Qt.CustomContextMenu) self.setAutoExpandDelay(500) i = self.model.index(os.getcwd()) self.scrollTo(i) self.expand(i) self.setCurrentIndex(i) for i in range(self.model.columnCount()): self.resizeColumnToContents(i) self.connect(self, SIGNAL("doubleClicked(QModelIndex)"), self.itemAction) self.connect(self, SIGNAL("customContextMenuRequested(QPoint)"), self.showContextMenu) def itemAction(self, mi): """default action (on doubleclick) for item at model index mi""" fi = self.model.fileInfo(mi) if self.model.isDir(mi): return path = str(fi.absoluteFilePath()) if not SimuVis4.Globals.fileTypeActions.openFile(path): self.openExternal(path) def showContextMenu(self, pos): """show context menu for item at pos""" mi = self.indexAt(pos) fi = self.model.fileInfo(mi) m = QMenu() self.path = str(fi.absoluteFilePath()) if self.model.isDir(mi): m.addAction(QCoreApplication.translate('DataBrowser', 'Refresh'), lambda x=mi: self.model.refresh(x)) else: for a in SimuVis4.Globals.fileTypeActions.getActions(self.path): # this is weird, ... but it works m.addAction(a[0], lambda x=a[1]: x(self.path)) m.addSeparator() m.addAction(QCoreApplication.translate('DataBrowser', 'Open external'), self.openExternal) a = m.exec_(self.mapToGlobal(pos)) def openExternal(self, path=None): if not path: path = self.path QDesktopServices.openUrl(QUrl.fromLocalFile(path))
class FileSystemBrowser(QTreeView): """simple file system browser, no actions yet""" def __init__(self): QTreeView.__init__(self) self.model = QDirModel() self.setModel(self.model) self.setSortingEnabled(True) i = self.model.index(os.getcwd()) self.scrollTo(i) self.expand(i) self.setCurrentIndex(i) for i in range(self.model.columnCount()): self.resizeColumnToContents(i)