@@ -75,6 +75,15 @@ GMTEEditor class >> getVisibilityIndicator: aBoolean [
75
75
ifFalse: [^ ' (h)' ]
76
76
]
77
77
78
+ {
79
+ #category : #' as yet unclassified' ,
80
+ #' squeak_changestamp' : ' tw 7/12/2024 18:33'
81
+ }
82
+ GMTEEditor class >> hLayoutFrame: intI ofN: intN [
83
+
84
+ ^ self hLayoutFrame: intI ofN: intN vSymmetric: 0
85
+ ]
86
+
78
87
{
79
88
#category : #' as yet unclassified' ,
80
89
#' squeak_changestamp' : ' tw 7/11/2024 17:03'
@@ -253,6 +262,35 @@ GMTEEditor class >> toolBarVSpace [
253
262
^ 0.1
254
263
]
255
264
265
+ {
266
+ #category : #' as yet unclassified' ,
267
+ #' squeak_changestamp' : ' tw 7/12/2024 18:33'
268
+ }
269
+ GMTEEditor class >> vLayoutFrame: intI ofN: intN [
270
+
271
+ ^ self vLayoutFrame: intI ofN: intN hSymmetric: 0
272
+ ]
273
+
274
+ {
275
+ #category : #' as yet unclassified' ,
276
+ #' squeak_changestamp' : ' tw 7/12/2024 18:26'
277
+ }
278
+ GMTEEditor class >> vLayoutFrame: intI ofN: intN hLeft: aFloat right: anotherFloat [
279
+
280
+ " useful for building buttons, maybe move this to instance? TODO FLAG"
281
+
282
+ ^ LayoutFrame fractions: ((aFloat @ (intI - 1 / intN)) corner: (1 - anotherFloat @ (intI / intN)))
283
+ ]
284
+
285
+ {
286
+ #category : #' as yet unclassified' ,
287
+ #' squeak_changestamp' : ' tw 7/12/2024 18:26'
288
+ }
289
+ GMTEEditor class >> vLayoutFrame: intI ofN: intN hSymmetric: aFloat [
290
+
291
+ ^ self vLayoutFrame: intI ofN: intN hLeft: aFloat right: aFloat
292
+ ]
293
+
256
294
{
257
295
#category : #' command processing' ,
258
296
#' squeak_changestamp' : ' Valentin Teutschbein 7/6/2024 11:56'
@@ -327,11 +365,11 @@ GMTEEditor >> associatedMorph [
327
365
328
366
{
329
367
#category : #accessing ,
330
- #' squeak_changestamp' : ' TW 6/25 /2024 15:55 '
368
+ #' squeak_changestamp' : ' mcjj 7/12 /2024 19:38 '
331
369
}
332
370
GMTEEditor >> associatedMorph: anObject [
333
371
334
- associatedMorph := anObject.
372
+ associatedMorph := anObject
335
373
]
336
374
337
375
{
@@ -403,22 +441,22 @@ GMTEEditor >> brushButtons [
403
441
404
442
{
405
443
#category : #accessing ,
406
- #' squeak_changestamp' : ' TW 7/9 /2024 18:19 '
444
+ #' squeak_changestamp' : ' mcjj 7/12 /2024 19:38 '
407
445
}
408
446
GMTEEditor >> brushButtons: anObject [
409
447
410
- brushButtons := anObject.
448
+ brushButtons := anObject
411
449
]
412
450
413
451
{
414
452
#category : #building ,
415
- #' squeak_changestamp' : ' mcjj 7/11 /2024 16:15 '
453
+ #' squeak_changestamp' : ' JS 7/12 /2024 18:20 '
416
454
}
417
455
GMTEEditor >> buildWith: builder [
418
456
" builds the editor with ToolBuilder"
419
457
" called it builder instead of aBuilder since every other implementation does that"
420
458
421
- | newMorph selectedTile panel |
459
+ | newMorph panel |
422
460
" TODO: Build process contains a lot of magic numbers regarding relative/absolute positioning"
423
461
newMorph := builder build: (builder pluggableWindowSpec new
424
462
model: self ;
@@ -447,15 +485,7 @@ GMTEEditor >> buildWith: builder [
447
485
panel := GMTETileContainer withParent: self tileStore.
448
486
self tileStore morph: panel.
449
487
450
- selectedTile := GMTETileSelector new
451
- visible: false ;
452
- model: self ;
453
- yourself .
454
-
455
- " TODO: Work in progress."
456
- self trayViewer morph: GMTETileTray new .
457
- self trayViewer morph
458
- addMorph: selectedTile.
488
+ self placeSelectedTileIntoTileTray.
459
489
460
490
self tileViewer
461
491
borderWidth: 2 ;
@@ -574,30 +604,37 @@ GMTEEditor >> createAttributeSpecWithBuilder: aBuilder descriptor: aString gette
574
604
575
605
{
576
606
#category : #building ,
577
- #' squeak_changestamp' : ' TW 7/9 /2024 17:28 '
607
+ #' squeak_changestamp' : ' tw 7/12 /2024 18:57 '
578
608
}
579
609
GMTEEditor >> createAttributeSpecWithBuilder: aBuilder descriptor: aString getter: aSelector setter: anotherSelector model: aModel frame: aFrame [
580
610
" a helper function to create attribute specs"
581
611
582
- ^ self withMorphOf: ((aBuilder pluggablePanelSpec new )
612
+ | minTextWidth minInputWidth |
613
+ minTextWidth := (TextStyle defaultFont approxWidthOfText: aString asText).
614
+ minInputWidth := (TextStyle defaultFont approxWidthOfText: ' 1234' asText).
615
+
616
+ ^ (aBuilder pluggablePanelSpec new )
617
+ name: ' attributeContainer' ;
583
618
frame: aFrame;
584
619
layout: #proportional ;
620
+ minimumWidth: minTextWidth + minInputWidth;
585
621
children: {
586
622
(aBuilder pluggableStaticTextSpec new )
587
623
model: aModel;
588
- frame: (LayoutFrame fractions: (0 @ 0 corner: (2 / 3 ) @ 1 ));
589
- text: aString.
624
+ frame: (LayoutFrame fractions: (0 @ 0 corner: 2 / 3 @ 1 ));
625
+ text: aString;
626
+ minimumWidth: minTextWidth.
627
+
590
628
591
629
(aBuilder pluggableInputFieldSpec new )
592
630
model: aModel;
593
631
indicateUnacceptedChanges: false ;
594
- frame: (LayoutFrame fractions: (((2 / 3 ) + 0.1 ) @ 0 corner: 1 @ 1 ));
595
- minimumExtent: 45 @30 ;
632
+ frame: (LayoutFrame fractions: (2 / 3 @ 0 corner: 1 @ 1 ));
596
633
getText: aSelector;
597
- setText: anotherSelector
634
+ setText: anotherSelector;
635
+ minimumWidth: minInputWidth
598
636
};
599
- yourself ) do: [:morph |
600
- morph layoutPolicy: TableLayout new ]
637
+ yourself
601
638
]
602
639
603
640
{
@@ -647,27 +684,23 @@ GMTEEditor >> createCommandBarSpecWithBuilder: aBuilder [
647
684
648
685
{
649
686
#category : #building ,
650
- #' squeak_changestamp' : ' tw 7/11 /2024 17:48 '
687
+ #' squeak_changestamp' : ' tw 7/12 /2024 19:01 '
651
688
}
652
689
GMTEEditor >> createInspectorSpecWithBuilder: aBuilder [
653
690
" creates the spec for the inspector tab"
654
691
655
- ^ aBuilder pluggableScrollPaneSpec new
692
+ ^ aBuilder pluggablePanelSpec new
656
693
frame: (LayoutFrame fractions: (0.8 @ 0 corner: 1 @ 0.25 )
657
694
offsets: (0 @ 30 corner: 0 @ 30 ));
658
- padding: (Rectangle left: 3 right: 0 top: 0 bottom: 0 );
659
- hScrollBarPolicy: #never ;
660
- layout: #vertical ;
661
695
name: ' inspector' ;
662
696
children: {
663
- self createAttributeSpecWithBuilder: aBuilder descriptor: ' Padding:' getter: #getPaddingAsString setter: #setPadding: model: self .
697
+ self createAttributeSpecWithBuilder: aBuilder descriptor: ' Padding:' getter: #getPaddingAsString setter: #setPadding: model: self frame: ( GMTEEditor vLayoutFrame: 1 ofN: 3 ) .
664
698
665
- self createAttributeSpecWithBuilder: aBuilder descriptor: ' Grid Width:' getter: #getGridWidthAsString setter: #setGridWidth: model: self .
666
-
667
- self createAttributeSpecWithBuilder: aBuilder descriptor: ' Grid Height:' getter: #getGridHeightAsString setter: #setGridHeight: model: self
699
+ self createAttributeSpecWithBuilder: aBuilder descriptor: ' Grid Width:' getter: #getGridWidthAsString setter: #setGridWidth: model: self frame: ( GMTEEditor vLayoutFrame: 2 ofN: 3 ) .
700
+
701
+ self createAttributeSpecWithBuilder: aBuilder descriptor: ' Grid Height:' getter: #getGridHeightAsString setter: #setGridHeight: model: self frame: ( GMTEEditor vLayoutFrame: 3 ofN: 3 )
668
702
};
669
- verticalResizing: #shrinkWrap ;
670
- horizontalResizing: #shrinkWrap ;
703
+ minimumWidth: (self getMaximalLengthOfStrings: (OrderedCollection newFrom: {' Padding:' . ' Grid Width:' . ' Grid Height:' }));
671
704
yourself
672
705
]
673
706
@@ -1071,11 +1104,12 @@ GMTEEditor >> exportMenu [
1071
1104
1072
1105
{
1073
1106
#category : #' input handling' ,
1074
- #' squeak_changestamp' : ' mcjj 7/12/2024 17:12 '
1107
+ #' squeak_changestamp' : ' mcjj 7/12/2024 19:34 '
1075
1108
}
1076
1109
GMTEEditor >> filterEvent: aKeyboardEvent for: anObject [
1077
- | key |
1110
+ " handles keyboard shortcuts "
1078
1111
1112
+ | key |
1079
1113
aKeyboardEvent isKeystroke
1080
1114
ifFalse: [^ aKeyboardEvent].
1081
1115
@@ -1088,7 +1122,6 @@ GMTEEditor >> filterEvent: aKeyboardEvent for: anObject [
1088
1122
[$o] - > [self importFromTileset].
1089
1123
[$g] - > [self toggleGrid].
1090
1124
[$h] - > [self toggleBackgroundTiles].
1091
- [$r] - > [self rotateSelectedTile].
1092
1125
1093
1126
[$a] - > [self addLayer].
1094
1127
[$n] - > [self renameLayer].
@@ -1099,6 +1132,7 @@ GMTEEditor >> filterEvent: aKeyboardEvent for: anObject [
1099
1132
1100
1133
[$z] - > [self undo].
1101
1134
[$y] - > [self redo].
1135
+ [$r] - > [self rotateSelectedTile].
1102
1136
[$1 ] - > [self selectRadiusBrush].
1103
1137
[$2 ] - > [self selectLineBrush].
1104
1138
[$3 ] - > [self selectFillBrush].
@@ -1195,6 +1229,15 @@ GMTEEditor >> getLayerList [
1195
1229
^ self tileMap tileMatrixStack collectLayers: [:aLayer | aLayer displayName, (GMTEEditor getVisibilityIndicator: aLayer visible)]
1196
1230
]
1197
1231
1232
+ {
1233
+ #category : #helper ,
1234
+ #' squeak_changestamp' : ' tw 7/12/2024 19:01'
1235
+ }
1236
+ GMTEEditor >> getMaximalLengthOfStrings: anOrderedCollection [
1237
+
1238
+ ^ (anOrderedCollection collect: [:aString | TextStyle defaultFont approxWidthOfText: aString asText]) max
1239
+ ]
1240
+
1198
1241
{
1199
1242
#category : #accessing ,
1200
1243
#' squeak_changestamp' : ' jj 6/22/2024 20:54'
@@ -1669,6 +1712,24 @@ GMTEEditor >> parseSize: aText [
1669
1712
[^ aText asNumber] on: NumberParserError do: [^ nil ]
1670
1713
]
1671
1714
1715
+ {
1716
+ #category : #building ,
1717
+ #' squeak_changestamp' : ' JS 7/12/2024 18:20'
1718
+ }
1719
+ GMTEEditor >> placeSelectedTileIntoTileTray [
1720
+
1721
+ | selectedTile |
1722
+ selectedTile := GMTETileSelector new
1723
+ visible: false ;
1724
+ name: ' selectedTile' ;
1725
+ model: self ;
1726
+ yourself .
1727
+
1728
+ self trayViewer morph
1729
+ color: Color transparent;
1730
+ addMorph: selectedTile
1731
+ ]
1732
+
1672
1733
{
1673
1734
#category : #accessing ,
1674
1735
#' squeak_changestamp' : ' jj 6/22/2024 21:27'
@@ -1929,7 +1990,7 @@ GMTEEditor >> selectRectangleBrush [
1929
1990
1930
1991
{
1931
1992
#category : #accessing ,
1932
- #' squeak_changestamp' : ' Alex M 7/9 /2024 15:25 '
1993
+ #' squeak_changestamp' : ' JS 7/12 /2024 18:12 '
1933
1994
}
1934
1995
GMTEEditor >> selectTile: anObject [
1935
1996
" selects a tile from the tile store"
@@ -1940,7 +2001,7 @@ GMTEEditor >> selectTile: anObject [
1940
2001
ifFalse: [
1941
2002
self selectedTile: anObject fullResolutionSprite.
1942
2003
self tileMap tileSelectionSet highlightImage: anObject fullResolutionSprite.
1943
- self trayViewer morph submorphs first
2004
+ ( self trayViewer morph submorphNamed: ' selectedTile ' )
1944
2005
visible: true ;
1945
2006
updateSprite: anObject fullResolutionSprite;
1946
2007
extent: 75 @75 ]
0 commit comments