Untitled
unknown
plain_text
3 years ago
8.1 kB
5
Indexable
from PySide2 import QtCore, QtWidgets, QtGui import os, time from PySide2.QtCore import Qt class TableModel(QtCore.QAbstractTableModel): def __init__(self, data): super(TableModel, self).__init__() self._data = data def data(self, index, role): if role == Qt.DisplayRole: # See below for the nested-list data structure. # .row() indexes into the outer list, # .column() indexes into the sub-list return self._data[index.row()][index.column()] def rowCount(self, index): # The length of the outer list. return len(self._data) def columnCount(self, index): # The following takes the first sub-list, and returns # the length (only works if all rows are an equal length) return len(self._data[0]) def getRecentHipFiles(): userdir = hou.getenv('HOUDINI_USER_PREF_DIR') file = os.path.join(userdir, "file.history") validfiles = [] with open(file) as f: lines = f.readlines() for line in lines: newline = line.strip() if newline == "}": break; if newline != "{" and newline != "HIP": if os.path.exists(newline): validfiles.append(newline) validfiles.reverse() return validfiles def diagonalFromWidthHeight(width, height): return math.sqrt(width * width + height * height) class VerticalLineDelegate(QtWidgets.QStyledItemDelegate): def paint(self, painter, option, index): super(VerticalLineDelegate, self).paint(painter, option, index) line = QtCore.QLine(option.rect.topRight(), option.rect.bottomRight()) painter.save() color = QtGui.QColor(50, 50, 50) painter.setPen(QtGui.QPen(color, 1)) painter.drawLine(line) painter.restore() class FileTableWidget(QtWidgets.QTableWidget): allFiles = [] def __init__(self, parent=None): super(FileTableWidget, self).__init__(parent) self.installEventFilter(self) self.setColumnCount(2) self.setMinimumHeight(5) self.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents) self.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows); self.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection) self.setAlternatingRowColors(True) self.setShowGrid(False) delegate = VerticalLineDelegate(self) self.setItemDelegate(delegate) hh = self.horizontalHeader() hh.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) hh.hide() vh = self.verticalHeader() vh.setDefaultSectionSize(hou.ui.scaledSize(10)) vh.setMinimumSectionSize(hou.ui.scaledSize(20)) vh.setMaximumWidth(hou.ui.scaledSize(28)) vh.setSectionResizeMode(QtWidgets.QHeaderView.Fixed) files = getRecentHipFiles() filedates = [time.ctime(os.path.getmtime(file)) for file in files] for i in range(1, 16): if i > len(files): files.append("") filedates.append("") self.allFiles = files for index, file in enumerate(files): self.insertRow(index) self.setRowHeight(index, hou.ui.scaledSize(10)) filename = QtWidgets.QTableWidgetItem(file) filename.setFlags(filename.flags() & ~QtCore.Qt.ItemIsEditable) date = QtWidgets.QTableWidgetItem(filedates[index]) date.setFlags(date.flags() & ~QtCore.Qt.ItemIsEditable) self.setItem(index, 0, filename) self.setItem(index, 1, date) def getSelectedFile(self): row = self.currentRow() return self.allFiles[row] def askLoadingFile(self, file): return hou.ui.displayMessage("Do you want to load?\n" + file, buttons=("Yes", "No")) == 0 def loadSelectedFile(self): file = self.getSelectedFile() confirmed = self.askLoadingFile(file) if confirmed: hou.hipFile.load(file) self.parent().close() def loadFileByIndex(self, index): file = self.getSelectedFile() confirmed = self.askLoadingFile(file) if confirmed: hou.hipFile.load(file) self.parent().close() def keyPressEvent(self, event): key = event.key() index = -1 if key == QtCore.Qt.Key_0: index = 9 elif key == QtCore.Qt.Key_1: index = 0 elif key == QtCore.Qt.Key_2: index = 1 elif key == QtCore.Qt.Key_3: index = 2 elif key == QtCore.Qt.Key_4: index = 3 elif key == QtCore.Qt.Key_5: index = 4 elif key == QtCore.Qt.Key_6: index = 5 elif key == QtCore.Qt.Key_7: index = 6 elif key == QtCore.Qt.Key_8: index = 7 elif key == QtCore.Qt.Key_9: index = 8 if index != -1: self.selectRow(index) self.loadFileByIndex(index) else: if key == QtCore.Qt.Key_Enter: self.loadSelectedFile() elif key == QtCore.Qt.Key_Return: self.loadSelectedFile() elif key == QtCore.Qt.Key_Escape: self.parent().close() else: super(FileTableWidget, self).keyPressEvent(event) def mousePressEvent(self, event): handled = False if event.type() == QtCore.QEvent.MouseButtonPress: if event.button() == QtCore.Qt.RightButton: file = self.getSelectedFile() if file: openfile(file) handled = True if not handled: super(FileTableWidget, self).mousePressEvent(event) def mouseDoubleClickEvent(self, event): widget = self.childAt(event.pos()) if widget is not None and widget.objectName(): self.loadSelectedFile() class FileBrowser(QtWidgets.QWidget): def __init__(self): super(FileBrowser, self).__init__() self.setWindowTitle("Recently Opened Files") self.setParent(hou.qt.mainWindow(), QtCore.Qt.Tool) #self.setParent(hou.qt.mainWindow(), QtCore.Qt.CustomizeWindowHint) layout = QtWidgets.QVBoxLayout() layout.setMargin(0) self.table = QtWidgets.QTableView() data = [ [4, 9, 2], [1, 0, 0], [3, 5, 0], [3, 3, 2], [7, 8, 9], ] self.model = TableModel(data) self.table.setModel(self.model) layout.addWidget(self.table) self.setLayout(layout) self.show() def keyPressEvent(self, event): if event.key() == QtCore.Qt.Key_Escape: self.close() #elif event.key() == QtCore.Qt.Key_Enter: # self.loadSelectedFile() event.accept() def showRecentlyOpenedFiles(): window = FileBrowser() size = window.size() width = size.width() height = size.height() window.setFixedSize(width, height) desktop = QtWidgets.QDesktopWidget() sw = desktop.screen().width() sh = desktop.screen().height() window.move((sw - width)/2, (sh - height)/2) showRecentlyOpenedFiles()
Editor is loading...