mirror of https://gitlab.com/pamhyr/pamhyr2
Pamhyr: Add update propagation mechanism.
parent
e03ebedfdf
commit
e96e291ec4
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue