[refactor] extract central widget to own file
This commit is contained in:
parent
c44d958097
commit
bb4f17118e
104
central_widget.py
Normal file
104
central_widget.py
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
import os
|
||||||
|
from PyQt5.QtWidgets import QFrame, QLabel, QListWidget, QListWidgetItem, QStackedLayout, QVBoxLayout, QWidget, QGridLayout, QSpacerItem, QSizePolicy
|
||||||
|
from PyQt5.QtGui import QPixmap
|
||||||
|
from PyQt5.QtCore import Qt, QSettings
|
||||||
|
|
||||||
|
from file_handler import FileHandler
|
||||||
|
import communicator as comm
|
||||||
|
import constants as cnst
|
||||||
|
|
||||||
|
class CentralWidget(QWidget):
|
||||||
|
|
||||||
|
def __init__(self, parent=None) -> None:
|
||||||
|
super().__init__(parent=parent)
|
||||||
|
|
||||||
|
self._splash = SplashScreen()
|
||||||
|
self._file_view = FileView(self)
|
||||||
|
self._stack = QStackedLayout(self)
|
||||||
|
self._stack.addWidget(self._splash)
|
||||||
|
self._stack.addWidget(self._file_view)
|
||||||
|
self.setLayout(self._stack)
|
||||||
|
self.setStyleSheet("background-color: white;")
|
||||||
|
|
||||||
|
def show_file_content(self):
|
||||||
|
self._stack.setCurrentIndex(1)
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
self._file_view.reset()
|
||||||
|
self._splash.reset()
|
||||||
|
self._stack.setCurrentIndex(0)
|
||||||
|
|
||||||
|
|
||||||
|
class FileView(QWidget):
|
||||||
|
|
||||||
|
def __init__(self, parent=None) -> None:
|
||||||
|
super().__init__(parent=parent)
|
||||||
|
self.setLayout(QVBoxLayout())
|
||||||
|
self.layout().addWidget(QLabel("FileView"))
|
||||||
|
self._file_handler = FileHandler()
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
print("FileView ", self._file_handler.is_valid)
|
||||||
|
pass
|
||||||
|
|
||||||
|
class SplashScreen(QWidget):
|
||||||
|
|
||||||
|
def __init__(self, parent=None) -> None:
|
||||||
|
super().__init__(parent=parent)
|
||||||
|
layout = QGridLayout()
|
||||||
|
self.setLayout(layout)
|
||||||
|
self.setStyleSheet("background-color: white;")
|
||||||
|
label = QLabel()
|
||||||
|
label.setPixmap(QPixmap("./icons/nixview256.png"))
|
||||||
|
label.setAlignment(Qt.AlignCenter)
|
||||||
|
|
||||||
|
layout.addWidget(label, 1, 1)
|
||||||
|
verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
|
||||||
|
verticalSpacer2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
|
||||||
|
hSpacer = QSpacerItem(400, 20, QSizePolicy.Maximum, QSizePolicy.Expanding)
|
||||||
|
hSpacer2 = QSpacerItem(400, 20, QSizePolicy.Maximum, QSizePolicy.Expanding)
|
||||||
|
layout.addItem(verticalSpacer, 0, 1)
|
||||||
|
layout.addItem(verticalSpacer2, 2, 1)
|
||||||
|
layout.addItem(hSpacer, 1, 0)
|
||||||
|
layout.addItem(hSpacer2, 1, 2)
|
||||||
|
frame = QFrame()
|
||||||
|
l = QVBoxLayout()
|
||||||
|
l.addWidget(QLabel("Recently opened files:"))
|
||||||
|
|
||||||
|
self._file_list = QListWidget(self)
|
||||||
|
self._file_list.itemClicked.connect(self._on_file_clicked)
|
||||||
|
l.addWidget(self._file_list)
|
||||||
|
frame.setLayout(l)
|
||||||
|
layout.addWidget(frame, 3, 1)
|
||||||
|
self._file_map = {}
|
||||||
|
self._read_recent_files()
|
||||||
|
|
||||||
|
def _create_short_filename(self, original, index, max_len=40):
|
||||||
|
short = original
|
||||||
|
parts = original.split(os.sep)
|
||||||
|
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()])
|
@ -1,6 +1,9 @@
|
|||||||
from PyQt5.QtCore import QObject, pyqtSignal
|
from PyQt5.QtCore import QObject, pyqtSignal
|
||||||
|
|
||||||
class Communicate(QObject):
|
class Communicate(QObject):
|
||||||
|
"""
|
||||||
|
Small class for across app communication. Defines signals, to which other classes can connect.
|
||||||
|
"""
|
||||||
open_recent = pyqtSignal(str)
|
open_recent = pyqtSignal(str)
|
||||||
|
|
||||||
communicator = Communicate()
|
communicator = Communicate()
|
104
main_window.py
104
main_window.py
@ -1,14 +1,13 @@
|
|||||||
import sys
|
import sys
|
||||||
import os
|
from PyQt5.QtWidgets import QFileDialog, QMainWindow, QMenuBar, QToolBar, QAction, QStatusBar
|
||||||
from typing import Hashable
|
from PyQt5.QtGui import QIcon, QKeySequence
|
||||||
from PyQt5.QtWidgets import QFileDialog, QFrame, QLabel, QListWidget, QListWidgetItem, QMainWindow, QMenuBar, QStackedLayout, QToolBar, QAction, QStatusBar, QVBoxLayout, QWidget, QGridLayout, QSpacerItem, QSizePolicy
|
from PyQt5.QtCore import QSize, QSettings
|
||||||
from PyQt5.QtGui import QIcon, QPixmap, QKeySequence
|
|
||||||
from PyQt5.QtCore import Qt, QSize, QSettings
|
|
||||||
from numpy import unique
|
from numpy import unique
|
||||||
|
|
||||||
from file_handler import FileHandler
|
from file_handler import FileHandler
|
||||||
import constants as cnst
|
import constants as cnst
|
||||||
import communicator as comm
|
import communicator as comm
|
||||||
|
from central_widget import CentralWidget
|
||||||
|
|
||||||
class NixView(QMainWindow):
|
class NixView(QMainWindow):
|
||||||
|
|
||||||
@ -108,98 +107,3 @@ class NixView(QMainWindow):
|
|||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
|
|
||||||
class CentralWidget(QWidget):
|
|
||||||
|
|
||||||
def __init__(self, parent=None) -> None:
|
|
||||||
super().__init__(parent=parent)
|
|
||||||
|
|
||||||
self._splash = SplashScreen()
|
|
||||||
self._file_view = FileView(self)
|
|
||||||
self._stack = QStackedLayout(self)
|
|
||||||
self._stack.addWidget(self._splash)
|
|
||||||
self._stack.addWidget(self._file_view)
|
|
||||||
self.setLayout(self._stack)
|
|
||||||
self.setStyleSheet("background-color: white;")
|
|
||||||
|
|
||||||
def show_file_content(self):
|
|
||||||
self._stack.setCurrentIndex(1)
|
|
||||||
|
|
||||||
def reset(self):
|
|
||||||
self._file_view.reset()
|
|
||||||
self._splash.reset()
|
|
||||||
self._stack.setCurrentIndex(0)
|
|
||||||
|
|
||||||
|
|
||||||
class FileView(QWidget):
|
|
||||||
|
|
||||||
def __init__(self, parent=None) -> None:
|
|
||||||
super().__init__(parent=parent)
|
|
||||||
self.setLayout(QVBoxLayout())
|
|
||||||
self.layout().addWidget(QLabel("FileView"))
|
|
||||||
self._file_handler = FileHandler()
|
|
||||||
|
|
||||||
def reset(self):
|
|
||||||
print("FileView ", self._file_handler.is_valid)
|
|
||||||
pass
|
|
||||||
|
|
||||||
class SplashScreen(QWidget):
|
|
||||||
|
|
||||||
def __init__(self, parent=None) -> None:
|
|
||||||
super().__init__(parent=parent)
|
|
||||||
layout = QGridLayout()
|
|
||||||
self.setLayout(layout)
|
|
||||||
self.setStyleSheet("background-color: white;")
|
|
||||||
label = QLabel()
|
|
||||||
label.setPixmap(QPixmap("./icons/nixview256.png"))
|
|
||||||
label.setAlignment(Qt.AlignCenter)
|
|
||||||
|
|
||||||
layout.addWidget(label, 1, 1)
|
|
||||||
verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
|
|
||||||
verticalSpacer2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
|
|
||||||
hSpacer = QSpacerItem(400, 20, QSizePolicy.Maximum, QSizePolicy.Expanding)
|
|
||||||
hSpacer2 = QSpacerItem(400, 20, QSizePolicy.Maximum, QSizePolicy.Expanding)
|
|
||||||
layout.addItem(verticalSpacer, 0, 1)
|
|
||||||
layout.addItem(verticalSpacer2, 2, 1)
|
|
||||||
layout.addItem(hSpacer, 1, 0)
|
|
||||||
layout.addItem(hSpacer2, 1, 2)
|
|
||||||
frame = QFrame()
|
|
||||||
l = QVBoxLayout()
|
|
||||||
l.addWidget(QLabel("Recently opened files:"))
|
|
||||||
|
|
||||||
self._file_list = QListWidget(self)
|
|
||||||
self._file_list.itemClicked.connect(self._on_file_clicked)
|
|
||||||
l.addWidget(self._file_list)
|
|
||||||
frame.setLayout(l)
|
|
||||||
layout.addWidget(frame, 3, 1)
|
|
||||||
self._file_map = {}
|
|
||||||
self._read_recent_files()
|
|
||||||
|
|
||||||
def _create_short_filename(self, original, index, max_len=40):
|
|
||||||
short = original
|
|
||||||
parts = original.split(os.sep)
|
|
||||||
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()])
|
|
||||||
|
Loading…
Reference in New Issue
Block a user