Skip to content

Commit 8956d15

Browse files
committed
fix listeners
1 parent 9aa725e commit 8956d15

File tree

4 files changed

+31
-26
lines changed

4 files changed

+31
-26
lines changed

src/main/kotlin/org/nield/dirtyfx/collections/DirtyObservableList.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@ class DirtyObservableList<T> private constructor(_originalList: List<T> = listOf
1919
private val _originalList = FXCollections.observableArrayList(_originalList)
2020
private val _isDirtyProperty = SimpleBooleanProperty()
2121

22+
23+
private val listener = ListChangeListener<T> { _ ->
24+
_isDirtyProperty.set(_originalList != this)
25+
}
26+
init {
27+
addListener(WeakListChangeListener(listener))
28+
}
29+
30+
2231
/** Sets this `ObservableList` to now be the "original" list **/
2332
override fun rebaseline() {
2433
_originalList.setAll(this)
@@ -30,13 +39,6 @@ class DirtyObservableList<T> private constructor(_originalList: List<T> = listOf
3039
_isDirtyProperty.set(false)
3140
}
3241

33-
init {
34-
addListener(
35-
ListChangeListener<T> { _ ->
36-
_isDirtyProperty.set(_originalList != this)
37-
}
38-
)
39-
}
4042

4143
val originalList get() = FXCollections.unmodifiableObservableList(_originalList)
4244

src/main/kotlin/org/nield/dirtyfx/collections/DirtyObservableMap.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,16 @@ class DirtyObservableMap<K,V> private constructor(_originalMap: Map<K,V>,
1515
private val _originalMap = FXCollections.observableMap(_originalMap)
1616
private val _isDirtyProperty = SimpleBooleanProperty()
1717

18+
private val listener = MapChangeListener<K,V> {
19+
_isDirtyProperty.set(_originalMap != this)
20+
}
21+
1822
constructor(originalMap: Map<K,V> = mapOf()): this(originalMap, FXCollections.observableMap(HashMap<K,V>(originalMap)))
1923

24+
init {
25+
addListener(WeakMapChangeListener(listener))
26+
}
27+
2028
override fun rebaseline() {
2129
_originalMap.clear()
2230
forEach { k, v -> _originalMap[k] = v }
@@ -27,13 +35,7 @@ class DirtyObservableMap<K,V> private constructor(_originalMap: Map<K,V>,
2735
_originalMap.forEach { k, v -> set(k,v) }
2836
_isDirtyProperty.set(false)
2937
}
30-
init {
31-
addListener(
32-
MapChangeListener<K,V> {
33-
_isDirtyProperty.set(_originalMap != this)
34-
}
35-
)
36-
}
38+
3739
val originalMap get() = FXCollections.unmodifiableObservableMap(_originalMap)
3840

3941
override fun isDirtyProperty(): ObservableValue<Boolean> = _isDirtyProperty

src/main/kotlin/org/nield/dirtyfx/collections/DirtyObservableSet.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.nield.dirtyfx.collections
22

33
import javafx.beans.property.SimpleBooleanProperty
44
import javafx.beans.value.ObservableValue
5+
import javafx.beans.value.WeakChangeListener
56
import javafx.collections.FXCollections
67
import javafx.collections.ObservableSet
78
import javafx.collections.SetChangeListener
@@ -17,12 +18,12 @@ class DirtyObservableSet<T> private constructor(_originalSet: Set<T> = setOf(),
1718
private val _originalSet = FXCollections.observableSet(HashSet<T>(_originalSet))
1819
private val _isDirtyProperty = SimpleBooleanProperty()
1920

21+
private val listener = SetChangeListener<T> {
22+
_isDirtyProperty.set(_originalSet != this)
23+
}
24+
2025
init {
21-
addListener(
22-
SetChangeListener<T> {
23-
_isDirtyProperty.set(_originalSet != this)
24-
}
25-
)
26+
addListener(WeakSetChangeListener(listener))
2627
}
2728

2829
override fun rebaseline() {

src/main/kotlin/org/nield/dirtyfx/tracking/CompositeDirtyProperty.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ class CompositeDirtyProperty: DirtyProperty, ObservableValue<Boolean> {
1313
private val items = FXCollections.observableArrayList<DirtyProperty> { arrayOf(it.isDirtyProperty()) }
1414
private val _dirtyStateProperty = SimpleBooleanProperty()
1515

16-
init {
17-
items.addListener(
18-
ListChangeListener<DirtyProperty> { _ ->
19-
_dirtyStateProperty.set(
20-
items.any { it.isDirty }
21-
)
22-
}
16+
private val listener = ListChangeListener<DirtyProperty> { _ ->
17+
_dirtyStateProperty.set(
18+
items.any { it.isDirty }
2319
)
2420
}
2521

22+
init {
23+
items.addListener(WeakListChangeListener(listener))
24+
}
25+
2626
/**
2727
* Indicates if any tracked DirtyProperties are dirty
2828
*/

0 commit comments

Comments
 (0)