0

我在 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 类时,正如我所料,一个 Morph 无处可寻。那么我如何找到变形以及如何定位和缩放包含所有子变形的它?

4

1 回答 1

2

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

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

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

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

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

于 2014-09-08T10:49:11.803 回答