[Newbies] [4.1] How do I use ToolBuilder to construct a three pane browser?

Hannes Hirzel hannes.hirzel at gmail.com
Mon Apr 19 12:13:53 UTC 2010


Bert
Thank you for this second mail. I actually was struggling with
converting the 'lesson1', 'lesson2' etc back to the index.

I had a method

lessonListIndex: aLessonString
	lessonListIndex := self lessonList indexOf: aLessonString.
	self changed: #sectionList

Your 'buildWith: builder' looks very need. So I'll go for that do not
go for Integer indices.

I'll try it - without looking at your solution :-)

Hannes

On 4/19/10, Bert Freudenberg <bert at freudenbergs.de> wrote:
> On 19.04.2010, at 12:02, Bert Freudenberg wrote:
>>
>> On 19.04.2010, at 11:45, Hannes Hirzel wrote:
>>>
>>> Hello
>>>
>>> I would like to construct a three pane browser to inspect a dictionary
>>> of dictionaries (see data structure example code below). How do I do
>>> this using the ToolBuilder? I would like to learn to use it.
>>
>> Maybe look at Browser>>buildWith: or all the other buildWith:
>> implementations? No need to subclass DictionaryInspector, I'd simply
>> subclass Model.
>>
>> You would have two lists, and a text pane. Your model will have to provide
>> methods to get the list and get/set the current index. E.g. #lessonList,
>> #lessonListIndex, #lessonListIndex: and #sectionList, #sectionListIndex,
>> #sectionListIndex:.
>>
>> When you select something in the lesson list, #lessonListIndex: will be
>> sent. In response, you would send "self changed: #sectionList" which will
>> cause the section list to be updated. Etc.
>>
>> - Bert -
>
> After actually having a look, Browser>>buildWith: etc. are already
> specialized for code tools. No need for that.
>
> Also, for lists as in your case, working with indices for the selection is
> less convenient than with objects.
>
> So here's a build method for your model - just implement all the accessors
> and it works. A complete UI in one method ;)
>
> buildWith: builder
> 	^builder build:
> 		(builder pluggableWindowSpec new
> 			model: self;
> 			children: {
> 				(builder pluggableListSpec new)
> 					model: self;
> 					list: #lessonList;
> 					getSelected: #lesson;
> 					setSelected: #lesson:;
> 					frame: (0 at 0 corner: 0.5 at 0.2).
> 				(builder pluggableListSpec new)
> 					model: self;
> 					list: #sectionList;
> 					getSelected: #section;
> 					setSelected: #section:;
> 					frame: (0.5 at 0 corner: 1 at 0.2).
> 				(builder pluggableTextSpec new)
> 					model: self;
> 					getText: #contents;
> 					frame: (0 at 0.2 corner: 1 at 1).
> 			})
>
>


More information about the Beginners mailing list