[squeak-dev] Review Request: toolCodePane.2.cs
christoph.thiede at student.hpi.uni-potsdam.de
christoph.thiede at student.hpi.uni-potsdam.de
Tue Apr 5 18:51:22 UTC 2022
=============== Summary ===============
Change Set: toolCodePane
Date: 5 April 2022
Author: Christoph Thiede
Improves MVC compatibility for view accesses from model.
* Moves up #someTextPaneWithSelector: & friends from StringHolder to Model and improves documentation on the antiidiomatic pattern they represent.
* Fixes 'run to selection' & 'tally it' button in MVC debugger.
* Improves MVC compatibility in Monticello save version dialog (still, showModally does not yet work, though.)
=============== Diff ===============
CodeHolder>>searchPane {categories & search pane} · ct 4/5/2022 20:19 (changed)
searchPane
"Answer the search pane associated with the receiver in its window, or nil if none. Morphic only"
- ^ self textPaneWithSelector: #lastSearchString
+ | pane |
+ pane := self someTextPaneWithSelector: #lastSearchString.
+ ^ pane isMorph ifTrue: [pane]
Debugger>>codePaneSelectionInterval {code pane} · ct 4/5/2022 19:50 (changed)
codePaneSelectionInterval
- ^ self codeTextMorph
+ ^ self codeTextPane
ifNotNil: [:cp | cp selectionInterval]
ifNil: [Interval from: 0 to: 0]
Debugger>>getSelectedText {tally support} · ct 4/5/2022 19:50 (changed)
getSelectedText
| m interval text |
- m := self codeTextMorph ifNil: [^ ''].
+ m := self codeTextPane ifNil: [^ ''].
interval := m selectionInterval.
text := m text.
^ text copyFrom: interval first to: interval last
Debugger>>tally {tally support} · ct 4/5/2022 19:46 (changed)
tally
- self codeTextMorph ifNotNil: [:o| o tallyIt] ifNil: [Beeper beep]
+ self codeTextPane ifNotNil: [:o | o tallyIt] ifNil: [Beeper beep]
MCSaveVersionDialog>>accept {actions} · ct 4/5/2022 19:57 (changed)
accept
| logMessage logMessageWidget |
self updateItems.
- logMessage := (logMessageWidget := self findTextMorph: #logMessage) text asString.
+ logMessage := (logMessageWidget := self someTextPaneWithSelector: #logMessage) text asString.
(logMessage isEmpty or: [logMessage beginsWith: 'empty log message'])
ifTrue:
- [(UIManager confirm: 'the log message is empty; are you sure you want to commit') ifFalse: [^ self]]
+ [(Project uiManager confirm: 'the log message is empty; are you sure you want to commit') ifFalse: [^ self]]
ifFalse: [logMessageWidget accept].
self answer: {
- (self findTextMorph: #versionName) text asString.
+ (self someTextPaneWithSelector: #versionName) text asString.
logMessage.
ignore }
MCSaveVersionDialog>>okToClose {actions} · ct 4/5/2022 19:57 (changed)
okToClose
- ^ (self findTextMorph: #logMessage)
+ ^ (self someTextPaneWithSelector: #logMessage)
ifNil: [true]
ifNotNil:
[:widget | widget canDiscardEdits or: [self confirm: 'Version notes are not saved.
Is it OK to discard those notes?' translated]]
Model>>dependentTextPaneWithSelector: {*Tools-private} · ct 4/5/2022 19:42
+ dependentTextPaneWithSelector: selector
+
+ ^ self dependents detect:
+ [:dependent | dependent isTextView and:
+ [dependent getTextSelector == selector]]
+ ifNone: [nil]
Model>>someTextPaneWithSelector: {*Tools} · ct 4/5/2022 20:17
+ someTextPaneWithSelector: aSelector
+ "Try to find the text pane for aSelector in my dependents or my window. Note that this is a hack only and violates the original idea of the model-view pattern. Usually, the communication should come from the view instead, e.g., via a pluggable selector."
+ ^ (self dependentTextPaneWithSelector: aSelector)
+ ifNil: [self textPaneWithSelector: aSelector]
Model>>textPaneWithSelector: {*Tools-private} · mt 4/12/2015 19:45
+ textPaneWithSelector: aSelector
+ "If, among my window's paneMorphs, there is a text pane defined with aSelector as its retriever, answer it, else answer nil"
+
+ | aWindow |
+ Smalltalk isMorphic ifFalse: [^ nil].
+ ^ (aWindow := self containingWindow) ifNotNil:
+ [aWindow paneMorphSatisfying:
+ [:aMorph | (aMorph isKindOf: PluggableTextMorph) and:
+ [aMorph getTextSelector == aSelector]]]
PluggableTextView>>tallyIt {as yet unclassified} · ct 4/5/2022 19:50
+ tallyIt
+
+ self controller tallyIt.
StringHolder>>codeTextMorph {*Tools} · ct 4/5/2022 20:16 (changed)
codeTextMorph
-
- ^ self someTextPaneWithSelector: #contents
+ "Find a Morphic text pane that displays the contents of the receiver. Note that this is a hack only and violates the original idea of the model-view pattern. Using this selector in your model will likely break compatibility with other UI frameworks such as MVC. Usually, the communication should come from the view instead, e.g., via a pluggable selector."
+
+ | textPane |
+ textPane := self codeTextPane.
+ ^ textPane isMorph ifTrue: [textPane]
StringHolder>>codeTextPane {*Tools} · ct 4/5/2022 20:16
+ codeTextPane
+ "Find a text pane that displays the contents of the receiver. Note that this is a hack only and violates the original idea of the model-view pattern. Usually, the communication should come from the view instead, e.g., via a pluggable selector."
+
+ ^ self someTextPaneWithSelector: #contents
StringHolder>>selectedInterval {*services-base} · ct 4/5/2022 19:46 (changed)
selectedInterval
- ^self codeTextMorph selectionInterval
+ ^self codeTextPane selectionInterval
StringHolderView>>accept {controller access} · ct 4/5/2022 19:59
+ accept
+
+ ^ self controller accept
StringHolderView>>text {controller access} · ct 4/5/2022 19:56
+ text
+
+ ^ self displayContents text
["toolCodePane.2.cs"]
---
Sent from Squeak Inbox Talk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220405/b44c1976/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: toolCodePane.2.cs
Type: application/octet-stream
Size: 6903 bytes
Desc: not available
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220405/b44c1976/attachment.obj>
More information about the Squeak-dev
mailing list
|