规范 - 我想替换 SpPanedLayout 中的第一个演示者

Spec - I want to replace the first presenter in a SpPanedLayout

是否可以不重建整个演示器?

我正在尝试这段代码,但它无法正常工作:

self layout remove: (self layout children first).
self layout add: aNewPresenter.

其实是去掉了presenter,但是新的presenter不是放在首位,而是放在末尾。

在 Spec2 中,所有布局都是动态的(意味着它们可以在运行时修改),但每个布局都有不同的 API,因此需要以不同的方式修改它们。特别是,SpPanedLayout 只有两个 children:firstsecond(它们可以垂直显示 - 从上到下- 或水平方向 - 从左到右 -)。
这意味着与 SpBoxLayout 不同,在 SpPanedLayout 中不需要使用 #add:#remove: 消息,并且不会总是产生所需的结果,并且由于 #add:将尝试在列表末尾添加演示者,如果成功,它将始终是第二个。
相反,你可以只设置 children,你将在你想要的地方有效地替换演示者。

假设您安装了 gtk 后端,此代码:

presenter := SpPresenter new.
presenter application: (SpApplication new useBackend: #Gtk).

presenter layout: (SpPanedLayout newHorizontal
    first: (presenter newLabel label: 'I will replace this');
    second: (presenter newLabel label: 'Powered by Pharo');
    yourself).
    
presenter openWithSpec title: 'Example replace paned presenter'.

presenter layout 
    first: (presenter newImage image: (presenter application iconNamed: #pharoBig)).

将在运行时用 pharo 徽标替换标签“我将替换这个”。

它会产生这个输出: