Christoph Thiede uploaded a new version of Morphic to project The Inbox: http://source.squeak.org/inbox/Morphic-ct.2143.mcz
==================== Summary ====================
Name: Morphic-ct.2143 Author: ct Time: 26 November 2023, 9:55:30.823036 pm UUID: 8796e939-547c-594a-adac-248f3625166c Ancestors: Morphic-dtl.2142
Proposal: From drop selectors in PasteUpMorph, answer the newly created morph. For instance, this makes it easy to customize these morphs or include them into another tool:
(Project current world dropInspectorField: (Inspector on: ActiveHand) fields third event: self currentEvent) openInWindow extent: 200 px @ 100 px.
=============== Diff against Morphic-dtl.2142 ===============
Item was changed: ----- Method: PasteUpMorph>>dropExplorerField:from:event: (in category 'event handling') ----- dropExplorerField: anExplorerField from: anExplorer event: evt + "Create and answer a self-updating morph that serves as a compact watcher for the dropped explorer field." - "Create a self-updating morph that serves as a compact watcher for the dropped explorer field."
| scope | scope := anExplorer currentParent ifNil: [Dictionary newFrom: {anExplorerField} "root"] ifNotNil: [:parent | parent value]. + ^ (scope inspectorClass on: scope) fields - (scope inspectorClass on: scope) fields detect: [:field | field name = anExplorerField key or: [field name = anExplorerField key printString]] ifFound: [:inspectorField | self dropInspectorField: inspectorField rememberInspector + event: evt]! - event: evt].!
Item was changed: ----- Method: PasteUpMorph>>dropInspectorField:event: (in category 'event handling') ----- dropInspectorField: anInspectorField event: evt + "Create a self-updating morph that serves as a compact watcher for the dropped inspector field. Answer the new morph." - "Create a self-updating morph that serves as a compact watcher for the dropped inspector field."
| watcher | watcher := PluggableButtonMorph new changeTableLayout; cellPositioning: #topLeft; model: [anInspectorField inspector object inspect]; action: #value; yourself.
watcher addMorph: ((UpdatingStringMorph on: anInspectorField selector: #value) stepTime: 1000 "msecs"; yourself); addMorph: (('of ', (anInspectorField inspector object printString truncateWithElipsisTo: 40)) asMorph font: Preferences standardBalloonHelpFont yourself); addMorph: (anInspectorField name asString asMorph font: Preferences standardBalloonHelpFont emphasis: TextEmphasis bold emphasisCode; yourself).
watcher center: evt position. watcher bounds: (watcher bounds translatedToBeWithin: self bounds). + watcher openInWorld. + ^ watcher! - watcher openInWorld.!
Item was changed: ----- Method: PasteUpMorph>>dropSourceCode:event: (in category 'event handling') ----- dropSourceCode: anObject event: evt + "Open and answer a tool on the dropped object."
(anObject isMethodReference and: [anObject isValid]) ifTrue: [^ self dropSourceCode: anObject compiledMethod event: evt]. (anObject isClassReference and: [anObject isValid]) ifTrue: [^ self dropSourceCode: anObject actualClass event: evt]. (anObject isBehavior or: [anObject isCompiledMethod]) ifTrue: [ | tool window | tool := anObject isBehavior ifTrue: [SystemBrowser default new setClass: anObject] ifFalse: [CodeHolder new setClass: anObject methodClass selector: anObject selector]. window := ToolBuilder open: tool. window center: evt position. + window bounds: (window bounds translatedToBeWithin: self bounds). + ^ window]. - window bounds: (window bounds translatedToBeWithin: self bounds)]. + ^ anObject isString + ifTrue: [anObject edit]! - anObject isString - ifTrue: [anObject edit].!
Well, this looks like an unintended use of the callback #dropInspectorField: ...
-1
Maybe extract something like #createToolFromFoobar: and use that in the existing #drop... methods. That new #createTool* can then we re-used as you proposed.
Best, Marcel
Am 26.11.2023 21:56:39 schrieb commits@source.squeak.org commits@source.squeak.org:
Christoph Thiede uploaded a new version of Morphic to project The Inbox: http://source.squeak.org/inbox/Morphic-ct.2143.mcz
==================== Summary ====================
Name: Morphic-ct.2143 Author: ct Time: 26 November 2023, 9:55:30.823036 pm UUID: 8796e939-547c-594a-adac-248f3625166c Ancestors: Morphic-dtl.2142
Proposal: From drop selectors in PasteUpMorph, answer the newly created morph. For instance, this makes it easy to customize these morphs or include them into another tool:
(Project current world dropInspectorField: (Inspector on: ActiveHand) fields third event: self currentEvent) openInWindow extent: 200 px @ 100 px.
=============== Diff against Morphic-dtl.2142 ===============
Item was changed: ----- Method: PasteUpMorph>>dropExplorerField:from:event: (in category 'event handling') ----- dropExplorerField: anExplorerField from: anExplorer event: evt + "Create and answer a self-updating morph that serves as a compact watcher for the dropped explorer field." - "Create a self-updating morph that serves as a compact watcher for the dropped explorer field."
| scope | scope := anExplorer currentParent ifNil: [Dictionary newFrom: {anExplorerField} "root"] ifNotNil: [:parent | parent value]. + ^ (scope inspectorClass on: scope) fields - (scope inspectorClass on: scope) fields detect: [:field | field name = anExplorerField key or: [field name = anExplorerField key printString]] ifFound: [:inspectorField | self dropInspectorField: inspectorField rememberInspector + event: evt]! - event: evt].!
Item was changed: ----- Method: PasteUpMorph>>dropInspectorField:event: (in category 'event handling') ----- dropInspectorField: anInspectorField event: evt + "Create a self-updating morph that serves as a compact watcher for the dropped inspector field. Answer the new morph." - "Create a self-updating morph that serves as a compact watcher for the dropped inspector field."
| watcher | watcher := PluggableButtonMorph new changeTableLayout; cellPositioning: #topLeft; model: [anInspectorField inspector object inspect]; action: #value; yourself.
watcher addMorph: ((UpdatingStringMorph on: anInspectorField selector: #value) stepTime: 1000 "msecs"; yourself); addMorph: (('of ', (anInspectorField inspector object printString truncateWithElipsisTo: 40)) asMorph font: Preferences standardBalloonHelpFont yourself); addMorph: (anInspectorField name asString asMorph font: Preferences standardBalloonHelpFont emphasis: TextEmphasis bold emphasisCode; yourself).
watcher center: evt position. watcher bounds: (watcher bounds translatedToBeWithin: self bounds). + watcher openInWorld. + ^ watcher! - watcher openInWorld.!
Item was changed: ----- Method: PasteUpMorph>>dropSourceCode:event: (in category 'event handling') ----- dropSourceCode: anObject event: evt + "Open and answer a tool on the dropped object."
(anObject isMethodReference and: [anObject isValid]) ifTrue: [^ self dropSourceCode: anObject compiledMethod event: evt]. (anObject isClassReference and: [anObject isValid]) ifTrue: [^ self dropSourceCode: anObject actualClass event: evt].
(anObject isBehavior or: [anObject isCompiledMethod]) ifTrue: [ | tool window | tool := anObject isBehavior ifTrue: [SystemBrowser default new setClass: anObject] ifFalse: [CodeHolder new setClass: anObject methodClass selector: anObject selector]. window := ToolBuilder open: tool. window center: evt position. + window bounds: (window bounds translatedToBeWithin: self bounds). + ^ window]. - window bounds: (window bounds translatedToBeWithin: self bounds)].
+ ^ anObject isString + ifTrue: [anObject edit]! - anObject isString - ifTrue: [anObject edit].!
squeak-dev@lists.squeakfoundation.org