Lessons learnt from been an integrator
Andrew Tween
amtween at hotmail.com
Tue Aug 24 17:27:59 UTC 2004
With regard to the Full image / Shout / overridden methods ...
I have done some work on splitting Shout into ...
1. a changeset of base image changes.
including an MvcTextEditor subclass of AppRegistry (similar to
MorphicTextEdtior, but for MVC)
2. a package that makes no changes to existing base image methods.
(Although it does add new methods to base classes)
I have achieved the above (see attached files).
However; I am not happy with they way the code is looking at the moment.
There is a lot of duplication where I have had to create subclasses of some
base classes, and some nasty hacks.
So, it needs some further work; and a lot of testing - particularly in mvc.
But I thought I'd post what I have so far.
Thanks to all who are working on the full image - which, in the future, will
be even fuller ;>)
Cheers,
Andy
----- Original Message -----
From: "Marcus Denker" <denker at iam.unibe.ch>
To: "The general-purpose Squeak developers list"
<squeak-dev at lists.squeakfoundation.org>
Sent: Tuesday, August 24, 2004 3:51 PM
Subject: Re: Lessons learnt from been an integrator
Am 24.08.2004 um 15:57 schrieb Hannes Hirzel:
> Hello,
>
> stéphane ducasse wrote:
>> Hi all
>>
>> here are the lessons we learnt while building the 3.7 image. We wanted
>> to have shout, rb, connector
>> morph in 3.7 but there were too much patches.
>
> What do you mean by this? Did the packages not load? Or did they
> overwrite
> important methods?
They overwrite many methods. It makes no sense at all to have a system
in beta for 4 Months and then change stuff a week before a release.
> How did you find out?
>
By looking at the code?
>
> Thank you Stef for this report.
>
> I learn that it is not possible to integrate Ned's connector morphs.
> What is the reason? Did you contact Ned? He is often amazing how fast
> he fixes things. I remember that he recently put out a new release.
> As SM is down currently I cannot check.
>
Ned posted *a lot* of fixed for morphic to the list. Many of those are
required
for Connectors, but not all of them got added to 3.7.
> It would be very nice to have the connector morphs in 3.7 full. Or
> perhaps
> it is not a good idea to integrate something which
> has not been retested. I would be willing to retest 3.7 full with Ned's
> connector morphs included. However this will surely add a few days
> more.
>
There is no way to add connectors to 3.7, as we can't add all the
patches.
Maybe people should have put some effort into integrating all the stuff
into 3.7
when it was possible, but somehow nobody wanted to do that back then. I
wrote
lots of mails to the list that there is work to be done with regard to
harvesting, but
everyone seems to be thinking that it is not important.
Marcus
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.716 / Virus Database: 472 - Release Date: 06/07/2004
-------------- next part --------------
'From Squeak3.7gamma of ''17 July 2004'' [latest update: #5985] on 24 August 2004 at 4:12:22 pm'!
AppRegistry subclass: #MvcTextEditor
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'System-Applications'!
!CodeHolder methodsFor: 'construction' stamp: 'tween 8/24/2004 15:38'!
buildMorphicCodePaneWith: editString
"Construct the pane that shows the code.
Respect the Preference for standardCodeFont."
| codePane |
codePane _ MorphicTextEditor default
on: self
text: #contents
accept: #contents:notifying:
readSelection: #contentsSelection
menu: #codePaneMenu:shifted:.
codePane font: Preferences standardCodeFont.
editString
ifNotNil: [codePane editString: editString.
codePane hasUnacceptedEdits: true].
^ codePane! !
!Browser methodsFor: 'construction' stamp: 'tween 8/24/2004 15:35'!
openEditString: aString
"Create a pluggable version of all the views for a Browser, including views and controllers."
| systemCategoryListView classListView
messageCategoryListView messageListView browserCodeView topView switchView underPane y optionalButtonsView annotationPane |
self couldOpenInMorphic ifTrue: [^ self openAsMorphEditing: aString].
"Sensor leftShiftDown ifTrue: [^ self openAsMorphEditing: aString].
uncomment-out for testing morphic browser embedded in mvc project"
topView _ StandardSystemView new model: self.
topView borderWidth: 1. "label and minSize taken care of by caller"
systemCategoryListView _ PluggableListView on: self
list: #systemCategoryList
selected: #systemCategoryListIndex
changeSelected: #systemCategoryListIndex:
menu: #systemCategoryMenu:
keystroke: #systemCatListKey:from:.
systemCategoryListView window: (0 @ 0 extent: 50 @ 70).
topView addSubView: systemCategoryListView.
classListView _ PluggableListView on: self
list: #classList
selected: #classListIndex
changeSelected: #classListIndex:
menu: #classListMenu:shifted:
keystroke: #classListKey:from:.
classListView window: (0 @ 0 extent: 50 @ 62).
topView addSubView: classListView toRightOf: systemCategoryListView.
switchView _ self buildInstanceClassSwitchView.
switchView borderWidth: 1.
topView addSubView: switchView below: classListView.
messageCategoryListView _ PluggableListView on: self
list: #messageCategoryList
selected: #messageCategoryListIndex
changeSelected: #messageCategoryListIndex:
menu: #messageCategoryMenu:.
messageCategoryListView controller terminateDuringSelect: true.
messageCategoryListView window: (0 @ 0 extent: 50 @ 70).
topView addSubView: messageCategoryListView toRightOf: classListView.
messageListView _ PluggableListView on: self
list: #messageList
selected: #messageListIndex
changeSelected: #messageListIndex:
menu: #messageListMenu:shifted:
keystroke: #messageListKey:from:.
messageListView window: (0 @ 0 extent: 50 @ 70).
messageListView menuTitleSelector: #messageListSelectorTitle.
topView addSubView: messageListView toRightOf: messageCategoryListView.
self wantsAnnotationPane
ifTrue:
[annotationPane _ PluggableTextView on: self
text: #annotation accept: nil
readSelection: nil menu: nil.
annotationPane window: (0 at 0 extent: 200 at self optionalAnnotationHeight).
topView addSubView: annotationPane below: systemCategoryListView.
underPane _ annotationPane.
y _ 110 - self optionalAnnotationHeight]
ifFalse: [
underPane _ systemCategoryListView.
y _ 110].
self wantsOptionalButtons ifTrue:
[optionalButtonsView _ self buildOptionalButtonsView.
optionalButtonsView borderWidth: 1.
topView addSubView: optionalButtonsView below: underPane.
underPane _ optionalButtonsView.
y _ y - self optionalButtonHeight].
browserCodeView _ MvcTextEditor default on: self
text: #contents accept: #contents:notifying:
readSelection: #contentsSelection menu: #codePaneMenu:shifted:.
browserCodeView window: (0 at 0 extent: 200 at y).
topView addSubView: browserCodeView below: underPane.
aString ifNotNil: [browserCodeView editString: aString.
browserCodeView hasUnacceptedEdits: true].
topView setUpdatablePanesFrom: #(systemCategoryList classList messageCategoryList messageList).
^ topView! !
!Browser methodsFor: 'construction' stamp: 'tween 8/24/2004 15:36'!
openMessageCatEditString: aString
"Create a pluggable version of the views for a Browser that just shows one message category."
| messageCategoryListView messageListView browserCodeView topView annotationPane underPane y optionalButtonsView |
self couldOpenInMorphic ifTrue: [^ self openAsMorphMsgCatEditing: aString].
topView _ (StandardSystemView new) model: self.
topView borderWidth: 1.
"label and minSize taken care of by caller"
messageCategoryListView _ PluggableListView on: self
list: #messageCatListSingleton
selected: #indexIsOne
changeSelected: #indexIsOne:
menu: #messageCategoryMenu:.
messageCategoryListView window: (0 @ 0 extent: 200 @ 12).
topView addSubView: messageCategoryListView.
messageListView _ PluggableListView on: self
list: #messageList
selected: #messageListIndex
changeSelected: #messageListIndex:
menu: #messageListMenu:shifted:
keystroke: #messageListKey:from:.
messageListView menuTitleSelector: #messageListSelectorTitle.
messageListView window: (0 @ 0 extent: 200 @ 70).
topView addSubView: messageListView below: messageCategoryListView.
self wantsAnnotationPane
ifTrue:
[annotationPane _ PluggableTextView on: self
text: #annotation accept: nil
readSelection: nil menu: nil.
annotationPane window: (0 at 0 extent: 200 at self optionalAnnotationHeight).
topView addSubView: annotationPane below: messageListView.
underPane _ annotationPane.
y _ (200 - 12 - 70) - self optionalAnnotationHeight]
ifFalse:
[underPane _ messageListView.
y _ (200 - 12 - 70)].
self wantsOptionalButtons ifTrue:
[optionalButtonsView _ self buildOptionalButtonsView.
optionalButtonsView borderWidth: 1.
topView addSubView: optionalButtonsView below: underPane.
underPane _ optionalButtonsView.
y _ y - self optionalButtonHeight].
browserCodeView _ MvcTextEditor default on: self
text: #contents accept: #contents:notifying:
readSelection: #contentsSelection menu: #codePaneMenu:shifted:.
browserCodeView window: (0 at 0 extent: 200 at y).
topView addSubView: browserCodeView below: underPane.
aString ifNotNil: [browserCodeView editString: aString.
browserCodeView hasUnacceptedEdits: true].
topView setUpdatablePanesFrom: #(messageCatListSingleton messageList).
^ topView! !
!Browser methodsFor: 'construction' stamp: 'tween 8/24/2004 15:36'!
openMessageEditString: aString
"Create a pluggable version of the views for a Browser that just shows one message."
| messageListView browserCodeView topView annotationPane underPane y |
Smalltalk isMorphic ifTrue: [^ self openAsMorphMessageEditing: aString].
topView _ (StandardSystemView new) model: self.
topView borderWidth: 1.
"label and minSize taken care of by caller"
messageListView _ PluggableListView on: self
list: #messageListSingleton
selected: #indexIsOne
changeSelected: #indexIsOne:
menu: #messageListMenu:shifted:.
messageListView window: (0 @ 0 extent: 200 @ 12).
topView addSubView: messageListView.
self wantsAnnotationPane
ifTrue:
[annotationPane _ PluggableTextView on: self
text: #annotation accept: nil
readSelection: nil menu: nil.
annotationPane window: (0 at 0 extent: 200 at self optionalAnnotationHeight).
topView addSubView: annotationPane below: messageListView.
underPane _ annotationPane.
y _ (200 - 12) - self optionalAnnotationHeight]
ifFalse:
[underPane _ messageListView.
y _ 200 - 12].
browserCodeView _ MvcTextEditor default on: self
text: #contents accept: #contents:notifying:
readSelection: #contentsSelection menu: #codePaneMenu:shifted:.
browserCodeView window: (0 at 0 extent: 200 at y).
topView addSubView: browserCodeView below: underPane.
aString ifNotNil: [browserCodeView editString: aString.
browserCodeView hasUnacceptedEdits: true].
^ topView! !
!Browser methodsFor: 'construction' stamp: 'tween 8/24/2004 15:37'!
openOnClassWithEditString: aString
"Create a pluggable version of all the views for a Browser, including views and controllers."
| classListView messageCategoryListView messageListView browserCodeView topView switchView annotationPane underPane y optionalButtonsView |
Smalltalk isMorphic ifTrue: [^ self openAsMorphClassEditing: aString].
topView _ (StandardSystemView new) model: self.
topView borderWidth: 1.
"label and minSize taken care of by caller"
classListView _ PluggableListView on: self
list: #classListSingleton
selected: #indexIsOne
changeSelected: #indexIsOne:
menu: #classListMenu:shifted:
keystroke: #classListKey:from:.
classListView window: (0 @ 0 extent: 100 @ 12).
topView addSubView: classListView.
messageCategoryListView _ PluggableListView on: self
list: #messageCategoryList
selected: #messageCategoryListIndex
changeSelected: #messageCategoryListIndex:
menu: #messageCategoryMenu:.
messageCategoryListView window: (0 @ 0 extent: 100 @ 70).
topView addSubView: messageCategoryListView below: classListView.
messageListView _ PluggableListView on: self
list: #messageList
selected: #messageListIndex
changeSelected: #messageListIndex:
menu: #messageListMenu:shifted:
keystroke: #messageListKey:from:.
messageListView menuTitleSelector: #messageListSelectorTitle.
messageListView window: (0 @ 0 extent: 100 @ 70).
topView addSubView: messageListView toRightOf: messageCategoryListView.
switchView _ self buildInstanceClassSwitchView.
switchView borderWidth: 1.
switchView
window: switchView window
viewport: (classListView viewport topRight
corner: messageListView viewport topRight).
topView addSubView: switchView toRightOf: classListView.
self wantsAnnotationPane
ifTrue:
[annotationPane _ PluggableTextView on: self
text: #annotation accept: nil
readSelection: nil menu: nil.
annotationPane window: (0 at 0 extent: 200 at self optionalAnnotationHeight).
topView addSubView: annotationPane below: messageCategoryListView.
underPane _ annotationPane.
y _ (200-12-70) - self optionalAnnotationHeight]
ifFalse:
[underPane _ messageCategoryListView.
y _ (200-12-70)].
self wantsOptionalButtons ifTrue:
[optionalButtonsView _ self buildOptionalButtonsView.
optionalButtonsView borderWidth: 1.
topView addSubView: optionalButtonsView below: underPane.
underPane _ optionalButtonsView.
y _ y - self optionalButtonHeight].
browserCodeView _ MvcTextEditor default on: self
text: #contents accept: #contents:notifying:
readSelection: #contentsSelection menu: #codePaneMenu:shifted:.
browserCodeView window: (0 at 0 extent: 200 at y).
topView addSubView: browserCodeView below: underPane.
aString ifNotNil: [browserCodeView editString: aString.
browserCodeView hasUnacceptedEdits: true].
topView setUpdatablePanesFrom: #(messageCategoryList messageList).
^ topView! !
!Browser methodsFor: 'construction' stamp: 'tween 8/24/2004 15:37'!
openSystemCatEditString: aString
"Create a pluggable version of all the views for a Browser, including views and controllers. The top list view is of the currently selected system class category--a single item list."
| systemCategoryListView classListView messageCategoryListView messageListView browserCodeView topView switchView y annotationPane underPane optionalButtonsView |
Smalltalk isMorphic ifTrue: [^ self openAsMorphSysCatEditing: aString].
topView _ (StandardSystemView new) model: self.
topView borderWidth: 1.
"label and minSize taken care of by caller"
systemCategoryListView _ PluggableListView on: self
list: #systemCategorySingleton
selected: #indexIsOne
changeSelected: #indexIsOne:
menu: #systemCatSingletonMenu:
keystroke: #systemCatSingletonKey:from:.
systemCategoryListView window: (0 @ 0 extent: 200 @ 12).
topView addSubView: systemCategoryListView.
classListView _ PluggableListView on: self
list: #classList
selected: #classListIndex
changeSelected: #classListIndex:
menu: #classListMenu:shifted:
keystroke: #classListKey:from:.
classListView window: (0 @ 0 extent: 67 @ 62).
topView addSubView: classListView below: systemCategoryListView.
messageCategoryListView _ PluggableListView on: self
list: #messageCategoryList
selected: #messageCategoryListIndex
changeSelected: #messageCategoryListIndex:
menu: #messageCategoryMenu:.
messageCategoryListView controller terminateDuringSelect: true.
messageCategoryListView window: (0 @ 0 extent: 66 @ 70).
topView addSubView: messageCategoryListView toRightOf: classListView.
switchView _ self buildInstanceClassSwitchView.
switchView
window: switchView window
viewport: (classListView viewport bottomLeft
corner: messageCategoryListView viewport bottomLeft).
switchView borderWidth: 1.
topView addSubView: switchView below: classListView.
messageListView _ PluggableListView on: self
list: #messageList
selected: #messageListIndex
changeSelected: #messageListIndex:
menu: #messageListMenu:shifted:
keystroke: #messageListKey:from:.
messageListView menuTitleSelector: #messageListSelectorTitle.
messageListView window: (0 @ 0 extent: 67 @ 70).
topView addSubView: messageListView toRightOf: messageCategoryListView.
self wantsAnnotationPane
ifTrue:
[annotationPane _ PluggableTextView on: self
text: #annotation accept: nil
readSelection: nil menu: nil.
annotationPane window: (0 at 0 extent: 200 at self optionalAnnotationHeight).
topView addSubView: annotationPane below: switchView.
y _ 110 - 12 - self optionalAnnotationHeight.
underPane _ annotationPane]
ifFalse:
[y _ 110 - 12.
underPane _ switchView].
self wantsOptionalButtons ifTrue:
[optionalButtonsView _ self buildOptionalButtonsView.
optionalButtonsView borderWidth: 1.
topView addSubView: optionalButtonsView below: underPane.
underPane _ optionalButtonsView.
y _ y - self optionalButtonHeight].
browserCodeView _ MvcTextEditor default on: self
text: #contents accept: #contents:notifying:
readSelection: #contentsSelection menu: #codePaneMenu:shifted:.
browserCodeView window: (0 at 0 extent: 200 at y).
topView addSubView: browserCodeView below: underPane.
aString ifNotNil: [browserCodeView editString: aString.
browserCodeView hasUnacceptedEdits: true].
topView setUpdatablePanesFrom: #(classList messageCategoryList messageList).
^ topView! !
!FileContentsBrowser methodsFor: 'construction' stamp: 'tween 8/24/2004 15:39'!
addLowerPanesTo: window at: nominalFractions with: editString
| verticalOffset row codePane infoPane infoHeight divider |
row _ AlignmentMorph newColumn
hResizing: #spaceFill;
vResizing: #spaceFill;
layoutInset: 0;
borderWidth: 1;
borderColor: Color black;
layoutPolicy: ProportionalLayout new.
codePane _ MorphicTextEditor default on: self text: #contents accept: #contents:notifying:
readSelection: #contentsSelection menu: #codePaneMenu:shifted:.
codePane font: Preferences standardCodeFont.
infoPane _ PluggableTextMorph on: self text: #infoViewContents accept: nil
readSelection: nil menu: nil.
infoPane askBeforeDiscardingEdits: false.
verticalOffset _ 0.
">>not with this browser--- at least not yet ---
innerFractions _ 0 at 0 corner: 1 at 0.
verticalOffset _ self addOptionalAnnotationsTo: row at: innerFractions plus: verticalOffset.
verticalOffset _ self addOptionalButtonsTo: row at: innerFractions plus: verticalOffset.
<<<<"
infoHeight _ 20.
row
addMorph: (codePane borderWidth: 0)
fullFrame: (
LayoutFrame
fractions: (0 at 0 corner: 1 at 1)
offsets: (0 at verticalOffset corner: 0 at infoHeight negated)
).
divider _ BorderedSubpaneDividerMorph forTopEdge.
Preferences alternativeWindowLook ifTrue:[
divider extent: 4 at 4; color: Color transparent; borderColor: #raised; borderWidth: 2.
].
row
addMorph: divider
fullFrame: (
LayoutFrame
fractions: (0 at 1 corner: 1 at 1)
offsets: (0 at infoHeight negated corner: 0@(1-infoHeight))
).
row
addMorph: (infoPane borderWidth: 0; hideScrollBarsIndefinitely)
fullFrame: (
LayoutFrame
fractions: (0 at 1 corner: 1 at 1)
offsets: (0@(1-infoHeight) corner: 0 at 0)
).
window
addMorph: row
frame: nominalFractions.
row on: #mouseEnter send: #paneTransition: to: window.
row on: #mouseLeave send: #paneTransition: to: window.
! !
!FileContentsBrowser methodsFor: 'construction' stamp: 'tween 8/24/2004 15:39'!
createViews
"Create a pluggable version of all the views for a Browser, including views and controllers."
| hasSingleFile width topView packageListView classListView switchView messageCategoryListView messageListView browserCodeView infoView |
contentsSymbol _ self defaultDiffsSymbol. "#showDiffs or #prettyDiffs"
Smalltalk isMorphic ifTrue: [^ self openAsMorph].
(hasSingleFile _ self packages size = 1)
ifTrue: [width _ 150]
ifFalse: [width _ 200].
(topView _ StandardSystemView new)
model: self;
borderWidth: 1.
"label and minSize taken care of by caller"
hasSingleFile
ifTrue: [
self systemCategoryListIndex: 1.
packageListView _ PluggableListView on: self
list: #systemCategorySingleton
selected: #indexIsOne
changeSelected: #indexIsOne:
menu: #packageListMenu:
keystroke: #packageListKey:from:.
packageListView window: (0 @ 0 extent: width @ 12)]
ifFalse: [
packageListView _ PluggableListView on: self
list: #systemCategoryList
selected: #systemCategoryListIndex
changeSelected: #systemCategoryListIndex:
menu: #packageListMenu:
keystroke: #packageListKey:from:.
packageListView window: (0 @ 0 extent: 50 @ 70)].
topView addSubView: packageListView.
classListView _ PluggableListView on: self
list: #classList
selected: #classListIndex
changeSelected: #classListIndex:
menu: #classListMenu:
keystroke: #classListKey:from:.
classListView window: (0 @ 0 extent: 50 @ 62).
hasSingleFile
ifTrue: [topView addSubView: classListView below: packageListView]
ifFalse: [topView addSubView: classListView toRightOf: packageListView].
switchView _ self buildInstanceClassSwitchView.
switchView borderWidth: 1.
topView addSubView: switchView below: classListView.
messageCategoryListView _ PluggableListView on: self
list: #messageCategoryList
selected: #messageCategoryListIndex
changeSelected: #messageCategoryListIndex:
menu: #messageCategoryMenu:.
messageCategoryListView window: (0 @ 0 extent: 50 @ 70).
topView addSubView: messageCategoryListView toRightOf: classListView.
messageListView _ PluggableListView on: self
list: #messageList
selected: #messageListIndex
changeSelected: #messageListIndex:
menu: #messageListMenu:
keystroke: #messageListKey:from:.
messageListView window: (0 @ 0 extent: 50 @ 70).
topView addSubView: messageListView toRightOf: messageCategoryListView.
browserCodeView _ MvcTextEditor default on: self
text: #contents accept: #contents:notifying:
readSelection: #contentsSelection menu: #codePaneMenu:shifted:.
browserCodeView window: (0 at 0 extent: width at 110).
topView
addSubView: browserCodeView
below: (hasSingleFile
ifTrue: [switchView]
ifFalse: [packageListView]).
infoView _ StringHolderView new
model: self infoString;
window: (0 at 0 extent: width at 12);
borderWidth: 1.
topView addSubView: infoView below: browserCodeView.
^ topView
! !
!PackagePaneBrowser methodsFor: 'construction' stamp: 'tween 8/24/2004 15:40'!
openEditString: aString
"Create a pluggable version of all the views for a Browser, including views and controllers."
"PackageBrowser openBrowser"
| packageListView systemCategoryListView classListView messageCategoryListView
messageListView browserCodeView topView switchView annotationPane underPane y optionalButtonsView |
self couldOpenInMorphic ifTrue: [^ self openAsMorphEditing: aString].
topView _ StandardSystemView new model: self.
topView borderWidth: 1. "label and minSize taken care of by caller"
packageListView _ PluggableListView on: self
list: #packageList
selected: #packageListIndex
changeSelected: #packageListIndex:
menu: #packageMenu:.
packageListView window: (0 @ 0 extent: 20 @ 70).
topView addSubView: packageListView.
systemCategoryListView _ PluggableListView on: self
list: #systemCategoryList
selected: #systemCategoryListIndex
changeSelected: #systemCategoryListIndex:
menu: #systemCategoryMenu:.
systemCategoryListView window: (20 @ 0 extent: 30 @ 70).
topView addSubView: systemCategoryListView.
classListView _ PluggableListView on: self
list: #classList
selected: #classListIndex
changeSelected: #classListIndex:
menu: #classListMenu:shifted:.
classListView window: (0 @ 0 extent: 50 @ 62).
topView addSubView: classListView toRightOf: systemCategoryListView.
switchView _ self buildInstanceClassSwitchView.
switchView borderWidth: 1.
topView addSubView: switchView below: classListView.
messageCategoryListView _ PluggableListView on: self
list: #messageCategoryList
selected: #messageCategoryListIndex
changeSelected: #messageCategoryListIndex:
menu: #messageCategoryMenu:.
messageCategoryListView window: (0 @ 0 extent: 50 @ 70).
topView addSubView: messageCategoryListView toRightOf: classListView.
messageListView _ PluggableListView on: self
list: #messageList
selected: #messageListIndex
changeSelected: #messageListIndex:
menu: #messageListMenu:shifted:
keystroke: #messageListKey:from:.
messageListView window: (0 @ 0 extent: 50 @ 70).
topView addSubView: messageListView toRightOf: messageCategoryListView.
self wantsAnnotationPane
ifTrue:
[annotationPane _ PluggableTextView on: self
text: #annotation accept: nil
readSelection: nil menu: nil.
annotationPane window: (0 at 0 extent: 200 at self optionalAnnotationHeight).
topView addSubView: annotationPane below: packageListView.
underPane _ annotationPane.
y _ 110 - self optionalAnnotationHeight]
ifFalse:
[underPane _ packageListView.
y _ 110].
self wantsOptionalButtons ifTrue:
[optionalButtonsView _ self buildOptionalButtonsView.
optionalButtonsView borderWidth: 1.
topView addSubView: optionalButtonsView below: underPane.
underPane _ optionalButtonsView.
y _ y - self optionalButtonHeight].
browserCodeView _ MvcTextEditor default on: self
text: #contents accept: #contents:notifying:
readSelection: #contentsSelection menu: #codePaneMenu:shifted:.
browserCodeView window: (0 at 0 extent: 200 at y).
topView addSubView: browserCodeView below: underPane.
aString ifNotNil: [browserCodeView editString: aString.
browserCodeView hasUnacceptedEdits: true].
^ topView! !
"Postscript:
Adds a new AppRegistry subclass - MvcTextEditor.
Modifies Browser etc. to use MorphicTextEditor and MvcTextEditor default settings.
These changes allow tools such as Shout to extend the base image functionality without override base image methods"
MvcTextEditor register: PluggableTextView.
!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Shout.3.15-tween.8.mcz
Type: application/octet-stream
Size: 21300 bytes
Desc: not available
Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20040824/172dff59/Shout.3.15-tween.8.obj
More information about the Squeak-dev
mailing list
|