尝试在发送消息时找到进度条变形显示进度

时间:2014-09-07 09:48:18

标签: smalltalk pharo morphic

我在PharoLauncher中提供了一个进度条,以便用户通过此代码获取有关下载图像进度的信息

PharoLauncher>>displayProgress:during: (in category 'template action') -----

displayProgress: label during: workBlock
    | nextUpdateTime |
    nextUpdateTime := 0.
    ^UIManager default displayProgress: label 
        from: 0.0 to: 1.0 during:[:bar|
            [workBlock value] on: HTTPProgress do:[:ex|
                (ex total == nil or: [ex amount == nil]) ifFalse:[
                    (nextUpdateTime < Time millisecondClockValue 
                        or:[ex total = ex amount]) ifTrue:[
                            bar current: ex amount asFloat / ex total asFloat.
                            nextUpdateTime := Time millisecondClockValue + 100.
                    ].
                ].
                ex resume.
            ]
        ]

所以消息是UIManager默认的displayProgress:from:to:during:。现在这个工作正常,但是我想把变形放在中间,让用户看起来更舒服,它可以大大缩放,所以它很多更容易做到。为了做到这一点,我需要找到作为进度条容器的Morph,并完整地扩展。

问题是当我尝试浏览此消息的层次结构时,我遇到了死胡同,它将我发送给

displayProgress: titleString from: minVal to: maxVal during: workBlock
    "SystemProgressMorph show: titleString from: minVal to:  during: "

    ^ workBlock asJob
            title: titleString;
            min: minVal;
            max: maxVal;
            run. 

问题在于,当我按照我的预期去Job课程时,无处可寻找变形。那么我如何找到变形以及如何定位和缩放包含其所有变形的变形?

1 个答案:

答案 0 :(得分:2)

在Pharo-dev邮件列表中的Thierry Goubier和freenode #Pharo的tinchodias的帮助下,我找到了解决方案

创建了三个播音员,这三个声明与JobStart,JobEnd,JobChange类和触发器类方法startJb:endJob:和updateJob:SystemProgressMorph类相关联。 SystemProgressMorph只能有一个实例,为了捕获该实例,我们使用uniqueInstance类方法。

因此,为了重新定位并重新调整进度条的大小,我使用了以下级联消息

(SystemProgressMorph uniqueInstance) minWidth: 600; 
                                     minHeight: 50; 
                                     layoutInset: 30@20; 
                                     position: 150@200.

layoutInset为SystemProgressBarMorph中的进度条添加了一些空间。最好重置这些值,这样我们就不会影响其他pharo应用程序使用的进度条,但是因为PharoLauncher包含在一个不必要的独立图像中。