我在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课程时,无处可寻找变形。那么我如何找到变形以及如何定位和缩放包含其所有变形的变形?
答案 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包含在一个不必要的独立图像中。