# data-conversion.interface.windowmanager API documentation

# Module `data-conversion.interface.windowmanager`

Expand source code

    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 and enable the list widget
                self._window.list_widget.clear()
                self._window.list_widget.setEnabled(True)
                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()

## Classes

`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.

  Initialize our window manager.

  Expand source code

      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 and enable the list widget
                  self._window.list_widget.clear()
                  self._window.list_widget.setEnabled(True)
                  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()

  ### Methods

  `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.

    Expand source code

        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 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.

    Expand source code

        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 and enable the list widget
                self._window.list_widget.clear()
                self._window.list_widget.setEnabled(True)
                for row in self._csv_manager.data:
                    item = QListWidgetItem(";".join(row))
                    self._window.list_widget.addItem(item)

  `def setup_actions(self)`

    Connect actions of controls to methods.

    Expand source code

        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 show(self)`

    Public method to show our window.

    The window is loaded automatically at instanciation in the `__init__` method.

    Expand source code

        def show(self):
            """
            Public method to show our window.

            The window is loaded automatically at instanciation
            in the `__init__` method.

            """
            self._window.show()