Christoph Thiede uploaded a new version of Tools to project The Inbox:
http://source.squeak.org/inbox/Tools-ct.1214.mcz
==================== Summary ====================
Name: Tools-ct.1214
Author: ct
Time: 3 June 2023, 6:52:38.283136 pm
UUID: b37182a9-07fd-6045-a122-9e5c2458c589
Ancestors: Tools-ct.1213
Proposal: Sort classes in ClassListBrowser, analogously to SystemNavigation>>#allMethodsSelect:.
=============== Diff against Tools-ct.1213 ===============
Item was changed:
----- Method: ClassListBrowser class>>browseClassesSatisfying:title: (in category 'instance creation') -----
browseClassesSatisfying: classBlock title: aTitle
"Put up a ClassListBrowser showing all classes that satisfy the classBlock."
self newOnClassesNamed:
(self systemNavigation allClasses select: [:c | (classBlock value: c) == true]
+ thenCollect: [:c | c name]) sorted
- thenCollect: [:c | c name])
label: aTitle!
Christoph Thiede uploaded a new version of Tools to project The Inbox:
http://source.squeak.org/inbox/Tools-ct.1211.mcz
==================== Summary ====================
Name: Tools-ct.1211
Author: ct
Time: 1 June 2023, 8:26:54.735263 pm
UUID: 0b71a9d8-b26d-854e-83ae-89d560db27a4
Ancestors: Tools-ct.1210
Proposal: In truncated file lists, inserts a link for reading the entire file. More observable than the context menu. Uses color and emphasis for highlighting the truncation message.
=============== Diff against Tools-ct.1210 ===============
Item was added:
+ ----- Method: FileList>>decorateTruncatedText:size:limit: (in category 'private') -----
+ decorateTruncatedText: truncatedText size: size limit: limit
+
+ | args |
+ args := {
+ fileName. size. limit.
+ 'Click here' translated asText
+ addAttribute: (PluggableTextAttribute evalBlock: [self get]);
+ addAttribute: TextEmphasis bold;
+ yourself }.
+ ^ Text streamContents: [:stream |
+ stream withAttributes: {TextColor red. TextEmphasis italic} do: [
+ stream nextPutAll: ('File ''{1}'' is {2} bytes long.
+ {4} to read the entire file.
+
+ Here are the first {3} characters...
+ ------------------------------------------
+ ' translated
+ asText format: args)].
+ stream nextPutAll: truncatedText.
+ stream withAttributes: {TextColor red. TextEmphasis italic} do: [
+ stream nextPutAll: ('
+ ------------------------------------------
+ ... end of the first {3} characters.
+ {4} to read the entire file.' translated
+ asText format: args)]]!
Item was changed:
----- Method: FileList>>readContentsBrief: (in category 'private') -----
readContentsBrief: brevityFlag
"Read the contents of the receiver's selected file, unless it is too long, in which case show just the first 5000 characters. Don't create a file if it doesn't already exist."
| f fileSize first5000 |
brevityFlag ifTrue: [
directory isRemoteDirectory ifTrue: [^ self readServerBrief]].
f := directory oldFileOrNoneNamed: self fullName.
f ifNil: [^ 'For some reason, this file cannot be read' translated].
self setDefaultEncoderFor: f.
(brevityFlag not or: [(fileSize := f size) <= 100000]) ifTrue:
+ [brevityState := #fullFile. "don't change till actually read"
+ ^ contents := f contentsOfEntireFile].
- [contents := f contentsOfEntireFile.
- brevityState := #fullFile. "don't change till actually read"
- ^ contents].
"if brevityFlag is true, don't display long files when first selected"
first5000 := f next: 5000.
f close.
- contents := 'File ''{1}'' is {2} bytes long.
- You may use the ''get'' command to read the entire file.
-
- Here are the first 5000 characters...
- ------------------------------------------
- {3}
- ------------------------------------------
- ... end of the first 5000 characters.' translated format: {fileName. fileSize. first5000}.
brevityState := #briefFile. "don't change till actually read"
+ ^ contents := self decorateTruncatedText: first5000 size: fileSize limit: 5000!
- ^ contents.
- !
Item was changed:
----- Method: FileList>>readContentsHex: (in category 'private') -----
readContentsHex: brevity
"retrieve the contents from the external file unless it is too long.
Don't create a file here. Check if exists."
| f size data hexData s |
f := directory oldFileOrNoneNamed: self fullName.
f == nil ifTrue: [^ 'For some reason, this file cannot be read' translated].
f binary.
((size := f size)) > 5000 & brevity
ifTrue: [data := f next: 10000. f close. brevityState := #briefHex]
ifFalse: [data := f contentsOfEntireFile. brevityState := #fullHex].
s := WriteStream on: (String new: data size*4).
0 to: data size-1 by: 16 do:
[:loc | s nextPutAll: loc printStringHex; space;
nextPut: $(; print: loc; nextPut: $); space; tab.
loc+1 to: (loc+16 min: data size) do: [:i | s nextPutAll: (data at: i) printStringHex; space].
s cr].
hexData := s contents.
+ (brevity not or: [size <= 5000]) ifTrue: [
+ ^ contents := hexData].
+
+ ^ contents := self decorateTruncatedText: hexData size: size limit: 5000!
- ^ contents := ((size > 5000) & brevity
- ifTrue: ['File ''{1}'' is {2} bytes long.
- You may use the ''get'' command to read the entire file.
-
- Here are the first 5000 characters...
- ------------------------------------------
- {3}
- ------------------------------------------
- ... end of the first 5000 characters.' translated format: {fileName. size. hexData}]
- ifFalse: [hexData]).
- !
Item was changed:
----- Method: FileList>>readServerBrief (in category 'private') -----
readServerBrief
+ | lString sizeStr fsize ff first3500 parts |
- | lString sizeStr fsize ff first5000 parts |
"If file on server is known to be long, just read the beginning. Cheat badly by reading the fileList string."
listIndex = 0 ifTrue: [^ self].
"Get size from file list entry"
lString := list at: listIndex.
parts := lString findTokens: '()'.
sortMode = #name ifTrue: [sizeStr := (parts second findTokens: ' ') third].
sortMode = #date ifTrue: [sizeStr := (parts first findTokens: ' ') third].
sortMode = #size ifTrue: [sizeStr := (parts first findTokens: ' ') first].
fsize := (sizeStr copyWithout: $,) asNumber.
fsize <= 50000 ifTrue:
[ff := directory oldFileOrNoneNamed: self fullName.
ff ifNil: [^ 'For some reason, this file cannot be read' translated].
contents := ff contentsOfEntireFile.
brevityState := #fullFile. "don't change till actually read"
^ contents].
"if brevityFlag is true, don't display long files when first selected"
+ first3500 := directory getOnly: 3500 from: fileName.
- first5000 := directory getOnly: 3500 from: fileName.
- contents := 'File ''{1}'' is {2} bytes long.
- You may use the ''get'' command to read the entire file.
-
- Here are the first 3500 characters...
- ------------------------------------------
- {3}
- ------------------------------------------
- ... end of the first 3500 characters.' translated format: {fileName. sizeStr. first5000}.
brevityState := #briefFile. "don't change till actually read"
+ ^ contents := self decorateTruncatedText: first3500 size: sizeStr limit: 3500!
- ^ contents.
-
- !
Christoph Thiede uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-ct.1211.mcz
==================== Summary ====================
Name: Tools-ct.1211
Author: ct
Time: 1 June 2023, 8:26:54.735263 pm
UUID: 0b71a9d8-b26d-854e-83ae-89d560db27a4
Ancestors: Tools-ct.1210
Proposal: In truncated file lists, inserts a link for reading the entire file. More observable than the context menu. Uses color and emphasis for highlighting the truncation message.
=============== Diff against Tools-ct.1210 ===============
Item was added:
+ ----- Method: FileList>>decorateTruncatedText:size:limit: (in category 'private') -----
+ decorateTruncatedText: truncatedText size: size limit: limit
+
+ | args |
+ args := {
+ fileName. size. limit.
+ 'Click here' translated asText
+ addAttribute: (PluggableTextAttribute evalBlock: [self get]);
+ addAttribute: TextEmphasis bold;
+ yourself }.
+ ^ Text streamContents: [:stream |
+ stream withAttributes: {TextColor red. TextEmphasis italic} do: [
+ stream nextPutAll: ('File ''{1}'' is {2} bytes long.
+ {4} to read the entire file.
+
+ Here are the first {3} characters...
+ ------------------------------------------
+ ' translated
+ asText format: args)].
+ stream nextPutAll: truncatedText.
+ stream withAttributes: {TextColor red. TextEmphasis italic} do: [
+ stream nextPutAll: ('
+ ------------------------------------------
+ ... end of the first {3} characters.
+ {4} to read the entire file.' translated
+ asText format: args)]]!
Item was changed:
----- Method: FileList>>readContentsBrief: (in category 'private') -----
readContentsBrief: brevityFlag
"Read the contents of the receiver's selected file, unless it is too long, in which case show just the first 5000 characters. Don't create a file if it doesn't already exist."
| f fileSize first5000 |
brevityFlag ifTrue: [
directory isRemoteDirectory ifTrue: [^ self readServerBrief]].
f := directory oldFileOrNoneNamed: self fullName.
f ifNil: [^ 'For some reason, this file cannot be read' translated].
self setDefaultEncoderFor: f.
(brevityFlag not or: [(fileSize := f size) <= 100000]) ifTrue:
+ [brevityState := #fullFile. "don't change till actually read"
+ ^ contents := f contentsOfEntireFile].
- [contents := f contentsOfEntireFile.
- brevityState := #fullFile. "don't change till actually read"
- ^ contents].
"if brevityFlag is true, don't display long files when first selected"
first5000 := f next: 5000.
f close.
- contents := 'File ''{1}'' is {2} bytes long.
- You may use the ''get'' command to read the entire file.
-
- Here are the first 5000 characters...
- ------------------------------------------
- {3}
- ------------------------------------------
- ... end of the first 5000 characters.' translated format: {fileName. fileSize. first5000}.
brevityState := #briefFile. "don't change till actually read"
+ ^ contents := self decorateTruncatedText: first5000 size: fileSize limit: 5000!
- ^ contents.
- !
Item was changed:
----- Method: FileList>>readContentsHex: (in category 'private') -----
readContentsHex: brevity
"retrieve the contents from the external file unless it is too long.
Don't create a file here. Check if exists."
| f size data hexData s |
f := directory oldFileOrNoneNamed: self fullName.
f == nil ifTrue: [^ 'For some reason, this file cannot be read' translated].
f binary.
((size := f size)) > 5000 & brevity
ifTrue: [data := f next: 10000. f close. brevityState := #briefHex]
ifFalse: [data := f contentsOfEntireFile. brevityState := #fullHex].
s := WriteStream on: (String new: data size*4).
0 to: data size-1 by: 16 do:
[:loc | s nextPutAll: loc printStringHex; space;
nextPut: $(; print: loc; nextPut: $); space; tab.
loc+1 to: (loc+16 min: data size) do: [:i | s nextPutAll: (data at: i) printStringHex; space].
s cr].
hexData := s contents.
+ (brevity not or: [size <= 5000]) ifTrue: [
+ ^ contents := hexData].
+
+ ^ contents := self decorateTruncatedText: hexData size: size limit: 5000!
- ^ contents := ((size > 5000) & brevity
- ifTrue: ['File ''{1}'' is {2} bytes long.
- You may use the ''get'' command to read the entire file.
-
- Here are the first 5000 characters...
- ------------------------------------------
- {3}
- ------------------------------------------
- ... end of the first 5000 characters.' translated format: {fileName. size. hexData}]
- ifFalse: [hexData]).
- !
Item was changed:
----- Method: FileList>>readServerBrief (in category 'private') -----
readServerBrief
+ | lString sizeStr fsize ff first3500 parts |
- | lString sizeStr fsize ff first5000 parts |
"If file on server is known to be long, just read the beginning. Cheat badly by reading the fileList string."
listIndex = 0 ifTrue: [^ self].
"Get size from file list entry"
lString := list at: listIndex.
parts := lString findTokens: '()'.
sortMode = #name ifTrue: [sizeStr := (parts second findTokens: ' ') third].
sortMode = #date ifTrue: [sizeStr := (parts first findTokens: ' ') third].
sortMode = #size ifTrue: [sizeStr := (parts first findTokens: ' ') first].
fsize := (sizeStr copyWithout: $,) asNumber.
fsize <= 50000 ifTrue:
[ff := directory oldFileOrNoneNamed: self fullName.
ff ifNil: [^ 'For some reason, this file cannot be read' translated].
contents := ff contentsOfEntireFile.
brevityState := #fullFile. "don't change till actually read"
^ contents].
"if brevityFlag is true, don't display long files when first selected"
+ first3500 := directory getOnly: 3500 from: fileName.
- first5000 := directory getOnly: 3500 from: fileName.
- contents := 'File ''{1}'' is {2} bytes long.
- You may use the ''get'' command to read the entire file.
-
- Here are the first 3500 characters...
- ------------------------------------------
- {3}
- ------------------------------------------
- ... end of the first 3500 characters.' translated format: {fileName. sizeStr. first5000}.
brevityState := #briefFile. "don't change till actually read"
+ ^ contents := self decorateTruncatedText: first3500 size: sizeStr limit: 3500!
- ^ contents.
-
- !
Christoph Thiede uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-ct.1213.mcz
==================== Summary ====================
Name: Tools-ct.1213
Author: ct
Time: 2 June 2023, 6:27:04.95093 pm
UUID: 69d99752-1b0c-144f-96ed-57336ae8b8bd
Ancestors: Tools-mt.1211, Tools-ct.1211
Merges Tools-ct.1211 (FileList link and emphasis for truncation).
Revision:
Reuses the style from code comments for the truncation message.
=============== Diff against Tools-mt.1211 ===============
Item was added:
+ ----- Method: FileList>>decorateTruncatedText:size:limit: (in category 'private') -----
+ decorateTruncatedText: truncatedText size: size limit: limit
+
+ | attribs args |
+ attribs := ((((self userInterfaceTheme get: #comment for: #SHTextStylerST80) ifNil: [#()])
+ collect: [:ea | ea isColor ifTrue: [TextColor color: ea] ifFalse: [ea]])
+ ifEmpty: [{TextColor color: Color cyan muchDarker}])
+ copyWith: TextEmphasis italic.
+ args := {
+ fileName. size. limit.
+ 'Click here' translated asText
+ addAttribute: (PluggableTextAttribute evalBlock: [self get]);
+ addAttribute: TextEmphasis bold;
+ yourself }.
+ ^ Text streamContents: [:stream |
+ stream withAttributes: attribs do: [
+ stream nextPutAll: ('File ''{1}'' is {2} bytes long.
+ {4} to read the entire file.
+
+ Here are the first {3} characters...
+ ------------------------------------------
+ ' translated
+ asText format: args)].
+ stream nextPutAll: truncatedText.
+ stream withAttributes: attribs do: [
+ stream nextPutAll: ('
+ ------------------------------------------
+ ... end of the first {3} characters.
+ {4} to read the entire file.' translated
+ asText format: args)]]!
Item was changed:
----- Method: FileList>>readContentsBrief: (in category 'private') -----
readContentsBrief: brevityFlag
"Read the contents of the receiver's selected file, unless it is too long, in which case show just the first 5000 characters. Don't create a file if it doesn't already exist."
| f fileSize first5000 |
brevityFlag ifTrue: [
directory isRemoteDirectory ifTrue: [^ self readServerBrief]].
f := directory oldFileOrNoneNamed: self fullName.
f ifNil: [^ 'For some reason, this file cannot be read' translated].
self setDefaultEncoderFor: f.
(brevityFlag not or: [(fileSize := f size) <= 100000]) ifTrue:
+ [brevityState := #fullFile. "don't change till actually read"
+ ^ contents := f contentsOfEntireFile].
- [contents := f contentsOfEntireFile.
- brevityState := #fullFile. "don't change till actually read"
- ^ contents].
"if brevityFlag is true, don't display long files when first selected"
first5000 := f next: 5000.
f close.
- contents := 'File ''{1}'' is {2} bytes long.
- You may use the ''get'' command to read the entire file.
-
- Here are the first 5000 characters...
- ------------------------------------------
- {3}
- ------------------------------------------
- ... end of the first 5000 characters.' translated format: {fileName. fileSize. first5000}.
brevityState := #briefFile. "don't change till actually read"
+ ^ contents := self decorateTruncatedText: first5000 size: fileSize limit: 5000!
- ^ contents.
- !
Item was changed:
----- Method: FileList>>readContentsHex: (in category 'private') -----
readContentsHex: brevity
"retrieve the contents from the external file unless it is too long.
Don't create a file here. Check if exists."
| f size data hexData s |
f := directory oldFileOrNoneNamed: self fullName.
f == nil ifTrue: [^ 'For some reason, this file cannot be read' translated].
f binary.
((size := f size)) > 5000 & brevity
ifTrue: [data := f next: 10000. f close. brevityState := #briefHex]
ifFalse: [data := f contentsOfEntireFile. brevityState := #fullHex].
s := WriteStream on: (String new: data size*4).
0 to: data size-1 by: 16 do:
[:loc | s nextPutAll: loc printStringHex; space;
nextPut: $(; print: loc; nextPut: $); space; tab.
loc+1 to: (loc+16 min: data size) do: [:i | s nextPutAll: (data at: i) printStringHex; space].
s cr].
hexData := s contents.
+ (brevity not or: [size <= 5000]) ifTrue: [
+ ^ contents := hexData].
+
+ ^ contents := self decorateTruncatedText: hexData size: size limit: 5000!
- ^ contents := ((size > 5000) & brevity
- ifTrue: ['File ''{1}'' is {2} bytes long.
- You may use the ''get'' command to read the entire file.
-
- Here are the first 5000 characters...
- ------------------------------------------
- {3}
- ------------------------------------------
- ... end of the first 5000 characters.' translated format: {fileName. size. hexData}]
- ifFalse: [hexData]).
- !
Item was changed:
----- Method: FileList>>readServerBrief (in category 'private') -----
readServerBrief
+ | lString sizeStr fsize ff first3500 parts |
- | lString sizeStr fsize ff first5000 parts |
"If file on server is known to be long, just read the beginning. Cheat badly by reading the fileList string."
listIndex = 0 ifTrue: [^ self].
"Get size from file list entry"
lString := list at: listIndex.
parts := lString findTokens: '()'.
sortMode = #name ifTrue: [sizeStr := (parts second findTokens: ' ') third].
sortMode = #date ifTrue: [sizeStr := (parts first findTokens: ' ') third].
sortMode = #size ifTrue: [sizeStr := (parts first findTokens: ' ') first].
fsize := (sizeStr copyWithout: $,) asNumber.
fsize <= 50000 ifTrue:
[ff := directory oldFileOrNoneNamed: self fullName.
ff ifNil: [^ 'For some reason, this file cannot be read' translated].
contents := ff contentsOfEntireFile.
brevityState := #fullFile. "don't change till actually read"
^ contents].
"if brevityFlag is true, don't display long files when first selected"
+ first3500 := directory getOnly: 3500 from: fileName.
- first5000 := directory getOnly: 3500 from: fileName.
- contents := 'File ''{1}'' is {2} bytes long.
- You may use the ''get'' command to read the entire file.
-
- Here are the first 3500 characters...
- ------------------------------------------
- {3}
- ------------------------------------------
- ... end of the first 3500 characters.' translated format: {fileName. sizeStr. first5000}.
brevityState := #briefFile. "don't change till actually read"
+ ^ contents := self decorateTruncatedText: first3500 size: sizeStr limit: 3500!
- ^ contents.
-
- !
Christoph Thiede uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-ct.1042.mcz
==================== Summary ====================
Name: Collections-ct.1042
Author: ct
Time: 2 June 2023, 5:57:00.846658 pm
UUID: dbf08d1e-540d-494e-82fa-4ea380f0c3fd
Ancestors: Collections-ct.1041
Improves commentary and internal names for HtmlReadWriter permissions. Thanks to Marcel for the feedback!
=============== Diff against Collections-ct.1041 ===============
Item was changed:
----- Method: HtmlReadWriter>>defaultPermissions (in category 'initialize-release') -----
defaultPermissions
+ "Things that the receiver is allowed or not to do. For instance, clients may restrict network access or code execution through the #shall... accessors."
+ ^ Set with: #downloadResourcesPermission with: #evaluateResourcesPermission!
- ^ Set with: #downloadResources with: #evaluateResources!
Item was changed:
----- Method: HtmlReadWriter>>shallDownloadResources (in category 'accessing') -----
shallDownloadResources
+ "Indicate whether the receiver shall download resources during parsing, such as an image URL in '<img src=""https://squeak.org/static/img/squeak.png"">'. May be useful for performance or security concerns."
- "Indicate whether the receiver shall download resources during parsing, such as an image URL in "'<img src="https://squeak.org/static/img/squeak.png">'." May be useful for performance or security concerns."
+ ^ self hasPermission: #downloadResourcesPermission!
- ^ self hasPermission: #downloadResources!
Item was changed:
----- Method: HtmlReadWriter>>shallDownloadResources: (in category 'accessing') -----
shallDownloadResources: aBoolean
+ "Set whether the receiver shall download resources during parsing, such as an image URL in '<img src=""https://squeak.org/static/img/squeak.png"">'. May be useful for performance or security concerns."
- "Set whether the receiver shall download resources during parsing, such as an image URL in "'<img src="https://squeak.org/static/img/squeak.png">'." May be useful for performance or security concerns."
+ ^ self setPermission: #downloadResourcesPermission to: aBoolean!
- ^ self setPermission: #downloadResources to: aBoolean!
Item was changed:
----- Method: HtmlReadWriter>>shallEvaluateResources (in category 'accessing') -----
shallEvaluateResources
+ "Indicate whether the receiver shall evaluate resources during parsing, such as an code URI in '<img src=""code://MenuIcons squeakIcon"">'. May be useful for performance or security concerns."
- "Indicate whether the receiver shall evaluate resources during parsing, such as an code URI in "'<img src="code://MenuIcons squeakIcon">'." May be useful for performance or security concerns."
+ ^ self hasPermission: #evaluateResourcesPermission!
- ^ self hasPermission: #evaluateResources!
Item was changed:
----- Method: HtmlReadWriter>>shallEvaluateResources: (in category 'accessing') -----
shallEvaluateResources: aBoolean
+ "Set whether the receiver shall evaluate resources during parsing, such as an code URI in '<img src=""code://MenuIcons squeakIcon"">'. May be useful for performance or security concerns."
- "Set whether the receiver shall evaluate resources during parsing, such as an code URI in "'<img src="code://MenuIcons squeakIcon">'." May be useful for performance or security concerns."
+ ^ self setPermission: #evaluateResourcesPermission to: aBoolean!
- ^ self setPermission: #evaluateResources to: aBoolean!
Item was changed:
(PackageInfo named: 'Collections') postscript: '"Make sure the symbol table consists of immutable sets"
#(SymbolTable NewSymbols) do: [ :variableName |
(Symbol classPool at: variableName) beReadOnlyObject ].
"Add new instvars to HtmlReadWriter"
HtmlReadWriter allSubInstancesDo: [:ea |
+ (ea instVarNamed: ''permissions'')
+ ifNil: [ea instVarNamed: ''permissions'' put: ea defaultPermissions]
+ ifNotNil: [
+ ea instVarNamed: ''permissions'' put:
+ ((ea instVarNamed: ''permissions'') collect: [:sym | (sym , ''Permission'') asSymbol])].
- (ea instVarNamed: ''permissions'') ifNil: [
- ea instVarNamed: ''permissions'' put: ea defaultPermissions].
(ea instVarNamed: ''indent'') ifNil: [
ea instVarNamed: ''indent'' put: 0].
(ea instVarNamed: ''preformattingLevel'') ifNil: [
ea instVarNamed: ''preformattingLevel'' put:
(ea breakLines ifTrue: [0] ifFalse: [1])].
(ea instVarNamed: ''exclusionLevel'') ifNil: [
ea instVarNamed: ''exclusionLevel'' put: 0].
(ea instVarNamed: ''lastFixedWhitespace'') ifNil: [
ea instVarNamed: ''lastFixedWhitespace'' put: 0]].'!
Christoph Thiede uploaded a new version of ToolBuilder-Kernel to project The Trunk:
http://source.squeak.org/trunk/ToolBuilder-Kernel-ct.166.mcz
==================== Summary ====================
Name: ToolBuilder-Kernel-ct.166
Author: ct
Time: 1 June 2023, 9:43:36.015644 pm
UUID: 3cc29916-683c-744a-9ed0-fb0135150c83
Ancestors: ToolBuilder-Kernel-mt.165
Merges UIManagerInformTitle.1.cs:
Adds UIManager>>#inform:title:, analogously to existing #confirm:title.
Project uiManager inform: 'Squeak is great!' title: 'Important Note'
=============== Diff against ToolBuilder-Kernel-mt.165 ===============
Item was added:
+ ----- Method: UIManager>>inform:title: (in category 'ui requests') -----
+ inform: aString title: titleString
+ "Display a message for the user to read and then dismiss"
+ ^self subclassResponsibility!
Christoph Thiede uploaded a new version of ToolBuilder-MVC to project The Trunk:
http://source.squeak.org/trunk/ToolBuilder-MVC-ct.72.mcz
==================== Summary ====================
Name: ToolBuilder-MVC-ct.72
Author: ct
Time: 1 June 2023, 9:43:31.132644 pm
UUID: 948f1692-1d36-124e-a31e-6695f346ced9
Ancestors: ToolBuilder-MVC-mt.71
Complements ToolBuilder-Kernel-ct.166 (UIManager>>#inform:title:).
=============== Diff against ToolBuilder-MVC-mt.71 ===============
Item was added:
+ ----- Method: MVCUIManager>>inform:title: (in category 'ui requests') -----
+ inform: aString title: titleString
+ "Display a message for the user to read and then dismiss"
+ self askForProvidedAnswerTo: aString ifSupplied: [:answer |
+ ^ answer].
+
+ ^ PopUpMenu inform: (self dialogStringFromQuery: aString withTitle: titleString)!
Christoph Thiede uploaded a new version of ToolBuilder-Morphic to project The Trunk:
http://source.squeak.org/trunk/ToolBuilder-Morphic-ct.343.mcz
==================== Summary ====================
Name: ToolBuilder-Morphic-ct.343
Author: ct
Time: 1 June 2023, 9:43:24.893644 pm
UUID: e5c79bff-4726-b448-a6af-5890a06b246b
Ancestors: ToolBuilder-Morphic-ct.342
Complements ToolBuilder-Kernel-ct.166 (UIManager>>#inform:title:).
=============== Diff against ToolBuilder-Morphic-ct.342 ===============
Item was added:
+ ----- Method: MorphicUIManager>>inform:title: (in category 'ui requests') -----
+ inform: aString title: titleString
+ "Display a message for the user to read and then dismiss"
+ self askForProvidedAnswerTo: aString ifSupplied: [:answer |
+ ^ answer].
+
+ ^ UserDialogBoxMorph inform: aString title: titleString!