From 27124572bd441213ce1af1427cb48a6587c213ad Mon Sep 17 00:00:00 2001 From: Thomas Wolf Date: Tue, 25 Jun 2024 17:45:58 +0200 Subject: [PATCH 1/3] fixxed bug --- source/GM-TE/GMTEEditor.class.st | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/source/GM-TE/GMTEEditor.class.st b/source/GM-TE/GMTEEditor.class.st index f0c9b6c5..c8f1eef1 100644 --- a/source/GM-TE/GMTEEditor.class.st +++ b/source/GM-TE/GMTEEditor.class.st @@ -695,19 +695,23 @@ GMTEEditor >> deselectTile [ { #category : #'as yet unclassified', - #'squeak_changestamp' : 'TW 6/25/2024 15:57' + #'squeak_changestamp' : 'TW 6/25/2024 17:44' } GMTEEditor >> disableSingleLayerButtons [ + self associatedMorph ifNil: [^ nil]. + GMTEEditor singleLayerActionNames do: [:aString | (self associatedMorph submorphNamed: aString) enabled: false ] ] { #category : #'as yet unclassified', - #'squeak_changestamp' : 'TW 6/25/2024 15:57' + #'squeak_changestamp' : 'TW 6/25/2024 17:43' } GMTEEditor >> enableSingleLayerButtons [ + self associatedMorph ifNil: [^ nil]. + GMTEEditor singleLayerActionNames do: [:aString | (self associatedMorph submorphNamed: aString) enabled: true ] ] @@ -951,14 +955,15 @@ GMTEEditor >> importMenu [ { #category : #initialization, - #'squeak_changestamp' : 'TW 6/25/2024 17:08' + #'squeak_changestamp' : 'TW 6/25/2024 17:39' } GMTEEditor >> initialize [ "starts the tile editor" super initialize. self - selectedLayers: {1}; + selectedLayers: Set new; + selectLayer: 1; morphBuilders: Dictionary new; open; ratio: 1; @@ -1395,7 +1400,7 @@ GMTEEditor >> selectOnlyLayer: anIndex [ { #category : #accessing, - #'squeak_changestamp' : 'jj 6/24/2024 11:33' + #'squeak_changestamp' : 'TW 6/25/2024 17:38' } GMTEEditor >> selectTile: anObject [ "selects a tile from the tile store" From 76ca066e814630cac694f63d1f5a64a15298dbe6 Mon Sep 17 00:00:00 2001 From: Thomas Wolf Date: Tue, 25 Jun 2024 17:54:45 +0200 Subject: [PATCH 2/3] trash button now grey when layer 1 selected --- source/GM-TE/GMTEEditor.class.st | 38 +++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/source/GM-TE/GMTEEditor.class.st b/source/GM-TE/GMTEEditor.class.st index c8f1eef1..53a9c409 100644 --- a/source/GM-TE/GMTEEditor.class.st +++ b/source/GM-TE/GMTEEditor.class.st @@ -664,7 +664,7 @@ GMTEEditor >> deselectAllLayers [ { #category : #accessing, - #'squeak_changestamp' : 'TW 6/25/2024 16:02' + #'squeak_changestamp' : 'TW 6/25/2024 17:50' } GMTEEditor >> deselectLayer: anIndex [ "deletes the layer with the provided index" @@ -674,7 +674,7 @@ GMTEEditor >> deselectLayer: anIndex [ (self selectedLayers includes: anIndex) ifTrue: [ self selectedLayers remove: anIndex. - self singleLayerSelected ifTrue: [self enableSingleLayerButtons]. + self updateButtonEnabled. self changed: #selectedLayers; changed: #layerAt:] @@ -695,23 +695,19 @@ GMTEEditor >> deselectTile [ { #category : #'as yet unclassified', - #'squeak_changestamp' : 'TW 6/25/2024 17:44' + #'squeak_changestamp' : 'TW 6/25/2024 17:51' } GMTEEditor >> disableSingleLayerButtons [ - self associatedMorph ifNil: [^ nil]. - GMTEEditor singleLayerActionNames do: [:aString | (self associatedMorph submorphNamed: aString) enabled: false ] ] { #category : #'as yet unclassified', - #'squeak_changestamp' : 'TW 6/25/2024 17:43' + #'squeak_changestamp' : 'TW 6/25/2024 17:51' } GMTEEditor >> enableSingleLayerButtons [ - self associatedMorph ifNil: [^ nil]. - GMTEEditor singleLayerActionNames do: [:aString | (self associatedMorph submorphNamed: aString) enabled: true ] ] @@ -955,7 +951,7 @@ GMTEEditor >> importMenu [ { #category : #initialization, - #'squeak_changestamp' : 'TW 6/25/2024 17:39' + #'squeak_changestamp' : 'TW 6/25/2024 17:51' } GMTEEditor >> initialize [ "starts the tile editor" @@ -968,6 +964,7 @@ GMTEEditor >> initialize [ open; ratio: 1; savedSinceModified: true; + updateButtonEnabled; changed: #getLayerList ] @@ -1370,15 +1367,13 @@ GMTEEditor >> selectAllLayers [ { #category : #accessing, - #'squeak_changestamp' : 'TW 6/25/2024 17:01' + #'squeak_changestamp' : 'TW 6/25/2024 17:50' } GMTEEditor >> selectLayer: anIndex [ "select the layer with anIndex" self selectedLayers add: anIndex. - self singleLayerSelected - ifTrue: [self enableSingleLayerButtons] - ifFalse: [self disableSingleLayerButtons]. + self updateButtonEnabled. self changed: #selectedLayers; changed: #layerAt: @@ -1682,6 +1677,23 @@ GMTEEditor >> unselectTile [ self trayViewer morph submorphs first visible: false ] +{ + #category : #'as yet unclassified', + #'squeak_changestamp' : 'TW 6/25/2024 17:51' +} +GMTEEditor >> updateButtonEnabled [ + + self associatedMorph ifNil: [^ nil]. + + self singleLayerSelected + ifTrue: [self enableSingleLayerButtons] + ifFalse: [self disableSingleLayerButtons]. + + (self layerAt: 1) + ifTrue: [(self associatedMorph submorphNamed: 'buttonDeleteLayers') enabled: false] + ifFalse: [(self associatedMorph submorphNamed: 'buttonDeleteLayers') enabled: true] +] + { #category : #building, #'squeak_changestamp' : 'jj 6/23/2024 13:45' From b176a1531b05974fcc17790eb0340470f58d398d Mon Sep 17 00:00:00 2001 From: Joshua Date: Tue, 25 Jun 2024 18:03:51 +0200 Subject: [PATCH 3/3] gute Testarchitektur --- .../instance/testMoveLayerDown.st | 8 ++++---- .../instance/testMoveLayerUp.st | 8 ++++---- .../instance/testSwapLayer.st | 8 ++++---- .../instance/testToggleHighlightingLayer.st | 8 ++++++++ .../methodProperties.json | 12 ++++++------ testMapFile.morph | Bin 26594 -> 28270 bytes 6 files changed, 26 insertions(+), 18 deletions(-) create mode 100644 source/GM-Test.package/GMTileEditorTest.class/instance/testToggleHighlightingLayer.st diff --git a/source/GM-Test.package/GMTileEditorTest.class/instance/testMoveLayerDown.st b/source/GM-Test.package/GMTileEditorTest.class/instance/testMoveLayerDown.st index 63d2544d..9a12437a 100644 --- a/source/GM-Test.package/GMTileEditorTest.class/instance/testMoveLayerDown.st +++ b/source/GM-Test.package/GMTileEditorTest.class/instance/testMoveLayerDown.st @@ -6,10 +6,10 @@ testMoveLayerDown tileMatrixStack:= self editor tileMap tileMatrixStack. self editor addLayer. layer1 := tileMatrixStack matrixLayers at: 1. - layerId1 := (tileMatrixStack matrixLayers at: 1) layerIdx. - layerId2 := (tileMatrixStack matrixLayers at: 2) layerIdx. + layerId1 := (tileMatrixStack matrixLayers at: 1) layerIndex. + layerId2 := (tileMatrixStack matrixLayers at: 2) layerIndex. self editor moveLayerDown. - self assert: (tileMatrixStack matrixLayers at: 1) layerIdx = layerId1. - self assert: (tileMatrixStack matrixLayers at: 2) layerIdx = layerId2. + self assert: (tileMatrixStack matrixLayers at: 1) layerIndex = layerId1. + self assert: (tileMatrixStack matrixLayers at: 2) layerIndex = layerId2. self assert: (tileMatrixStack matrixLayers at: 2) == layer1. self assert: ((tileMatrixStack matrixLayers at: 1) == layer1) not \ No newline at end of file diff --git a/source/GM-Test.package/GMTileEditorTest.class/instance/testMoveLayerUp.st b/source/GM-Test.package/GMTileEditorTest.class/instance/testMoveLayerUp.st index 1a5e7253..8106c92b 100644 --- a/source/GM-Test.package/GMTileEditorTest.class/instance/testMoveLayerUp.st +++ b/source/GM-Test.package/GMTileEditorTest.class/instance/testMoveLayerUp.st @@ -6,11 +6,11 @@ testMoveLayerUp tileMatrixStack:= self editor tileMap tileMatrixStack. self editor addLayer. layer1 := tileMatrixStack matrixLayers at: 1. - layerId1 := (tileMatrixStack matrixLayers at: 1) layerIdx. - layerId2 := (tileMatrixStack matrixLayers at: 2) layerIdx. + layerId1 := (tileMatrixStack matrixLayers at: 1) layerIndex. + layerId2 := (tileMatrixStack matrixLayers at: 2) layerIndex. self editor selectOnlyLayer: 1. self editor moveLayerUp. - self assert: (tileMatrixStack matrixLayers at: 1) layerIdx = layerId1. - self assert: (tileMatrixStack matrixLayers at: 2) layerIdx = layerId2. + self assert: (tileMatrixStack matrixLayers at: 1) layerIndex = layerId1. + self assert: (tileMatrixStack matrixLayers at: 2) layerIndex = layerId2. self assert: (tileMatrixStack matrixLayers at: 2) == layer1. self assert: ((tileMatrixStack matrixLayers at: 1) == layer1) not \ No newline at end of file diff --git a/source/GM-Test.package/GMTileEditorTest.class/instance/testSwapLayer.st b/source/GM-Test.package/GMTileEditorTest.class/instance/testSwapLayer.st index 75d6143b..9be03a1c 100644 --- a/source/GM-Test.package/GMTileEditorTest.class/instance/testSwapLayer.st +++ b/source/GM-Test.package/GMTileEditorTest.class/instance/testSwapLayer.st @@ -6,10 +6,10 @@ testSwapLayer TileMatrixStack:= self editor tileMap tileMatrixStack. self editor addLayer. layer1 := TileMatrixStack matrixLayers at: 1. - layerId1 := (TileMatrixStack matrixLayers at: 1) layerIdx. - layerId2 := (TileMatrixStack matrixLayers at: 2) layerIdx. + layerId1 := (TileMatrixStack matrixLayers at: 1) layerIndex. + layerId2 := (TileMatrixStack matrixLayers at: 2) layerIndex. TileMatrixStack swapLayer: 1 with: 2. - self assert: (TileMatrixStack matrixLayers at: 1) layerIdx = layerId1. - self assert: (TileMatrixStack matrixLayers at: 2) layerIdx = layerId2. + self assert: (TileMatrixStack matrixLayers at: 1) layerIndex = layerId1. + self assert: (TileMatrixStack matrixLayers at: 2) layerIndex = layerId2. self assert: (TileMatrixStack matrixLayers at: 2) == layer1. self assert: ((TileMatrixStack matrixLayers at: 1) == layer1) not \ No newline at end of file diff --git a/source/GM-Test.package/GMTileEditorTest.class/instance/testToggleHighlightingLayer.st b/source/GM-Test.package/GMTileEditorTest.class/instance/testToggleHighlightingLayer.st new file mode 100644 index 00000000..9e56ebea --- /dev/null +++ b/source/GM-Test.package/GMTileEditorTest.class/instance/testToggleHighlightingLayer.st @@ -0,0 +1,8 @@ +layerTests +testToggleHighlightingLayer + "tests the visibility toggle for the visual layer" + + self editor toggleGrid. + self assert: (self editor tileMap tileMatrixStackHighlighting layer: 1) visible = false. + self editor toggleGrid. + self assert: (self editor tileMap tileMatrixStackHighlighting layer: 1) visible = true \ No newline at end of file diff --git a/source/GM-Test.package/GMTileEditorTest.class/methodProperties.json b/source/GM-Test.package/GMTileEditorTest.class/methodProperties.json index ee9b924a..d12db844 100644 --- a/source/GM-Test.package/GMTileEditorTest.class/methodProperties.json +++ b/source/GM-Test.package/GMTileEditorTest.class/methodProperties.json @@ -9,7 +9,7 @@ "fileUUID:" : "jj 6/22/2024 16:55", "loadTestMapFileToFileDirectory" : "JS 6/23/2024 18:18", "setUp" : "jj 6/23/2024 18:55", - "setup" : " 6/24/2024 10:17:32", + "setup" : "6/24/2024 10:17:32", "tearDown" : "jj 6/22/2024 20:24", "testAddLayerButton" : "JS 6/24/2024 00:19", "testDeleteLayer" : "jj 6/22/2024 20:25", @@ -18,12 +18,12 @@ "testExport" : "jj 6/23/2024 19:02", "testExportButton" : "jj 6/22/2024 20:28", "testImportButton" : "jj 6/22/2024 20:28", - "testMoveLayerDown" : "jj 6/22/2024 20:31", - "testMoveLayerUp" : "jj 6/22/2024 20:31", + "testMoveLayerDown" : "JS 6/25/2024 18:02", + "testMoveLayerUp" : "JS 6/25/2024 18:02", "testMultiDeleteLayer" : "jj 6/22/2024 20:31", "testMultiToggleLayerVisibility" : "jj 6/22/2024 20:34", "testRenameLayer" : "JS 6/24/2024 00:15", "testRescaleMap" : "jj 6/22/2024 20:32", - "testSwapLayer" : "jj 6/22/2024 20:33", - "testToggleLayerVisibility" : "jj 6/22/2024 20:34", - "testToggleHighlightingLayer" : "jj 6/22/2024 20:34" } } + "testSwapLayer" : "JS 6/25/2024 18:03", + "testToggleHighlightingLayer" : "jj 6/22/2024 20:34", + "testToggleLayerVisibility" : "jj 6/22/2024 20:34" } } diff --git a/testMapFile.morph b/testMapFile.morph index 9997ee99d17308cdbc61f8ee2b68ddaba7acf89c..14d6c90c41414de90a9cf22854b797c0fde48351 100644 GIT binary patch literal 28270 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