画面にバリアを張って、バリア解除時にイベントを破棄すれば出来そう・・・。
Code:
{import * from COM.CURL.LIB.UI}
{define-class public BarrierFrame {inherits OverlayBox}
{constructor public {default ...}
{construct-super {splice ...}}
set self.barrier-screen-frame =
{Fill background = "transparent"}
}
||処理中に画面をロックするためのバリア
field barrier-screen-frame:Graphic
field private _barrier?:bool = false
{getter public {barrier?}:bool
{return self._barrier?}
}
{setter public {barrier? val:bool}:void
set self._barrier? = val
{if self._barrier? then
||バリアーを張る
{self.add self.barrier-screen-frame}
else
||バリア解除時に、それまでのイベントを破棄する
{dispatch-events false}
{self.barrier-screen-frame.detach}
}
}
}
{def v:View = {View}}
{def bf = {BarrierFrame}}
{def ta = {TextArea
width = {make-elastic},
height= {make-elastic}
}
}
{def cb =
{CommandButton
label= "with-busy-view",
{on Action do
{with bf.barrier? = true do
{with-busy-view v do
||時間をかけるためのダミー処理
def (buf:StringBuf, n:int, encoding:CharEncoding) =
{read-from {url "http://www.yahoo.com"}}
}
}
}
}
}
{do
{v.add bf}
{bf.add {VBox hstretch? = true, ta, cb}}
{v.show}
}