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 (
|
from PyQt5.QtCore import (
|
||||||
QModelIndex, Qt, QSettings, pyqtSlot,
|
QModelIndex, Qt, QSettings, pyqtSlot,
|
||||||
QItemSelectionModel, QCoreApplication, QSize
|
QItemSelectionModel, QCoreApplication, QSize,
|
||||||
)
|
)
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
QApplication, QMainWindow, QFileDialog, QCheckBox,
|
QApplication, QMainWindow, QFileDialog, QCheckBox,
|
||||||
|
|
@ -201,6 +201,9 @@ class GeometryWindow(PamhyrWindow):
|
||||||
self._table.layoutChanged.connect(self.update)
|
self._table.layoutChanged.connect(self.update)
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
|
self._update()
|
||||||
|
|
||||||
|
def _update(self, propagate=True):
|
||||||
self.update_profile_windows()
|
self.update_profile_windows()
|
||||||
self.plot_xy()
|
self.plot_xy()
|
||||||
self.plot_kpc()
|
self.plot_kpc()
|
||||||
|
|
@ -209,6 +212,15 @@ class GeometryWindow(PamhyrWindow):
|
||||||
self.select_current_profile()
|
self.select_current_profile()
|
||||||
self.changed_slider_value()
|
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):
|
def import_from_file(self):
|
||||||
options = QFileDialog.Options()
|
options = QFileDialog.Options()
|
||||||
settings = QSettings(QSettings.IniFormat,
|
settings = QSettings(QSettings.IniFormat,
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ from PyQt5.QtGui import (
|
||||||
)
|
)
|
||||||
|
|
||||||
from PyQt5.QtCore import (
|
from PyQt5.QtCore import (
|
||||||
Qt, QTranslator, QEvent, QUrl,
|
Qt, QTranslator, QEvent, QUrl, QTimer,
|
||||||
)
|
)
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
QMainWindow, QApplication, QAction,
|
QMainWindow, QApplication, QAction,
|
||||||
|
|
@ -140,6 +140,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
|
||||||
self.default_style()
|
self.default_style()
|
||||||
self.setup_debug_mode(init=True)
|
self.setup_debug_mode(init=True)
|
||||||
self.setup_results()
|
self.setup_results()
|
||||||
|
self.setup_timer()
|
||||||
|
|
||||||
self.trans = QTranslator(self)
|
self.trans = QTranslator(self)
|
||||||
# self.ui.retranslateUi()
|
# self.ui.retranslateUi()
|
||||||
|
|
@ -321,6 +322,31 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
|
||||||
menu.removeAction(self.debug_sqlite_action)
|
menu.removeAction(self.debug_sqlite_action)
|
||||||
self.set_debug_lvl(debug=False)
|
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 #
|
# MODEL #
|
||||||
#########
|
#########
|
||||||
|
|
|
||||||
|
|
@ -25,39 +25,41 @@ logger = logging.getLogger()
|
||||||
class ListedSubWindow(object):
|
class ListedSubWindow(object):
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
super(ListedSubWindow, self).__init__()
|
super(ListedSubWindow, self).__init__()
|
||||||
self.sub_win_cnt = 0
|
self._sub_win_cnt = 0
|
||||||
self.sub_win_list = []
|
self._sub_win_list = []
|
||||||
|
|
||||||
|
@property
|
||||||
def sub_win_count(self):
|
def sub_win_count(self):
|
||||||
return self.sub_win_cnt
|
return self._sub_win_cnt
|
||||||
|
|
||||||
|
@property
|
||||||
def sub_win_list(self):
|
def sub_win_list(self):
|
||||||
return self.sub_win_list.copy()
|
return self._sub_win_list.copy()
|
||||||
|
|
||||||
def sub_win_add(self, name, win):
|
def sub_win_add(self, name, win):
|
||||||
self.sub_win_list.append((name, win))
|
self._sub_win_list.append((name, win))
|
||||||
self.sub_win_cnt += 1
|
self._sub_win_cnt += 1
|
||||||
try:
|
try:
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Open window: {name}: {self.sub_win_cnt}")
|
f"Open window: {name}: {self._sub_win_cnt}")
|
||||||
except Exception:
|
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 !")
|
logger.warning(f"Sub window without hash method !")
|
||||||
|
|
||||||
def sub_win_del(self, h):
|
def sub_win_del(self, h):
|
||||||
self.sub_win_list = list(
|
self._sub_win_list = list(
|
||||||
filter(
|
filter(
|
||||||
lambda x: x[1].hash() != h,
|
lambda x: x[1].hash() != h,
|
||||||
self.sub_win_list
|
self._sub_win_list
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
self.sub_win_cnt = len(self.sub_win_list)
|
self._sub_win_cnt = len(self._sub_win_list)
|
||||||
logger.info(f"Close window: ({h}) {self.sub_win_cnt}")
|
logger.info(f"Close window: ({h}) {self._sub_win_cnt}")
|
||||||
|
|
||||||
def _sub_win_exists(self, h):
|
def _sub_win_exists(self, h):
|
||||||
res = reduce(
|
res = reduce(
|
||||||
lambda acc, el: (acc or (h == (el[1].hash()))),
|
lambda acc, el: (acc or (h == (el[1].hash()))),
|
||||||
self.sub_win_list,
|
self._sub_win_list,
|
||||||
False
|
False
|
||||||
)
|
)
|
||||||
return res
|
return res
|
||||||
|
|
@ -70,7 +72,7 @@ class ListedSubWindow(object):
|
||||||
return next(
|
return next(
|
||||||
filter(
|
filter(
|
||||||
lambda el: (h == el[1].hash()),
|
lambda el: (h == el[1].hash()),
|
||||||
self.sub_win_list,
|
self._sub_win_list,
|
||||||
)
|
)
|
||||||
)[1]
|
)[1]
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|
@ -93,7 +95,7 @@ class ListedSubWindow(object):
|
||||||
otherelse None
|
otherelse None
|
||||||
"""
|
"""
|
||||||
hash = cls._hash(data)
|
hash = cls._hash(data)
|
||||||
if self.sub_win_exists(hash):
|
if self._sub_win_exists(hash):
|
||||||
win = self.get_sub_win(hash)
|
win = self.get_sub_win(hash)
|
||||||
win.activateWindow()
|
win.activateWindow()
|
||||||
return True
|
return True
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,18 @@ class PamhyrWindowTools(object):
|
||||||
"""
|
"""
|
||||||
self._set_title()
|
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
|
# Hash methods
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue