-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathselection_manager.py
More file actions
30 lines (24 loc) · 1.08 KB
/
selection_manager.py
File metadata and controls
30 lines (24 loc) · 1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from typing import Optional, List, Callable
from Core.data_model import Face
# @intent:responsibility アプリケーション内の「選択状態」を管理します。
# @intent:role Mediator pattern. ViewportとControlPanelの間の同期を取ります。
class SelectionManager:
def __init__(self):
self._selected_face: Optional[Face] = None
self._observers: List[Callable] = []
@property
def selected_face(self) -> Optional[Face]:
return self._selected_face
# @intent:operation 面を選択します。Noneを渡すと選択解除になります。
def select_face(self, face: Optional[Face]):
if self._selected_face != face:
self._selected_face = face
self._notify_observers()
def add_observer(self, callback: Callable):
self._observers.append(callback)
def remove_observer(self, callback: Callable):
if callback in self._observers:
self._observers.remove(callback)
def _notify_observers(self):
for callback in self._observers:
callback(self._selected_face)