import os from PyQt5.QtWidgets import QWidget, QGridLayout, QLabel, QFrame, QVBoxLayout, QListWidget, QAbstractItemView, QListWidgetItem from PyQt5.QtGui import QPixmap from PyQt5.QtCore import Qt, QSettings, pyqtSignal import nixview.communicator as comm import nixview.constants as cnst class SplashScreen(QWidget): keyPressed = pyqtSignal(int) def __init__(self, parent=None) -> None: super().__init__(parent=parent) #self.setStyleSheet("background-color: white;") layout = QGridLayout() layout.setColumnStretch(0, 2) layout.setColumnStretch(1, 1) layout.setColumnStretch(2, 1) layout.setColumnStretch(3, 1) layout.setColumnStretch(4, 2) layout.setRowStretch(0, 1) layout.setRowStretch(1, 0) layout.setRowStretch(2, 1) layout.setRowStretch(3, 2) self.setLayout(layout) label = QLabel() label.setPixmap(QPixmap(os.path.join(cnst.ICONS_FOLDER, "nixview_transparent.png"))) label.setMaximumWidth(300) label.setAlignment(Qt.AlignCenter) layout.addWidget(label, 1, 1, 1, 3, Qt.AlignCenter) frame = QFrame() l = QVBoxLayout() l.addWidget(QLabel("Recently opened files:")) self._file_list = QListWidget(self) self._file_list.setSelectionMode(QAbstractItemView.SingleSelection) self._file_list.itemClicked.connect(self._on_file_clicked) self._file_list.setFrameShape(QFrame.NoFrame) self.keyPressed.connect(self._on_key_pressed) l.addWidget(self._file_list) frame.setLayout(l) layout.addWidget(frame, 3, 1, 1, 3) self._file_map = {} self._read_recent_files() def keyPressEvent(self, event): super(SplashScreen, self).keyPressEvent(event) if event.key() == Qt.Key_Return: self.keyPressed.emit(event.key()) def _create_short_filename(self, original, index, max_len=40): short = original parts = original.split(os.sep) if len(parts) == 1: short = "%i: %s" % (index, short[:max_len]) else: post = parts[-1] if len(post) > max_len - 4: post = post[:max_len - 4] short = str("%i: " % index) + "... " + post else: short = str("%i: " % index) + " ... ".join([original[:max_len - len(post) - 4], post]) return short def _read_recent_files(self): settings = QSettings(cnst.organization, cnst.application) filenames = settings.value(cnst.settings_recent_files_key, []) del settings for i, f in enumerate(filenames): shortname = self._create_short_filename(f, i + 1, max_len=38) self._file_map[shortname] = f item = QListWidgetItem(shortname) item.setToolTip(f) self._file_list.addItem(item) def reset(self): self._file_list.clear() self._read_recent_files() def _on_file_clicked(self, item): comm.communicator.open_recent.emit(self._file_map[item.text()]) def _on_key_pressed(self, key): item = self._file_list.currentItem() if item is not None and key == Qt.Key_Return: comm.communicator.open_recent.emit(self._file_map[item.text()])