Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.1196.mcz
==================== Summary ====================
Name: Tools-mt.1196 Author: mt Time: 5 April 2023, 11:33:38.895931 am UUID: 7ef82cd3-9cc7-c945-b6ff-c3ed304358c7 Ancestors: Tools-mt.1195
Similar to fields from the inspector, allow dropping things from an object explorer into the world to get a watcher. In this context, make drops into workspaces aware of key-value bindings.
=============== Diff against Tools-mt.1195 ===============
Item was changed: ----- Method: ObjectExplorer>>buildWith: (in category 'toolbuilder') ----- buildWith: builder
| windowSpec treeSpec textSpec buttonSpec buttonOffset tool | windowSpec := builder pluggableWindowSpec new. windowSpec model: self; children: OrderedCollection new; label: #windowTitle. treeSpec := builder pluggableTreeSpec new. treeSpec model: self; nodeClass: self class nodeClass; roots: #getList; keyPress: #explorerKey:from:event:; getSelected: #currentSelection; setSelected: #currentSelection:; setSelectedParent: #currentParent:; menu: #genericMenu:; dragItem: #getDragItem:; + dragType: #getDragType:; autoDeselect: false; columns: (ObjectExplorerWrapper showContentsInColumns ifTrue: [{ [:listMorph | (listMorph filteredItems collect: [:item | item preferredWidthOfColumn: 1]) max]. nil "take all the space"}]); frame: (0@0 corner: 1@0.71). windowSpec children add: treeSpec.
buttonOffset := (Preferences standardButtonFont widthOfString: 'inspect') * 3/2.
textSpec := builder pluggableCodePaneSpec new. textSpec model: self; getText: #expression; editText: #expression:; menu: #codePaneMenu:shifted:; help: 'Evaluate expressions for the current tree selection...' translated; frame: (LayoutFrame fractions: (0@0.71 corner: 1@1) offsets: (0@0 corner: buttonOffset negated@0)). windowSpec children add: textSpec.
buttonSpec := builder pluggableButtonSpec new model: self; label: 'inspect'; action: #inspectObject; help: 'Switch to an inspector tool'; frame: (LayoutFrame fractions: (1@0.71 corner: 1@1) offsets: (buttonOffset negated@0 corner: 0 @ 0)). windowSpec children add: buttonSpec. tool := builder build: windowSpec. self changed: #expandRootsRequested. ^ tool!
Item was changed: ----- Method: ObjectExplorer>>getDragItem: (in category 'user interface') ----- getDragItem: binding
+ ^ binding! - ^ binding value!
Item was added: + ----- Method: ObjectExplorer>>getDragType: (in category 'user interface') ----- + getDragType: binding + + ^ #explorerField!
Item was changed: ----- Method: Workspace>>acceptDroppingMorph:event:inMorph: (in category 'drag and drop') ----- acceptDroppingMorph: dropee event: evt inMorph: targetMorph "Return the dropee to its old position, and add a reference to it at the cursor point." | bindingName externalName reference | (dropee isKindOf: TransferMorph) ifTrue: [reference := dropee passenger. + externalName := dropee passenger className. + (reference respondsTo: #key) ifTrue: [ + externalName := reference key. + externalName isString ifFalse: [ + externalName := externalName asString]. + reference := reference value]] - externalName := dropee passenger className] ifFalse: [reference := dropee. externalName := dropee externalName]. externalName := externalName isOctetString ifTrue: [externalName] ifFalse: ['a' , externalName]. + bindingName := externalName withFirstCharacterDownshifted. + (self hasBindingOf: bindingName) ifTrue: [| num | + self flag: #discuss. "mt: #identityHash or readable number?" + num := 2. + [self hasBindingOf: bindingName, num] + whileTrue: [num := num + 1]. + bindingName := bindingName, num]. - bindingName := externalName withFirstCharacterDownshifted , reference identityHash printString. targetMorph correctSelectionWithString: bindingName , ' '. (self bindingOf: bindingName) value: reference. (dropee isKindOf: TransferMorph) ifFalse: [dropee rejectDropMorphEvent: evt]. ^ true"success"!
squeak-dev@lists.squeakfoundation.org