qtbindings 4.8.6.3-x86-mingw32 → 4.8.6.4-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/bin/2.4/rbrcc.exe +0 -0
  4. data/bin/2.4/rbuic4.exe +0 -0
  5. data/bin/2.4/smokeapi.exe +0 -0
  6. data/bin/2.4/smokedeptool.exe +0 -0
  7. data/examples/tutorial/t10/cannon.rb +72 -72
  8. data/examples/tutorial/t10/lcdrange.rb +45 -45
  9. data/examples/tutorial/t10/t10.rb +55 -55
  10. data/examples/tutorial/t11/cannon.rb +123 -124
  11. data/examples/tutorial/t11/lcdrange.rb +45 -45
  12. data/examples/tutorial/t11/t11.rb +65 -65
  13. data/examples/tutorial/t12/cannon.rb +157 -158
  14. data/examples/tutorial/t12/lcdrange.rb +58 -59
  15. data/examples/tutorial/t12/t12.rb +65 -66
  16. data/examples/tutorial/t13/cannon.rb +206 -208
  17. data/examples/tutorial/t13/gamebrd.rb +112 -113
  18. data/examples/tutorial/t13/lcdrange.rb +59 -60
  19. data/examples/tutorial/t13/t13.rb +11 -11
  20. data/examples/tutorial/t14/cannon.rb +262 -263
  21. data/examples/tutorial/t14/gamebrd.rb +122 -123
  22. data/examples/tutorial/t14/lcdrange.rb +61 -63
  23. data/examples/tutorial/t14/t14.rb +11 -11
  24. data/examples/tutorial/t3/t3.rb +17 -18
  25. data/examples/tutorial/t4/t4.rb +23 -25
  26. data/examples/tutorial/t5/t5.rb +35 -37
  27. data/examples/tutorial/t6/t6.rb +48 -52
  28. data/examples/tutorial/t7/lcdrange.rb +32 -32
  29. data/examples/tutorial/t7/t7.rb +40 -42
  30. data/examples/tutorial/t8/cannon.rb +37 -38
  31. data/examples/tutorial/t8/lcdrange.rb +45 -45
  32. data/examples/tutorial/t8/t8.rb +43 -43
  33. data/examples/tutorial/t9/cannon.rb +44 -45
  34. data/examples/tutorial/t9/lcdrange.rb +46 -46
  35. data/examples/tutorial/t9/t9.rb +43 -43
  36. data/lib/2.4/libqtruby4shared.dll +0 -0
  37. data/lib/2.4/libsmokebase.dll +0 -0
  38. data/lib/2.4/libsmokeqtcore.dll +0 -0
  39. data/lib/2.4/libsmokeqtdeclarative.dll +0 -0
  40. data/lib/{2.1 → 2.4}/libsmokeqtgui.dll +0 -0
  41. data/lib/2.4/libsmokeqthelp.dll +0 -0
  42. data/lib/2.4/libsmokeqtmultimedia.dll +0 -0
  43. data/lib/2.4/libsmokeqtnetwork.dll +0 -0
  44. data/lib/2.4/libsmokeqtopengl.dll +0 -0
  45. data/lib/2.4/libsmokeqtscript.dll +0 -0
  46. data/lib/2.4/libsmokeqtsql.dll +0 -0
  47. data/lib/2.4/libsmokeqtsvg.dll +0 -0
  48. data/lib/2.4/libsmokeqttest.dll +0 -0
  49. data/lib/2.4/libsmokeqtuitools.dll +0 -0
  50. data/lib/2.4/libsmokeqtwebkit.dll +0 -0
  51. data/lib/2.4/libsmokeqtxml.dll +0 -0
  52. data/lib/2.4/libsmokeqtxmlpatterns.dll +0 -0
  53. data/lib/2.4/qtdeclarative.so +0 -0
  54. data/lib/2.4/qtruby4.so +0 -0
  55. data/lib/2.4/qtscript.so +0 -0
  56. data/lib/2.4/qttest.so +0 -0
  57. data/lib/2.4/qtuitools.so +0 -0
  58. data/lib/2.4/qtwebkit.so +0 -0
  59. data/lib/Qt4.rb +119 -111
  60. data/lib/qtbindings_version.rb +2 -2
  61. data/qtbindings.gemspec +18 -18
  62. data/qtbindingsnative.gemspec +19 -19
  63. metadata +38 -115
  64. data/bin/2.0/rbrcc.exe +0 -0
  65. data/bin/2.0/rbuic4.exe +0 -0
  66. data/bin/2.0/smokeapi.exe +0 -0
  67. data/bin/2.0/smokedeptool.exe +0 -0
  68. data/bin/2.1/rbrcc.exe +0 -0
  69. data/bin/2.1/rbuic4.exe +0 -0
  70. data/bin/2.1/smokeapi.exe +0 -0
  71. data/bin/2.1/smokedeptool.exe +0 -0
  72. data/bin/2.2/rbrcc.exe +0 -0
  73. data/bin/2.2/rbuic4.exe +0 -0
  74. data/bin/2.2/smokeapi.exe +0 -0
  75. data/bin/2.2/smokedeptool.exe +0 -0
  76. data/bin/2.3/rbrcc.exe +0 -0
  77. data/bin/2.3/rbuic4.exe +0 -0
  78. data/bin/2.3/smokeapi.exe +0 -0
  79. data/bin/2.3/smokedeptool.exe +0 -0
  80. data/lib/2.0/libqtruby4shared.dll +0 -0
  81. data/lib/2.0/libsmokebase.dll +0 -0
  82. data/lib/2.0/libsmokeqtcore.dll +0 -0
  83. data/lib/2.0/libsmokeqtdeclarative.dll +0 -0
  84. data/lib/2.0/libsmokeqtgui.dll +0 -0
  85. data/lib/2.0/libsmokeqthelp.dll +0 -0
  86. data/lib/2.0/libsmokeqtmultimedia.dll +0 -0
  87. data/lib/2.0/libsmokeqtnetwork.dll +0 -0
  88. data/lib/2.0/libsmokeqtopengl.dll +0 -0
  89. data/lib/2.0/libsmokeqtscript.dll +0 -0
  90. data/lib/2.0/libsmokeqtsql.dll +0 -0
  91. data/lib/2.0/libsmokeqtsvg.dll +0 -0
  92. data/lib/2.0/libsmokeqttest.dll +0 -0
  93. data/lib/2.0/libsmokeqtuitools.dll +0 -0
  94. data/lib/2.0/libsmokeqtwebkit.dll +0 -0
  95. data/lib/2.0/libsmokeqtxml.dll +0 -0
  96. data/lib/2.0/libsmokeqtxmlpatterns.dll +0 -0
  97. data/lib/2.0/qtdeclarative.so +0 -0
  98. data/lib/2.0/qtruby4.so +0 -0
  99. data/lib/2.0/qtscript.so +0 -0
  100. data/lib/2.0/qttest.so +0 -0
  101. data/lib/2.0/qtuitools.so +0 -0
  102. data/lib/2.0/qtwebkit.so +0 -0
  103. data/lib/2.1/libqtruby4shared.dll +0 -0
  104. data/lib/2.1/libsmokebase.dll +0 -0
  105. data/lib/2.1/libsmokeqtcore.dll +0 -0
  106. data/lib/2.1/libsmokeqtdeclarative.dll +0 -0
  107. data/lib/2.1/libsmokeqthelp.dll +0 -0
  108. data/lib/2.1/libsmokeqtmultimedia.dll +0 -0
  109. data/lib/2.1/libsmokeqtnetwork.dll +0 -0
  110. data/lib/2.1/libsmokeqtopengl.dll +0 -0
  111. data/lib/2.1/libsmokeqtscript.dll +0 -0
  112. data/lib/2.1/libsmokeqtsql.dll +0 -0
  113. data/lib/2.1/libsmokeqtsvg.dll +0 -0
  114. data/lib/2.1/libsmokeqttest.dll +0 -0
  115. data/lib/2.1/libsmokeqtuitools.dll +0 -0
  116. data/lib/2.1/libsmokeqtwebkit.dll +0 -0
  117. data/lib/2.1/libsmokeqtxml.dll +0 -0
  118. data/lib/2.1/libsmokeqtxmlpatterns.dll +0 -0
  119. data/lib/2.1/qtdeclarative.so +0 -0
  120. data/lib/2.1/qtruby4.so +0 -0
  121. data/lib/2.1/qtscript.so +0 -0
  122. data/lib/2.1/qttest.so +0 -0
  123. data/lib/2.1/qtuitools.so +0 -0
  124. data/lib/2.1/qtwebkit.so +0 -0
  125. data/lib/2.2/libqtruby4shared.dll +0 -0
  126. data/lib/2.2/libsmokebase.dll +0 -0
  127. data/lib/2.2/libsmokeqtcore.dll +0 -0
  128. data/lib/2.2/libsmokeqtdeclarative.dll +0 -0
  129. data/lib/2.2/libsmokeqtgui.dll +0 -0
  130. data/lib/2.2/libsmokeqthelp.dll +0 -0
  131. data/lib/2.2/libsmokeqtmultimedia.dll +0 -0
  132. data/lib/2.2/libsmokeqtnetwork.dll +0 -0
  133. data/lib/2.2/libsmokeqtopengl.dll +0 -0
  134. data/lib/2.2/libsmokeqtscript.dll +0 -0
  135. data/lib/2.2/libsmokeqtsql.dll +0 -0
  136. data/lib/2.2/libsmokeqtsvg.dll +0 -0
  137. data/lib/2.2/libsmokeqttest.dll +0 -0
  138. data/lib/2.2/libsmokeqtuitools.dll +0 -0
  139. data/lib/2.2/libsmokeqtwebkit.dll +0 -0
  140. data/lib/2.2/libsmokeqtxml.dll +0 -0
  141. data/lib/2.2/libsmokeqtxmlpatterns.dll +0 -0
  142. data/lib/2.2/qtdeclarative.so +0 -0
  143. data/lib/2.2/qtruby4.so +0 -0
  144. data/lib/2.2/qtscript.so +0 -0
  145. data/lib/2.2/qttest.so +0 -0
  146. data/lib/2.2/qtuitools.so +0 -0
  147. data/lib/2.2/qtwebkit.so +0 -0
  148. data/lib/2.3/libqtruby4shared.dll +0 -0
  149. data/lib/2.3/libsmokebase.dll +0 -0
  150. data/lib/2.3/libsmokeqtcore.dll +0 -0
  151. data/lib/2.3/libsmokeqtdeclarative.dll +0 -0
  152. data/lib/2.3/libsmokeqtgui.dll +0 -0
  153. data/lib/2.3/libsmokeqthelp.dll +0 -0
  154. data/lib/2.3/libsmokeqtmultimedia.dll +0 -0
  155. data/lib/2.3/libsmokeqtnetwork.dll +0 -0
  156. data/lib/2.3/libsmokeqtopengl.dll +0 -0
  157. data/lib/2.3/libsmokeqtscript.dll +0 -0
  158. data/lib/2.3/libsmokeqtsql.dll +0 -0
  159. data/lib/2.3/libsmokeqtsvg.dll +0 -0
  160. data/lib/2.3/libsmokeqttest.dll +0 -0
  161. data/lib/2.3/libsmokeqtuitools.dll +0 -0
  162. data/lib/2.3/libsmokeqtwebkit.dll +0 -0
  163. data/lib/2.3/libsmokeqtxml.dll +0 -0
  164. data/lib/2.3/libsmokeqtxmlpatterns.dll +0 -0
  165. data/lib/2.3/qtdeclarative.so +0 -0
  166. data/lib/2.3/qtruby4.so +0 -0
  167. data/lib/2.3/qtscript.so +0 -0
  168. data/lib/2.3/qttest.so +0 -0
  169. data/lib/2.3/qtuitools.so +0 -0
  170. data/lib/2.3/qtwebkit.so +0 -0
  171. data/lib/qtbindings_qt_version.rb +0 -2
@@ -1,45 +1,45 @@
1
- require 'Qt'
2
-
3
- class LCDRange < Qt::Widget
4
- signals 'valueChanged(int)'
5
- slots 'setValue(int)', 'setRange(int, int)'
6
-
7
- def initialize(parent = nil)
8
- super
9
- lcd = Qt::LCDNumber.new(2)
10
- @slider = Qt::Slider.new(Qt::Horizontal)
11
- @slider.range = 0..99
12
- @slider.setValue(0)
13
- connect(@slider, SIGNAL('valueChanged(int)'), lcd, SLOT('display(int)'))
14
- connect(@slider, SIGNAL('valueChanged(int)'), SIGNAL('valueChanged(int)'))
15
-
16
- layout = Qt::VBoxLayout.new
17
- layout.addWidget(lcd)
18
- layout.addWidget(@slider)
19
- setLayout(layout)
20
-
21
- setFocusProxy(@slider)
22
- end
23
-
24
- def value()
25
- @slider.value()
26
- end
27
-
28
- def setValue( value )
29
- @slider.setValue( value )
30
- end
31
-
32
- def range=( r )
33
- setRange(r.begin, r.end)
34
- end
35
-
36
- def setRange( minVal, maxVal )
37
- if minVal < 0 || maxVal > 99 || minVal > maxVal
38
- qWarning( "LCDRange::setRange(#{minVal},#{maxVal})\n" +
39
- "\tRange must be 0..99\n" +
40
- "\tand minVal must not be greater than maxVal" )
41
- return
42
- end
43
- @slider.setRange( minVal, maxVal )
44
- end
45
- end
1
+ require 'Qt'
2
+
3
+ class LCDRange < Qt::Widget
4
+ signals 'valueChanged(int)'
5
+ slots 'setValue(int)', 'setRange(int, int)'
6
+
7
+ def initialize(parent = nil)
8
+ super
9
+ lcd = Qt::LCDNumber.new(2)
10
+ @slider = Qt::Slider.new(Qt::Horizontal)
11
+ @slider.range = 0..99
12
+ @slider.setValue(0)
13
+ connect(@slider, SIGNAL('valueChanged(int)'), lcd, SLOT('display(int)'))
14
+ connect(@slider, SIGNAL('valueChanged(int)'), SIGNAL('valueChanged(int)'))
15
+
16
+ layout = Qt::VBoxLayout.new
17
+ layout.addWidget(lcd)
18
+ layout.addWidget(@slider)
19
+ setLayout(layout)
20
+
21
+ setFocusProxy(@slider)
22
+ end
23
+
24
+ def value()
25
+ @slider.value()
26
+ end
27
+
28
+ def setValue(value)
29
+ @slider.setValue(value)
30
+ end
31
+
32
+ def range=(r)
33
+ setRange(r.begin, r.end)
34
+ end
35
+
36
+ def setRange(minVal, maxVal)
37
+ if minVal < 0 || maxVal > 99 || minVal > maxVal
38
+ qWarning("LCDRange::setRange(#{minVal},#{maxVal})\n" +
39
+ "\tRange must be 0..99\n" +
40
+ "\tand minVal must not be greater than maxVal")
41
+ return
42
+ end
43
+ @slider.setRange(minVal, maxVal)
44
+ end
45
+ end
@@ -1,65 +1,65 @@
1
- #!/usr/bin/env ruby
2
- $VERBOSE = true; $:.unshift File.dirname($0)
3
-
4
- require 'Qt'
5
- require './lcdrange.rb'
6
- require './cannon.rb'
7
-
8
- class MyWidget < Qt::Widget
9
- def initialize(parent = nil)
10
- super
11
- quit = Qt::PushButton.new('Quit')
12
- quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
13
-
14
- connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))
15
-
16
- angle = LCDRange.new( self )
17
- angle.range = 5..70
18
-
19
- force = LCDRange.new( self )
20
- force.range = 10..50
21
-
22
- cannonField = CannonField.new( self )
23
-
24
- connect( angle, SIGNAL('valueChanged(int)'),
25
- cannonField, SLOT('setAngle(int)') )
26
- connect( cannonField, SIGNAL('angleChanged(int)'),
27
- angle, SLOT('setValue(int)') )
28
-
29
- connect( force, SIGNAL('valueChanged(int)'),
30
- cannonField, SLOT('setForce(int)') )
31
- connect( cannonField, SIGNAL('forceChanged(int)'),
32
- force, SLOT('setValue(int)') )
33
-
34
- shoot = Qt::PushButton.new( '&Shoot' )
35
- shoot.setFont( Qt::Font.new( 'Times', 18, Qt::Font::Bold ) )
36
-
37
- connect( shoot, SIGNAL('clicked()'), cannonField, SLOT('shoot()') )
38
-
39
- topLayout = Qt::HBoxLayout.new
40
- topLayout.addWidget(shoot)
41
- topLayout.addStretch(1)
42
-
43
- leftLayout = Qt::VBoxLayout.new()
44
- leftLayout.addWidget( angle )
45
- leftLayout.addWidget( force )
46
-
47
- gridLayout = Qt::GridLayout.new
48
- gridLayout.addWidget( quit, 0, 0 )
49
- gridLayout.addLayout(topLayout, 0, 1)
50
- gridLayout.addLayout(leftLayout, 1, 0)
51
- gridLayout.addWidget( cannonField, 1, 1, 2, 1 )
52
- gridLayout.setColumnStretch( 1, 10 )
53
- setLayout(gridLayout)
54
-
55
- angle.setValue( 60 )
56
- force.setValue( 25 )
57
- angle.setFocus()
58
- end
59
- end
60
-
61
- app = Qt::Application.new(ARGV)
62
- widget = MyWidget.new
63
- widget.setGeometry( 100, 100, 500, 355 )
64
- widget.show
65
- app.exec
1
+ #!/usr/bin/env ruby
2
+ $VERBOSE = true; $:.unshift File.dirname($0)
3
+
4
+ require 'Qt'
5
+ require_relative 'lcdrange.rb'
6
+ require_relative 'cannon.rb'
7
+
8
+ class MyWidget < Qt::Widget
9
+ def initialize(parent = nil)
10
+ super
11
+ quit = Qt::PushButton.new('Quit')
12
+ quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
13
+
14
+ connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))
15
+
16
+ angle = LCDRange.new(self)
17
+ angle.range = 5..70
18
+
19
+ force = LCDRange.new(self)
20
+ force.range = 10..50
21
+
22
+ cannonField = CannonField.new(self)
23
+
24
+ connect(angle, SIGNAL('valueChanged(int)'),
25
+ cannonField, SLOT('setAngle(int)'))
26
+ connect(cannonField, SIGNAL('angleChanged(int)'),
27
+ angle, SLOT('setValue(int)'))
28
+
29
+ connect(force, SIGNAL('valueChanged(int)'),
30
+ cannonField, SLOT('setForce(int)'))
31
+ connect(cannonField, SIGNAL('forceChanged(int)'),
32
+ force, SLOT('setValue(int)'))
33
+
34
+ shoot = Qt::PushButton.new('&Shoot')
35
+ shoot.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
36
+
37
+ connect(shoot, SIGNAL('clicked()'), cannonField, SLOT('shoot()'))
38
+
39
+ topLayout = Qt::HBoxLayout.new
40
+ topLayout.addWidget(shoot)
41
+ topLayout.addStretch(1)
42
+
43
+ leftLayout = Qt::VBoxLayout.new()
44
+ leftLayout.addWidget(angle)
45
+ leftLayout.addWidget(force)
46
+
47
+ gridLayout = Qt::GridLayout.new
48
+ gridLayout.addWidget(quit, 0, 0)
49
+ gridLayout.addLayout(topLayout, 0, 1)
50
+ gridLayout.addLayout(leftLayout, 1, 0)
51
+ gridLayout.addWidget(cannonField, 1, 1, 2, 1)
52
+ gridLayout.setColumnStretch(1, 10)
53
+ setLayout(gridLayout)
54
+
55
+ angle.setValue(60)
56
+ force.setValue(25)
57
+ angle.setFocus()
58
+ end
59
+ end
60
+
61
+ app = Qt::Application.new(ARGV)
62
+ widget = MyWidget.new
63
+ widget.setGeometry(100, 100, 500, 355)
64
+ widget.show
65
+ app.exec
@@ -1,158 +1,157 @@
1
- include Math
2
- require 'Qt'
3
-
4
- class CannonField < Qt::Widget
5
-
6
- signals 'hit()', 'missed()', 'angleChanged(int)', 'forceChanged(int)'
7
- slots 'setAngle(int)', 'setForce(int)', 'shoot()', 'moveShot()', 'newTarget()'
8
-
9
- def initialize(parent = nil)
10
- super
11
- @currentAngle = 45
12
- @currentForce = 0
13
- @timerCount = 0
14
- @autoShootTimer = Qt::Timer.new( self )
15
- connect( @autoShootTimer, SIGNAL('timeout()'),
16
- self, SLOT('moveShot()') );
17
- @shootAngle = 0
18
- @shootForce = 0
19
- @target = Qt::Point.new(0, 0)
20
- setPalette( Qt::Palette.new( Qt::Color.new( 250, 250, 200) ) )
21
- setAutoFillBackground(true)
22
- newTarget()
23
- @barrelRect = Qt::Rect.new(33, -4, 15, 8)
24
- end
25
-
26
- def setAngle( degrees )
27
- if degrees < 5
28
- degrees = 5
29
- elsif degrees > 70
30
- degrees = 70
31
- end
32
- if @currentAngle == degrees
33
- return
34
- end
35
- @currentAngle = degrees
36
- update( cannonRect() )
37
- emit angleChanged( @currentAngle )
38
- end
39
-
40
- def setForce( newton )
41
- if newton < 0
42
- newton = 0
43
- end
44
- if @currentForce == newton
45
- return
46
- end
47
- @currentForce = newton
48
- emit forceChanged( @currentForce )
49
- end
50
-
51
- def shoot()
52
- if @autoShootTimer.isActive()
53
- return
54
- end;
55
- @timerCount = 0
56
- @shootAngle = @currentAngle
57
- @shootForce = @currentForce
58
- @autoShootTimer.start( 50 )
59
- end
60
-
61
- @@currentForceirst_time = true
62
-
63
- def newTarget()
64
- if @@currentForceirst_time
65
- @@currentForceirst_time = false
66
- midnight = Qt::Time.new( 0, 0, 0 )
67
- srand( midnight.secsTo(Qt::Time.currentTime()) )
68
- end
69
- r = Qt::Region.new( targetRect() )
70
- @target = Qt::Point.new( 200 + rand(190),
71
- 10 + rand(255) )
72
- repaint( r.unite( Qt::Region.new(targetRect()) ) )
73
- end
74
-
75
- def moveShot()
76
- r = Qt::Region.new( shotRect() )
77
- @timerCount += 1
78
-
79
- shotR = shotRect()
80
-
81
- if shotR.intersects( targetRect() )
82
- @autoShootTimer.stop()
83
- emit hit()
84
- elsif shotR.x() > width() || shotR.y() > height()
85
- @autoShootTimer.stop()
86
- emit missed()
87
- else
88
- r = r.unite( Qt::Region.new( shotR ) )
89
- end
90
-
91
- update( r )
92
- end
93
-
94
- def paintEvent( e )
95
- painter = Qt::Painter.new( self )
96
- paintCannon( painter )
97
- if @autoShootTimer.isActive()
98
- paintShot( painter )
99
- end
100
- paintTarget(painter)
101
- painter.end()
102
- end
103
-
104
- def paintShot( painter )
105
- painter.setPen( Qt::NoPen )
106
- painter.setBrush( Qt::Brush.new(Qt::black) )
107
- painter.drawRect( shotRect() )
108
- end
109
-
110
- def paintTarget( painter )
111
- painter.setBrush( Qt::Brush.new(Qt::red) )
112
- painter.setPen( Qt::Pen.new(Qt::Color.new(Qt::black)) )
113
- painter.drawRect( targetRect() )
114
- end
115
-
116
- def paintCannon(painter)
117
- painter.setPen(Qt::NoPen)
118
- painter.setBrush(Qt::Brush.new(Qt::blue))
119
-
120
- painter.save()
121
- painter.translate(0, height())
122
- painter.drawPie( Qt::Rect.new(-35, -35, 70, 70), 0, 90*16 )
123
- painter.rotate( - @currentAngle )
124
- painter.drawRect( @barrelRect )
125
- painter.restore()
126
- end
127
-
128
- def cannonRect()
129
- r = Qt::Rect.new( 0, 0, 50, 50)
130
- r.moveBottomLeft( rect().bottomLeft() )
131
- return r
132
- end
133
-
134
- def shotRect()
135
- gravity = 4.0
136
-
137
- time = @timerCount / 4.0
138
- velocity = @shootForce
139
- radians = @shootAngle*3.14159265/180.0
140
-
141
- velx = velocity*cos( radians )
142
- vely = velocity*sin( radians )
143
- x0 = ( @barrelRect.right() + 5.0 )*cos(radians)
144
- y0 = ( @barrelRect.right() + 5.0 )*sin(radians)
145
- x = x0 + velx*time
146
- y = y0 + vely*time - 0.5*gravity*time*time
147
-
148
- r = Qt::Rect.new( 0, 0, 6, 6 );
149
- r.moveCenter( Qt::Point.new( x.round, height() - 1 - y.round ) )
150
- return r
151
- end
152
-
153
- def targetRect()
154
- r = Qt::Rect.new( 0, 0, 20, 10 )
155
- r.moveCenter( Qt::Point.new(@target.x(),height() - 1 - @target.y()) );
156
- return r
157
- end
158
- end
1
+ include Math
2
+ require 'Qt'
3
+
4
+ class CannonField < Qt::Widget
5
+ signals 'hit()', 'missed()', 'angleChanged(int)', 'forceChanged(int)'
6
+ slots 'setAngle(int)', 'setForce(int)', 'shoot()', 'moveShot()', 'newTarget()'
7
+
8
+ def initialize(parent = nil)
9
+ super
10
+ @currentAngle = 45
11
+ @currentForce = 0
12
+ @timerCount = 0
13
+ @autoShootTimer = Qt::Timer.new(self)
14
+ connect(@autoShootTimer, SIGNAL('timeout()'),
15
+ self, SLOT('moveShot()'));
16
+ @shootAngle = 0
17
+ @shootForce = 0
18
+ @target = Qt::Point.new(0, 0)
19
+ setPalette(Qt::Palette.new(Qt::Color.new(250, 250, 200)))
20
+ setAutoFillBackground(true)
21
+ newTarget()
22
+ @barrelRect = Qt::Rect.new(33, -4, 15, 8)
23
+ end
24
+
25
+ def setAngle(degrees)
26
+ if degrees < 5
27
+ degrees = 5
28
+ elsif degrees > 70
29
+ degrees = 70
30
+ end
31
+ if @currentAngle == degrees
32
+ return
33
+ end
34
+ @currentAngle = degrees
35
+ update(cannonRect())
36
+ emit angleChanged(@currentAngle)
37
+ end
38
+
39
+ def setForce(newton)
40
+ if newton < 0
41
+ newton = 0
42
+ end
43
+ if @currentForce == newton
44
+ return
45
+ end
46
+ @currentForce = newton
47
+ emit forceChanged(@currentForce)
48
+ end
49
+
50
+ def shoot()
51
+ if @autoShootTimer.isActive()
52
+ return
53
+ end;
54
+ @timerCount = 0
55
+ @shootAngle = @currentAngle
56
+ @shootForce = @currentForce
57
+ @autoShootTimer.start(50)
58
+ end
59
+
60
+ @@currentForceirst_time = true
61
+
62
+ def newTarget()
63
+ if @@currentForceirst_time
64
+ @@currentForceirst_time = false
65
+ midnight = Qt::Time.new(0, 0, 0)
66
+ srand(midnight.secsTo(Qt::Time.currentTime()))
67
+ end
68
+ r = Qt::Region.new(targetRect())
69
+ @target = Qt::Point.new(200 + rand(190),
70
+ 10 + rand(255))
71
+ repaint(r.unite(Qt::Region.new(targetRect())))
72
+ end
73
+
74
+ def moveShot()
75
+ r = Qt::Region.new(shotRect())
76
+ @timerCount += 1
77
+
78
+ shotR = shotRect()
79
+
80
+ if shotR.intersects(targetRect())
81
+ @autoShootTimer.stop()
82
+ emit hit()
83
+ elsif shotR.x() > width() || shotR.y() > height()
84
+ @autoShootTimer.stop()
85
+ emit missed()
86
+ else
87
+ r = r.unite(Qt::Region.new(shotR))
88
+ end
89
+
90
+ update(r)
91
+ end
92
+
93
+ def paintEvent(e)
94
+ painter = Qt::Painter.new(self)
95
+ paintCannon(painter)
96
+ if @autoShootTimer.isActive()
97
+ paintShot(painter)
98
+ end
99
+ paintTarget(painter)
100
+ painter.end()
101
+ end
102
+
103
+ def paintShot(painter)
104
+ painter.setPen(Qt::NoPen)
105
+ painter.setBrush(Qt::Brush.new(Qt::black))
106
+ painter.drawRect(shotRect())
107
+ end
108
+
109
+ def paintTarget(painter)
110
+ painter.setBrush(Qt::Brush.new(Qt::red))
111
+ painter.setPen(Qt::Pen.new(Qt::Color.new(Qt::black)))
112
+ painter.drawRect(targetRect())
113
+ end
114
+
115
+ def paintCannon(painter)
116
+ painter.setPen(Qt::NoPen)
117
+ painter.setBrush(Qt::Brush.new(Qt::blue))
118
+
119
+ painter.save()
120
+ painter.translate(0, height())
121
+ painter.drawPie(Qt::Rect.new(-35, -35, 70, 70), 0, 90 * 16)
122
+ painter.rotate(- @currentAngle)
123
+ painter.drawRect(@barrelRect)
124
+ painter.restore()
125
+ end
126
+
127
+ def cannonRect()
128
+ r = Qt::Rect.new(0, 0, 50, 50)
129
+ r.moveBottomLeft(rect().bottomLeft())
130
+ return r
131
+ end
132
+
133
+ def shotRect()
134
+ gravity = 4.0
135
+
136
+ time = @timerCount / 4.0
137
+ velocity = @shootForce
138
+ radians = @shootAngle * 3.14159265 / 180.0
139
+
140
+ velx = velocity * cos(radians)
141
+ vely = velocity * sin(radians)
142
+ x0 = (@barrelRect.right() + 5.0) * cos(radians)
143
+ y0 = (@barrelRect.right() + 5.0) * sin(radians)
144
+ x = x0 + velx * time
145
+ y = y0 + vely * time - 0.5 * gravity * time * time
146
+
147
+ r = Qt::Rect.new(0, 0, 6, 6);
148
+ r.moveCenter(Qt::Point.new(x.round, height() - 1 - y.round))
149
+ return r
150
+ end
151
+
152
+ def targetRect()
153
+ r = Qt::Rect.new(0, 0, 20, 10)
154
+ r.moveCenter(Qt::Point.new(@target.x(), height() - 1 - @target.y()));
155
+ return r
156
+ end
157
+ end