From 101dd6bb81a8f2a6487e78940e421aa4d314265b Mon Sep 17 00:00:00 2001 From: Pierre Laborde Date: Thu, 19 Mar 2026 11:35:59 +0100 Subject: [PATCH 1/4] Fix blSpace add/remove lifecycle: use the good method. Remove deprecated method call because can introduce Bloc stack break. Prevent layer list element add in a uiProcessDo. --- src/GeoView/AbstractGeoViewLayer.class.st | 8 ++++---- src/GeoView/GeoViewAbstractElement.class.st | 22 +++------------------ src/GeoView/GeoViewElement.class.st | 2 +- 3 files changed, 8 insertions(+), 24 deletions(-) diff --git a/src/GeoView/AbstractGeoViewLayer.class.st b/src/GeoView/AbstractGeoViewLayer.class.st index 893ba9e..2cfc081 100644 --- a/src/GeoView/AbstractGeoViewLayer.class.st +++ b/src/GeoView/AbstractGeoViewLayer.class.st @@ -21,14 +21,14 @@ AbstractGeoViewLayer class >> isAbstract [ AbstractGeoViewLayer >> addedToScene: anObject [ "call when the geoview is added to a scene graph" - self addedToSceneGraph + "override me to implement behavior" ] { #category : #private } AbstractGeoViewLayer >> addedToSceneGraph [ "call when the geoview is added to a scene graph" - self deprecated:'used addedToScene:'. + self deprecated: 'used addedToScene:' ] { #category : #drawing } @@ -141,14 +141,14 @@ AbstractGeoViewLayer >> name: anObject [ AbstractGeoViewLayer >> removedFromScene: anObject [ "call when the geoview is removed from a scene graph" - self removedFromSceneGraph + "override me to implement behavior" ] { #category : #private } AbstractGeoViewLayer >> removedFromSceneGraph [ "call when the geoview is removed from a scene graph" - self deprecated:'used removedFromScene:'. + self deprecated: 'used removedFromScene:' ] { #category : #private } diff --git a/src/GeoView/GeoViewAbstractElement.class.st b/src/GeoView/GeoViewAbstractElement.class.st index fabe49a..5b452f1 100644 --- a/src/GeoView/GeoViewAbstractElement.class.st +++ b/src/GeoView/GeoViewAbstractElement.class.st @@ -351,6 +351,8 @@ GeoViewAbstractElement >> initialize [ super initialize. + layers := OrderedCollection new. + "Initialize default projection systems" self mapProjection: GeoViewWebMercatorProjection new. self displayToGraphicProjection: GeoView2DProjection new. @@ -406,7 +408,7 @@ GeoViewAbstractElement >> layerProcessDataChanged: anEvent [ { #category : #accessing } GeoViewAbstractElement >> layers [ - ^ layers ifNil: [ layers := OrderedCollection new ] + ^ layers ] { #category : #'API -- coordinates transformations' } @@ -542,24 +544,6 @@ GeoViewAbstractElement >> objectIndexAccessor: aSymbol [ objectIndexAccessor := aSymbol ] -{ #category : #'hooks - children' } -GeoViewAbstractElement >> onAddedToSceneGraph [ - - super onAddedToSceneGraph. - - "send message to all layers" - self layers do: [ :e | e addedToScene: self ] -] - -{ #category : #'hooks - children' } -GeoViewAbstractElement >> onRemovedFromSceneGraph [ - - super onRemovedFromSceneGraph. - - "send message to all layers" - self layers do: [ :e | e removedFromScene: self ] -] - { #category : #'API -- picking' } GeoViewAbstractElement >> pickAt: aGlobalPoint [ "Return all objects under a global point" diff --git a/src/GeoView/GeoViewElement.class.st b/src/GeoView/GeoViewElement.class.st index 75c507d..4fb012d 100644 --- a/src/GeoView/GeoViewElement.class.st +++ b/src/GeoView/GeoViewElement.class.st @@ -107,7 +107,7 @@ GeoViewElement >> initializeLayerListElement [ layerListElement layers: self layers. - self addChildFirst: layerListElement + self inUIProcessDo: [ self addChildFirst: layerListElement ] ] { #category : #'strategy management' } From 88dd4a04e4af43da5a7eef6fd73a8beaf322ef29 Mon Sep 17 00:00:00 2001 From: Pierre Laborde Date: Thu, 19 Mar 2026 11:36:22 +0100 Subject: [PATCH 2/4] change method protocol From adc639dbe13a6f8879a513599fce0a2352333d13 Mon Sep 17 00:00:00 2001 From: Pierre Laborde Date: Thu, 19 Mar 2026 11:36:45 +0100 Subject: [PATCH 3/4] Change method protocol --- src/GeoView/GeoViewAbstractElement.class.st | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/GeoView/GeoViewAbstractElement.class.st b/src/GeoView/GeoViewAbstractElement.class.st index 5b452f1..828cea0 100644 --- a/src/GeoView/GeoViewAbstractElement.class.st +++ b/src/GeoView/GeoViewAbstractElement.class.st @@ -162,6 +162,16 @@ GeoViewAbstractElement >> applyDisplayFilterToAllLayers: aDisplayFilter [ thenDo: [ :l | l displayFilter: aDisplayFilter ] ] +{ #category : #'api - space' } +GeoViewAbstractElement >> attachSpace [ + + super attachSpace. + + "send message to all layers" + self layerListMutex criticalReleasingOnError: [ + self layers do: [ :e | e addedToScene: self ] ] +] + { #category : #'API -- scale and center' } GeoViewAbstractElement >> centerOnGlobalPoint: aGlobalPoint [ "Center the map on a global point" @@ -232,6 +242,16 @@ GeoViewAbstractElement >> defaultScale [ ^ self normalizeScale: self class defaultScale ] +{ #category : #'api - space' } +GeoViewAbstractElement >> detachSpace [ + + super detachSpace. + + "send message to all layers" + self layerListMutex criticalReleasingOnError: [ + self layers do: [ :e | e removedFromScene: self ] ] +] + { #category : #'API -- filters' } GeoViewAbstractElement >> displayFilter [ From e544c7d14367ca24019180ab272ee4c6dfc01d47 Mon Sep 17 00:00:00 2001 From: Pierre Laborde Date: Thu, 19 Mar 2026 14:50:07 +0100 Subject: [PATCH 4/4] Remove no necessary test --- src/GeoView-Tests/GeoViewInfosTest.class.st | 28 --------------------- 1 file changed, 28 deletions(-) delete mode 100644 src/GeoView-Tests/GeoViewInfosTest.class.st diff --git a/src/GeoView-Tests/GeoViewInfosTest.class.st b/src/GeoView-Tests/GeoViewInfosTest.class.st deleted file mode 100644 index 2f3f46b..0000000 --- a/src/GeoView-Tests/GeoViewInfosTest.class.st +++ /dev/null @@ -1,28 +0,0 @@ -" -A GeoViewInfosTest is a test class for testing the behavior of GeoViewInfos -" -Class { - #name : #GeoViewInfosTest, - #superclass : #TestCase, - #category : #'GeoView-Tests-Core' -} - -{ #category : #tests } -GeoViewInfosTest >> testInitialize [ - - | infos | - infos := GeoViewInfos new. - self assert: infos extent equals: 0@0. - self assert: infos origin equals: 0@0. - self assert: infos center equals: 0@0. - self assert: infos width equals: 0. - self assert: infos height equals: 0. -] - -{ #category : #tests } -GeoViewInfosTest >> testupdate [ - - | infos | - infos := GeoViewInfos new. - infos update. -]