<body><div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000">
                                        Hi Christoph.<div><br></div><div>> <span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">- Ask for a useful variable name when dropping something into a workspace</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Note that adding a disruptive prompt for the user is a substantial change to existing workflows. It would be better if one could come up with a better variable name automatically instead of prompting the user.</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">What about using String >> #findFeatures and a serial number that starts at 1 for each new workspace?</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif"><span style="font-size: 13px"> a BorderedMorph(3550942) -> #(bordered morph) -> morph1</span></span><br></div><div><span style="font-family: Arial, Helvetica, sans-serif"><span style="font-size: 13px"><br></span></span></div><div><span style="font-family: Arial, Helvetica, sans-serif"><span style="font-size: 13px">Best,</span></span></div><div><span style="font-family: Arial, Helvetica, sans-serif"><span style="font-size: 13px">Marcel</span></span></div><div class="mb_sig"></div><blockquote class="history_container" type="cite" style="border-left-style:solid;border-width:1px; margin-top:20px; margin-left:0px;padding-left:10px;">
                        <p style="color: #AAAAAA; margin-top: 10px;">Am 20.03.2020 18:58:29 schrieb commits@source.squeak.org <commits@source.squeak.org>:</p><div style="font-family:Arial,Helvetica,sans-serif">Christoph Thiede uploaded a new version of Tools to project The Inbox:<br>http://source.squeak.org/inbox/Tools-ct.962.mcz<br><br>==================== Summary ====================<br><br>Name: Tools-ct.962<br>Author: ct<br>Time: 20 March 2020, 6:58:18.856237 pm<br>UUID: c4cbd7b0-ddf5-3b4b-93ed-55e5b2c80465<br>Ancestors: Tools-mt.955<br><br>Makes variable bindings in Workspace more comfortable:<br><br>- Ask for a useful variable name when dropping something into a workspace<br>- Validate variable name before creating inaccessible bindings<br>- Do not propose invalid names at all (for example, dropped class were given an invalid name in the past)<br>- Ask before removing variable bindings. This also increases responsiveness of the UI.<br>- Improves multilingual support<br><br>=============== Diff against Tools-mt.955 ===============<br><br>Item was changed:<br>  ----- Method: Workspace>>acceptDroppingMorph:event:inMorph: (in category 'drag and drop') -----<br>  acceptDroppingMorph: dropee event: evt inMorph: targetMorph <br>+      "Return the dropee to its old position, and add a reference to it at the cursor point."<br>+    <br>-     "Return the dropee to its old position, and add a reference to it at the<br>-        cursor point."<br>   | bindingName externalName reference |<br>        (dropee isKindOf: TransferMorph)<br>              ifTrue: [reference := dropee passenger.<br>                       externalName := dropee passenger className]<br>           ifFalse: [reference := dropee.<br>                        externalName := dropee externalName].<br>         externalName := externalName isOctetString<br>+           ifTrue: [externalName]<br>+               ifFalse: ['a' , externalName].<br>+       <br>+     bindingName := Project uiManager<br>+             request: 'Please enter a name for the dropped object:' translated<br>+            initialAnswer: (externalName withFirstCharacterDownshifted , reference identityHash printString) asLegalSelector.<br>+    bindingName isEmptyOrNil ifTrue: [^ false].<br>+  bindingName := Parser new parseSelector: bindingName.<br>+        bindingName ifNil: [<br>+                 self inform: 'Invalid selector.' translated.<br>+                 ^ false].<br>+    <br>-                             ifTrue: [externalName]<br>-                               ifFalse: ['a' , externalName].<br>-       bindingName := externalName withFirstCharacterDownshifted , reference identityHash printString.<br>-      targetMorph correctSelectionWithString: bindingName , ' '.<br>    (self bindingOf: bindingName)<br>                 value: reference.<br>+    targetMorph correctSelectionWithString: bindingName , ' '.<br>    (dropee isKindOf: TransferMorph)<br>              ifFalse: [dropee rejectDropMorphEvent: evt].<br>+         ^ true "success"!<br>-  ^ true"success"!<br><br>Item was changed:<br>  ----- Method: Workspace>>addModelItemsToWindowMenu: (in category 'menu commands') -----<br>  addModelItemsToWindowMenu: aMenu <br>         <br>      aMenu addLine.<br>        aMenu<br>+                add: 'save contents to file...' translated<br>-           add: 'save contents to file...'<br>               target: self<br>                  action: #saveContentsInFile.<br>          aMenu<br>+                add: 'inspect variables' translated<br>-          add: 'inspect variables'<br>              target: self<br>                  action: #inspectBindings.<br>     aMenu<br>+                add: 'reset variables' translated<br>-            add: 'reset variables'<br>                target: self<br>+                 action: #resetBindings.<br>-              action: #initializeBindings.<br>          aMenu<br>                 addUpdating: #mustDeclareVariableWording<br>              target: self<br>                  action: #toggleVariableDeclarationMode.<br>       aMenu<br>                 addUpdating: #acceptDroppedMorphsWording<br>              target: self<br>                  action: #toggleDroppingMorphForReference.<br>  <br>+        self addToggleStylingMenuItemTo: aMenu.!<br>-     self addToggleStylingMenuItemTo: aMenu.<br>- !<br><br>Item was added:<br>+ ----- Method: Workspace>>resetBindings (in category 'menu commands') -----<br>+ resetBindings<br>+ <br>+     (self bindings notEmpty ==> [self confirm: ('Are you sure you would like to remove {1} variables?' translated format: {self bindings size})])<br>+             ifFalse: [^ self].<br>+   self initializeBindings.!<br><br><br></div></blockquote>
                                        </div></body>