Commit e96e291e authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

Pamhyr: Add update propagation mechanism.

Showing with 69 additions and 17 deletions
+69 -17
......@@ -31,7 +31,7 @@ from PyQt5.QtGui import (
)
from PyQt5.QtCore import (
QModelIndex, Qt, QSettings, pyqtSlot,
QItemSelectionModel, QCoreApplication, QSize
QItemSelectionModel, QCoreApplication, QSize,
)
from PyQt5.QtWidgets import (
QApplication, QMainWindow, QFileDialog, QCheckBox,
......@@ -201,6 +201,9 @@ class GeometryWindow(PamhyrWindow):
self._table.layoutChanged.connect(self.update)
def update(self):
self._update()
def _update(self, propagate=True):
self.update_profile_windows()
self.plot_xy()
self.plot_kpc()
......@@ -209,6 +212,15 @@ class GeometryWindow(PamhyrWindow):
self.select_current_profile()
self.changed_slider_value()
if propagate:
self._propagate_update(key="geometry")
def _propagated_update(self, key=None):
if key != "network":
return
self._update(propagate=False)
def import_from_file(self):
options = QFileDialog.Options()
settings = QSettings(QSettings.IniFormat,
......
......@@ -28,7 +28,7 @@ from PyQt5.QtGui import (
)
from PyQt5.QtCore import (
Qt, QTranslator, QEvent, QUrl,
Qt, QTranslator, QEvent, QUrl, QTimer,
)
from PyQt5.QtWidgets import (
QMainWindow, QApplication, QAction,
......@@ -140,6 +140,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
self.default_style()
self.setup_debug_mode(init=True)
self.setup_results()
self.setup_timer()
self.trans = QTranslator(self)
# self.ui.retranslateUi()
......@@ -321,6 +322,31 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
menu.removeAction(self.debug_sqlite_action)
self.set_debug_lvl(debug=False)
def setup_timer(self):
self._init_propagation_keys()
self._propagation_timer = QTimer(self)
self._propagation_timer.start(2000)
self._propagation_timer.timeout.connect(
self._do_propagate_update
)
def _init_propagation_keys(self):
self._propagation_keys = set()
def _propagate_update(self, key=None):
self._propagation_keys.add(key)
logger.debug(f"Propagation keys: {self._propagation_keys}")
def _do_propagate_update(self):
for key in self._propagation_keys:
logger.debug(f"Propagation of {key}")
for _, window in self.sub_win_list:
window._propagated_update(key=key)
self._init_propagation_keys()
#########
# MODEL #
#########
......
......@@ -25,39 +25,41 @@ logger = logging.getLogger()
class ListedSubWindow(object):
def __init__(self, **kwargs):
super(ListedSubWindow, self).__init__()
self.sub_win_cnt = 0
self.sub_win_list = []
self._sub_win_cnt = 0
self._sub_win_list = []
@property
def sub_win_count(self):
return self.sub_win_cnt
return self._sub_win_cnt
@property
def sub_win_list(self):
return self.sub_win_list.copy()
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
self._sub_win_list.append((name, win))
self._sub_win_cnt += 1
try:
logger.info(
f"Open window: {name}: {self.sub_win_cnt}")
f"Open window: {name}: {self._sub_win_cnt}")
except Exception:
logger.info(f"Open window: {name}: {self.sub_win_cnt}: X")
logger.info(f"Open window: {name}: {self._sub_win_cnt}: X")
logger.warning(f"Sub window without hash method !")
def sub_win_del(self, h):
self.sub_win_list = list(
self._sub_win_list = list(
filter(
lambda x: x[1].hash() != h,
self.sub_win_list
self._sub_win_list
)
)
self.sub_win_cnt = len(self.sub_win_list)
logger.info(f"Close window: ({h}) {self.sub_win_cnt}")
self._sub_win_cnt = len(self._sub_win_list)
logger.info(f"Close window: ({h}) {self._sub_win_cnt}")
def _sub_win_exists(self, h):
res = reduce(
lambda acc, el: (acc or (h == (el[1].hash()))),
self.sub_win_list,
self._sub_win_list,
False
)
return res
......@@ -70,7 +72,7 @@ class ListedSubWindow(object):
return next(
filter(
lambda el: (h == el[1].hash()),
self.sub_win_list,
self._sub_win_list,
)
)[1]
except Exception:
......@@ -93,7 +95,7 @@ class ListedSubWindow(object):
otherelse None
"""
hash = cls._hash(data)
if self.sub_win_exists(hash):
if self._sub_win_exists(hash):
win = self.get_sub_win(hash)
win.activateWindow()
return True
......
......@@ -103,6 +103,18 @@ class PamhyrWindowTools(object):
"""
self._set_title()
def _propagate_update(self, key=None):
logger.debug(f"_propagate_update({key}) to {self._parent}")
if self._parent is not None:
self._parent._propagate_update(key=key)
def _propagated_update(self, key=None):
if key is None:
return
# Update ...
return
# Hash methods
@classmethod
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment