Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/env ruby
require 'fox16'
class ThreadedWindow < Fox::FXMainWindow
include Fox
def initialize(app)
# Call the base class initializer first
super(app, "Threaded Widget Test", :opts => DECOR_ALL, width: 200, height: 500)
@vframe = FXVerticalFrame.new(self,
FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0) do |frame|
FXButton.new(frame, "Klick to add", opts: FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X) do |button|
button.connect(SEL_COMMAND, method(:on_button_clicked))
end
end
end
def on_button_clicked(sender, sel, ptr)
FXHorizontalFrame.new(@vframe,
FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 10) do |frame|
label = FXLabel.new frame, "..."
Thread.new do
50.times do |seconds|
runOnUiThread do
label.text = "#{(50 - seconds)/10.0} seconds to remove"
end
sleep 0.1
end
runOnUiThread do
@vframe.removeChild(frame)
@vframe.create; @vframe.show; @vframe.recalc
end
end
end
@vframe.create; @vframe.show; @vframe.recalc
end
# Create and show this window
def create
super
show(PLACEMENT_SCREEN)
end
end
if __FILE__ == $0
application = Fox::FXApp.new("ThreadApp", "FoxTest")
ThreadedWindow.new(application)
application.create
application.run
end