Gerardo I already told you that in the past. We do not need XAML.
in VW you have window spec and they are exactly the same without the need for
XML
<Button>
<Button.Background>
<SolidColorBrush Color="Blue"/>
</Button.Background>
<Button.Foreground>
<SolidColorBrush Color="Red"/>
</Button.Foreground>
<Button.Content>
This is a button
</Button.Content>
</Button>
#(#{UI.ButtonSpec}
#layout: #(#{Graphics.LayoutFrame} 25 0.35 30 0 90 0.35 53 0 )
#name: #newButton
#model: #newPattern
#label: #(#{Kernel.UserMessage} #key: #New #defaultString:
'New' #catalogID: #pdp)
#defaultable: true )
in VW they use that since 1995 and this is working no need for XML.
You get a spec object and then you interpret it to populate the builder canvas.
Have a look at Builder design pattern because it is inspired from the UIBuilder
class of Visualworks (or if this is not the case
this is exactly the pattern application).
Here is a more complex example of a spec.
windowSpec
"UIPainter new openOnClass: self andSelector: #windowSpec"
<resource: #canvas>
^#(#{UI.FullSpec}
#window:
#(#{UI.WindowSpec}
#label: #(#{Kernel.UserMessage} #key:
#ContextListPolicyEditor #defaultString: 'Context list policy editor'
#catalogID: #pdp)
#min: #(#{Core.Point} 528 401 )
#max: #(#{Core.Point} 1024 768 )
#bounds: #(#{Graphics.Rectangle} 592 427 1120 828 )
#flags: 4
#menu: #menuBar )
#component:
#(#{UI.SpecCollection}
#collection: #(
#(#{UI.LabelSpec}
#layout: #(#{UI.AlignmentOrigin} 0
0.175 5 0 0.5 0 )
#name: #PatternListLabel
#label: #(#{Kernel.UserMessage} #key:
#Patterns #defaultString: 'Patterns' #catalogID: #pdp) )
#(#{UI.SequenceViewSpec}
#properties:
#(#{UI.PropertyListDictionary}
#dragOkSelector
#wantToDrag: #dragEnterSelector
#dragEnter: #dragOverSelector
#dragOver: #dragStartSelector
#doDrag: #dropSelector
#drop: #dragExitSelector
#dragLeave: )
#layout: #(#{Graphics.LayoutFrame} 2 0
30 0 0 0.35 -60 1 )
#name: #patternList
#model: #patternList
#menu: #menu
#useModifierKeys: true
#selectionType: #highlight )
#(#{UI.ActionButtonSpec}
#layout: #(#{Graphics.LayoutFrame} 25
0.35 30 0 90 0.35 53 0 )
#name: #newButton
#model: #newPattern
#label: #(#{Kernel.UserMessage} #key:
#New #defaultString: 'New' #catalogID: #pdp)
#defaultable: true )
#(#{UI.ActionButtonSpec}
#layout: #(#{Graphics.LayoutFrame} 115
0.35 30 0 180 0.35 53 0 )
#name: #removeButton
#model: #removePattern
#label: #(#{Kernel.UserMessage} #key:
#Remove #defaultString: 'Remove' #catalogID: #pdp)
#defaultable: true )
#(#{UI.InputFieldSpec}
#layout: #(#{Graphics.LayoutFrame} 13
0.35 105 0 -9 0.75 128 0 )
#name: #patternNameInput
#model: #patternName )
#(#{UI.ActionButtonSpec}
#layout: #(#{Graphics.LayoutFrame} 8
0.75 105 0 87 0.75 128 0 )
#name: #colorButton
#model: #selectColor
#label: #(#{Kernel.UserMessage} #key:
#PickColor #defaultString: 'Pick Color' #catalogID: #pdp)
#defaultable: true )
#(#{UI.TextEditorSpec}
#layout: #(#{Graphics.LayoutFrame} 13
0.35 160 0 -8 1 -155 1 )
#name: #TextEditor1
#model: #patternString
#tabRequiresControl: true )
#(#{UI.LabelSpec}
#layout: #(#{Graphics.LayoutOrigin} 13
0.35 85 0 )
#name: #Label1
#label: #(#{Kernel.UserMessage} #key:
#Name #defaultString: 'Name' #catalogID: #pdp) )
#(#{UI.LabelSpec}
#layout: #(#{UI.AlignmentOrigin} 0
0.675 137 0 0.5 0 )
#name: #Label3
#label: #(#{Kernel.UserMessage} #key:
#PatternString #defaultString: 'Pattern String' #catalogID: #pdp) )
#(#{UI.GroupBoxSpec}
#layout: #(#{Graphics.LayoutFrame} 6
0.35 65 0 -2 1 -145 1 )
#name: #GroupBox1
#label: #(#{Kernel.UserMessage} #key:
#Pattern #defaultString: 'Pattern' #catalogID: #pdp) )
#(#{UI.InputFieldSpec}
#layout: #(#{Graphics.LayoutFrame} 12
0.35 -118 1 0 0.679924 -92 1 )
#name: #matchSelectorInputField
#model: #matchSelector
#type: #symbol )
#(#{UI.InputFieldSpec}
#layout: #(#{Graphics.LayoutFrame} 6
0.68 -118 1 -8 1 -92 1 )
#name: #conversionSelectorInputField
#model: #conversionSelector
#type: #symbol )
#(#{UI.LabelSpec}
#layout: #(#{Graphics.LayoutOrigin} 12
0.35 -137 1 )
#name: #Label4
#label: #(#{Kernel.UserMessage} #key:
#MatchSelector #defaultString: 'Match Selector' #catalogID: #pdp) )
#(#{UI.LabelSpec}
#layout: #(#{Graphics.LayoutOrigin} 6
0.68 -137 1 )
#name: #Label5
#label: #(#{Kernel.UserMessage} #key:
#ConversionSelector #defaultString: 'Conversion Selector' #catalogID: #pdp) )
#(#{UI.ActionButtonSpec}
#layout:
#(#{Graphics.LayoutSizedOrigin} -100 0.5 -33 1 80 23 )
#name: #okButton
#model: #accept
#label: #(#{Kernel.UserMessage} #key:
#Ok #defaultString: 'Ok' #catalogID: #pdp)
#defaultable: true )
#(#{UI.ActionButtonSpec}
#layout:
#(#{Graphics.LayoutSizedOrigin} 20 0.5 -33 1 81 23 )
#name: #cancelButton
#model: #cancel
#label: #(#{Kernel.UserMessage} #key:
#Cancel #defaultString: 'Cancel' #catalogID: #pdp)
#defaultable: true )
#(#{UI.LabelSpec}
#layout: #(#{Graphics.LayoutOrigin} 12
0.35 -82 1 )
#name: #Label2
#label: #(#{Kernel.UserMessage} #key:
#DisplayAllLimit #defaultString: 'Display all limit' #catalogID: #pdp) )
#(#{UI.SpinButtonSpec}
#layout: #(#{Graphics.LayoutFrame} 90
0.35 -83 1 150 0.35 -60 1 )
#name: #displayAllLimitField
#model: #displayAllLimit
#type: #number
#formatString: '0'
#low: 1
#high: 100
#interval: 1 )
#(#{UI.ActionButtonSpec}
#layout: #(#{UI.AlignmentOrigin} -10 1
-10 1 1 1 )
#name: #HelpButton
#model: #help
#label: #(#{Kernel.UserMessage} #key:
#Help #defaultString: 'Help' #catalogID: #pdp)
#defaultable: true )
#(#{UI.DividerSpec}
#layout: #(#{Graphics.LayoutFrame} 0 0
-48 1 0 1 -44 1 )
#name: #Divider1 ) ) ) )
On Jun 30, 2010, at 3:35 PM, nullPointer wrote:
>
>> I dont understand. If you dont know the difference why did you change
>> from MIT to BSD for CLFramework?
>
> No idea. I don´t know the change but you has warning me. The license is
> already
> changed to MIT.
>
>> Yes that would be good to know about the reasons. We know that you
>> were not satisfied with your own code - but who of us really is?
>
> I believe the valid model for create a UIBUilder is implement something like
> WPF
> in paint technology ( use OpenGL for paint and have 3D elements ) and XAML
> build
> the UI in design time. I don´t have knowledges for implement that, and I don´t
> know if is possible implement something like that on Pharo-Smalltalk; but I
> believe that is needed for create something UIBuilder modern for
> Pharo-Smalltalk, and not based on old systems. But that task is for people
> with
> more knowledges.
>
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project