qt_connect 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING.LIB.txt +510 -0
- data/README.md +257 -0
- data/Rakefile +72 -0
- data/examples/classexplorer/classexplorer.rb +828 -0
- data/examples/classexplorer/menus.rb +1 -0
- data/examples/classexplorer/menus/helpmenu.rb +73 -0
- data/examples/classexplorer/packagetree.rb +91 -0
- data/examples/classexplorer/qt_extensions.rb +2 -0
- data/examples/classexplorer/qt_extensions/htmldelegate.rb +40 -0
- data/examples/classexplorer/qt_extensions/line_edit.rb +65 -0
- data/examples/deform/Deform.html +23 -0
- data/examples/deform/Thumbs.db +0 -0
- data/examples/deform/arthurframe.rb +273 -0
- data/examples/deform/deform-demo.png +0 -0
- data/examples/deform/deform.rb +502 -0
- data/examples/deform/qt-logo.png +0 -0
- data/examples/qtmapzoom/qtmapzoom.rb +340 -0
- data/java/SignalActions.java +13 -0
- data/lib/Qt.rb +10 -0
- data/lib/qt_connect.rb +12 -0
- data/lib/qt_connect/qt_compat.rb +700 -0
- data/lib/qt_connect/qt_jbindings.rb +657 -0
- data/lib/qt_connect/qt_sugar.rb +277 -0
- data/lib/qt_connect/version.rb +3 -0
- data/lib/qt_jambi.rb +8 -0
- data/lib/signalactions.jar +0 -0
- metadata +92 -0
Binary file
|
@@ -0,0 +1,340 @@
|
|
1
|
+
=begin
|
2
|
+
**
|
3
|
+
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
4
|
+
** Contact: Qt Software Information (qt-info@nokia.com)
|
5
|
+
**
|
6
|
+
** This file is part of the Graphics Dojo project on Qt Labs.
|
7
|
+
**
|
8
|
+
** This file may be used under the terms of the GNU General Public
|
9
|
+
** License version 2.0 or 3.0 as published by the Free Software Foundation
|
10
|
+
** and appearing in the file LICENSE.GPL included in the packaging of
|
11
|
+
** this file. Please review the following information to ensure GNU
|
12
|
+
** General Public Licensing requirements will be met:
|
13
|
+
** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
|
14
|
+
** http://www.gnu.org/copyleft/gpl.html.
|
15
|
+
**
|
16
|
+
** If you are unsure which license is appropriate for your use, please
|
17
|
+
** contact the sales department at qt-sales@nokia.com.
|
18
|
+
**
|
19
|
+
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
20
|
+
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
21
|
+
**
|
22
|
+
** see original article 'Maps with a Magnifying Glass' by Ariya Hidayat
|
23
|
+
** (http://labs.trolltech.com/blogs/2009/07/29/maps-with-a-magnifying-glass/)
|
24
|
+
**
|
25
|
+
** Ruby implementation and minor modifications by Cees Zeelenberg
|
26
|
+
** (c.zeelenberg@computer.org)
|
27
|
+
=end
|
28
|
+
|
29
|
+
require 'qt_connect'
|
30
|
+
|
31
|
+
MAP_HTML=%Q[
|
32
|
+
<html>
|
33
|
+
<head>
|
34
|
+
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
|
35
|
+
<script type="text/javascript">
|
36
|
+
var map;
|
37
|
+
function initialize() {
|
38
|
+
var myOptions = {
|
39
|
+
zoom: 15,
|
40
|
+
center: new google.maps.LatLng(51.4772,0.0),
|
41
|
+
disableDefaultUI: true,
|
42
|
+
mapTypeId: google.maps.MapTypeId.ROADMAP
|
43
|
+
}
|
44
|
+
map = new google.maps.Map(document.getElementById("map_canvas"),
|
45
|
+
myOptions);
|
46
|
+
var marker = new google.maps.Marker({map: map, position:
|
47
|
+
map.getCenter()});
|
48
|
+
return true;
|
49
|
+
}
|
50
|
+
</script>
|
51
|
+
</head>
|
52
|
+
<body style="margin:0px; padding:0px;">
|
53
|
+
<div id="map_canvas" style="width:100%; height:100%"></div>
|
54
|
+
</body></html>
|
55
|
+
</html>
|
56
|
+
]
|
57
|
+
HOLD_TIME=701
|
58
|
+
MAX_MAGNIFIER=229
|
59
|
+
#
|
60
|
+
# the GMaps class should really inherit from Qt:WebView
|
61
|
+
# but at the time of writing this caused a problem with 'paintEvent', which could not
|
62
|
+
# provide access to the paint device.
|
63
|
+
# the disadvantage of this workaround is that keyboard and mouse-events are not passed on
|
64
|
+
# to the Google application
|
65
|
+
|
66
|
+
class GMaps < Qt::Widget
|
67
|
+
|
68
|
+
def initialize(parent)
|
69
|
+
@parent=parent
|
70
|
+
super(parent)
|
71
|
+
@timer=Qt::Timer.new
|
72
|
+
@timer.singleShot=true
|
73
|
+
@timer.timeout.connect{triggerLoading}
|
74
|
+
@pressed=false
|
75
|
+
@snapped=false
|
76
|
+
@zoomed=false
|
77
|
+
@zoomPage=Qt::WebPage.new(self)
|
78
|
+
@zoomPage.repaintRequested.connect{update()}
|
79
|
+
@mainPage=Qt::WebPage.new(self)
|
80
|
+
|
81
|
+
@mainFrame=@mainPage.mainFrame
|
82
|
+
@mainFrame.setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff)
|
83
|
+
@mainFrame.setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff)
|
84
|
+
content=MAP_HTML
|
85
|
+
@mainFrame.setHtml(content)
|
86
|
+
@zoomFrame=@zoomPage.mainFrame
|
87
|
+
@zoomFrame.setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff)
|
88
|
+
@zoomFrame.setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff)
|
89
|
+
@zoomFrame.loadFinished.connect{ |tf| triggerLoading}
|
90
|
+
content=MAP_HTML.gsub("zoom: 15", "zoom: 16")
|
91
|
+
@zoomFrame.setHtml(content)
|
92
|
+
@pressPos=Qt::Point.new
|
93
|
+
@dragPos=Qt::Point.new
|
94
|
+
@tapTimer=Qt::BasicTimer.new
|
95
|
+
@zoomPixmap=Qt::Pixmap.new
|
96
|
+
@maskPixmap=Qt::Pixmap.new
|
97
|
+
@normalPixmapSize=Qt::Size.new
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
def setCenter(latitude,longitude)
|
102
|
+
@lat=latitude
|
103
|
+
@lng=longitude
|
104
|
+
@dlat=0.0
|
105
|
+
@dlng=0.0
|
106
|
+
@mousePos=@lastPos
|
107
|
+
@code = "map.setCenter(new google.maps.LatLng(#{latitude}, #{longitude}));"
|
108
|
+
@mainFrame.evaluateJavaScript(@code)
|
109
|
+
@zoomFrame.evaluateJavaScript(@code)
|
110
|
+
code = "map.getBounds().toUrlValue(5)"
|
111
|
+
return unless coors=(@mainFrame.evaluateJavaScript(code)).toString
|
112
|
+
fx1,fy1,fx2,fy2=coors.split(',').map{ |f| f.to_f}
|
113
|
+
@dlat=(fx2-fx1)/size.width
|
114
|
+
@dlng=(fy2-fy1)/size.height
|
115
|
+
end
|
116
|
+
|
117
|
+
def setMagnifierMode(mode)
|
118
|
+
code=%Q[map.setMapTypeId(google.maps.MapTypeId.#{mode.to_s.upcase});]
|
119
|
+
@zoomFrame.evaluateJavaScript(code)
|
120
|
+
end
|
121
|
+
|
122
|
+
def setPanelMode(mode)
|
123
|
+
code=%Q[map.setMapTypeId(google.maps.MapTypeId.#{mode.to_s.upcase});]
|
124
|
+
@mainFrame.evaluateJavaScript(code)
|
125
|
+
end
|
126
|
+
|
127
|
+
def setZoom(zoomfactor)
|
128
|
+
code=%Q[map.setZoom(#{zoomfactor});]
|
129
|
+
@mainFrame.evaluateJavaScript(code)
|
130
|
+
code=%Q[map.setZoom(#{zoomfactor+1});]
|
131
|
+
@zoomFrame.evaluateJavaScript(code)
|
132
|
+
end
|
133
|
+
|
134
|
+
def triggerLoading()
|
135
|
+
code = "initialize();"
|
136
|
+
xm=@mainFrame.evaluateJavaScript(code).toBool
|
137
|
+
xz=@zoomFrame.evaluateJavaScript(code).toBool
|
138
|
+
Qt::Timer.singleShot(1000,self,:triggerLoading) unless xm && xz
|
139
|
+
end
|
140
|
+
|
141
|
+
def timerEvent(event)
|
142
|
+
super(event)
|
143
|
+
if (!@zoomed)
|
144
|
+
@zoomed = true
|
145
|
+
@tapTimer.stop()
|
146
|
+
@mainPage.viewportSize=size
|
147
|
+
@zoomPage.viewportSize=self.size*2
|
148
|
+
lat = @mainFrame.evaluateJavaScript("map.getCenter().lat()").toDouble
|
149
|
+
lng = @mainFrame.evaluateJavaScript("map.getCenter().lng()").toDouble
|
150
|
+
setCenter(lat, lng);
|
151
|
+
end
|
152
|
+
update();
|
153
|
+
end
|
154
|
+
def mousePressEvent(event)
|
155
|
+
@pressed = @snapped = true
|
156
|
+
@pressPos = @dragPos = event.pos()
|
157
|
+
@tapTimer.stop()
|
158
|
+
@tapTimer.start(HOLD_TIME, self)
|
159
|
+
super(event)
|
160
|
+
end
|
161
|
+
|
162
|
+
def mouseReleaseEvent(event)
|
163
|
+
@pressed = @snapped = false
|
164
|
+
@tapTimer.stop()
|
165
|
+
if (!@zoomed)
|
166
|
+
super(event)
|
167
|
+
else
|
168
|
+
@zoomed = false
|
169
|
+
event.accept()
|
170
|
+
update();
|
171
|
+
end
|
172
|
+
end
|
173
|
+
def mouseMoveEvent(event)
|
174
|
+
@mousePos ||= event.pos
|
175
|
+
@lastPos=event.pos()
|
176
|
+
if (!@zoomed)
|
177
|
+
if (!@pressed || !@snapped)
|
178
|
+
begin
|
179
|
+
deltamouse=@lastPos-@mousePos
|
180
|
+
newlat=@lat+@dlat*deltamouse.y
|
181
|
+
newlng=@lng-@dlng*deltamouse.x
|
182
|
+
setCenter(newlat,newlng)
|
183
|
+
rescue
|
184
|
+
end
|
185
|
+
return
|
186
|
+
else
|
187
|
+
threshold=40
|
188
|
+
delta = event.pos() - @pressPos
|
189
|
+
if (@snapped)
|
190
|
+
@snapped &= (delta.x() < threshold)
|
191
|
+
@snapped &= (delta.y() < threshold)
|
192
|
+
@snapped &= (delta.x() > -threshold)
|
193
|
+
@snapped &= (delta.y() > -threshold)
|
194
|
+
end
|
195
|
+
(@tapTimer.stop() ; super(event)) if (!@snapped)
|
196
|
+
end
|
197
|
+
else
|
198
|
+
@dragPos = event.pos();
|
199
|
+
update();
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
def paintEvent(event)
|
204
|
+
if @normalPixmapSize !=self.size
|
205
|
+
@normalPixmapSize=size
|
206
|
+
@mainPage.viewportSize=size
|
207
|
+
@zoomPage.viewportSize=size * 2
|
208
|
+
end
|
209
|
+
@painter=Qt::Painter.new(self)
|
210
|
+
@painter.renderHint=Qt::Painter::Antialiasing
|
211
|
+
@painter.save
|
212
|
+
@mainFrame.render(@painter,event.region)
|
213
|
+
@painter.restore
|
214
|
+
if @zoomed
|
215
|
+
dim = [width(), height()].min
|
216
|
+
magnifierSize = [MAX_MAGNIFIER, dim * 2 / 3].min
|
217
|
+
radius = magnifierSize / 2
|
218
|
+
ring = radius - 15
|
219
|
+
box = Qt::Size.new(magnifierSize, magnifierSize)
|
220
|
+
|
221
|
+
if (@maskPixmap.size() != box)
|
222
|
+
@maskPixmap = Qt::Pixmap.new(box) {fill(Qt::Color.new(Qt::transparent))}
|
223
|
+
g=Qt::RadialGradient.new {
|
224
|
+
setCenter(radius, radius)
|
225
|
+
setFocalPoint(radius, radius)
|
226
|
+
setRadius(radius)
|
227
|
+
setColorAt(1.0, Qt::Color.new(255, 255, 255, 0))
|
228
|
+
setColorAt(0.5, Qt::Color.new(128, 128, 128, 255))
|
229
|
+
}
|
230
|
+
Qt::Painter.new(@maskPixmap) { |p|
|
231
|
+
p.setRenderHint(Qt::Painter::Antialiasing)
|
232
|
+
p.setCompositionMode(Qt::Painter::CompositionMode_Source)
|
233
|
+
p.setBrush(Qt::Brush.new(g))
|
234
|
+
p.setPen(Qt::NoPen)
|
235
|
+
p.drawRect(@maskPixmap.rect())
|
236
|
+
p.setBrush(Qt::Brush.new(Qt::Color.new(Qt::transparent)))
|
237
|
+
p.drawEllipse(g.center(), ring, ring)
|
238
|
+
p.end
|
239
|
+
}
|
240
|
+
end
|
241
|
+
center_xy=@dragPos - Qt::Point.new(0,radius/2)
|
242
|
+
ulhc_xy = center_xy - Qt::Point.new(radius, radius)
|
243
|
+
zoom_ulhc_xy = center_xy * 2 - Qt::Point.new(radius, radius)
|
244
|
+
center_xy_f=Qt::PointF.new(center_xy.x.to_f,center_xy.y.to_f)
|
245
|
+
|
246
|
+
if (@zoomPixmap.size() != box)
|
247
|
+
@zoomPixmap = Qt::Pixmap.new(box) { fill(Qt::Color.new(Qt::lightGray))}
|
248
|
+
end
|
249
|
+
Qt::Painter.new(@zoomPixmap) { |zp|
|
250
|
+
zp.translate(-zoom_ulhc_xy)
|
251
|
+
region=Qt::Region.new(Qt::Rect.new(zoom_ulhc_xy, box))
|
252
|
+
@zoomFrame.render(zp,region)
|
253
|
+
zp.end
|
254
|
+
}
|
255
|
+
@clippath=Qt::PainterPath.new{addEllipse(center_xy_f, ring.to_f, ring.to_f)}
|
256
|
+
|
257
|
+
@painter.clipPath=@clippath
|
258
|
+
@painter.drawPixmap(ulhc_xy, @zoomPixmap)
|
259
|
+
@painter.clipping=false
|
260
|
+
@painter.drawPixmap(ulhc_xy, @maskPixmap)
|
261
|
+
@painter.pen=Qt::gray
|
262
|
+
@painter.drawPath(@clippath)
|
263
|
+
end
|
264
|
+
@painter.end
|
265
|
+
end
|
266
|
+
|
267
|
+
end
|
268
|
+
|
269
|
+
if $0==__FILE__
|
270
|
+
|
271
|
+
PLACES={ "&Oslo"=>[59.9138204, 10.7387413],
|
272
|
+
"&Berlin"=>[52.5056819, 13.3232027],
|
273
|
+
"&Jakarta"=>[-6.211544, 106.845172],
|
274
|
+
"The &Hague"=>[52.075489,4.309369],
|
275
|
+
"&Geelong"=>[-38.1445,144.3710]
|
276
|
+
}
|
277
|
+
MODES=[:hybrid,:roadmap,:satellite,:terrain]
|
278
|
+
ZOOMRANGE=(14..17)
|
279
|
+
|
280
|
+
class MapZoom < Qt::MainWindow
|
281
|
+
def initialize
|
282
|
+
super
|
283
|
+
@map = GMaps.new(self)
|
284
|
+
setCentralWidget(@map)
|
285
|
+
placeMenu = menuBar().addMenu("&Place")
|
286
|
+
placeGroup=Qt::ActionGroup.new(self)
|
287
|
+
PLACES.each{ |city,coordinates|
|
288
|
+
Qt::Action.new(city, self){ |action|
|
289
|
+
action.triggered.connect{@map.setCenter(*coordinates)}
|
290
|
+
action.checkable=true
|
291
|
+
placeMenu.addAction(action)
|
292
|
+
}
|
293
|
+
}
|
294
|
+
settingsMenu = menuBar().addMenu("&Settings")
|
295
|
+
magnifierSubMenu=settingsMenu.addMenu("Magnifier")
|
296
|
+
panelSubMenu=settingsMenu.addMenu("Panel")
|
297
|
+
zoomSubMenu=settingsMenu.addMenu("Zoomfactor")
|
298
|
+
|
299
|
+
magnifierGroup=Qt::ActionGroup.new(self)
|
300
|
+
MODES.each{ |mode|
|
301
|
+
Qt::Action.new(mode.to_s.capitalize,self){ |action|
|
302
|
+
action.triggered.connect{@map.setMagnifierMode(mode)}
|
303
|
+
action.checkable=true
|
304
|
+
action.checked=true if mode==:roadmap
|
305
|
+
magnifierSubMenu.addAction(action)
|
306
|
+
magnifierGroup.addAction(action)
|
307
|
+
}
|
308
|
+
}
|
309
|
+
panelGroup=Qt::ActionGroup.new(self)
|
310
|
+
MODES.each{ |mode|
|
311
|
+
Qt::Action.new(mode.to_s.capitalize,self){ |action|
|
312
|
+
action.triggered.connect{@map.setPanelMode(mode)}
|
313
|
+
action.checkable=true
|
314
|
+
action.checked=true if mode==:roadmap
|
315
|
+
panelSubMenu.addAction(action)
|
316
|
+
panelGroup.addAction(action)
|
317
|
+
}
|
318
|
+
}
|
319
|
+
zoomGroup=Qt::ActionGroup.new(self)
|
320
|
+
ZOOMRANGE.each{ |zoomfactor|
|
321
|
+
Qt::Action.new(zoomfactor.to_s,self){ |action|
|
322
|
+
action.triggered.connect{@map.setZoom(zoomfactor)}
|
323
|
+
action.checkable=true
|
324
|
+
action.checked=true if zoomfactor==15
|
325
|
+
zoomSubMenu.addAction(action)
|
326
|
+
zoomGroup.addAction(action)
|
327
|
+
}
|
328
|
+
}
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
|
333
|
+
a = Qt::Application.new(ARGV)
|
334
|
+
w = MapZoom.new
|
335
|
+
w.setWindowTitle("Maps (powered by Google)")
|
336
|
+
w.resize(600,450)
|
337
|
+
w.show()
|
338
|
+
a.exec
|
339
|
+
|
340
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
public interface SignalActions {
|
3
|
+
void signal0();
|
4
|
+
void signal1(Object a1);
|
5
|
+
void signal2(Object a1,Object a2);
|
6
|
+
void signal3(Object a1,Object a2,Object a3);
|
7
|
+
void signal4(Object a1,Object a2,Object a3,Object a4);
|
8
|
+
void signal5(Object a1,Object a2,Object a3,Object a4,Object a5);
|
9
|
+
void signal6(Object a1,Object a2,Object a3,Object a4,Object a5,Object a6);
|
10
|
+
void signal7(Object a1,Object a2,Object a3,Object a4,Object a5,Object a6,Object a7);
|
11
|
+
void signal8(Object a1,Object a2,Object a3,Object a4,Object a5,Object a6,Object a7,Object a8);
|
12
|
+
void signal9(Object a1,Object a2,Object a3,Object a4,Object a5,Object a6,Object a7,Object a8,Object a9);
|
13
|
+
}
|
data/lib/Qt.rb
ADDED
data/lib/qt_connect.rb
ADDED
@@ -0,0 +1,700 @@
|
|
1
|
+
=begin
|
2
|
+
|
3
|
+
Author: Cees Zeelenberg (c.zeelenberg@computer.org)
|
4
|
+
Copyright: (c) 2010-2012 by Cees Zeelenberg
|
5
|
+
License: This program is free software; you can redistribute it and/or modify
|
6
|
+
it under the terms of the GNU Lesser General Public License as published
|
7
|
+
by the Free Software Foundation; either version 2 of the License, or
|
8
|
+
(at your option) any later version. *
|
9
|
+
|
10
|
+
This software extends the basic qt_jbindings API with functionality to
|
11
|
+
improve compatibility with the existing QtRuby API:
|
12
|
+
- same shorthand notations for Enums
|
13
|
+
- patches to classes where the API is slightly different to support
|
14
|
+
both interfaces (ongoing work)
|
15
|
+
- support for the QtRuby signals/slot interface in addition
|
16
|
+
to the QtJambi signals interface
|
17
|
+
- implementations of Qt::Variant and Qt::ModelIndex to allow single source
|
18
|
+
maintenance for QtRuby and QtJRuby
|
19
|
+
|
20
|
+
|
21
|
+
=end
|
22
|
+
module Qt
|
23
|
+
|
24
|
+
module Internal
|
25
|
+
|
26
|
+
# for all constants which inherit from the Enum class or are "public static final int" fields
|
27
|
+
# define a shorthand notation to be compatible with the Ruby version of qtbindings
|
28
|
+
# e.g. Qt::PenStyle::SolidLine can be abbreviated to Qt::SolidLine
|
29
|
+
#suppress clashing or otherwise undesirable shorthands with an entry in the DONT_ABBREVIATE hash.
|
30
|
+
|
31
|
+
DONT_ABBREVIATE= {
|
32
|
+
'Qt::WindowType::Widget' => true,
|
33
|
+
'Qt::WindowType::Dialog' => true,
|
34
|
+
'Qt::WindowType::ToolTip' => true,
|
35
|
+
'Qt::WindowType::SplashScreen' => true,
|
36
|
+
|
37
|
+
'Qt::Style::PixelMetric::CustomEnum' => true,
|
38
|
+
'Qt::Style::PrimitiveElement::CustomEnum' => true,
|
39
|
+
'Qt::Style::ContentsType::CustomEnum' => true,
|
40
|
+
'Qt::Style::ComplexControl::CustomEnum' => true,
|
41
|
+
'Qt::Style::SubElement::CustomEnum' => true,
|
42
|
+
'Qt::Style::ControlElement::CustomEnum' => true,
|
43
|
+
'Qt::Style::StandardPixmap::CustomEnum' => true,
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
# 'create_constants' is called whenever new Module or Class is activated
|
48
|
+
#qtclass Java::ComTrollTechQtGui::QDockWidget (Class)
|
49
|
+
#qtname Qt::Dockwidget (String)
|
50
|
+
def self.create_constants(qtclass,qtname)
|
51
|
+
qtclass.class_eval{
|
52
|
+
constants.dup.each{ |c|
|
53
|
+
embedded_class=eval("#{qtclass.name}::#{c}")
|
54
|
+
next unless embedded_class.respond_to?(:java_class)
|
55
|
+
ancestors=(embedded_class.respond_to?(:ancestors)) ? embedded_class.ancestors : []
|
56
|
+
if ancestors.include? java.lang.Enum
|
57
|
+
embedded_class.values.to_ary.each{ |s|
|
58
|
+
symbol=s.toString
|
59
|
+
next if Qt::Internal::DONT_ABBREVIATE["#{qtname}::#{c}::#{symbol}"]
|
60
|
+
next if symbol=~/\A[^A-Z].*\Z/
|
61
|
+
next if const_defined?(symbol)
|
62
|
+
qtclass.class_eval("#{symbol}=#{qtclass.name}::#{c}::#{symbol}") rescue next
|
63
|
+
}
|
64
|
+
else
|
65
|
+
#could be class with public static final int field(s)
|
66
|
+
fields=embedded_class.java_class.fields rescue next
|
67
|
+
fields.each{ |field|
|
68
|
+
next unless field.static? && field.final? && field.public? && (field.value_type=="int")
|
69
|
+
symbol=field.name
|
70
|
+
value=Java.java_to_ruby(field.static_value)
|
71
|
+
qtclass.class_eval("#{symbol}=#{value}") rescue next
|
72
|
+
}
|
73
|
+
end
|
74
|
+
}
|
75
|
+
}
|
76
|
+
end
|
77
|
+
|
78
|
+
create_constants(self,'Qt')
|
79
|
+
|
80
|
+
#compat QtRuby4 (fails for WindowType)
|
81
|
+
WidgetType=WindowType::Widget
|
82
|
+
#WindowType=WindowType::Window
|
83
|
+
DialogType=WindowType::Dialog
|
84
|
+
SheetType=WindowType::Sheet
|
85
|
+
DrawerType=WindowType::Drawer
|
86
|
+
PopupType=WindowType::Popup
|
87
|
+
ToolType=WindowType::Tool
|
88
|
+
ToolTipType=WindowType::ToolTip
|
89
|
+
SplashScreenType=WindowType::SplashScreen
|
90
|
+
DesktopType=WindowType::Desktop
|
91
|
+
SubWindowType=WindowType::SubWindow
|
92
|
+
|
93
|
+
#deal with Qt::blue etc.
|
94
|
+
def Qt.method_missing(method,*args)
|
95
|
+
return Color.send(method) if Color.respond_to?(method)
|
96
|
+
return Color.new(*args).rgba if method==:qRgba
|
97
|
+
super(*args)
|
98
|
+
end
|
99
|
+
|
100
|
+
class MetaObject < QtJambi::QObject
|
101
|
+
def self.connectSlotsByName(arg)
|
102
|
+
arg.connectSlotsByName()
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
#mutable boolean for compatibility compatibility with qtruby
|
107
|
+
#
|
108
|
+
class Boolean
|
109
|
+
attr_accessor :value
|
110
|
+
def initialize(b=false) @value = b end
|
111
|
+
def nil?
|
112
|
+
return !@value
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
class ModelIndex
|
118
|
+
class <<self
|
119
|
+
def new
|
120
|
+
return nil
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
#
|
126
|
+
#following are patches to QtJambi classes, mostly for compatibility with qtruby
|
127
|
+
#Corresponding Procs are 'class_eval-ed' when a Qt class is activated
|
128
|
+
#see companion code: qt_jbindings Qt#const_missing
|
129
|
+
# 'signature' calls are for documentation only (e.g. classexplorer.rb) and have
|
130
|
+
# no effect on the functionality
|
131
|
+
module Internal
|
132
|
+
|
133
|
+
signature "void Qt::AbstractSlider.range=(Range)"
|
134
|
+
AbstractSlider=Proc.new do
|
135
|
+
def range=(arg)
|
136
|
+
if arg.kind_of? Range
|
137
|
+
return setRange(arg.begin, arg.exclude_end? ? arg.end - 1 : arg.end)
|
138
|
+
else
|
139
|
+
return setRange(arg)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
#QtRuby uses: Qt::AbstractTextDocumentLayout::PaintContext.new
|
146
|
+
#QtJambi : Qt::AbstractTextDocumentLayout_PaintContext
|
147
|
+
AbstractTextDocumentLayout=Proc.new do
|
148
|
+
self.const_set('PaintContext',Qt::AbstractTextDocumentLayout_PaintContext)
|
149
|
+
end
|
150
|
+
|
151
|
+
#example\dialogs\simplewizard
|
152
|
+
signature "Qt::ByteArray Qt::ByteArray.+(Object)"
|
153
|
+
ByteArray=Proc.new do
|
154
|
+
def +(o)
|
155
|
+
self.clone.append(o)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
signature "static Qt::DataStream Qt::DataStream.new"
|
160
|
+
signature "static Qt::DataStream Qt::DataStream.new(Qt::IODevice)"
|
161
|
+
signature "static Qt::DataStream Qt::DataStream.new(Qt::ByteArray)"
|
162
|
+
signature "static Qt::DataStream Qt::DataStream.new(Qt::ByteArray, Qt::IODevice::OpenMode)"
|
163
|
+
signature "static Qt::DataStream Qt::DataStream.new(Qt::ByteArray, int openmode)"
|
164
|
+
signature "static Qt::DataStream Qt::DataStream.new(Qt::ByteArray, Qt::IODevice::OpenModeFlag[])"
|
165
|
+
signature "void Qt::DataStream.setVersion(Enum)"
|
166
|
+
signature "Qt::DataStream Qt::DataStream.<<(Object)"
|
167
|
+
signature "Qt::DataStream Qt::DataStream.>>(Object)"
|
168
|
+
DataStream=Proc.new do
|
169
|
+
class << self
|
170
|
+
alias :orig_new :new
|
171
|
+
def new(*a,&block)
|
172
|
+
args=a.dup
|
173
|
+
args[1]=Qt::IODevice::OpenMode.new(args[1]) if (args.size>1) && args[1].kind_of?(Fixnum)
|
174
|
+
return orig_new(*args,&block)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
alias orig_setVersion setVersion
|
178
|
+
def setVersion(a)
|
179
|
+
orig_setVersion(a.respond_to?(:value) ? a.value : a)
|
180
|
+
end
|
181
|
+
alias set_version setVersion
|
182
|
+
alias version= setVersion
|
183
|
+
def <<(arg)
|
184
|
+
case arg
|
185
|
+
when String ; writeString(arg)
|
186
|
+
when Float,Java::Float ; writeFloat(arg)
|
187
|
+
when Fixnum,Java::Int ; writeInt(arg)
|
188
|
+
when Java::Double ; writeDouble(arg)
|
189
|
+
when Java::ComTrolltechQtGui::QPixmap,
|
190
|
+
Java::ComTrolltechQtGui::QImage,
|
191
|
+
Java::ComTrolltechQtCore::QPointF,
|
192
|
+
Java::ComTrolltechQtCore::QPoint,
|
193
|
+
Java::ComTrolltechQtCore::QRect,
|
194
|
+
Java::ComTrolltechQtCore::QRectF,
|
195
|
+
Java::ComTrolltechQtGui::QRegion,
|
196
|
+
Java::ComTrolltechQtCore::QSize,
|
197
|
+
Java::ComTrolltechQtCore::QSizeF
|
198
|
+
arg.writeTo(self)
|
199
|
+
else
|
200
|
+
raise "Qt::Datastream: no '<<' for #{arg.class}"
|
201
|
+
end
|
202
|
+
self # allows concatenation
|
203
|
+
end
|
204
|
+
def >>(arg)
|
205
|
+
case arg
|
206
|
+
when String ; arg=readString
|
207
|
+
when Float ; arg=readFloat
|
208
|
+
when Fixnum ; arg=readInt
|
209
|
+
when Java::ComTrolltechQtGui::QPixmap,
|
210
|
+
Java::ComTrolltechQtGui::QImage,
|
211
|
+
Java::ComTrolltechQtCore::QPointF,
|
212
|
+
Java::ComTrolltechQtCore::QPoint,
|
213
|
+
Java::ComTrolltechQtCore::QRect,
|
214
|
+
Java::ComTrolltechQtCore::QRectF,
|
215
|
+
Java::ComTrolltechQtGui::QRegion,
|
216
|
+
Java::ComTrolltechQtCore::QSize,
|
217
|
+
Java::ComTrolltechQtCore::QSizeF
|
218
|
+
arg.readFrom(self)
|
219
|
+
else
|
220
|
+
raise "Qt::Datastream: no '>>' for #{arg.class}"
|
221
|
+
end
|
222
|
+
self
|
223
|
+
end
|
224
|
+
end
|
225
|
+
signature "void Qt::DoubleSpinBox.range=(Range)"
|
226
|
+
DoubleSpinBox=Proc.new do
|
227
|
+
def range=(arg)
|
228
|
+
if arg.kind_of? Range
|
229
|
+
return setRange(arg.begin, arg.exclude_end? ? arg.end - 1 : arg.end)
|
230
|
+
else
|
231
|
+
return setRange(arg)
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
#examples\draganddrop\draggabletext
|
236
|
+
signature "Qt::DropAction Qt::Drag.start"
|
237
|
+
signature "Qt::DropAction Qt::Drag.start(Fixnum dropactions)"
|
238
|
+
signature "Qt::DropAction Qt::Drag.start(Qt::DropAction[])"
|
239
|
+
signature "Qt::DropAction Qt::Drag.start(Qt::DropActions)"
|
240
|
+
signature "Qt::DropAction Qt::Drag.start(Qt::DropActions,Qt::DropAction)"
|
241
|
+
Drag=Proc.new do
|
242
|
+
alias orig_exec exec
|
243
|
+
def exec(*a)
|
244
|
+
args=a.dup
|
245
|
+
args[0]=Qt::DropActions.new(args[0]) if args[0].kind_of? Fixnum
|
246
|
+
orig_exec(*args)
|
247
|
+
end
|
248
|
+
alias :start :exec
|
249
|
+
end
|
250
|
+
#example\dialogs\findfile
|
251
|
+
signature "boolean Qt::File.open(Fixnum openmode)"
|
252
|
+
File=Proc.new do
|
253
|
+
alias orig_open open
|
254
|
+
def open(a)
|
255
|
+
arg=(a.kind_of?(Fixnum)) ? Qt::IODevice::OpenMode.new(a) : a
|
256
|
+
orig_open(arg)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
signature "static java.lang.String Qt::FileDialog.getSaveFileName(Qt::Widget,String,String,String filter)"
|
261
|
+
signature "static java.lang.String Qt::FileDialog.getOpenFileName(Qt::Widget,String,String,String filter)"
|
262
|
+
signature "static java.util.List Qt::FileDialog.getOpenFileNames(Qt::Widget,String,String,String filter)"
|
263
|
+
FileDialog=Proc.new do
|
264
|
+
class << self
|
265
|
+
#getSaveFileName
|
266
|
+
alias orig_getSaveFileName getSaveFileName
|
267
|
+
def getSaveFileName(*a)
|
268
|
+
args=a.dup
|
269
|
+
args[3]=self::Filter.new(args[3]) if args.size==4 && (args[3].kind_of?(String))
|
270
|
+
orig_getSaveFileName(*args)
|
271
|
+
end
|
272
|
+
alias get_save_file_name getSaveFileName
|
273
|
+
#getOpenFilename
|
274
|
+
alias orig_getOpenFileName getOpenFileName
|
275
|
+
def getOpenFileName(*a)
|
276
|
+
args=a.dup
|
277
|
+
args[3]=self::Filter.new(args[3]) if args.size==4 && (args[3].kind_of?(String))
|
278
|
+
orig_getOpenFileName(*args)
|
279
|
+
end
|
280
|
+
alias get_open_file_name getOpenFileName
|
281
|
+
#getOpenFilenames
|
282
|
+
alias orig_getOpenFileNames getOpenFileNames
|
283
|
+
def getOpenFileNames(*a)
|
284
|
+
args=a.dup
|
285
|
+
args[3]=self::Filter.new(args[3]) if args.size==4 && (args[3].kind_of?(String))
|
286
|
+
orig_getOpenFileNames(*args)
|
287
|
+
end
|
288
|
+
alias get_open_file_names getOpenFileNames
|
289
|
+
end
|
290
|
+
end
|
291
|
+
#examples\dialogs\standarddialogs
|
292
|
+
signature "static Qt::Font Qt:FontDialog.getFont(Qt::Boolean ok)"
|
293
|
+
signature "static Qt::Font Qt:FontDialog.getFont(Qt::Boolean ok,Qt::Font)"
|
294
|
+
signature "static Qt::Font Qt:FontDialog.getFont(Qt::Boolean ok,Qt::Font,Qt::Widget,String)"
|
295
|
+
signature "static Qt::Font Qt:FontDialog.getFont(Qt::Boolean ok,Qt::Widget)"
|
296
|
+
signature "static Qt::Font Qt:FontDialog.getFont(Qt::Boolean ok,Qt::Font,Qt::Widget)"
|
297
|
+
signature "static Qt::Font Qt:FontDialog.getFont(Qt::Boolean ok,Qt::Font,Qt::Widget,String,Qt::FontDialog::FontDialogOptions)"
|
298
|
+
FontDialog=Proc.new do
|
299
|
+
class << self
|
300
|
+
alias orig_getFont getFont
|
301
|
+
def getFont(*a)
|
302
|
+
args=a.dup
|
303
|
+
if args[0].kind_of? Qt::Boolean
|
304
|
+
ok=args.shift
|
305
|
+
result=orig_getFont(*args)
|
306
|
+
ok.value=result.ok
|
307
|
+
result.font
|
308
|
+
else
|
309
|
+
orig_getFont(*args)
|
310
|
+
end
|
311
|
+
end
|
312
|
+
alias get_font getFont
|
313
|
+
end
|
314
|
+
end
|
315
|
+
#examples\draganddrop\fridgemagnets
|
316
|
+
signature "Qt::Size Qt::FontMetrics.size(Enum,String)"
|
317
|
+
FontMetrics=Proc.new do
|
318
|
+
alias :orig_size :size
|
319
|
+
def size(*a)
|
320
|
+
args=a.dup
|
321
|
+
args[0]=args[0].value if args[0].respond_to?(:value)
|
322
|
+
orig_size(*args)
|
323
|
+
end
|
324
|
+
end
|
325
|
+
signature "static java.lang.String Qt::InputDialog.getItem(Qt::Widget parent,String title,String label,java.util.List,int current,bool editable,Qt::Boolean ok)"
|
326
|
+
signature "static java.lang.String Qt::InputDialog.getText(Qt::Widget parent,String title,String label,Qt::LineEdit::EchoMode mode,String text,Qt::Boolean ok)"
|
327
|
+
signature "static java.lang.String Qt::InputDialog.getInteger(Qt::Widget parent,String title,String label,int value,int minvalue,int maxvalue,int decimals,Qt::Boolean ok)"
|
328
|
+
signature "static java.lang.String Qt::InputDialog.getInt(Qt::Widget parent,String title,String label,int value,int minvalue,int maxvalue,int decimals,Qt::Boolean ok)"
|
329
|
+
signature "static java.lang.String Qt::InputDialog.getDouble(Qt::Widget parent,String title,String label,Float value,Float minvalue,Float maxvalue,int decimals,Qt::Boolean ok)"
|
330
|
+
InputDialog=Proc.new do
|
331
|
+
class << self
|
332
|
+
#getInt
|
333
|
+
#getInteger
|
334
|
+
alias orig_getInt getInt
|
335
|
+
def getInt(*a)
|
336
|
+
args=a.dup
|
337
|
+
if args[-1].kind_of? Qt::Boolean
|
338
|
+
ok=args.pop
|
339
|
+
result=orig_getInt(*args)
|
340
|
+
ok.value=(result.nil?) ? false : true
|
341
|
+
result
|
342
|
+
else
|
343
|
+
orig_getInt(*args)
|
344
|
+
end
|
345
|
+
end
|
346
|
+
alias get_int getInt
|
347
|
+
alias getInteger getInt
|
348
|
+
alias get_integer getInt
|
349
|
+
#getDouble
|
350
|
+
alias orig_getDouble getDouble
|
351
|
+
def getDouble(*a)
|
352
|
+
args=a.dup
|
353
|
+
if args[-1].kind_of? Qt::Boolean
|
354
|
+
ok=args.pop
|
355
|
+
result=orig_getDouble(*args)
|
356
|
+
ok.value=(result.nil?) ? false : true
|
357
|
+
result
|
358
|
+
else
|
359
|
+
orig_getDouble(*args)
|
360
|
+
end
|
361
|
+
end
|
362
|
+
alias get_double getDouble
|
363
|
+
#getItem
|
364
|
+
alias :orig_getItem :getItem
|
365
|
+
def getItem(*a)
|
366
|
+
args=a.dup
|
367
|
+
if args[-1].kind_of? Qt::Boolean
|
368
|
+
ok=args.pop
|
369
|
+
result=orig_getItem(*args)
|
370
|
+
ok.value=(result.nil?) ? false : true
|
371
|
+
result
|
372
|
+
else
|
373
|
+
orig_getItem(*args)
|
374
|
+
end
|
375
|
+
end
|
376
|
+
alias get_item getItem
|
377
|
+
#getText
|
378
|
+
alias :orig_getText :getText
|
379
|
+
def getText(*a)
|
380
|
+
args=a.dup
|
381
|
+
if args[-1].kind_of? Qt::Boolean
|
382
|
+
ok=args.pop
|
383
|
+
result=orig_getText(*args)
|
384
|
+
ok.value=(result.nil?) ? false : true
|
385
|
+
result
|
386
|
+
else
|
387
|
+
orig_getText(*args)
|
388
|
+
end
|
389
|
+
end
|
390
|
+
alias :get_text :getText
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
signature "void Qt::Label.setAlignment(Fixnum)"
|
395
|
+
Label=Proc.new do
|
396
|
+
alias :orig_setAlignment :setAlignment
|
397
|
+
def setAlignment(a)
|
398
|
+
a=Qt::Alignment.new(a) if a.kind_of?(Fixnum)
|
399
|
+
orig_setAlignment(a)
|
400
|
+
end
|
401
|
+
alias :'alignment=' :setAlignment
|
402
|
+
end
|
403
|
+
|
404
|
+
#examples\layout\borderlayout
|
405
|
+
signature "int Qt::Layout.spacing"
|
406
|
+
signature "void Qt::Layout.setSpacing(int)"
|
407
|
+
Layout=Proc.new do
|
408
|
+
alias :spacing :widgetSpacing
|
409
|
+
alias :setSpacing :setWidgetSpacing
|
410
|
+
alias :set_spacing :setWidgetSpacing
|
411
|
+
end
|
412
|
+
|
413
|
+
signature "void Qt::ListWidgetItem.setTextAlignment(Qt::AlignmentFlag)"
|
414
|
+
signature "void Qt::ListWidgetItem.setFlags(int)"
|
415
|
+
|
416
|
+
ListWidgetItem=Proc.new do
|
417
|
+
alias :orig_setTextAlignment :setTextAlignment
|
418
|
+
def setTextAlignment(a)
|
419
|
+
arg=(a.respond_to?(:value)) ? a.value : a
|
420
|
+
orig_setTextAlignment(arg)
|
421
|
+
end
|
422
|
+
alias textAlignment= setTextAlignment
|
423
|
+
#examples\draganddrop\puzzle
|
424
|
+
alias :orig_setFlags :setFlags
|
425
|
+
def setFlags(a)
|
426
|
+
arg=(a.kind_of? Fixnum) ? Qt::ItemFlags.new(a) : a
|
427
|
+
orig_setFlags(arg)
|
428
|
+
end
|
429
|
+
alias :set_flags :setFlags
|
430
|
+
end
|
431
|
+
|
432
|
+
#examples\dialogs\standarddialogs
|
433
|
+
signature "static Qt::MessageBox::StandardButton Qt::MessageBox.critical(Qt::Widget,String,String"+
|
434
|
+
",Qt::MessageBox::StandardButton,Qt::MessageBox::StandardButton,Qt::MessageBox::StandardButton)"
|
435
|
+
signature "static Qt::MessageBox::StandardButton Qt::MessageBox.question(Qt::Widget,String,String"+
|
436
|
+
",Qt::MessageBox::StandardButton,Qt::MessageBox::StandardButton,Qt::MessageBox::StandardButton)"
|
437
|
+
MessageBox=Proc.new do
|
438
|
+
class<<self
|
439
|
+
alias orig_critical critical
|
440
|
+
def critical(*a)
|
441
|
+
args=a.dup
|
442
|
+
(a.size-4).times{ x=args.pop ; args[-1] |= x}
|
443
|
+
orig_critical(*args)
|
444
|
+
end
|
445
|
+
alias orig_question question
|
446
|
+
def question(*a)
|
447
|
+
args=a.dup
|
448
|
+
(a.size-4).times{ x=args.pop ; args[-1] |= x}
|
449
|
+
orig_question(*args)
|
450
|
+
end
|
451
|
+
end
|
452
|
+
end
|
453
|
+
signature "void Qt::Painter.drawText(Qt::Rect,Qt::Alignment,String)"
|
454
|
+
Painter=Proc.new do
|
455
|
+
alias orig_drawText drawText
|
456
|
+
def drawText(*a)
|
457
|
+
args=a.dup
|
458
|
+
args[1]=args[1].value if (args[1].respond_to?(:value))
|
459
|
+
orig_drawText(*args)
|
460
|
+
end
|
461
|
+
alias draw_text drawText
|
462
|
+
end
|
463
|
+
|
464
|
+
#examples\draganddrop\dragabletext
|
465
|
+
Palette=Proc.new do
|
466
|
+
#Background=ColorRole::Window (Background is Obsolete)
|
467
|
+
const_set('Background',const_get(:ColorRole).const_get(:Window))
|
468
|
+
end
|
469
|
+
|
470
|
+
signature "void Qt::ProgressDialog.range=(Range)"
|
471
|
+
ProgressDialog=Proc.new do
|
472
|
+
def range=(arg)
|
473
|
+
if arg.kind_of? Range
|
474
|
+
return setRange(arg.begin, arg.exclude_end? ? arg.end - 1 : arg.end)
|
475
|
+
else
|
476
|
+
return setRange(arg)
|
477
|
+
end
|
478
|
+
end
|
479
|
+
end
|
480
|
+
|
481
|
+
SignalMapper=Proc.new do
|
482
|
+
def mapped
|
483
|
+
return mappedQObject
|
484
|
+
end
|
485
|
+
end
|
486
|
+
|
487
|
+
signature "static Qt::SizePolicy Qt::SizePolicy.new"
|
488
|
+
signature "static Qt::SizePolicy Qt::SizePolicy.new(Qt::SizePolicy::Policy,Qt::SizePolicy::Policy,Qt::SizePolicy::ControlType)"
|
489
|
+
signature "static Qt::SizePolicy Qt::SizePolicy.new(Qt::SizePolicy::Policy,Qt::SizePolicy::Policy)"
|
490
|
+
signature "static Qt::SizePolicy Qt::SizePolicy.new(int,int,int)"
|
491
|
+
signature "static Qt::SizePolicy Qt::SizePolicy.new(int,int)"
|
492
|
+
SizePolicy=Proc.new do
|
493
|
+
class << self
|
494
|
+
alias :orig_new :new
|
495
|
+
def new(*args,&block)
|
496
|
+
args=args.map{ |arg| arg.kind_of?(Fixnum) ? Qt::SizePolicy::Policy.resolve(arg) : arg}
|
497
|
+
return orig_new(*args,&block)
|
498
|
+
end
|
499
|
+
end
|
500
|
+
end
|
501
|
+
|
502
|
+
signature "void Qt::SpinBox.range=(Range)"
|
503
|
+
SpinBox=Proc.new do
|
504
|
+
def range=(arg)
|
505
|
+
if arg.kind_of? Range
|
506
|
+
return setRange(arg.begin, arg.exclude_end? ? arg.end - 1 : arg.end)
|
507
|
+
else
|
508
|
+
return setRange(arg)
|
509
|
+
end
|
510
|
+
end
|
511
|
+
end
|
512
|
+
|
513
|
+
#examples\dialogs\findfiles
|
514
|
+
signature "void Qt::TableWidgetItem.setFlags(Fixnum flags)"
|
515
|
+
signature "void Qt::TableWidgetItem.setTextAlignment(Qt::AlignmentFlag)"
|
516
|
+
TableWidgetItem=Proc.new do
|
517
|
+
alias orig_setTextAlignment setTextAlignment
|
518
|
+
def setTextAlignment(a)
|
519
|
+
arg=(a.respond_to?(:value)) ? a.value : a
|
520
|
+
orig_setTextAlignment(arg)
|
521
|
+
end
|
522
|
+
alias textAlignment= setTextAlignment
|
523
|
+
alias set_text_alignment setTextAlignment
|
524
|
+
|
525
|
+
alias orig_setFlags setFlags
|
526
|
+
def setFlags(*a)
|
527
|
+
args=a.dup
|
528
|
+
args[0]=Qt::ItemFlags.new(args[0]) if args[0].kind_of? Fixnum
|
529
|
+
orig_setFlags(*args)
|
530
|
+
end
|
531
|
+
alias set_flags setFlags
|
532
|
+
alias flags= setFlags
|
533
|
+
end
|
534
|
+
|
535
|
+
signature "void Qt::TextCharFormat.setFontWeight(Qt::Enumerator)"
|
536
|
+
TextCharFormat=Proc.new do
|
537
|
+
alias :orig_fw :setFontWeight
|
538
|
+
def setFontWeight(val)
|
539
|
+
orig_fw( (val.respond_to? :value) ? val.value : val)
|
540
|
+
end
|
541
|
+
alias :set_font_weight :setFontWeight
|
542
|
+
alias :'fontWeight=' :setFontWeight
|
543
|
+
end
|
544
|
+
|
545
|
+
#require 'jruby/core_ext'
|
546
|
+
signature "void Qt::TextStream.<<(String)"
|
547
|
+
signature "void Qt::TextStream.>>(String)"
|
548
|
+
TextStream=Proc.new do
|
549
|
+
def <<(a)
|
550
|
+
self.writeString(a)
|
551
|
+
end
|
552
|
+
def >>(a)
|
553
|
+
a.replace(readString)
|
554
|
+
end
|
555
|
+
end
|
556
|
+
|
557
|
+
signature "static Object Qt::Variant.new(Object)"
|
558
|
+
signature "static Object Qt::Variant.fromValue(Object)"
|
559
|
+
Variant=Proc.new do
|
560
|
+
class << self
|
561
|
+
def new(obj=nil)
|
562
|
+
return obj
|
563
|
+
end
|
564
|
+
alias fromValue new
|
565
|
+
alias from_value new
|
566
|
+
end
|
567
|
+
end
|
568
|
+
end #Internal
|
569
|
+
|
570
|
+
AlignTrailing=AlignRight
|
571
|
+
AlignLeading=AlignLeft
|
572
|
+
end #QT
|
573
|
+
|
574
|
+
Qt::Internal::signature "void Qt::Object.connect(Qt::Object,Symbol,Qt::Object,Symbol)"
|
575
|
+
Qt::Internal::signature "void Qt::Object.connect(Qt::Object,Symbol,Qt::Object,String)"
|
576
|
+
Qt::Internal::signature "void Qt::Object.disconnect(Qt::Object,Symbol,Qt::Object,Symbol)"
|
577
|
+
Qt::Internal::signature "void Qt::Object.disconnect(Qt::Object,Symbol,Qt::Object,String)"
|
578
|
+
Qt::Internal::signature "int Qt::Object.qRgba(int,int,int,int)"
|
579
|
+
Qt::Internal::signature "static java.lang.String Qt::Object.tr(String)"
|
580
|
+
Qt::Internal::signature "Qt::SignalEmitter Qt::Object.sender"
|
581
|
+
Java::ComTrolltechQtCore::QObject.class_eval{
|
582
|
+
#connect(producer,SIGNAL('sig1'),consumer,SLOT('sig2'))
|
583
|
+
#connect(producer,SIGNAL('sig1'),consumer,SIGNAL('sig2')
|
584
|
+
#SIGNAL generates :sig1 (Symbol, only name of signal)
|
585
|
+
#SLOT generates 'sig1(a,b)' (String, full signature)
|
586
|
+
def connect(producer,sig1,consumer,sig2,type=0)
|
587
|
+
#see if Signal is of type QSignalEmitter or of type Qt::Signal
|
588
|
+
signal1=producer.java_class.field(sig1).value(producer) rescue signal1=producer.send(sig1)
|
589
|
+
#puts "connect #{signal1}(#{signal1.class}) => #{sig2}(#{sig2.class}) #{caller[0]}"
|
590
|
+
if sig2.kind_of?(String)
|
591
|
+
if md=sig2.match(/([^(]+)\([.]*/)
|
592
|
+
n=0 ; sig2.gsub(/ (\([^,)]+)|(,[^,)]+) | (,[^,)]+) /x){n+=1}
|
593
|
+
sig2=(n.to_s+md[1].strip)
|
594
|
+
end
|
595
|
+
#puts "signal->slot #{signal1}.connect(#{consumer},#{sig2.to_sym} #{caller[0]})"
|
596
|
+
return signal1.connect(consumer,sig2.to_sym)
|
597
|
+
end
|
598
|
+
signal2=consumer.java_class.field(sig2).value(consumer) rescue signal2=consumer.send(sig2)
|
599
|
+
#puts "signal->signal #{signal1}.connect(#{signal2}) #{caller[0]}"
|
600
|
+
return signal1.connect(signal2)
|
601
|
+
end
|
602
|
+
|
603
|
+
def disconnect(producer,sig1,consumer,sig2)
|
604
|
+
if sig2.kind_of?(String) && (md=sig2.match(/([^(]+)\([.]*/))
|
605
|
+
n=0 ; sig2.gsub(/ (\([^,)]+)|(,[^,)]+) | (,[^,)]+) /x){n+=1}
|
606
|
+
sig2=(n.to_s+md[1].strip).to_sym
|
607
|
+
end
|
608
|
+
sig2=sig2.to_sym
|
609
|
+
producer.java_class.field(sig1).value(producer).disconnect(consumer,sig2) rescue producer.send(sig1).disconnect(consumer,sig2)
|
610
|
+
end
|
611
|
+
def sender
|
612
|
+
#signalSender ia a static method of QSignalEmitter => Ruby Class Method
|
613
|
+
return QtJambi::QSignalEmitter.signalSender()
|
614
|
+
end
|
615
|
+
#'doc_was_epibrated(a1,a2)' => :'2doc_was_epibrated'
|
616
|
+
#'doc_was_cooked()' => :'0doc_was_cooked'
|
617
|
+
def SLOT(signature)
|
618
|
+
return signature if signature.kind_of? String
|
619
|
+
s=signature.to_s
|
620
|
+
return s if s.match(/([^(]+)\([.]*/)
|
621
|
+
return s+'()'
|
622
|
+
end
|
623
|
+
def SIGNAL(signature)
|
624
|
+
if signature.kind_of? Symbol
|
625
|
+
return signature
|
626
|
+
else
|
627
|
+
if md=signature.match(/([^(]+)\([.]*/)
|
628
|
+
return md[1].strip.to_sym
|
629
|
+
end
|
630
|
+
return signature.to_sym
|
631
|
+
end
|
632
|
+
end
|
633
|
+
|
634
|
+
def self.slots(*signallist) ; end
|
635
|
+
#emit signal(a1,a2..)
|
636
|
+
def emit(signal)
|
637
|
+
signal.emit
|
638
|
+
end
|
639
|
+
|
640
|
+
def qRgba(*args)
|
641
|
+
return Color.new(*args).rgba
|
642
|
+
end
|
643
|
+
def self.tr(s)
|
644
|
+
return self.new.tr(s)
|
645
|
+
end
|
646
|
+
|
647
|
+
}
|
648
|
+
#try using Qt.Variant type conversions if all else fails
|
649
|
+
class Object
|
650
|
+
def method_missing(m,*args,&block)
|
651
|
+
#puts "missing #{m} for #{self.class} #{caller[0].split('/')[-1]}"
|
652
|
+
method=((m==:toBool) || (m==:to_bool)) ? :toBoolean : m
|
653
|
+
return Qt::Variant.send(method,self) if com.trolltech.qt.QVariant.respond_to? method
|
654
|
+
return super
|
655
|
+
end
|
656
|
+
end
|
657
|
+
|
658
|
+
class Class
|
659
|
+
|
660
|
+
RX0=/([^(]+)\([.]*/ #name(.....
|
661
|
+
RX1=/\A[A-Z]+\z/ #1+ alpha => alt_m==m
|
662
|
+
RX2=/([A-Z]+)([A-Z][a-z])/
|
663
|
+
RX3=/([a-z\d])([A-Z])/
|
664
|
+
|
665
|
+
def signals(*signallist)
|
666
|
+
signallist.each{ |signature|
|
667
|
+
if signature.kind_of? String
|
668
|
+
if md=signature.match(RX0)
|
669
|
+
m=md[1].strip
|
670
|
+
else
|
671
|
+
m=signature.strip
|
672
|
+
end
|
673
|
+
else
|
674
|
+
m=signature.to_s
|
675
|
+
end
|
676
|
+
alt_m =(m=~RX1) ? m.downcase : m.gsub(RX2, '\1_\2').gsub(RX3, '\1_\2').tr("-","_").downcase
|
677
|
+
self.class_eval(%Q[
|
678
|
+
def #{m}(*args)
|
679
|
+
if @_#{m}
|
680
|
+
@_#{m}.setargs(*args)
|
681
|
+
return @_#{m}
|
682
|
+
else
|
683
|
+
return @_#{m}=Qt::Signal.new(self)
|
684
|
+
end
|
685
|
+
end
|
686
|
+
#{(alt_m==m) ? '' : "alias :#{alt_m} :#{m}"}
|
687
|
+
])
|
688
|
+
}
|
689
|
+
|
690
|
+
end
|
691
|
+
end
|
692
|
+
|
693
|
+
class NilClass
|
694
|
+
def valid?
|
695
|
+
return false
|
696
|
+
end
|
697
|
+
end
|
698
|
+
|
699
|
+
|
700
|
+
|