|
22 | 22 | * *
|
23 | 23 | ***************************************************************************/
|
24 | 24 | """
|
25 |
| -from typing import Any |
| 25 | +from typing import ( |
| 26 | + Any, |
| 27 | + Union |
| 28 | +) |
26 | 29 |
|
27 | 30 | import numpy as np
|
28 | 31 | import pandas as pd
|
@@ -63,29 +66,27 @@ def plan(self, value: RedistrictingPlan):
|
63 | 66 | self.beginResetModel()
|
64 | 67 |
|
65 | 68 | if self._districts is not None:
|
66 |
| - self._districts.updating.disconnect(self.beginResetModel) |
67 |
| - self._districts.updateComplete.disconnect(self.endResetModel) |
68 |
| - self._districts.updateTerminated.disconnect(self.endResetModel) |
69 | 69 | self._districts.districtChanged.disconnect(self.districtChanged)
|
| 70 | + self._plan.districtsUpdated.disconnect(self.districtsUpdated) |
70 | 71 | self._plan.planChanged.disconnect(self.planChanged)
|
71 | 72 |
|
72 | 73 | self._plan = value
|
73 | 74 | self._districts = self._plan.districts if self._plan else None
|
74 | 75 |
|
75 | 76 | if self._districts is not None:
|
76 |
| - self._districts.updating.connect(self.beginResetModel) |
77 |
| - self._districts.updateComplete.connect(self.endResetModel) |
78 |
| - self._districts.updateTerminated.connect(self.endResetModel) |
79 | 77 | self._districts.districtChanged.connect(self.districtChanged)
|
| 78 | + self._plan.districtsUpdated.connect(self.districtsUpdated) |
80 | 79 | self._plan.planChanged.connect(self.planChanged)
|
81 | 80 |
|
82 | 81 | self.endResetModel()
|
83 | 82 |
|
84 |
| - def planChanged(self, plan, prop, value, oldValue): # pylint: disable=unused-argument |
85 |
| - if prop in ('districts', 'data-fields', 'pop-field', 'pop-fields'): |
| 83 | + def planChanged(self, plan, props): |
| 84 | + assert plan == self.plan |
| 85 | + |
| 86 | + if props & {'districts', 'data-fields', 'pop-field', 'pop-fields'}: |
86 | 87 | self.beginResetModel()
|
87 | 88 | self.endResetModel()
|
88 |
| - elif prop == 'deviation': |
| 89 | + elif 'deviation' in props: |
89 | 90 | self.dataChanged.emit(self.createIndex(1, 1), self.createIndex(self.rowCount() - 1, 4), [Qt.BackgroundRole])
|
90 | 91 |
|
91 | 92 | def districtChanged(self, district: District):
|
@@ -184,3 +185,16 @@ def flags(self, index):
|
184 | 185 | f |= Qt.ItemIsEditable
|
185 | 186 |
|
186 | 187 | return f
|
| 188 | + |
| 189 | + def districtsUpdated(self, districts: Union[list[int], None]): |
| 190 | + if districts: |
| 191 | + for d in districts: |
| 192 | + self.dataChanged.emit( |
| 193 | + self.createIndex(d, 3), |
| 194 | + self.createIndex(d, self.columnCount()), |
| 195 | + [Qt.DisplayRole, Qt.EditRole] |
| 196 | + ) |
| 197 | + self.dataChanged.emit(self.createIndex(d, 4), self.createIndex(d, 5), [Qt.FontRole]) |
| 198 | + else: |
| 199 | + self.beginResetModel() |
| 200 | + self.endResetModel() |
0 commit comments