The Trunk: EToys-mt.445.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: EToys-mt.445.mcz

commits-2
Marcel Taeumel uploaded a new version of EToys to project The Trunk:
http://source.squeak.org/trunk/EToys-mt.445.mcz

==================== Summary ====================

Name: EToys-mt.445
Author: mt
Time: 29 April 2021, 11:00:13.160891 am
UUID: 52e9dd0f-9312-b14c-9c5e-e70fe689d457
Ancestors: EToys-mt.444

Move BroomMorphs to the "Connectors" project ... where they already are! :-O So, resolve conflicts between Connectors and Etoys when loading Connectors into Squeak.

=============== Diff against EToys-mt.444 ===============

Item was removed:
- Morph subclass: #BroomMorph
- instanceVariableNames: 'centered drawBroomIcon filter hotspot lastHotspot moved span start transient unmoved width'
- classVariableNames: 'BroomIcon'
- poolDictionaries: ''
- category: 'Etoys-Squeakland-BroomMorphs-Base'!
-
- !BroomMorph commentStamp: 'nk 7/24/2003 15:15' prior: 0!
- This is a Morph (actually a family of Morphs) that do alignment of other morphs.
-
- BroomMorphs become: an object of one of their subclasses when dragged far enough.
-
- Drag a BroomMorph in some direction and it becomes a broom that can align the Morphs it touches.
-
- This idea is borrowed from the GEF framework (http://gef.tigris.org)
-
- If you want to pick up a BroomMorph, you can use the Shift key.
-
- Hitting the ESC key will re-position all moved Morphs to their original position.
-
- BroomMorph newTransient will give you a BroomMorph that will delete itself on mouse up.
-
- unmoved the set of Morphs that I won't move
- moved the set of Morphs that I might move
- start my first hotspot
- span how wide to make (each half of) my bar initially
- width the width of the main lines
- hotspot my active position
- lastHotspot my last active position
- drawBroomIcon true if I look like a broom while idle (false=look like a +)
- transient if true, then I delete myself on mouse-up
- !

Item was removed:
- ----- Method: BroomMorph class>>broomIcon (in category 'icons') -----
- broomIcon
- "BroomMorph broomIcon openAsMorph"
- ^BroomIcon ifNil: [ BroomIcon := ((ColorForm
- extent: 48@48
- depth: 8
- fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294965235 2123104255 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294289468 792571391 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4250474910 4268775935 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4281003980 4040445339 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 3558577510 3456013868 3305111551 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4119016581 1223753318 1509949439 4294967295 429
 4967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294325096 1601695446 905969663 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294953525 2688143356 2354708479 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967163 1386041086 3779953919 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967294 730230149 4272828159 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4280259150 3556661084 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4284369021 1626460469 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294927207 1420492426 1308622847 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4
 294967295 4294967295 4294937190 2120285430 1165885439 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294957119 1936237296 3090939903 4294967295 4294967295 4294967295 1314410239 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 980114393 4199311359 4294967295 4294967295 4294922751 3468260930 1409286143 4294967295 4294967295 4294967295 4294967295 4294967295 1985634676 4278069247 4294967295 4294967295 822072038 4259577561 1764753407 4294967295 4294967295 4294967295 4294967295 4294967295 3629150295 2650507588 4294967295 4294915958 3355115262 4143841013 4272170751 4294967295 4294967295 4294967295 4294967295 4294967295 4294926694 1526660645 2147418111 811775466 4278123248 4110024186 4209802495 4294967295 4294967295 4294967295 4294967295 4294967295 4291518587 1401683663 331415327 2949970174 4142920702 4261016571 4278113279 4294967295 4294967295 4294967295 4294967295 4294967295 4294967126 2521018110 1564595145 4177130745 4
 177394940 4226481918 3875468850 4294967295 4294967295 4294967295 4294967295 4294967295 4294966641 1818781950 4128018932 4227464691 4260888054 4193844470 4278022746 4294967295 4294967295 4294967295 4294967295 4294967295 4294957251 1082604973 4103079930 4227659000 4260949757 4260625918 4151583689 4294967295 4294967295 4294967295 4294967295 4294967295 4294966523 2254399056 4275306750 4259969533 4126735860 4160027632 1714067961 4294967295 4294967295 4294967295 4294967295 4294967295 3774129236 3427224966 2232244218 4009623029 4143840757 4227709222 1704204739 4294967295 4294967295 4294967295 4294967295 4294967281 3329305219 4274147615 459535614 4261278453 4260753150 4270732152 2132872703 4294967295 4294967295 4294967295 4294967295 4294966951 995344887 3891984632 4244567550 4260690427 4076796361 1799391336 17564460 4294967295 4294967295 4294967295 4294967295 4274153014 2180382453 4261084157 4175822318 4059954686 4277316954 1602381320 643309831 4294967295 4294967295 4294967295 4294967282 28
 23377603 3942511613 4142661107 4260624381 4261016062 4052699741 2049901056 391839597 4294967295 4294967295 4294967295 4294894196 747109878 4260689915 4210947065 4260953586 4177395136 1851158651 553648145 1599406079 4294967295 4294967295 4294967295 4256715083 3203923193 4177133041 4210883322 4244305914 4244547905 1487161345 330496 2227240959 4294967295 4294967295 4294967295 4280716212 4160615158 4244110584 4261214970 4261280247 4135604607 2017591306 728003705 1908998143 4294967295 4294967295 4294967257 2301731170 4093376766 4277467390 4259968509 3959291337 1415802972 571015178 360829128 4294967295 4294967295 4294967295 4294967254 1790591001 4244501995 4093310961 4160159230 4126914352 2004436244 50331652 659736575 4294967295 4294967295 4294967295 4294967238 1761476611 2144730878 4160683517 4143772670 4203101036 1849950720 34150400 1526726655 4294967295 4294967295 4294967295 4294967245 1806603524 512422141 4177326578 4261346478 1567853403 419430418 27790 2499805183 4294967295 429496729
 5 4294967295 4294967295 2251944828 416179 4143369424 4142962521 2121937418 218103943 3075177727 4294967295 4294967295 4294967295 4294967295 4294967295 4030225866 2973499918 708410107 3394655628 1595344640 292229396 3218276351 4294967295 4294967295 4294967295 4294967295 3741319167 4292174133 2024384681 2646072943 1099787826 335808768 24831321 1996488703 4294967295 4294967295 4294967295 4294967295 4294967295 4294960585 1731939648 1162880122 2488537608 262165 842649087 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967246 4257768094 2930289509 420675584 173165056 1442840575 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4291847681 17632000 100663398 1027537151 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4290903836 152109071 5575935 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294954239 1392579628 436207615 4294967295 4294967295 42949672
 95 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295)
- offset: 0@0)
- colorsFromArray: #(#(0.0 0.0 0.0) #(0.004 0.004 0.004) #(0.008 0.008 0.008) #(0.012 0.012 0.012) #(0.016 0.016 0.016) #(0.02 0.02 0.02) #(0.023 0.023 0.023) #(0.027 0.027 0.027) #(0.031 0.031 0.031) #(0.035 0.035 0.035) #(0.039 0.039 0.039) #(0.043 0.043 0.043) #(0.047 0.047 0.047) #(0.051 0.051 0.051) #(0.055 0.055 0.055) #(0.059 0.059 0.059) #(0.063 0.063 0.063) #(0.066 0.066 0.066) #(0.07 0.07 0.07) #(0.074 0.074 0.074) #(0.078 0.078 0.078) #(0.082 0.082 0.082) #(0.086 0.086 0.086) #(0.09 0.09 0.09) #(0.094 0.094 0.094) #(0.098 0.098 0.098) #(0.102 0.102 0.102) #(0.106 0.106 0.106) #(0.109 0.109 0.109) #(0.113 0.113 0.113) #(0.117 0.117 0.117) #(0.121 0.121 0.121) #(0.125 0.125 0.125) #(0.129 0.129 0.129) #(0.133 0.133 0.133) #(0.137 0.137 0.137) #(0.141 0.141 0.141) #(0.145 0.145 0.145) #(0.149 0.149 0.149) #(0.152 0.152 0.152) #(0.156 0.156 0.156) #(0.16 0.16 0.16) #(0.164 0.164 0.164) #(0.168 0.168 0.168) #(0.172 0.172 0.172) #(0.176 0.176 0.176) #(0.18 0.18 0.18) #(0.184 0.
 184 0.184) #(0.188 0.188 0.188) #(0.192 0.192 0.192) #(0.196 0.196 0.196) #(0.199 0.199 0.199) #(0.203 0.203 0.203) #(0.207 0.207 0.207) #(0.211 0.211 0.211) #(0.215 0.215 0.215) #(0.219 0.219 0.219) #(0.223 0.223 0.223) #(0.227 0.227 0.227) #(0.231 0.231 0.231) #(0.235 0.235 0.235) #(0.239 0.239 0.239) #(0.242 0.242 0.242) #(0.246 0.246 0.246) #(0.25 0.25 0.25) #(0.254 0.254 0.254) #(0.258 0.258 0.258) #(0.262 0.262 0.262) #(0.266 0.266 0.266) #(0.27 0.27 0.27) #(0.274 0.274 0.274) #(0.278 0.278 0.278) #(0.282 0.282 0.282) #(0.285 0.285 0.285) #(0.289 0.289 0.289) #(0.293 0.293 0.293) #(0.297 0.297 0.297) #(0.301 0.301 0.301) #(0.305 0.305 0.305) #(0.309 0.309 0.309) #(0.313 0.313 0.313) #(0.317 0.317 0.317) #(0.321 0.321 0.321) #(0.325 0.325 0.325) #(0.328 0.328 0.328) #(0.333 0.333 0.333) #(0.337 0.337 0.337) #(0.341 0.341 0.341) #(0.345 0.345 0.345) #(0.349 0.349 0.349) #(0.353 0.353 0.353) #(0.357 0.357 0.357) #(0.361 0.361 0.361) #(0.365 0.365 0.365) #(0.369 0.369 0.369) #(0.3
 72 0.372 0.372) #(0.376 0.376 0.376) #(0.38 0.38 0.38) #(0.384 0.384 0.384) #(0.388 0.388 0.388) #(0.392 0.392 0.392) #(0.396 0.396 0.396) #(0.4 0.4 0.4) #(0.404 0.404 0.404) #(0.408 0.408 0.408) #(0.412 0.412 0.412) #(0.415 0.415 0.415) #(0.419 0.419 0.419) #(0.423 0.423 0.423) #(0.427 0.427 0.427) #(0.431 0.431 0.431) #(0.435 0.435 0.435) #(0.439 0.439 0.439) #(0.443 0.443 0.443) #(0.447 0.447 0.447) #(0.451 0.451 0.451) #(0.455 0.455 0.455) #(0.458 0.458 0.458) #(0.462 0.462 0.462) #(0.466 0.466 0.466) #(0.47 0.47 0.47) #(0.474 0.474 0.474) #(0.478 0.478 0.478) #(0.482 0.482 0.482) #(0.486 0.486 0.486) #(0.49 0.49 0.49) #(0.494 0.494 0.494) #(0.498 0.498 0.498) #(0.501 0.501 0.501) #(0.505 0.505 0.505) #(0.509 0.509 0.509) #(0.513 0.513 0.513) #(0.517 0.517 0.517) #(0.521 0.521 0.521) #(0.525 0.525 0.525) #(0.529 0.529 0.529) #(0.533 0.533 0.533) #(0.537 0.537 0.537) #(0.541 0.541 0.541) #(0.544 0.544 0.544) #(0.548 0.548 0.548) #(0.552 0.552 0.552) #(0.556 0.556 0.556) #(0.56 0.
 56 0.56) #(0.564 0.564 0.564) #(0.568 0.568 0.568) #(0.572 0.572 0.572) #(0.576 0.576 0.576) #(0.58 0.58 0.58) #(0.584 0.584 0.584) #(0.587 0.587 0.587) #(0.591 0.591 0.591) #(0.595 0.595 0.595) #(0.599 0.599 0.599) #(0.603 0.603 0.603) #(0.607 0.607 0.607) #(0.611 0.611 0.611) #(0.615 0.615 0.615) #(0.619 0.619 0.619) #(0.623 0.623 0.623) #(0.627 0.627 0.627) #(0.63 0.63 0.63) #(0.634 0.634 0.634) #(0.638 0.638 0.638) #(0.642 0.642 0.642) #(0.646 0.646 0.646) #(0.65 0.65 0.65) #(0.654 0.654 0.654) #(0.658 0.658 0.658) #(0.662 0.662 0.662) #(0.667 0.667 0.667) #(0.671 0.671 0.671) #(0.674 0.674 0.674) #(0.678 0.678 0.678) #(0.682 0.682 0.682) #(0.686 0.686 0.686) #(0.69 0.69 0.69) #(0.694 0.694 0.694) #(0.698 0.698 0.698) #(0.702 0.702 0.702) #(0.706 0.706 0.706) #(0.71 0.71 0.71) #(0.714 0.714 0.714) #(0.717 0.717 0.717) #(0.721 0.721 0.721) #(0.725 0.725 0.725) #(0.729 0.729 0.729) #(0.733 0.733 0.733) #(0.737 0.737 0.737) #(0.741 0.741 0.741) #(0.745 0.745 0.745) #(0.749 0.749 0.
 749) #(0.753 0.753 0.753) #(0.757 0.757 0.757) #(0.761 0.761 0.761) #(0.764 0.764 0.764) #(0.768 0.768 0.768) #(0.772 0.772 0.772) #(0.776 0.776 0.776) #(0.78 0.78 0.78) #(0.784 0.784 0.784) #(0.788 0.788 0.788) #(0.792 0.792 0.792) #(0.796 0.796 0.796) #(0.8 0.8 0.8) #(0.804 0.804 0.804) #(0.807 0.807 0.807) #(0.811 0.811 0.811) #(0.815 0.815 0.815) #(0.819 0.819 0.819) #(0.823 0.823 0.823) #(0.827 0.827 0.827) #(0.831 0.831 0.831) #(0.835 0.835 0.835) #(0.839 0.839 0.839) #(0.843 0.843 0.843) #(0.847 0.847 0.847) #(0.85 0.85 0.85) #(0.854 0.854 0.854) #(0.858 0.858 0.858) #(0.862 0.862 0.862) #(0.866 0.866 0.866) #(0.87 0.87 0.87) #(0.874 0.874 0.874) #(0.878 0.878 0.878) #(0.882 0.882 0.882) #(0.886 0.886 0.886) #(0.89 0.89 0.89) #(0.893 0.893 0.893) #(0.897 0.897 0.897) #(0.901 0.901 0.901) #(0.905 0.905 0.905) #(0.909 0.909 0.909) #(0.913 0.913 0.913) #(0.917 0.917 0.917) #(0.921 0.921 0.921) #(0.925 0.925 0.925) #(0.929 0.929 0.929) #(0.933 0.933 0.933) #(0.936 0.936 0.936) #(
 0.94 0.94 0.94) #(0.944 0.944 0.944) #(0.948 0.948 0.948) #(0.952 0.952 0.952) #(0.956 0.956 0.956) #(0.96 0.96 0.96) #(0.964 0.964 0.964) #(0.968 0.968 0.968) #(0.972 0.972 0.972) #(0.976 0.976 0.976) #(0.979 0.979 0.979) #(0.983 0.983 0.983) #(0.987 0.987 0.987) #(0.991 0.991 0.991) #(0.995 0.995 0.995) #( )  )) ]!

Item was removed:
- ----- Method: BroomMorph class>>descriptionForPartsBin (in category 'parts bin') -----
- descriptionForPartsBin
- ^ self partName: 'Broom' translatedNoop
- categories: {'Graphics' translatedNoop}
- documentation: 'A broom to align Morphs with' translatedNoop!

Item was removed:
- ----- Method: BroomMorph class>>newCentered (in category 'instance creation') -----
- newCentered
- "return a BroomMorph that will align Morph centers"
- "BroomMorph newCentered openInHand"
- ^(self new) centered: true!

Item was removed:
- ----- Method: BroomMorph class>>newTransient (in category 'instance creation') -----
- newTransient
- "return a BroomMorph that will delete itself on mouse-up"
-
- "BroomMorph newTransient openInHand"
-
- ^self new transient: true!

Item was removed:
- ----- Method: BroomMorph class>>newTransientInHand (in category 'instance creation') -----
- newTransientInHand
-
- "return a BroomMorph that will delete itself on mouse-up"
-
- "BroomMorph newTransientInHand"
-
- ^self newTransient openInHand!

Item was removed:
- ----- Method: BroomMorph>>affectedMorphs (in category 'private') -----
- affectedMorphs
- "Answer all the morphs that I should be moving"
- ^ #()!

Item was removed:
- ----- Method: BroomMorph>>basicClass (in category 'private') -----
- basicClass
- ^BroomMorph!

Item was removed:
- ----- Method: BroomMorph>>centered: (in category 'accessing') -----
- centered: aBoolean
- "If aBoolean is true, I align morphs on their H or V centerlines"
- centered := aBoolean.!

Item was removed:
- ----- Method: BroomMorph>>drawBroomIcon: (in category 'accessing') -----
- drawBroomIcon: aBoolean
- "If aBoolean is true, then I draw a cute broom icon; otherwise I draw a cross"
- drawBroomIcon := aBoolean.
- self changed.!

Item was removed:
- ----- Method: BroomMorph>>drawOn: (in category 'drawing') -----
- drawOn: aCanvas
- drawBroomIcon
- ifTrue: [ aCanvas paintImage: self class broomIcon at: self position ]
- ifFalse: [ self drawPlusOn: aCanvas ].
- !

Item was removed:
- ----- Method: BroomMorph>>drawPlusOn: (in category 'drawing') -----
- drawPlusOn: aCanvas
- | halfWidth |
- halfWidth := width + 1 // 2.
- aCanvas line: bounds leftCenter + (halfWidth@0) to: bounds rightCenter + (halfWidth negated@0) width: width color: self color.
- aCanvas line: bounds topCenter + (0@halfWidth) to: bounds bottomCenter + (0@halfWidth negated) width: width color: self color.
- !

Item was removed:
- ----- Method: BroomMorph>>filter: (in category 'accessing') -----
- filter: aBlock
- "Set my acceptance filter. aBlock should return true for all Morphs to be moved"
- filter := aBlock!

Item was removed:
- ----- Method: BroomMorph>>handlesKeyboard: (in category 'event handling') -----
- handlesKeyboard: evt
- ^true!

Item was removed:
- ----- Method: BroomMorph>>handlesMouseDown: (in category 'event handling') -----
- handlesMouseDown: evt
- ^evt shiftPressed not!

Item was removed:
- ----- Method: BroomMorph>>handlesMouseStillDown: (in category 'event handling') -----
- handlesMouseStillDown: evt
- ^true.!

Item was removed:
- ----- Method: BroomMorph>>hotspot (in category 'accessing') -----
- hotspot
- ^hotspot!

Item was removed:
- ----- Method: BroomMorph>>hotspot: (in category 'private') -----
- hotspot: aPoint
- lastHotspot := hotspot.
- hotspot := aPoint.
- ^self center: aPoint!

Item was removed:
- ----- Method: BroomMorph>>initialize (in category 'initialization') -----
- initialize
- super initialize.
- width := 5.
- span := 100.
- hotspot := self center.
- self reset.
- self color: Color blue muchDarker.
- self setBalloonText: 'Drag me to align other Morphs. Drag with the Shift key to move me without affecting other Morphs. Drag me with the second mouse button to align centers.' translated.
- drawBroomIcon := true.
- transient := false.
- centered := false.
- !

Item was removed:
- ----- Method: BroomMorph>>justDroppedInto:event: (in category 'dropping/grabbing') -----
- justDroppedInto: aMorph event: anEvent
- super justDroppedInto: aMorph event: anEvent.
- aMorph isPlayfieldLike ifFalse: [ ^self delete ].
- self centered: anEvent hand lastEvent yellowButtonPressed.
- self transient ifFalse: [ ^self ].
- self reset.
- self hotspot: (start := anEvent position).
- anEvent hand newMouseFocus: self.
- anEvent hand newKeyboardFocus: self.
- "Cursor blank show."!

Item was removed:
- ----- Method: BroomMorph>>keyStroke: (in category 'event handling') -----
- keyStroke: evt
- evt keyCharacter ~= Character escape ifTrue: [ ^self ].
- evt hand releaseMouseFocus: self.
- evt hand releaseKeyboardFocus: self.
- Cursor normal show.
- moved keysAndValuesDo: [ :m :b | m bounds: b ].
- transient ifTrue: [ ^self delete ].
- self resetClass.
- self reset.
- self hotspot: start.
- !

Item was removed:
- ----- Method: BroomMorph>>lineWidth (in category 'accessing') -----
- lineWidth
- ^width!

Item was removed:
- ----- Method: BroomMorph>>lineWidth: (in category 'accessing') -----
- lineWidth: aNumber
- width := aNumber.
- self changed!

Item was removed:
- ----- Method: BroomMorph>>morphIfNecessary: (in category 'stepping and presenter') -----
- morphIfNecessary: yellowButtonPressed
- | pt delta threshold cls center |
- center := yellowButtonPressed | centered.
- pt := self center.
- threshold := self width / 2.
- delta := pt - start.
- cls := delta x > threshold
- ifTrue: [center
- ifTrue: [CenterBroomMorphRight]
- ifFalse: [BroomMorphRight]]
- ifFalse: [delta x < threshold negated
- ifTrue: [center
- ifTrue: [CenterBroomMorphLeft]
- ifFalse: [BroomMorphLeft]]
- ifFalse: [delta y > threshold
- ifTrue: [center
- ifTrue: [CenterBroomMorphDown]
- ifFalse: [BroomMorphDown]]
- ifFalse: [delta y < threshold negated
- ifTrue: [center
- ifTrue: [CenterBroomMorphUp]
- ifFalse: [BroomMorphUp]]]]].
- cls
- ifNotNil: [self
- become: (self as: cls).
- self reset.
- self resetFilter.
- unmoved addAll: self affectedMorphs]!

Item was removed:
- ----- Method: BroomMorph>>mouseDown: (in category 'event handling') -----
- mouseDown: evt
- self reset.
- self resetFilter.
- self hotspot: (start := evt position).
- evt hand newMouseFocus: self.
- evt hand newKeyboardFocus: self.
- "Cursor blank show."!

Item was removed:
- ----- Method: BroomMorph>>mouseMove: (in category 'event handling') -----
- mouseMove: evt
- self hotspot: evt position.
- self moveMorphs: evt yellowButtonPressed!

Item was removed:
- ----- Method: BroomMorph>>mouseStillDown: (in category 'event handling') -----
- mouseStillDown: evt
- self hotspot: evt position.
- self moveMorphs: evt yellowButtonPressed!

Item was removed:
- ----- Method: BroomMorph>>mouseUp: (in category 'event handling') -----
- mouseUp: evt
- evt hand releaseMouseFocus: self.
- Cursor normal show.
- self rememberCommand: self undoCommand.
- transient ifTrue: [ ^self delete ].
- self resetClass.
- self reset.
- self hotspot: start.!

Item was removed:
- ----- Method: BroomMorph>>moveMorphs: (in category 'stepping and presenter') -----
- moveMorphs: yellowButtonPressed
- "Move all the newly affected morphs and the ones I'm already moving."
- self class == self basicClass
- ifTrue: [^ self morphIfNecessary: yellowButtonPressed ].
- (((self affectedMorphs
- reject: [:m | unmoved includes: m])
- reject: [:m | moved includesKey: m])
- select: filter)
- do: [:m | moved at: m put: m bounds].
- moved
- keysAndValuesDo: [:m :b | self positionMorph: m originalBounds: b]!

Item was removed:
- ----- Method: BroomMorph>>openCenteredInHand (in category 'initialization') -----
- openCenteredInHand
- "BroomMorph new openCenteredInHand"
- "NCBroomMorph new openCenteredInHand"
- self centered: true.
- self openInHand.!

Item was removed:
- ----- Method: BroomMorph>>openTransientCenteredInHand (in category 'initialization') -----
- openTransientCenteredInHand
- "BroomMorph new openTransientCenteredInHand"
- self transient: true.
- self centered: true.
- self openInHand.!

Item was removed:
- ----- Method: BroomMorph>>openTransientInHand (in category 'initialization') -----
- openTransientInHand
- "BroomMorph new openTransientInHand"
- self transient: true.
- self openInHand.!

Item was removed:
- ----- Method: BroomMorph>>reset (in category 'initialization') -----
- reset
- moved := IdentityDictionary new. "morph -> original bounds"
- unmoved := IdentitySet new.
- self resetExtent.
- filter := nil.
- !

Item was removed:
- ----- Method: BroomMorph>>resetClass (in category 'initialization') -----
- resetClass
- self become: (self as: self basicClass)!

Item was removed:
- ----- Method: BroomMorph>>resetExtent (in category 'initialization') -----
- resetExtent
- super extent: self class broomIcon extent.
- hotspot := lastHotspot := self center.!

Item was removed:
- ----- Method: BroomMorph>>resetFilter (in category 'initialization') -----
- resetFilter
-
- self filter: [ :m | true ].
- !

Item was removed:
- ----- Method: BroomMorph>>span (in category 'accessing') -----
- span
- ^span!

Item was removed:
- ----- Method: BroomMorph>>span: (in category 'accessing') -----
- span: aNumber
- span := aNumber.
- self hotspot: self hotspot.
- self changed.!

Item was removed:
- ----- Method: BroomMorph>>transient (in category 'accessing') -----
- transient
- ^transient!

Item was removed:
- ----- Method: BroomMorph>>transient: (in category 'accessing') -----
- transient: aBoolean
- "if aBoolean is true, then I delete myself on mouse-up"
- transient := aBoolean!

Item was removed:
- ----- Method: BroomMorph>>undoCommand (in category 'undo') -----
- undoCommand
- | cmd args |
- cmd := Command new cmdWording: 'align morphs'.
- args := OrderedCollection new.
- moved keysAndValuesDo: [ :m :b |
- args add: { m. b. m bounds. m owner. m owner morphPreceding: m }
- ].
- cmd undoTarget: self selector: #undoMove:redo:args: arguments: { cmd. false. args }.
- ^cmd!

Item was removed:
- ----- Method: BroomMorph>>undoMove:redo:args: (in category 'undo') -----
- undoMove: cmd redo: redo args: args
- "morph oldbounds newbounds oldowner oldpredecessor"
- cmd redoTarget: self selector: #undoMove:redo:args: arguments: { cmd. true. args }.
- args do: [ :a | | morph oldbounds newbounds oldowner oldpredecessor |
- morph := a at: 1.
- oldbounds := a at: 2.
- newbounds := a at: 3.
- oldowner := a at: 4.
- oldpredecessor := a at: 5.
- oldowner ifNotNil: [ oldpredecessor ifNil: [ oldowner addMorphFront: morph ]
- ifNotNil: [ oldowner addMorph: morph after: oldpredecessor ]].
- morph bounds: (redo ifTrue: [ newbounds ] ifFalse: [ oldbounds ]).
- (morph isKindOf: SystemWindow) ifTrue: [ morph activate ].
- ].!

Item was removed:
- BroomMorph subclass: #BroomMorphDown
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Etoys-Squeakland-BroomMorphs-Base'!
-
- !BroomMorphDown commentStamp: '<historical>' prior: 0!
- I am a BroomMorph that pushes morphs down.!

Item was removed:
- ----- Method: BroomMorphDown>>affectedMorphs (in category 'private') -----
- affectedMorphs
- "Answer all the morphs that I should be moving"
- | movedRect |
- movedRect := self bounds encompass: hotspot x @ lastHotspot y.
- ^ owner submorphs
- select: [:m | movedRect
- intersects: (Rectangle
- left: m bounds left
- right: m bounds right
- top: m bounds top
- bottom: m bounds top + 1)]!

Item was removed:
- ----- Method: BroomMorphDown>>drawOn: (in category 'drawing') -----
- drawOn: aCanvas
- | halfWidth |
- halfWidth := width + 1 // 2.
- aCanvas line: bounds topCenter + (0@halfWidth) to: bounds bottomCenter + (0@halfWidth negated) width: width color: self color.
- aCanvas line: bounds bottomLeft + (halfWidth @ halfWidth negated) to: bounds bottomRight + (halfWidth negated@halfWidth negated) width: width color: self color.
- aCanvas line: self hotspot + (span negated @ (width * -2)) to: self hotspot + (span negated @ -1) color: self color.
- aCanvas line: self hotspot + (span -1 @ (width * -2)) to: self hotspot + (span-1 @ -1) color: self color.
- !

Item was removed:
- ----- Method: BroomMorphDown>>hotspot: (in category 'accessing') -----
- hotspot: aPoint
- | left right bottom newBounds |
- left := aPoint x - span min: bounds left.
- right := aPoint x + span max: bounds right.
- bottom := aPoint y max: start y.
- lastHotspot := hotspot.
- hotspot := aPoint x @ bottom.
- newBounds := Rectangle
- left: left
- right: right
- top: bottom - bounds height
- bottom: bottom.
- self bounds: newBounds.
- !

Item was removed:
- ----- Method: BroomMorphDown>>positionMorph:originalBounds: (in category 'private') -----
- positionMorph: m originalBounds: b
- m top: (self bottom max: b top)!

Item was removed:
- ----- Method: BroomMorphDown>>resetExtent (in category 'drawing') -----
- resetExtent
- | newBounds |
- newBounds := 0@0 extent: (2*span) @ (12 + width).
- self bounds: (newBounds align: newBounds bottomCenter with: hotspot)!

Item was removed:
- BroomMorphRight subclass: #BroomMorphLeft
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Etoys-Squeakland-BroomMorphs-Base'!
-
- !BroomMorphLeft commentStamp: '<historical>' prior: 0!
- I am a BroomMorph that pushes morphs left.!

Item was removed:
- ----- Method: BroomMorphLeft>>affectedMorphs (in category 'private') -----
- affectedMorphs
- "Answer all the morphs that I should be moving"
- | movedRect |
- movedRect := self bounds encompass: lastHotspot x @ hotspot y.
- ^ owner submorphs
- select: [:m | movedRect
- intersects: (Rectangle
- left: m bounds right - 1
- right: m bounds right
- top: m bounds top
- bottom: m bounds bottom)]!

Item was removed:
- ----- Method: BroomMorphLeft>>drawOn: (in category 'drawing') -----
- drawOn: aCanvas
- | halfWidth |
- halfWidth := (width + 1 // 2).
- aCanvas line: bounds leftCenter + (halfWidth@0) to: bounds rightCenter + (halfWidth negated @0) width: width color: self color.
- aCanvas line: bounds topLeft + (halfWidth @ halfWidth) to: bounds bottomLeft + (halfWidth @halfWidth  negated) width: width color: self color.
- aCanvas line: self hotspot + (width * 2 @ (span negated)) to: self hotspot + (1 @ (span negated)) color: self color.
- aCanvas line: self hotspot + (width * 2 @ (span-1)) to: self hotspot + (1 @ (span-1)) color: self color.
- !

Item was removed:
- ----- Method: BroomMorphLeft>>hotspot: (in category 'accessing') -----
- hotspot: aPoint
- | newBounds top bottom left |
- top := aPoint y - span min: bounds top.
- bottom := aPoint y + span max: bounds bottom.
- left := aPoint x min: start x.
- lastHotspot := hotspot.
- hotspot := left @ aPoint y.
- newBounds := Rectangle
- left: left
- right: left  + bounds width
- top: top
- bottom: bottom.
- self bounds: newBounds!

Item was removed:
- ----- Method: BroomMorphLeft>>positionMorph:originalBounds: (in category 'private') -----
- positionMorph: m originalBounds: b
- m right: (self left min: b right)!

Item was removed:
- ----- Method: BroomMorphLeft>>resetExtent (in category 'drawing') -----
- resetExtent
- | newBounds |
- newBounds := 0@0 extent: (12 + width) @ (2*span).
- self bounds: (newBounds align: newBounds leftCenter with: hotspot)!

Item was removed:
- BroomMorph subclass: #BroomMorphRight
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Etoys-Squeakland-BroomMorphs-Base'!
-
- !BroomMorphRight commentStamp: '<historical>' prior: 0!
- I am a BroomMorph that pushes morphs right.!

Item was removed:
- ----- Method: BroomMorphRight>>affectedMorphs (in category 'private') -----
- affectedMorphs
- "Answer all the morphs that I should be moving"
- | movedRect |
- movedRect := self bounds encompass: lastHotspot x @ hotspot y.
- ^ owner submorphs
- select: [:m | movedRect
- intersects: (Rectangle
- left: m bounds left
- right: m bounds left + 1
- top: m bounds top
- bottom: m bounds bottom)]!

Item was removed:
- ----- Method: BroomMorphRight>>drawOn: (in category 'drawing') -----
- drawOn: aCanvas
- | halfWidth |
- halfWidth := width + 1 // 2.
- aCanvas line: bounds leftCenter + (halfWidth@0) to: bounds rightCenter + (halfWidth negated @0) width: width color: self color.
- aCanvas line: bounds topRight + (halfWidth negated @ halfWidth) to: bounds bottomRight + (halfWidth negated@halfWidth negated) width: width color: self color.
- aCanvas line: self hotspot + (width * -2 @ (span negated)) to: self hotspot + (-1 @ (span negated)) color: self color.
- aCanvas line: self hotspot + (width * -2 @ (span-1)) to: self hotspot + (-1 @ (span-1)) color: self color.
- !

Item was removed:
- ----- Method: BroomMorphRight>>hotspot: (in category 'accessing') -----
- hotspot: aPoint
- | newBounds top bottom right |
- top := aPoint y - span min: bounds top.
- bottom := aPoint y + span max: bounds bottom.
- right := aPoint x max: start x.
- lastHotspot := hotspot.
- hotspot := right @ aPoint y.
- newBounds := Rectangle
- left: right - bounds width
- right: right
- top: top
- bottom: bottom.
- self bounds: newBounds!

Item was removed:
- ----- Method: BroomMorphRight>>positionMorph:originalBounds: (in category 'private') -----
- positionMorph: m originalBounds: b
- m left: (self right max: b left)!

Item was removed:
- ----- Method: BroomMorphRight>>resetExtent (in category 'accessing') -----
- resetExtent
- | newBounds |
- newBounds := 0@0 extent: (12 + width) @ (2*span).
- self bounds: (newBounds align: newBounds rightCenter with: hotspot)!

Item was removed:
- BroomMorphDown subclass: #BroomMorphUp
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Etoys-Squeakland-BroomMorphs-Base'!
-
- !BroomMorphUp commentStamp: '<historical>' prior: 0!
- I am a BroomMorph that pushes morphs up.!

Item was removed:
- ----- Method: BroomMorphUp>>affectedMorphs (in category 'private') -----
- affectedMorphs
- "Answer all the morphs that I should be moving"
- | movedRect |
- movedRect := self bounds encompass: hotspot x @ lastHotspot y.
- ^ owner submorphs
- select: [:m | movedRect
- intersects: (Rectangle
- left: m bounds left
- right: m bounds right
- top: m bounds bottom - 1
- bottom: m bounds bottom)]!

Item was removed:
- ----- Method: BroomMorphUp>>drawOn: (in category 'drawing') -----
- drawOn: aCanvas
- | halfWidth |
- halfWidth := width + 1 // 2.
- aCanvas line: bounds topCenter + (0@halfWidth) to: bounds bottomCenter + (0@halfWidth negated) width: width color: self color.
- aCanvas line: bounds topLeft + (halfWidth @ halfWidth) to: bounds topRight + ((halfWidth) negated@halfWidth) width: width color: self color.
- aCanvas line: self hotspot + (span negated @ (width * 2)) to: self hotspot + (span negated @ 1) color: self color.
- aCanvas line: self hotspot + (span -1 @ (width * 2)) to: self hotspot + (span -1 @ 1) color: self color.
- !

Item was removed:
- ----- Method: BroomMorphUp>>hotspot: (in category 'accessing') -----
- hotspot: aPoint
- | left right newBounds top |
- left := aPoint x - span min: bounds left.
- right := aPoint x + span max: bounds right.
- top := aPoint y min: start y.
- lastHotspot := hotspot.
- hotspot := aPoint x @ top.
- newBounds := Rectangle
- left: left
- right: right
- top: top
- bottom: top + bounds height.
- self bounds: newBounds!

Item was removed:
- ----- Method: BroomMorphUp>>positionMorph:originalBounds: (in category 'private') -----
- positionMorph: m originalBounds: b
- m bottom: (self top min: b bottom)!

Item was removed:
- ----- Method: BroomMorphUp>>resetExtent (in category 'drawing') -----
- resetExtent
- | newBounds |
- newBounds := 0@0 extent: (2*span) @ (12 + width).
- self bounds: (newBounds align: newBounds topCenter with: hotspot)!

Item was removed:
- BroomMorphDown subclass: #CenterBroomMorphDown
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Etoys-Squeakland-BroomMorphs-Base'!

Item was removed:
- ----- Method: CenterBroomMorphDown>>affectedMorphs (in category 'private') -----
- affectedMorphs
- "Answer all the morphs that I should be moving"
- | movedRect |
- movedRect := self bounds encompass: hotspot x @ lastHotspot y.
- ^ owner submorphs
- select: [:m | movedRect
- intersects: (Rectangle
- left: m bounds left
- right: m bounds right
- top: m bounds center y - 1
- bottom: m bounds center y + 1)]!

Item was removed:
- ----- Method: CenterBroomMorphDown>>positionMorph:originalBounds: (in category 'private') -----
- positionMorph: m originalBounds: b
- m center: m center x @ (self bottom max: b center y)!

Item was removed:
- BroomMorphLeft subclass: #CenterBroomMorphLeft
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Etoys-Squeakland-BroomMorphs-Base'!

Item was removed:
- ----- Method: CenterBroomMorphLeft>>affectedMorphs (in category 'private') -----
- affectedMorphs
- "Answer all the morphs that I should be moving"
- | movedRect |
- movedRect := self bounds encompass: lastHotspot x @ hotspot y.
- ^ owner submorphs
- select: [:m | movedRect
- intersects: (Rectangle
- left: m bounds center x - 1
- right: m bounds center x + 1
- top: m bounds top
- bottom: m bounds bottom)]!

Item was removed:
- ----- Method: CenterBroomMorphLeft>>positionMorph:originalBounds: (in category 'private') -----
- positionMorph: m originalBounds: b
- m center: (self left min: b center x) @ m center y!

Item was removed:
- BroomMorphRight subclass: #CenterBroomMorphRight
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Etoys-Squeakland-BroomMorphs-Base'!

Item was removed:
- ----- Method: CenterBroomMorphRight>>affectedMorphs (in category 'private') -----
- affectedMorphs
- "Answer all the morphs that I should be moving"
- | movedRect |
- movedRect := self bounds encompass: lastHotspot x @ hotspot y.
- ^ owner submorphs
- select: [:m | movedRect
- intersects: (Rectangle
- left: m bounds center x - 1
- right: m bounds center x + 1
- top: m bounds top
- bottom: m bounds bottom)]!

Item was removed:
- ----- Method: CenterBroomMorphRight>>positionMorph:originalBounds: (in category 'private') -----
- positionMorph: m originalBounds: b
- m center: (self right max: b center x) @ m center y!

Item was removed:
- BroomMorphUp subclass: #CenterBroomMorphUp
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Etoys-Squeakland-BroomMorphs-Base'!

Item was removed:
- ----- Method: CenterBroomMorphUp>>affectedMorphs (in category 'private') -----
- affectedMorphs
- "Answer all the morphs that I should be moving"
- | movedRect |
- movedRect := self bounds encompass: hotspot x @ lastHotspot y.
- ^ owner submorphs
- select: [:m | movedRect
- intersects: (Rectangle
- left: m bounds left
- right: m bounds right
- top: m bounds center y - 1
- bottom: m bounds center y + 1)]!

Item was removed:
- ----- Method: CenterBroomMorphUp>>positionMorph:originalBounds: (in category 'private') -----
- positionMorph: m originalBounds: b
- m center: m center x @ (self top min: b center y)!

Item was removed:
- BroomMorph subclass: #NCBroomMorph
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Etoys-Squeakland-BroomMorphs-Connectors'!
-
- !NCBroomMorph commentStamp: '<historical>' prior: 0!
- This is a BroomMorph that won't move labels or connectors.!

Item was removed:
- ----- Method: NCBroomMorph class>>descriptionForPartsBin (in category 'parts bin') -----
- descriptionForPartsBin
- ^ self partName: 'Connector Broom' translatedNoop
- categories: {'Connectors' translatedNoop}
- documentation: 'A broom to align shapes with' translatedNoop!

Item was removed:
- ----- Method: NCBroomMorph class>>newInHand (in category 'instance creation') -----
- newInHand
- self new openInHand!

Item was removed:
- ----- Method: NCBroomMorph>>basicClass (in category 'initialization') -----
- basicClass
- ^NCBroomMorph!

Item was removed:
- ----- Method: NCBroomMorph>>resetFilter (in category 'initialization') -----
- resetFilter
-
- self filter: [ :m | m isConnector not and: [ m isConstraint not ] ].!



Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: EToys-mt.445.mcz

Christoph Thiede
Hi Marcel,

it's a pity to see the little nice BroomMorph go away from the Trunk. :-( Can't we move it to MorphicExtras or Etoys instead?



Apart from that, the objects tool looks a bit empty now:


<img src="data:image/png;base64,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">

Best,
Christoph

PS: That's valid HTML. Nabble ruined my message.
Carpe Squeak!


Sent from the Squeak - Dev mailing list archive at Nabble.com.


Carpe Squeak!