82 lines
2.6 KiB
Python
82 lines
2.6 KiB
Python
from typing import Union
|
|
|
|
from PySide6.QtUiTools import QUiLoader
|
|
from PySide6.QtWidgets import QFileDialog, QWidget, QListWidgetItem
|
|
|
|
from interface.mainwindow import MainWindow
|
|
from loaders import CSVManager
|
|
|
|
|
|
class WindowManager:
|
|
"""
|
|
Class used to manage the Qt window and its associated data.
|
|
|
|
Attributes:
|
|
_window: Private, contains the main window.
|
|
_csv_manager: Private, holds a CSV manager.
|
|
|
|
"""
|
|
_window: Union[QWidget, MainWindow] = None # Qt window managed by this class
|
|
_csv_manager: CSVManager = None # Object used to manage CSV data
|
|
|
|
def __init__(self):
|
|
"""
|
|
Initialize our window manager.
|
|
|
|
"""
|
|
loader = QUiLoader()
|
|
self._window = loader.load("files/designer/demo-dialog.ui")
|
|
# Once the window is loaded, connect actions to code
|
|
self.setup_actions()
|
|
|
|
def setup_actions(self):
|
|
"""Connect actions of controls to methods."""
|
|
self._window.file_button.clicked.connect(self.on_file_select)
|
|
self._window.button_csv_export.clicked.connect(self.on_export_csv)
|
|
|
|
def on_file_select(self):
|
|
"""
|
|
Action when the file button is clicked.
|
|
|
|
Shows a file select dialog to pick a CSV
|
|
and loads the CSV file in the CSVManager instance of the object.
|
|
|
|
"""
|
|
filter_text = "CSV File (*.csv)"
|
|
selection: tuple = QFileDialog.getOpenFileName(self._window, "CSV File", "", filter_text)
|
|
path: str = selection[0]
|
|
if path:
|
|
self._csv_manager = CSVManager(path)
|
|
self._window.button_csv_export.setEnabled(True)
|
|
# Empty list items and enable the list widget
|
|
self._window.list_widget.clear()
|
|
self._window.list_widget.setEnabled(True)
|
|
# Add rows in the list widget containing CSV rows
|
|
for row in self._csv_manager.data:
|
|
item = QListWidgetItem(";".join(row))
|
|
self._window.list_widget.addItem(item)
|
|
|
|
def on_export_csv(self):
|
|
"""
|
|
Action when the export to CSV button is clicked.
|
|
|
|
Shows a file select dialog to select a file destination.
|
|
The output file is then saved to the selected path.
|
|
|
|
"""
|
|
filter_text = "Text File (*.txt)"
|
|
selection: tuple = QFileDialog.getSaveFileName(self._window, "Text File", "", filter_text)
|
|
path: str = selection[0]
|
|
if path:
|
|
self._csv_manager.export_text(selection[0])
|
|
|
|
def show(self):
|
|
"""
|
|
Public method to show our window.
|
|
|
|
The window is loaded automatically at instanciation
|
|
in the `__init__` method.
|
|
|
|
"""
|
|
self._window.show()
|