From 01fcc36a678603e127a235f3bcf6cc9639c6f496 Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Thu, 9 Mar 2023 14:24:38 +0100
Subject: [PATCH] MainWindow: Add subwindow list.

---
 src/view/ASubWindow.py      |  5 +++++
 src/view/DummyWindow.py     |  2 +-
 src/view/ListedSubWindow.py | 28 ++++++++++++++++++++++++++++
 src/view/MainWindow.py      |  4 +++-
 4 files changed, 37 insertions(+), 2 deletions(-)
 create mode 100644 src/view/ListedSubWindow.py

diff --git a/src/view/ASubWindow.py b/src/view/ASubWindow.py
index f6598b66..bc54ec2e 100644
--- a/src/view/ASubWindow.py
+++ b/src/view/ASubWindow.py
@@ -23,3 +23,8 @@ class ASubWindow(QDialog):
             self
         )
         self.name = name
+        self.parent = parent
+
+    def closeEvent(self, event):
+        if not self.parent is None:
+            self.parent.sub_win_del(self.name)
diff --git a/src/view/DummyWindow.py b/src/view/DummyWindow.py
index 623834f6..a0cd038f 100644
--- a/src/view/DummyWindow.py
+++ b/src/view/DummyWindow.py
@@ -4,5 +4,5 @@ from view.ASubWindow import ASubWindow
 
 class DummyWindow(ASubWindow):
     def __init__(self, title="Dummy", parent=None):
-        super(DummyWindow, self).__init__(ui="dummy", parent=parent)
+        super(DummyWindow, self).__init__(name=title, ui="dummy", parent=parent)
         self.ui.setWindowTitle(title)
diff --git a/src/view/ListedSubWindow.py b/src/view/ListedSubWindow.py
new file mode 100644
index 00000000..3e46bbad
--- /dev/null
+++ b/src/view/ListedSubWindow.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+class ListedSubWindow(object):
+    def __init__(self):
+        super(ListedSubWindow, self).__init__()
+        self.sub_win_cnt = 0
+        self.sub_win_list = []
+
+    def sub_win_count(self):
+        return self.sub_win_cnt
+
+    def sub_win_list(self):
+        return self.sub_win_list.copy()
+
+    def sub_win_add(self, name, win):
+        self.sub_win_list.append((name, win))
+        self.sub_win_cnt += 1
+        print(f"+ {name} ({self.sub_win_cnt})")
+
+    def sub_win_del(self, name):
+        self.sub_win_list = list(
+            filter(
+                lambda x: x[0] != name,
+                self.sub_win_list
+            )
+        )
+        self.sub_win_cnt = len(self.sub_win_list)
+        print(f"- {name} ({self.sub_win_cnt})")
diff --git a/src/view/MainWindow.py b/src/view/MainWindow.py
index 1940cbbb..857f5ba4 100644
--- a/src/view/MainWindow.py
+++ b/src/view/MainWindow.py
@@ -7,10 +7,11 @@ from PyQt5.QtWidgets import (
     QMainWindow, QApplication, QAction,
 )
 from PyQt5.uic import loadUi
+from view.ListedSubWindow import ListedSubWindow
 from view.DummyWindow import DummyWindow
 from view.AboutWindow import AboutWindow
 
-class ApplicationWindow(QMainWindow):
+class ApplicationWindow(QMainWindow, ListedSubWindow):
     def __init__(self):
         super(ApplicationWindow, self).__init__()
         self.ui = loadUi(
@@ -28,6 +29,7 @@ class ApplicationWindow(QMainWindow):
             title=title if type(title) is str else "Dummy",
             parent=self
         )
+        self.sub_win_add(title, self.dummy)
         self.dummy.show()
 
     def open_about(self):
-- 
GitLab