2

我正在尝试使用 Moose Glamorous Toolkit 在 Pharo/Smalltalk 中构建类似图形界面的树/大纲。所以,到目前为止,我已经得到了这个模型:

大纲模型 http://www.enlightenment.org/ss/e-53e3dee6777744.68598023.jpg

为此,我使用以下代码:

| browser mainTree |

mainTree := UbakyeNode new.
mainTree becomeDefaultTree.   

browser := GLMTabulator new.
browser
    column: #tree;
    column: [ :c |
                c
                    row: #body;
                    row: #plugins ].
(browser transmit)
    to: #tree;
    andShow: [ :a |
                (a tree)
                    title: mainTree header;
                    children: [ :eachNode |
                                eachNode children. ]    "Children must return a collection" ].
(browser transmit)
    to: #body;
    from: #tree;
    andShow: [ :a | a text title: 'Cuerpo | Body ' ].
(browser transmit)
    to: #plugins;
    from: #tree port: #selectionPath;
    andShow: [ :a | a text title: 'Plugins | Extensiones' ].

browser openOn: mainTree children.

所以我现在有一个浏览器,它显示由 UbakyeNodes 组成的树(我定义的类似树的数据结构),但我不想显示 Ubakye 节点,而是每个节点的标题(标题)和内容(正文)选择它们时。在 Pharo/Moose 社区的帮助下,我明白我需要传递所有孩子的集合(不仅仅是他们的标题),但我不知道该向谁出售该集合中的特定内容以显示在浏览器,例如#tree 面板中的节点标题或#body 面板中的正文。

我还想将每个面板的大小更改为更像屏幕截图中显示的那样,而不是默认的,并且与窗口大小相关。这可能吗?

4

2 回答 2

1

好的,感谢 Pharo-users 社区邮件列表中的 Peter Kenny,现在我有了答案。该问题与缺少的“格式:”关键字消息有关。使用它,可以告诉 Moose/Pharo 如何显示从孩子那里获取的信息。这是修改后的工作代码:

| browser mainTree |

mainTree := UbakyeNode new.
mainTree becomeDefaultTree.   

browser := GLMTabulator new.
browser
    column: #tree;
    column: [ :c |
                c
                    row: #body;
                    row: #plugins ].
(browser transmit)
    to: #tree;
    andShow: [ :a |
                (a tree)
                    title: mainTree header;
                    children: [ :eachNode |
                        (eachNode children) isNil
                            ifTrue: [ #() ]
                            ifFalse:[ eachNode children ] ];
                    format:[:eachNode |
                        (eachNode header) isNil
                            ifTrue: [ '' ]
                            ifFalse: [ eachNode header ] ].
                    "Children must return a collection" ].
(browser transmit)
    to: #body;
    from: #tree;
    andShow: [ :a |
                (a text)
                    title: 'Cuerpo | Body ';
                    format:[:eachNode |
                        (eachNode body) isNil
                             ifTrue: [ '' ]
                            ifFalse: [ eachNode body ] ]

                ].
(browser transmit)
    to: #plugins;
    andShow: [ :a | a text title: 'Plugins | Extensiones' ].

browser openOn: mainTree children.  
于 2014-08-12T19:57:13.653 回答
1

并设置您使用的相对宽度和高度

row: #result span: 2;

对于应该是两倍宽的行/列。所以像

browser
    column: #tree;
    column: [ :c |
        c row: #body span: 3;
          row: #plugins ] span: 3.
于 2014-08-13T00:39:30.633 回答