<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<meta content="text/html; charset=UTF-8">
<style type="text/css" style="">
<!--
p
{margin-top:0;
margin-bottom:0}
-->
</style>
<div dir="ltr">
<div id="x_divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Helvetica,sans-serif">
<p>Hi Marcel,</p>
<p><br>
</p>
<p>Thanks!</p>
<p><br>
</p>
<p>> <span>I also bumped the label size from 128 to 512 characters.</span></p>
<p><span><br>
</span></p>
<p><span>Since we are using a dialog window now and this feature is Morphic-only, can't we remove this truncation completely? I do have many workspaces in some of my images with more than 1000s of characters. It would be helpful if I could search the entire
string through the dialog.</span></p>
<p><span><br>
</span></p>
<p><span>Best,</span></p>
<p><span>Christoph</span></p>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von commits@source.squeak.org <commits@source.squeak.org><br>
<b>Gesendet:</b> Freitag, 3. Juni 2022 15:57:23<br>
<b>An:</b> squeak-dev@lists.squeakfoundation.org; packages@lists.squeakfoundation.org<br>
<b>Betreff:</b> [squeak-dev] The Trunk: Morphic-mt.1999.mcz</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">Marcel Taeumel uploaded a new version of Morphic to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Morphic-mt.1999.mcz">http://source.squeak.org/trunk/Morphic-mt.1999.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Morphic-mt.1999<br>
Author: mt<br>
Time: 3 June 2022, 3:57:17.981722 pm<br>
UUID: fa65a07a-3d2b-8544-b5a9-9ad67f734549<br>
Ancestors: Morphic-mt.1998<br>
<br>
Somewhat fixes the UI issue with "Find Workspace..." sub-menu in the "Windows" menu by delegation the choice to an extra dialog window.<br>
<br>
(I proposed this alternative approach to Eliot (eem) a few weeks ago to which he agreed. I also bumped the label size from 128 to 512 characters.)<br>
<br>
=============== Diff against Morphic-mt.1998 ===============<br>
<br>
Item was added:<br>
+ ----- Method: TheWorldMainDockingBar>>findWorkspace (in category 'submenu - windows') -----<br>
+ findWorkspace<br>
+ <br>
+ | allWorkspaces labels values |<br>
+ allWorkspaces := Set new.<br>
+ Project allMorphicProjects do:<br>
+ [:project|<br>
+ (self allVisibleWindowsIn: project world) do:<br>
+ [:window|<br>
+ (window model isKindOf: Workspace) ifTrue:<br>
+ [allWorkspaces add:<br>
+ { window model.<br>
+ window.<br>
+ project.<br>
+ window model contents ifEmpty:<br>
+ [(window model dependents detect: [:d| d isTextView] ifNone: nil) textMorph contents] }]]].<br>
+ allWorkspaces isEmpty ifTrue:<br>
+ [^ self inform: 'No workspaces found.' translated].<br>
+ "Sort workspaces with non-empty ones first..."<br>
+ labels := OrderedCollection new.<br>
+ values := OrderedCollection new.<br>
+ (allWorkspaces sorted:<br>
+ [:t1 :t2|<br>
+ t1 last isEmpty == t2 last isEmpty<br>
+ ifTrue: [t1 second label <= t2 second label]<br>
+ ifFalse: [t1 last notEmpty]]) do:<br>
+ [:tuple|<br>
+ labels add: tuple second label, ': ', ((tuple last asString contractTo: 512) ifEmpty: ['(empty)']).<br>
+ values add: (MessageSend receiver: self selector: #selectWorkspace:window:inProject:contents: arguments: tuple)].<br>
+ (Project uiManager<br>
+ chooseFrom: labels<br>
+ values: values<br>
+ title: 'Find Workspace' translated) value.!<br>
<br>
Item was changed:<br>
----- Method: TheWorldMainDockingBar>>listWindowsOn: (in category 'submenu - windows') -----<br>
listWindowsOn: menu<br>
<br>
| windows |<br>
menu<br>
addLine;<br>
add: 'Collapse all windows' target: (Project current world) selector: #collapseAllWindows;<br>
addItem: [:item | item <br>
contents: 'Find Workspace...';<br>
+ target: self;<br>
+ selector: #findWorkspace];<br>
- subMenuUpdater: self<br>
- selector: #workspacesMenuFor:<br>
- arguments: #()];<br>
addLine;<br>
add: 'Close all windows' target: self selector: #closeAllWindowsUnsafe;<br>
addItem: [:item | item<br>
contents: 'Close all windows without changes';<br>
target: self;<br>
icon: MenuIcons smallBroomIcon;<br>
selector: #closeAllWindows];<br>
add: 'Close all windows but workspaces' target: self selector: #closeAllWindowsButWorkspaces;<br>
addLine.<br>
<br>
windows := self allVisibleWindows sorted: [:winA :winB |<br>
((winA model isNil or: [winB model isNil]) or: [winA model name = winB model name])<br>
ifTrue: [winA label < winB label]<br>
ifFalse: [winA model name < winB model name]].<br>
windows ifEmpty: [ <br>
menu addItem: [ :item | <br>
item<br>
contents: 'No Windows' translated;<br>
isEnabled: false ] ].<br>
windows do: [ :each |<br>
| windowColor |<br>
windowColor := (each model respondsTo: #windowColorToUse)<br>
ifTrue: [each model windowColorToUse]<br>
ifFalse: [UserInterfaceTheme current get: #uniformWindowColor for: Model].
<br>
menu addItem: [ :item |<br>
item <br>
contents: (self windowMenuItemLabelFor: each);<br>
icon: (self colorIcon: windowColor);<br>
target: each;<br>
selector: #comeToFront;<br>
subMenuUpdater: self<br>
selector: #windowMenuFor:on:<br>
arguments: { each };<br>
action: [ each beKeyWindow; expand ] ] ].!<br>
<br>
Item was removed:<br>
- ----- Method: TheWorldMainDockingBar>>workspacesMenuFor: (in category 'submenu - windows') -----<br>
- workspacesMenuFor: anUpdatingMenuMorph<br>
- <br>
- | allWorkspaces |<br>
- allWorkspaces := Set new.<br>
- Project allMorphicProjects do:<br>
- [:project|<br>
- (self allVisibleWindowsIn: project world) do:<br>
- [:window|<br>
- (window model isKindOf: Workspace) ifTrue:<br>
- [allWorkspaces add:<br>
- { window model.<br>
- window.<br>
- project.<br>
- window model contents ifEmpty:<br>
- [(window model dependents detect: [:d| d isTextView] ifNone: nil) textMorph contents] }]]].<br>
- allWorkspaces isEmpty ifTrue:<br>
- [^anUpdatingMenuMorph addItem:<br>
- [:item | item<br>
- contents: 'no workspaces found']].<br>
- "Sort workspaces with non-empty ones first..."<br>
- (allWorkspaces sorted:<br>
- [:t1 :t2|<br>
- t1 last isEmpty == t2 last isEmpty<br>
- ifTrue: [t1 second label <= t2 second label]<br>
- ifFalse: [t1 last notEmpty]]) do:<br>
- [:tuple|<br>
- anUpdatingMenuMorph addItem:<br>
- [:item | item<br>
- contents: tuple second label, ': ', ((tuple last asString contractTo: 128) ifEmpty: ['(empty)']);<br>
- target: self;<br>
- selector: #selectWorkspace:window:inProject:contents:;<br>
- arguments: tuple]]!<br>
<br>
Item was changed:<br>
+ (PackageInfo named: 'Morphic') postscript: 'TheWorldMainDockingBar updateInstances. "Updates menu for Windows > Find Workspace ..."'!<br>
- (PackageInfo named: 'Morphic') postscript: 'Preferences maxBalloonHelpLineLength: 45.<br>
- <br>
- "See commentary in MorphicProject >> #startUpActions."<br>
- WorldState disableDeferredUpdates: Smalltalk platformName = ''Mac OS''.'!<br>
<br>
<br>
</div>
</span></font>
</body>
</html>