nixview-python/nixview/ui/splashscreen.py

92 lines
3.3 KiB
Python

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()])