qtbindings 4.8.5.2 → 4.8.6.0
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.
- checksums.yaml +4 -4
- data/README.txt +41 -20
- data/Rakefile +10 -0
- data/bin/rbrcc +1 -5
- data/bin/rbuic4 +1 -5
- data/bin/smokeapi +1 -5
- data/bin/smokedeptool +1 -5
- data/examples/threading/main_thread.rb +19 -0
- data/ext/CMakeLists.txt +3 -0
- data/ext/cmake/modules/FindQt4.cmake +4 -1
- data/ext/cmake/modules/FindRuby.cmake +23 -5
- data/ext/ruby/qtruby/src/CMakeLists.txt +2 -2
- data/ext/ruby/qtruby/src/qtruby.cpp +505 -437
- data/ext/smoke/CMakeLists.txt +3 -1
- data/extconf.rb +21 -67
- data/lib/Qt/qtruby4.rb +2 -1
- data/lib/Qt4.rb +20 -13
- data/lib/qtbindings_version.rb +2 -2
- data/lib/qtdeclarative/qtdeclarative.rb +17 -0
- metadata +49 -53
- data/CMakeLists.txt +0 -22
- data/examples/base/kicons.rb +0 -54
- data/examples/base/rui.rb +0 -21
- data/examples/textedit/textedit.rb +0 -150
- data/qtbindings-qt.gemspec +0 -17
- data/qtbindingsnative.gemspec +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac37d8d099cae6f72ab5cea298864f616d32b3c0
|
4
|
+
data.tar.gz: 4ddf1bd802e1f241a3e6f1600f264276e55558d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebeca2402dcdd00ea7dde6ce2df3591672a90b9585ff8fcf4b03ab2967dc8ff443a3b6ebef66c97802a6a0521da1c5c1100927262b10e339fe8a6fa44ec1603d
|
7
|
+
data.tar.gz: 5d105c6cacef2775eb1a6b263f713b87da3d74783ca08f273ee3f79b17a92aa8f703c48f95c4ca44f6e4eabe473b17f9454c818525bb762d3e20f4112d60c7bc
|
data/README.txt
CHANGED
@@ -10,37 +10,47 @@ Goals
|
|
10
10
|
1. To make it easy to install a Qt binding for Ruby on all platforms using
|
11
11
|
RubyGems
|
12
12
|
2. To maintain an up-to-date binary gem for Windows that is bundled with
|
13
|
-
the latest version of Qt
|
13
|
+
the latest version of Qt
|
14
14
|
3. To reduce the scope and maintenance of the bindings to only bind to the
|
15
15
|
libraries provided by the Qt SDK.
|
16
16
|
4. To increase compatibility with non-linux platforms
|
17
17
|
|
18
|
-
Note: This gem
|
18
|
+
Note: This gem supports Ruby 2.0.0+ starting at qtbindings version 4.8.6.0.
|
19
|
+
For Ruby 1.9.3 you should use version 4.8.5.2.
|
19
20
|
For Ruby 1.8.x you can try installing version 4.8.3.0, however upgrading Ruby is
|
20
21
|
highly recommended.
|
21
22
|
|
22
23
|
Usage Notes
|
23
24
|
------------
|
24
|
-
Ruby threading is now fully supported out of the box.
|
25
|
-
inside the main thread.
|
25
|
+
Ruby threading is now fully supported out of the box. All GUI access however must be done
|
26
|
+
inside the main thread. To support updating the GUI using other threads, use the following function
|
26
27
|
provided in Qt4.rb:
|
27
28
|
|
28
|
-
Qt.execute_in_main_thread
|
29
|
-
# GUI code
|
29
|
+
Qt.execute_in_main_thread do # block the main thread
|
30
|
+
# GUI code which executes and then allows the main thread to execute
|
31
|
+
end
|
32
|
+
|
33
|
+
Qt.execute_in_main_thread(false) do # don't block the main thread
|
34
|
+
# GUI code which executes in parallel with the main thread
|
30
35
|
end
|
31
36
|
|
32
37
|
Tested Environments
|
33
38
|
--------------------
|
34
|
-
Mac OSX 10.
|
35
|
-
XCode
|
36
|
-
Brew - QT 4.8.
|
37
|
-
Cmake 2.8.
|
38
|
-
Ruby
|
39
|
+
Mac OSX 10.9.1 (Mavericks)
|
40
|
+
XCode 5 (clang)
|
41
|
+
Brew - QT 4.8.6
|
42
|
+
Cmake 2.8.9
|
43
|
+
Ruby 2.0.0p353 - Must be compiled with clang (rvm install <version> --with-gcc=clang)
|
39
44
|
|
40
45
|
Windows XP SP3
|
41
46
|
QT SDK 4.8.5
|
42
47
|
Cmake 2.8.8
|
43
|
-
Ruby
|
48
|
+
Ruby Ruby 2.0.0p481 installed from rubyinstaller.org
|
49
|
+
|
50
|
+
Windows 7 SP1
|
51
|
+
QT SDK 4.8.6
|
52
|
+
Cmake 2.8.12.2
|
53
|
+
Ruby 2.0.0p353 installed from rubyinstaller.org
|
44
54
|
|
45
55
|
Ubuntu Linux 11.10
|
46
56
|
QT SDK 4.8.1
|
@@ -52,7 +62,12 @@ Compiling qtbindings requires the following prerequisites:
|
|
52
62
|
1. cmake 2.8.x installed and in your path
|
53
63
|
2. QT 4.8.x installed and in your path
|
54
64
|
3. Ruby installed and in your path
|
55
|
-
4. gcc 4.x
|
65
|
+
4. gcc 4.x (or clang for OSX 10.9)
|
66
|
+
For Windows this means getting MingGW-w64 from http://mingw-w64.sourceforge.net/download.php (Win-builds project)
|
67
|
+
|
68
|
+
Note for OSX 10.9. The default compiler has changed from gcc to clang. All libraries
|
69
|
+
need to be compiled with clang or you will get segfaults. This includes ruby, qt, and qtbindings.
|
70
|
+
*** rvm does not compile with clang by default. You must add --with-gcc=clang when installing a version of ruby ***
|
56
71
|
|
57
72
|
Additionally: all of the operating system prequisites for compiling,
|
58
73
|
window system development, opengl, etc must be installed.
|
@@ -64,18 +79,20 @@ Perform the following steps to build the gem on Unix or Mac:
|
|
64
79
|
Where the x is the subversion of QT and y is the patch level of qtbindings
|
65
80
|
|
66
81
|
Perform the following steps to build the gem on Windows:
|
67
|
-
1. Ensure you are running Ruby
|
68
|
-
ruby -v #=> ruby
|
82
|
+
1. Ensure you are running Ruby 2.0.0
|
83
|
+
ruby -v #=> ruby 2.0.0
|
69
84
|
2. rake distclean
|
70
85
|
3. rake build
|
71
|
-
4. Switch to Ruby 2.
|
72
|
-
ruby -v #=> ruby 2.
|
86
|
+
4. Switch to Ruby 2.1.3
|
87
|
+
ruby -v #=> ruby 2.1.3
|
73
88
|
5. rake build
|
74
89
|
6. rake VERSION=4.8.x.y gemnative
|
75
90
|
Where the x is the subversion of QT and y is the patch level of qtbindings
|
91
|
+
7. rake VERSION=4.8.x.y gemqt
|
92
|
+
Where the x is the subversion of QT and y is the patch level of qtbindings
|
76
93
|
|
77
94
|
Note: The gem is built twice to create the FAT binary which will work
|
78
|
-
on both Ruby
|
95
|
+
on both Ruby 2.0 and 2.1. The Windows utility called pik is useful for
|
79
96
|
switching between Ruby versions.
|
80
97
|
|
81
98
|
After building the gem, verify the examples work by running:
|
@@ -88,7 +105,7 @@ Debian Linux
|
|
88
105
|
1. The following should get you the packages you need:
|
89
106
|
sudo aptitude install build-essential bison openssl libreadline5
|
90
107
|
libreadline-dev curl git-core zlib1g zlib1g-dev libssl-dev vim
|
91
|
-
libsqlite3-0 libsqlite3-dev sqlite3
|
108
|
+
libsqlite3-0 libsqlite3-dev sqlite3
|
92
109
|
libxml2-dev git-core subversion autoconf xorg-dev libgl1-mesa-dev
|
93
110
|
libglu1-mesa-dev
|
94
111
|
|
@@ -100,7 +117,8 @@ Mac OSX Snow Leopard
|
|
100
117
|
|
101
118
|
Windows - Note: Only necessary for debugging (binary gem available)
|
102
119
|
--------
|
103
|
-
|
120
|
+
QT 4.8.6 requires mingw 4.8.2 from http://mingw-w64.sourceforge.net/download.php (Win-builds project)
|
121
|
+
QT 4.8.5 requires mingw 4.4 from here or elsewhere: http://nosymbolfound.blogspot.com/2012/12/since-until-now-qt-under-windows-is.html#!/2012/12/since-until-now-qt-under-windows-is.html)
|
104
122
|
|
105
123
|
Install
|
106
124
|
------
|
@@ -121,6 +139,9 @@ License:
|
|
121
139
|
This library is released under the LGPL Version 2.1.
|
122
140
|
See COPYING.LIB.txt
|
123
141
|
|
142
|
+
Contributing:
|
143
|
+
Fork the project and submit pull requests.
|
144
|
+
|
124
145
|
Disclaimer:
|
125
146
|
Almost all of this code was written by the guys who worked on the KDE
|
126
147
|
bindings project, particurly Arno Rehn and Richard Dale. I hope to increase
|
data/Rakefile
CHANGED
@@ -6,8 +6,14 @@ windows = true if platform =~ /mswin32/ or platform =~ /mingw32/
|
|
6
6
|
|
7
7
|
if windows
|
8
8
|
MAKE = 'mingw32-make'
|
9
|
+
SLASH = '\\'
|
10
|
+
COPY = 'copy'
|
11
|
+
DEL = 'del'
|
9
12
|
else
|
10
13
|
MAKE = 'make'
|
14
|
+
SLASH = '/'
|
15
|
+
COPY = 'cp'
|
16
|
+
DEL = 'rm'
|
11
17
|
end
|
12
18
|
|
13
19
|
def warn_version
|
@@ -92,7 +98,9 @@ end
|
|
92
98
|
task :gemnative do
|
93
99
|
warn_version()
|
94
100
|
set_version()
|
101
|
+
system("#{COPY} gemspecs#{SLASH}qtbindingsnative.gemspec .")
|
95
102
|
system("gem build qtbindingsnative.gemspec")
|
103
|
+
system("#{DEL} qtbindingsnative.gemspec")
|
96
104
|
clear_version()
|
97
105
|
end
|
98
106
|
|
@@ -100,7 +108,9 @@ task :gemqt do
|
|
100
108
|
warn_version()
|
101
109
|
set_version()
|
102
110
|
system("#{MAKE} installqt")
|
111
|
+
system("#{COPY} gemspecs#{SLASH}qtbindings-qt.gemspec .")
|
103
112
|
system("gem build qtbindings-qt.gemspec")
|
113
|
+
system("#{DEL} qtbindings-qt.gemspec")
|
104
114
|
clear_version()
|
105
115
|
end
|
106
116
|
|
data/bin/rbrcc
CHANGED
@@ -10,9 +10,5 @@ windows = true if platform =~ /mswin32/ or platform =~ /mingw32/
|
|
10
10
|
extension = ''
|
11
11
|
extension = '.exe' if windows
|
12
12
|
|
13
|
-
|
14
|
-
path = File.expand_path(File.join(File.dirname(__FILE__), '1.9', "rbrcc#{extension}"))
|
15
|
-
else
|
16
|
-
path = File.expand_path(File.join(File.dirname(__FILE__), '2.0', "rbrcc#{extension}"))
|
17
|
-
end
|
13
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), RUBY_VERSION.split('.')[0..1].join('.'), "rbrcc#{extension}"))
|
18
14
|
exec(path, *ARGV)
|
data/bin/rbuic4
CHANGED
@@ -10,9 +10,5 @@ windows = true if platform =~ /mswin32/ or platform =~ /mingw32/
|
|
10
10
|
extension = ''
|
11
11
|
extension = '.exe' if windows
|
12
12
|
|
13
|
-
|
14
|
-
path = File.expand_path(File.join(File.dirname(__FILE__), '1.9', "rbuic4#{extension}"))
|
15
|
-
else
|
16
|
-
path = File.expand_path(File.join(File.dirname(__FILE__), '2.0', "rbuic4#{extension}"))
|
17
|
-
end
|
13
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), RUBY_VERSION.split('.')[0..1].join('.'), "rbuic4#{extension}"))
|
18
14
|
exec(path, *ARGV)
|
data/bin/smokeapi
CHANGED
@@ -10,9 +10,5 @@ windows = true if platform =~ /mswin32/ or platform =~ /mingw32/
|
|
10
10
|
extension = ''
|
11
11
|
extension = '.exe' if windows
|
12
12
|
|
13
|
-
|
14
|
-
path = File.expand_path(File.join(File.dirname(__FILE__), '1.9', "smokeapi#{extension}"))
|
15
|
-
else
|
16
|
-
path = File.expand_path(File.join(File.dirname(__FILE__), '2.0', "smokeapi#{extension}"))
|
17
|
-
end
|
13
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), RUBY_VERSION.split('.')[0..1].join('.'), "smokeapi#{extension}"))
|
18
14
|
exec(path, *ARGV)
|
data/bin/smokedeptool
CHANGED
@@ -10,9 +10,5 @@ windows = true if platform =~ /mswin32/ or platform =~ /mingw32/
|
|
10
10
|
extension = ''
|
11
11
|
extension = '.exe' if windows
|
12
12
|
|
13
|
-
|
14
|
-
path = File.expand_path(File.join(File.dirname(__FILE__), '1.9', "smokedeptool#{extension}"))
|
15
|
-
else
|
16
|
-
path = File.expand_path(File.join(File.dirname(__FILE__), '2.0', "smokedeptool#{extension}"))
|
17
|
-
end
|
13
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), RUBY_VERSION.split('.')[0..1].join('.'), "smokedeptool#{extension}"))
|
18
14
|
exec(path, *ARGV)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/ruby -W
|
2
|
+
require "Qt"
|
3
|
+
|
4
|
+
app = Qt::Application.new(ARGV)
|
5
|
+
|
6
|
+
hello = Qt::PushButton.new('Hello World!')
|
7
|
+
hello.resize(100, 30)
|
8
|
+
hello.show()
|
9
|
+
|
10
|
+
# This code hangs the application because it is trying to access the GUI
|
11
|
+
# (QT code) outside of the main thread
|
12
|
+
#Thread.new { sleep 2; hello.resize(200,50) }
|
13
|
+
|
14
|
+
# This code executes because it puts the GUI code inside
|
15
|
+
# Qt.execute_in_main_thread
|
16
|
+
Qt.execute_in_main_thread { sleep 2; hello.resize(200,50) }
|
17
|
+
|
18
|
+
app.exec()
|
19
|
+
|
data/ext/CMakeLists.txt
CHANGED
@@ -10,6 +10,9 @@ include(MacroOptionalAddBindings)
|
|
10
10
|
include(MacroLogFeature)
|
11
11
|
include(CheckCXXSourceCompiles)
|
12
12
|
|
13
|
+
# Call cmake/modules/FindQt4.cmake
|
14
|
+
# We are using the version provided by the Github project Kitware/CMake
|
15
|
+
# This sets a bunch of QT_XXX variables used throughout the build process
|
13
16
|
FIND_PACKAGE (Qt4 REQUIRED)
|
14
17
|
|
15
18
|
add_definitions (${QT_DEFINITIONS} -DHAVE_CONFIG_H=1)
|
@@ -1012,7 +1012,10 @@ IF (QT4_QMAKE_FOUND)
|
|
1012
1012
|
_QT4_ADJUST_LIB_VARS(QtAssistant)
|
1013
1013
|
_QT4_ADJUST_LIB_VARS(QtAssistantClient)
|
1014
1014
|
_QT4_ADJUST_LIB_VARS(QtCLucene)
|
1015
|
-
|
1015
|
+
# QtDBus doesn't work on WIN32
|
1016
|
+
IF(NOT WIN32)
|
1017
|
+
_QT4_ADJUST_LIB_VARS(QtDBus)
|
1018
|
+
ENDIF(NOT WIN32)
|
1016
1019
|
_QT4_ADJUST_LIB_VARS(QtDeclarative)
|
1017
1020
|
_QT4_ADJUST_LIB_VARS(QtDesigner)
|
1018
1021
|
_QT4_ADJUST_LIB_VARS(QtDesignerComponents)
|
@@ -81,8 +81,14 @@ IF(RUBY_EXECUTABLE AND NOT RUBY_MAJOR_VERSION)
|
|
81
81
|
EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['rubyhdrdir']"
|
82
82
|
OUTPUT_VARIABLE RUBY_HDR_DIR)
|
83
83
|
|
84
|
+
EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['rubyarchhdrdir']"
|
85
|
+
OUTPUT_VARIABLE RUBY_ARCH_HDR_DIR)
|
86
|
+
|
84
87
|
EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['libdir']"
|
85
|
-
OUTPUT_VARIABLE
|
88
|
+
OUTPUT_VARIABLE RUBY_LIB_DIR)
|
89
|
+
|
90
|
+
EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['archlibdir']"
|
91
|
+
OUTPUT_VARIABLE RUBY_ARCH_LIB_DIR)
|
86
92
|
|
87
93
|
EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['rubylibdir']"
|
88
94
|
OUTPUT_VARIABLE RUBY_RUBY_LIB_DIR)
|
@@ -106,25 +112,33 @@ IF(RUBY_EXECUTABLE AND NOT RUBY_MAJOR_VERSION)
|
|
106
112
|
OUTPUT_VARIABLE RUBY_VENDORARCH_DIR)
|
107
113
|
ENDIF(RUBY_HAS_VENDOR_RUBY)
|
108
114
|
|
115
|
+
EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['RUBY_SO_NAME']"
|
116
|
+
OUTPUT_VARIABLE RUBY_SONAME)
|
117
|
+
|
109
118
|
# save the results in the cache so we don't have to run ruby the next time again
|
110
119
|
SET(RUBY_VERSION_MAJOR ${RUBY_VERSION_MAJOR} CACHE PATH "The Ruby major version" FORCE)
|
111
120
|
SET(RUBY_VERSION_MINOR ${RUBY_VERSION_MINOR} CACHE PATH "The Ruby minor version" FORCE)
|
112
121
|
SET(RUBY_VERSION_PATCH ${RUBY_VERSION_PATCH} CACHE PATH "The Ruby patch version" FORCE)
|
113
122
|
SET(RUBY_ARCH_DIR ${RUBY_ARCH_DIR} CACHE PATH "The Ruby arch dir" FORCE)
|
114
123
|
SET(RUBY_HDR_DIR ${RUBY_HDR_DIR} CACHE PATH "The Ruby header dir (1.9)" FORCE)
|
115
|
-
SET(
|
124
|
+
SET(RUBY_ARCH_HDR_DIR ${RUBY_ARCH_HDR_DIR} CACHE PATH "The Ruby header dir for architecture-specific headers" FORCE)
|
125
|
+
SET(RUBY_LIB_DIR ${RUBY_LIB_DIR} CACHE PATH "The Ruby base lib dir" FORCE)
|
126
|
+
SET(RUBY_ARCH_LIB_DIR ${RUBY_ARCH_LIB_DIR} CACHE PATH "The Ruby architecture-specific lib dir" FORCE)
|
116
127
|
SET(RUBY_RUBY_LIB_DIR ${RUBY_RUBY_LIB_DIR} CACHE PATH "The Ruby ruby-lib dir" FORCE)
|
117
128
|
SET(RUBY_SITEARCH_DIR ${RUBY_SITEARCH_DIR} CACHE PATH "The Ruby site arch dir" FORCE)
|
118
129
|
SET(RUBY_SITELIB_DIR ${RUBY_SITELIB_DIR} CACHE PATH "The Ruby site lib dir" FORCE)
|
119
130
|
SET(RUBY_HAS_VENDOR_RUBY ${RUBY_HAS_VENDOR_RUBY} CACHE BOOL "Vendor Ruby is available" FORCE)
|
120
131
|
SET(RUBY_VENDORARCH_DIR ${RUBY_VENDORARCH_DIR} CACHE PATH "The Ruby vendor arch dir" FORCE)
|
121
132
|
SET(RUBY_VENDORLIB_DIR ${RUBY_VENDORLIB_DIR} CACHE PATH "The Ruby vendor lib dir" FORCE)
|
133
|
+
SET(RUBY_SONAME ${RUBY_SONAME} CACHE PATH "The Ruby library's .so name" FORCE)
|
122
134
|
|
123
135
|
MARK_AS_ADVANCED(
|
124
136
|
RUBY_ARCH_DIR
|
125
137
|
RUBY_ARCH
|
126
138
|
RUBY_HDR_DIR
|
127
|
-
|
139
|
+
RUBY_ARCH_HDR_DIR
|
140
|
+
RUBY_LIB_DIR
|
141
|
+
RUBY_ARCH_LIB_DIR
|
128
142
|
RUBY_RUBY_LIB_DIR
|
129
143
|
RUBY_SITEARCH_DIR
|
130
144
|
RUBY_SITELIB_DIR
|
@@ -134,6 +148,7 @@ IF(RUBY_EXECUTABLE AND NOT RUBY_MAJOR_VERSION)
|
|
134
148
|
RUBY_VERSION_MAJOR
|
135
149
|
RUBY_VERSION_MINOR
|
136
150
|
RUBY_VERSION_PATCH
|
151
|
+
RUBY_SONAME
|
137
152
|
)
|
138
153
|
ENDIF(RUBY_EXECUTABLE AND NOT RUBY_MAJOR_VERSION)
|
139
154
|
|
@@ -178,6 +193,7 @@ FIND_PATH(RUBY_INCLUDE_DIR
|
|
178
193
|
HINTS
|
179
194
|
${RUBY_HDR_DIR}
|
180
195
|
${RUBY_ARCH_DIR}
|
196
|
+
${RUBY_ARCH_HDR_DIR}
|
181
197
|
/usr/lib/ruby/${_RUBY_VERSION_SHORT}/i586-linux-gnu/ )
|
182
198
|
|
183
199
|
SET(RUBY_INCLUDE_DIRS ${RUBY_INCLUDE_DIR} )
|
@@ -188,6 +204,7 @@ IF( ${Ruby_FIND_VERSION_SHORT_NODOT} GREATER 18 OR ${_RUBY_VERSION_SHORT_NODOT
|
|
188
204
|
FIND_PATH(RUBY_CONFIG_INCLUDE_DIR
|
189
205
|
NAMES ruby/config.h config.h
|
190
206
|
HINTS
|
207
|
+
${RUBY_ARCH_HDR_DIR}
|
191
208
|
${RUBY_HDR_DIR}/${RUBY_ARCH}
|
192
209
|
${RUBY_ARCH_DIR}
|
193
210
|
)
|
@@ -197,7 +214,7 @@ ENDIF( ${Ruby_FIND_VERSION_SHORT_NODOT} GREATER 18 OR ${_RUBY_VERSION_SHORT_NO
|
|
197
214
|
|
198
215
|
|
199
216
|
# Determine the list of possible names for the ruby library
|
200
|
-
SET(_RUBY_POSSIBLE_LIB_NAMES ruby ruby-static ruby${_RUBY_VERSION_SHORT} ruby${_RUBY_VERSION_SHORT_NODOT} ruby-${RUBY_VERSION})
|
217
|
+
SET(_RUBY_POSSIBLE_LIB_NAMES ${RUBY_SONAME} ruby ruby-static ruby${_RUBY_VERSION_SHORT} ruby${_RUBY_VERSION_SHORT_NODOT} ruby-${RUBY_VERSION})
|
201
218
|
|
202
219
|
IF(WIN32)
|
203
220
|
SET( _RUBY_MSVC_RUNTIME "" )
|
@@ -226,7 +243,7 @@ IF(WIN32)
|
|
226
243
|
"msvcrt-ruby${_RUBY_VERSION_LONG_NODOT}-static" )
|
227
244
|
ENDIF(WIN32)
|
228
245
|
|
229
|
-
FIND_LIBRARY(RUBY_LIBRARY NAMES ${_RUBY_POSSIBLE_LIB_NAMES} HINTS ${
|
246
|
+
FIND_LIBRARY(RUBY_LIBRARY NAMES ${_RUBY_POSSIBLE_LIB_NAMES} HINTS ${RUBY_ARCH_LIB_DIR} ${RUBY_LIB_DIR})
|
230
247
|
|
231
248
|
INCLUDE(FindPackageHandleStandardArgs)
|
232
249
|
SET(_RUBY_REQUIRED_VARS RUBY_EXECUTABLE RUBY_INCLUDE_DIR RUBY_LIBRARY)
|
@@ -259,3 +276,4 @@ MARK_AS_ADVANCED(
|
|
259
276
|
SET(RUBY_POSSIBLE_LIB_PATH ${RUBY_POSSIBLE_LIB_DIR})
|
260
277
|
SET(RUBY_RUBY_LIB_PATH ${RUBY_RUBY_LIB_DIR})
|
261
278
|
SET(RUBY_INCLUDE_PATH ${RUBY_INCLUDE_DIRS})
|
279
|
+
|
@@ -1,4 +1,4 @@
|
|
1
|
-
IF(QT_QTDBUS_FOUND)
|
1
|
+
IF(QT_QTDBUS_FOUND AND NOT WIN32)
|
2
2
|
ADD_DEFINITIONS (-DQT_QTDBUS)
|
3
3
|
ENDIF(QT_QTDBUS_FOUND)
|
4
4
|
|
@@ -27,7 +27,7 @@ set(qtruby_LIB_SRCS qtruby.cpp)
|
|
27
27
|
add_library(qtruby4shared SHARED ${qtrubyshared_LIB_SRCS})
|
28
28
|
add_library(qtruby4 MODULE ${qtruby_LIB_SRCS})
|
29
29
|
|
30
|
-
if(QT_QTDBUS_FOUND)
|
30
|
+
if(QT_QTDBUS_FOUND AND NOT WIN32)
|
31
31
|
target_link_libraries( qtruby4shared
|
32
32
|
${QT_QTCORE_LIBRARY}
|
33
33
|
${QT_QTGUI_LIBRARY}
|
@@ -153,36 +153,36 @@ inspectProperty(QMetaProperty property, const char * name, QVariant & value)
|
|
153
153
|
{
|
154
154
|
QFont f = value.value<QFont>();
|
155
155
|
return QString( " %1=#<Qt::Font:0x0 family=%2, pointSize=%3, weight=%4, italic=%5, bold=%6, underline=%7, strikeOut=%8>")
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
156
|
+
.arg(name)
|
157
|
+
.arg(f.family())
|
158
|
+
.arg(f.pointSize())
|
159
|
+
.arg(f.weight())
|
160
|
+
.arg(f.italic() ? "true" : "false")
|
161
|
+
.arg(f.bold() ? "true" : "false")
|
162
|
+
.arg(f.underline() ? "true" : "false")
|
163
|
+
.arg(f.strikeOut() ? "true" : "false");
|
164
164
|
}
|
165
165
|
|
166
166
|
case QVariant::Line:
|
167
167
|
{
|
168
168
|
QLine l = value.toLine();
|
169
169
|
return QString(" %1=#<Qt::Line:0x0 x1=%2, y1=%3, x2=%4, y2=%5>")
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
170
|
+
.arg(name)
|
171
|
+
.arg(l.x1())
|
172
|
+
.arg(l.y1())
|
173
|
+
.arg(l.x2())
|
174
|
+
.arg(l.y2());
|
175
175
|
}
|
176
176
|
|
177
177
|
case QVariant::LineF:
|
178
178
|
{
|
179
179
|
QLineF l = value.toLineF();
|
180
180
|
return QString(" %1=#<Qt::LineF:0x0 x1=%2, y1=%3, x2=%4, y2=%5>")
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
181
|
+
.arg(name)
|
182
|
+
.arg(l.x1())
|
183
|
+
.arg(l.y1())
|
184
|
+
.arg(l.x2())
|
185
|
+
.arg(l.y2());
|
186
186
|
}
|
187
187
|
|
188
188
|
case QVariant::Point:
|
@@ -201,41 +201,41 @@ inspectProperty(QMetaProperty property, const char * name, QVariant & value)
|
|
201
201
|
{
|
202
202
|
QRect r = value.toRect();
|
203
203
|
return QString(" %1=#<Qt::Rect:0x0 left=%2, right=%3, top=%4, bottom=%5>")
|
204
|
-
|
205
|
-
|
204
|
+
.arg(name)
|
205
|
+
.arg(r.left()).arg(r.right()).arg(r.top()).arg(r.bottom());
|
206
206
|
}
|
207
207
|
|
208
208
|
case QVariant::RectF:
|
209
209
|
{
|
210
210
|
QRectF r = value.toRectF();
|
211
211
|
return QString(" %1=#<Qt::RectF:0x0 left=%2, right=%3, top=%4, bottom=%5>")
|
212
|
-
|
213
|
-
|
212
|
+
.arg(name)
|
213
|
+
.arg(r.left()).arg(r.right()).arg(r.top()).arg(r.bottom());
|
214
214
|
}
|
215
215
|
|
216
216
|
case QVariant::Size:
|
217
217
|
{
|
218
218
|
QSize s = value.toSize();
|
219
219
|
return QString(" %1=#<Qt::Size:0x0 width=%2, height=%3>")
|
220
|
-
|
221
|
-
|
220
|
+
.arg(name)
|
221
|
+
.arg(s.width()).arg(s.height());
|
222
222
|
}
|
223
223
|
|
224
224
|
case QVariant::SizeF:
|
225
225
|
{
|
226
226
|
QSizeF s = value.toSizeF();
|
227
227
|
return QString(" %1=#<Qt::SizeF:0x0 width=%2, height=%3>")
|
228
|
-
|
229
|
-
|
228
|
+
.arg(name)
|
229
|
+
.arg(s.width()).arg(s.height());
|
230
230
|
}
|
231
231
|
|
232
232
|
case QVariant::SizePolicy:
|
233
233
|
{
|
234
234
|
QSizePolicy s = value.value<QSizePolicy>();
|
235
235
|
return QString(" %1=#<Qt::SizePolicy:0x0 horizontalPolicy=%2, verticalPolicy=%3>")
|
236
|
-
|
237
|
-
|
238
|
-
|
236
|
+
.arg(name)
|
237
|
+
.arg(s.horizontalPolicy())
|
238
|
+
.arg(s.verticalPolicy());
|
239
239
|
}
|
240
240
|
|
241
241
|
case QVariant::Brush:
|
@@ -250,7 +250,7 @@ inspectProperty(QMetaProperty property, const char * name, QVariant & value)
|
|
250
250
|
|
251
251
|
default:
|
252
252
|
return QString(" %1=%2").arg(name)
|
253
|
-
|
253
|
+
.arg((value.isNull() || value.toString().isNull()) ? "nil" : value.toString() );
|
254
254
|
}
|
255
255
|
}
|
256
256
|
|
@@ -272,7 +272,7 @@ inspect_qobject(VALUE self)
|
|
272
272
|
rb_str_resize(inspect_str, RSTRING_LEN(inspect_str) - 1);
|
273
273
|
|
274
274
|
smokeruby_object * o = 0;
|
275
|
-
|
275
|
+
Data_Get_Struct(self, smokeruby_object, o);
|
276
276
|
QObject * qobject = (QObject *) o->smoke->cast(o->ptr, o->classId, o->smoke->idClass("QObject").index);
|
277
277
|
|
278
278
|
QString value_list;
|
@@ -281,10 +281,10 @@ inspect_qobject(VALUE self)
|
|
281
281
|
if (qobject->isWidgetType()) {
|
282
282
|
QWidget * w = (QWidget *) qobject;
|
283
283
|
value_list.append(QString(", x=%1, y=%2, width=%3, height=%4")
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
284
|
+
.arg(w->x())
|
285
|
+
.arg(w->y())
|
286
|
+
.arg(w->width())
|
287
|
+
.arg(w->height()) );
|
288
288
|
}
|
289
289
|
|
290
290
|
value_list.append(">");
|
@@ -317,7 +317,7 @@ pretty_print_qobject(VALUE self, VALUE pp)
|
|
317
317
|
rb_funcall(pp, rb_intern("breakable"), 0);
|
318
318
|
|
319
319
|
smokeruby_object * o = 0;
|
320
|
-
|
320
|
+
Data_Get_Struct(self, smokeruby_object, o);
|
321
321
|
QObject * qobject = (QObject *) o->smoke->cast(o->ptr, o->classId, o->smoke->idClass("QObject").index);
|
322
322
|
|
323
323
|
QString value_list;
|
@@ -336,16 +336,16 @@ pretty_print_qobject(VALUE self, VALUE pp)
|
|
336
336
|
if (qobject->parent()->isWidgetType()) {
|
337
337
|
QWidget * w = (QWidget *) qobject->parent();
|
338
338
|
value_list = QString(" parent=%1 objectName=\"%2\", x=%3, y=%4, width=%5, height=%6>,\n")
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
339
|
+
.arg(parentInspectString)
|
340
|
+
.arg(w->objectName())
|
341
|
+
.arg(w->x())
|
342
|
+
.arg(w->y())
|
343
|
+
.arg(w->width())
|
344
|
+
.arg(w->height());
|
345
345
|
} else {
|
346
346
|
value_list = QString(" parent=%1 objectName=\"%2\">,\n")
|
347
|
-
|
348
|
-
|
347
|
+
.arg(parentInspectString)
|
348
|
+
.arg(qobject->parent()->objectName());
|
349
349
|
}
|
350
350
|
|
351
351
|
rb_funcall(pp, rb_intern("text"), 1, rb_str_new2(value_list.toLatin1()));
|
@@ -353,7 +353,7 @@ pretty_print_qobject(VALUE self, VALUE pp)
|
|
353
353
|
|
354
354
|
if (qobject->children().count() != 0) {
|
355
355
|
value_list = QString(" children=Array (%1 element(s)),\n")
|
356
|
-
|
356
|
+
.arg(qobject->children().count());
|
357
357
|
rb_funcall(pp, rb_intern("text"), 1, rb_str_new2(value_list.toLatin1()));
|
358
358
|
}
|
359
359
|
|
@@ -362,7 +362,7 @@ pretty_print_qobject(VALUE self, VALUE pp)
|
|
362
362
|
|
363
363
|
if (qobject->metaObject()->superClass() != 0) {
|
364
364
|
value_list.append( QString(", superClass=#<Qt::MetaObject:0x0 className=%1>")
|
365
|
-
|
365
|
+
.arg(qobject->metaObject()->superClass()->className()) );
|
366
366
|
}
|
367
367
|
|
368
368
|
value_list.append(">,\n");
|
@@ -420,7 +420,7 @@ q_unregister_resource_data(VALUE /*self*/, VALUE version, VALUE tree_value, VALU
|
|
420
420
|
static VALUE
|
421
421
|
qabstract_item_model_rowcount(int argc, VALUE * argv, VALUE self)
|
422
422
|
{
|
423
|
-
|
423
|
+
smokeruby_object *o = value_obj_info(self);
|
424
424
|
QAbstractItemModel * model = (QAbstractItemModel *) o->ptr;
|
425
425
|
if (argc == 0) {
|
426
426
|
return INT2NUM(model->rowCount());
|
@@ -438,7 +438,7 @@ qabstract_item_model_rowcount(int argc, VALUE * argv, VALUE self)
|
|
438
438
|
static VALUE
|
439
439
|
qabstract_item_model_columncount(int argc, VALUE * argv, VALUE self)
|
440
440
|
{
|
441
|
-
|
441
|
+
smokeruby_object *o = value_obj_info(self);
|
442
442
|
QAbstractItemModel * model = (QAbstractItemModel *) o->ptr;
|
443
443
|
if (argc == 0) {
|
444
444
|
return INT2NUM(model->columnCount());
|
@@ -456,9 +456,9 @@ qabstract_item_model_columncount(int argc, VALUE * argv, VALUE self)
|
|
456
456
|
static VALUE
|
457
457
|
qabstract_item_model_data(int argc, VALUE * argv, VALUE self)
|
458
458
|
{
|
459
|
-
|
459
|
+
smokeruby_object * o = value_obj_info(self);
|
460
460
|
QAbstractItemModel * model = (QAbstractItemModel *) o->ptr;
|
461
|
-
|
461
|
+
smokeruby_object * mi = value_obj_info(argv[0]);
|
462
462
|
QModelIndex * modelIndex = (QModelIndex *) mi->ptr;
|
463
463
|
QVariant value;
|
464
464
|
if (argc == 1) {
|
@@ -471,7 +471,7 @@ qabstract_item_model_data(int argc, VALUE * argv, VALUE self)
|
|
471
471
|
|
472
472
|
|
473
473
|
smokeruby_object * result = alloc_smokeruby_object( true,
|
474
|
-
|
474
|
+
o->smoke,
|
475
475
|
o->smoke->findClass("QVariant").index,
|
476
476
|
new QVariant(value) );
|
477
477
|
return set_obj_info("Qt::Variant", result);
|
@@ -480,11 +480,11 @@ qabstract_item_model_data(int argc, VALUE * argv, VALUE self)
|
|
480
480
|
static VALUE
|
481
481
|
qabstract_item_model_setdata(int argc, VALUE * argv, VALUE self)
|
482
482
|
{
|
483
|
-
|
483
|
+
smokeruby_object *o = value_obj_info(self);
|
484
484
|
QAbstractItemModel * model = (QAbstractItemModel *) o->ptr;
|
485
|
-
|
485
|
+
smokeruby_object * mi = value_obj_info(argv[0]);
|
486
486
|
QModelIndex * modelIndex = (QModelIndex *) mi->ptr;
|
487
|
-
|
487
|
+
smokeruby_object * v = value_obj_info(argv[1]);
|
488
488
|
QVariant * variant = (QVariant *) v->ptr;
|
489
489
|
|
490
490
|
if (argc == 2) {
|
@@ -493,8 +493,8 @@ qabstract_item_model_setdata(int argc, VALUE * argv, VALUE self)
|
|
493
493
|
|
494
494
|
if (argc == 3) {
|
495
495
|
return (model->setData( *modelIndex,
|
496
|
-
|
497
|
-
|
496
|
+
*variant,
|
497
|
+
NUM2INT(rb_funcall(argv[2], rb_intern("to_i"), 0)) ) ? Qtrue : Qfalse);
|
498
498
|
}
|
499
499
|
|
500
500
|
rb_raise(rb_eArgError, "Invalid argument list");
|
@@ -503,9 +503,9 @@ qabstract_item_model_setdata(int argc, VALUE * argv, VALUE self)
|
|
503
503
|
static VALUE
|
504
504
|
qabstract_item_model_flags(VALUE self, VALUE model_index)
|
505
505
|
{
|
506
|
-
|
506
|
+
smokeruby_object *o = value_obj_info(self);
|
507
507
|
QAbstractItemModel * model = (QAbstractItemModel *) o->ptr;
|
508
|
-
|
508
|
+
smokeruby_object * mi = value_obj_info(model_index);
|
509
509
|
const QModelIndex * modelIndex = (const QModelIndex *) mi->ptr;
|
510
510
|
return INT2NUM((int) model->flags(*modelIndex));
|
511
511
|
}
|
@@ -513,7 +513,7 @@ qabstract_item_model_flags(VALUE self, VALUE model_index)
|
|
513
513
|
static VALUE
|
514
514
|
qabstract_item_model_insertrows(int argc, VALUE * argv, VALUE self)
|
515
515
|
{
|
516
|
-
|
516
|
+
smokeruby_object *o = value_obj_info(self);
|
517
517
|
QAbstractItemModel * model = (QAbstractItemModel *) o->ptr;
|
518
518
|
|
519
519
|
if (argc == 2) {
|
@@ -521,7 +521,7 @@ qabstract_item_model_insertrows(int argc, VALUE * argv, VALUE self)
|
|
521
521
|
}
|
522
522
|
|
523
523
|
if (argc == 3) {
|
524
|
-
|
524
|
+
smokeruby_object * mi = value_obj_info(argv[2]);
|
525
525
|
const QModelIndex * modelIndex = (const QModelIndex *) mi->ptr;
|
526
526
|
return (model->insertRows(NUM2INT(argv[0]), NUM2INT(argv[1]), *modelIndex) ? Qtrue : Qfalse);
|
527
527
|
}
|
@@ -532,7 +532,7 @@ qabstract_item_model_insertrows(int argc, VALUE * argv, VALUE self)
|
|
532
532
|
static VALUE
|
533
533
|
qabstract_item_model_insertcolumns(int argc, VALUE * argv, VALUE self)
|
534
534
|
{
|
535
|
-
|
535
|
+
smokeruby_object *o = value_obj_info(self);
|
536
536
|
QAbstractItemModel * model = (QAbstractItemModel *) o->ptr;
|
537
537
|
|
538
538
|
if (argc == 2) {
|
@@ -540,7 +540,7 @@ qabstract_item_model_insertcolumns(int argc, VALUE * argv, VALUE self)
|
|
540
540
|
}
|
541
541
|
|
542
542
|
if (argc == 3) {
|
543
|
-
|
543
|
+
smokeruby_object * mi = value_obj_info(argv[2]);
|
544
544
|
const QModelIndex * modelIndex = (const QModelIndex *) mi->ptr;
|
545
545
|
return (model->insertColumns(NUM2INT(argv[0]), NUM2INT(argv[1]), *modelIndex) ? Qtrue : Qfalse);
|
546
546
|
}
|
@@ -551,7 +551,7 @@ qabstract_item_model_insertcolumns(int argc, VALUE * argv, VALUE self)
|
|
551
551
|
static VALUE
|
552
552
|
qabstract_item_model_removerows(int argc, VALUE * argv, VALUE self)
|
553
553
|
{
|
554
|
-
|
554
|
+
smokeruby_object *o = value_obj_info(self);
|
555
555
|
QAbstractItemModel * model = (QAbstractItemModel *) o->ptr;
|
556
556
|
|
557
557
|
if (argc == 2) {
|
@@ -559,7 +559,7 @@ qabstract_item_model_removerows(int argc, VALUE * argv, VALUE self)
|
|
559
559
|
}
|
560
560
|
|
561
561
|
if (argc == 3) {
|
562
|
-
|
562
|
+
smokeruby_object * mi = value_obj_info(argv[2]);
|
563
563
|
const QModelIndex * modelIndex = (const QModelIndex *) mi->ptr;
|
564
564
|
return (model->removeRows(NUM2INT(argv[0]), NUM2INT(argv[1]), *modelIndex) ? Qtrue : Qfalse);
|
565
565
|
}
|
@@ -570,7 +570,7 @@ qabstract_item_model_removerows(int argc, VALUE * argv, VALUE self)
|
|
570
570
|
static VALUE
|
571
571
|
qabstract_item_model_removecolumns(int argc, VALUE * argv, VALUE self)
|
572
572
|
{
|
573
|
-
|
573
|
+
smokeruby_object *o = value_obj_info(self);
|
574
574
|
QAbstractItemModel * model = (QAbstractItemModel *) o->ptr;
|
575
575
|
|
576
576
|
if (argc == 2) {
|
@@ -578,7 +578,7 @@ qabstract_item_model_removecolumns(int argc, VALUE * argv, VALUE self)
|
|
578
578
|
}
|
579
579
|
|
580
580
|
if (argc == 3) {
|
581
|
-
|
581
|
+
smokeruby_object * mi = value_obj_info(argv[2]);
|
582
582
|
const QModelIndex * modelIndex = (const QModelIndex *) mi->ptr;
|
583
583
|
return (model->removeRows(NUM2INT(argv[0]), NUM2INT(argv[1]), *modelIndex) ? Qtrue : Qfalse);
|
584
584
|
}
|
@@ -592,7 +592,7 @@ qabstract_item_model_removecolumns(int argc, VALUE * argv, VALUE self)
|
|
592
592
|
static VALUE
|
593
593
|
qbytearray_append(VALUE self, VALUE str)
|
594
594
|
{
|
595
|
-
|
595
|
+
smokeruby_object *o = value_obj_info(self);
|
596
596
|
QByteArray * bytes = (QByteArray *) o->ptr;
|
597
597
|
(*bytes) += (const char *) StringValuePtr(str);
|
598
598
|
return self;
|
@@ -601,34 +601,34 @@ qbytearray_append(VALUE self, VALUE str)
|
|
601
601
|
static VALUE
|
602
602
|
qbytearray_data(VALUE self)
|
603
603
|
{
|
604
|
-
|
605
|
-
|
606
|
-
|
604
|
+
smokeruby_object *o = value_obj_info(self);
|
605
|
+
QByteArray * bytes = (QByteArray *) o->ptr;
|
606
|
+
return rb_str_new(bytes->data(), bytes->size());
|
607
607
|
}
|
608
608
|
|
609
609
|
static VALUE
|
610
610
|
qimage_bits(VALUE self)
|
611
611
|
{
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
612
|
+
smokeruby_object *o = value_obj_info(self);
|
613
|
+
QImage * image = static_cast<QImage *>(o->ptr);
|
614
|
+
const uchar * bytes = image->bits();
|
615
|
+
return rb_str_new((const char *) bytes, image->numBytes());
|
616
616
|
}
|
617
617
|
|
618
618
|
static VALUE
|
619
619
|
qimage_scan_line(VALUE self, VALUE ix)
|
620
620
|
{
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
621
|
+
smokeruby_object *o = value_obj_info(self);
|
622
|
+
QImage * image = static_cast<QImage *>(o->ptr);
|
623
|
+
const uchar * bytes = image->scanLine(NUM2INT(ix));
|
624
|
+
return rb_str_new((const char *) bytes, image->bytesPerLine());
|
625
625
|
}
|
626
626
|
|
627
627
|
#ifdef QT_QTDBUS
|
628
628
|
static VALUE
|
629
629
|
qdbusargument_endarraywrite(VALUE self)
|
630
630
|
{
|
631
|
-
|
631
|
+
smokeruby_object *o = value_obj_info(self);
|
632
632
|
QDBusArgument * arg = (QDBusArgument *) o->ptr;
|
633
633
|
arg->endArray();
|
634
634
|
return self;
|
@@ -637,7 +637,7 @@ qdbusargument_endarraywrite(VALUE self)
|
|
637
637
|
static VALUE
|
638
638
|
qdbusargument_endmapwrite(VALUE self)
|
639
639
|
{
|
640
|
-
|
640
|
+
smokeruby_object *o = value_obj_info(self);
|
641
641
|
QDBusArgument * arg = (QDBusArgument *) o->ptr;
|
642
642
|
arg->endMap();
|
643
643
|
return self;
|
@@ -646,7 +646,7 @@ qdbusargument_endmapwrite(VALUE self)
|
|
646
646
|
static VALUE
|
647
647
|
qdbusargument_endmapentrywrite(VALUE self)
|
648
648
|
{
|
649
|
-
|
649
|
+
smokeruby_object *o = value_obj_info(self);
|
650
650
|
QDBusArgument * arg = (QDBusArgument *) o->ptr;
|
651
651
|
arg->endMapEntry();
|
652
652
|
return self;
|
@@ -655,7 +655,7 @@ qdbusargument_endmapentrywrite(VALUE self)
|
|
655
655
|
static VALUE
|
656
656
|
qdbusargument_endstructurewrite(VALUE self)
|
657
657
|
{
|
658
|
-
|
658
|
+
smokeruby_object *o = value_obj_info(self);
|
659
659
|
QDBusArgument * arg = (QDBusArgument *) o->ptr;
|
660
660
|
arg->endStructure();
|
661
661
|
return self;
|
@@ -784,7 +784,7 @@ qabstractitemmodel_createindex(int argc, VALUE * argv, VALUE self)
|
|
784
784
|
if ( qstrcmp( o->smoke->types[o->smoke->argumentList[o->smoke->methods[o->smoke->ambiguousMethodList[i]].args + 2]].name,
|
785
785
|
"void*" ) == 0 )
|
786
786
|
{
|
787
|
-
|
787
|
+
const Smoke::Method &m = o->smoke->methods[o->smoke->ambiguousMethodList[i]];
|
788
788
|
Smoke::ClassFn fn = o->smoke->classes[m.classId].classFn;
|
789
789
|
Smoke::StackItem stack[4];
|
790
790
|
stack[1].s_int = NUM2INT(argv[0]);
|
@@ -810,10 +810,77 @@ qabstractitemmodel_createindex(int argc, VALUE * argv, VALUE self)
|
|
810
810
|
return rb_call_super(argc, argv);
|
811
811
|
}
|
812
812
|
|
813
|
+
#if QT_VERSION >= 0x040600
|
814
|
+
// copy the role names defined on the model instance into a ruby hash and return it
|
815
|
+
static VALUE
|
816
|
+
qabstractitemmodel_rolenames(int argc, VALUE * argv, VALUE self)
|
817
|
+
{
|
818
|
+
smokeruby_object *o = value_obj_info(self);
|
819
|
+
if( !o->ptr )
|
820
|
+
{
|
821
|
+
// not ok
|
822
|
+
rb_raise(rb_eArgError, "NULL given, expected subclass of QAbstractItemModel");
|
823
|
+
}
|
824
|
+
|
825
|
+
QAbstractItemModel* model = (QAbstractItemModel*) o->ptr;
|
826
|
+
|
827
|
+
// convert QHash<int,QByteArray> to a ruby hash
|
828
|
+
VALUE result = rb_hash_new();
|
829
|
+
QHash<int, QByteArray>::const_iterator i;
|
830
|
+
for( i = model->roleNames().constBegin(); i != model->roleNames().constEnd(); i++)
|
831
|
+
{
|
832
|
+
rb_hash_aset(result,
|
833
|
+
INT2NUM(i.key()),
|
834
|
+
rb_str_new2(i.value().data()));
|
835
|
+
}
|
836
|
+
|
837
|
+
return result;
|
838
|
+
}
|
839
|
+
|
840
|
+
// let C++ call a protected member function from outside
|
841
|
+
// NOTE: a little hacky, but setRoleNames is deprecated in Qt 5.0, anyway...
|
842
|
+
struct SetRoleNamesExposer : QAbstractItemModel {
|
843
|
+
using QAbstractItemModel::setRoleNames;
|
844
|
+
};
|
845
|
+
|
846
|
+
// set the role names on the given model instance from the given hash
|
847
|
+
static VALUE
|
848
|
+
qabstractitemmodel_setrolenames(int argc, VALUE * argv, VALUE self)
|
849
|
+
{
|
850
|
+
if( argc != 1 || TYPE(argv[0]) != T_HASH )
|
851
|
+
{
|
852
|
+
rb_raise(rb_eArgError, "Invalid arguments");
|
853
|
+
}
|
854
|
+
|
855
|
+
// convert the ruby hash to a QHash<int,QByteArray>
|
856
|
+
QHash<int,QByteArray> rnames;
|
857
|
+
VALUE tmp = rb_funcall(argv[0], rb_intern("to_a"), 0);
|
858
|
+
for( long i=0; i<RARRAY_LEN(tmp); i++)
|
859
|
+
{
|
860
|
+
VALUE key = rb_ary_entry(rb_ary_entry(tmp, i), 0);
|
861
|
+
VALUE val = rb_ary_entry(rb_ary_entry(tmp, i), 1);
|
862
|
+
rnames[NUM2INT(key)] = QByteArray(StringValuePtr(val));
|
863
|
+
}
|
864
|
+
|
865
|
+
smokeruby_object *o = value_obj_info(self);
|
866
|
+
if( !o->ptr )
|
867
|
+
{
|
868
|
+
// not ok
|
869
|
+
rb_raise(rb_eArgError, "NULL given, expected subclass of QAbstractItemModel");
|
870
|
+
}
|
871
|
+
|
872
|
+
QAbstractItemModel* model = (QAbstractItemModel*) o->ptr;
|
873
|
+
(model->*&SetRoleNamesExposer::setRoleNames)(rnames); // just a little hacky, since
|
874
|
+
// 'setRoleNames' is protected
|
875
|
+
|
876
|
+
return Qnil;
|
877
|
+
}
|
878
|
+
#endif
|
879
|
+
|
813
880
|
static VALUE
|
814
881
|
qmodelindex_internalpointer(VALUE self)
|
815
882
|
{
|
816
|
-
|
883
|
+
smokeruby_object *o = value_obj_info(self);
|
817
884
|
QModelIndex * index = (QModelIndex *) o->ptr;
|
818
885
|
void * ptr = index->internalPointer();
|
819
886
|
return ptr != 0 ? (VALUE) ptr : Qnil;
|
@@ -822,7 +889,7 @@ qmodelindex_internalpointer(VALUE self)
|
|
822
889
|
static VALUE
|
823
890
|
qitemselection_at(VALUE self, VALUE i)
|
824
891
|
{
|
825
|
-
|
892
|
+
smokeruby_object *o = value_obj_info(self);
|
826
893
|
QItemSelection * item = (QItemSelection *) o->ptr;
|
827
894
|
QItemSelectionRange range = item->at(NUM2INT(i));
|
828
895
|
|
@@ -837,7 +904,7 @@ qitemselection_at(VALUE self, VALUE i)
|
|
837
904
|
static VALUE
|
838
905
|
qitemselection_count(VALUE self)
|
839
906
|
{
|
840
|
-
|
907
|
+
smokeruby_object *o = value_obj_info(self);
|
841
908
|
QItemSelection * item = (QItemSelection *) o->ptr;
|
842
909
|
return INT2NUM(item->count());
|
843
910
|
}
|
@@ -845,8 +912,8 @@ qitemselection_count(VALUE self)
|
|
845
912
|
static VALUE
|
846
913
|
metaObject(VALUE self)
|
847
914
|
{
|
848
|
-
|
849
|
-
|
915
|
+
VALUE metaObject = rb_funcall(qt_internal_module, rb_intern("getMetaObject"), 2, Qnil, self);
|
916
|
+
return metaObject;
|
850
917
|
}
|
851
918
|
|
852
919
|
/* This shouldn't be needed, but kalyptus doesn't generate a staticMetaObject
|
@@ -860,9 +927,9 @@ qobject_staticmetaobject(VALUE /*klass*/)
|
|
860
927
|
QMetaObject * meta = new QMetaObject(QObject::staticMetaObject);
|
861
928
|
|
862
929
|
smokeruby_object * m = alloc_smokeruby_object( true,
|
863
|
-
|
864
|
-
|
865
|
-
|
930
|
+
qtcore_Smoke,
|
931
|
+
qtcore_Smoke->idClass("QMetaObject").index,
|
932
|
+
meta );
|
866
933
|
|
867
934
|
VALUE obj = set_obj_info("Qt::MetaObject", m);
|
868
935
|
return obj;
|
@@ -871,29 +938,29 @@ qobject_staticmetaobject(VALUE /*klass*/)
|
|
871
938
|
static VALUE
|
872
939
|
cast_object_to(VALUE /*self*/, VALUE object, VALUE new_klass)
|
873
940
|
{
|
874
|
-
|
941
|
+
smokeruby_object *o = value_obj_info(object);
|
875
942
|
|
876
943
|
VALUE new_klassname = rb_funcall(new_klass, rb_intern("name"), 0);
|
877
944
|
|
878
|
-
|
945
|
+
Smoke::ModuleIndex * cast_to_id = classcache.value(StringValuePtr(new_klassname));
|
879
946
|
if (cast_to_id == 0) {
|
880
947
|
rb_raise(rb_eArgError, "unable to find class \"%s\" to cast to\n", StringValuePtr(new_klassname));
|
881
948
|
}
|
882
949
|
|
883
|
-
smokeruby_object * o_cast = alloc_smokeruby_object(
|
884
|
-
|
885
|
-
|
886
|
-
|
950
|
+
smokeruby_object * o_cast = alloc_smokeruby_object(o->allocated,
|
951
|
+
cast_to_id->smoke,
|
952
|
+
(int) cast_to_id->index,
|
953
|
+
o->smoke->cast(o->ptr, o->classId, (int) cast_to_id->index) );
|
887
954
|
|
888
|
-
|
889
|
-
|
890
|
-
|
955
|
+
VALUE obj = Data_Wrap_Struct(new_klass, smokeruby_mark, smokeruby_free, (void *) o_cast);
|
956
|
+
mapPointer(obj, o_cast, o_cast->classId, 0);
|
957
|
+
return obj;
|
891
958
|
}
|
892
959
|
|
893
960
|
static VALUE
|
894
961
|
qobject_qt_metacast(VALUE self, VALUE klass)
|
895
962
|
{
|
896
|
-
|
963
|
+
smokeruby_object *o = value_obj_info(self);
|
897
964
|
if (o == 0 || o->ptr == 0) {
|
898
965
|
return Qnil;
|
899
966
|
}
|
@@ -916,13 +983,13 @@ qobject_qt_metacast(VALUE self, VALUE klass)
|
|
916
983
|
}
|
917
984
|
|
918
985
|
smokeruby_object * o_cast = alloc_smokeruby_object( o->allocated,
|
919
|
-
|
920
|
-
|
921
|
-
|
986
|
+
mi->smoke,
|
987
|
+
(int) mi->index,
|
988
|
+
ret );
|
922
989
|
|
923
|
-
|
924
|
-
|
925
|
-
|
990
|
+
VALUE obj = Data_Wrap_Struct(klass, smokeruby_mark, smokeruby_free, (void *) o_cast);
|
991
|
+
mapPointer(obj, o_cast, o_cast->classId, 0);
|
992
|
+
return obj;
|
926
993
|
}
|
927
994
|
|
928
995
|
static VALUE
|
@@ -939,13 +1006,11 @@ qsignalmapper_mapping(int argc, VALUE * argv, VALUE self)
|
|
939
1006
|
Smoke::Index i = meth.smoke->methodMaps[meth.index].method;
|
940
1007
|
i = -i; // turn into ambiguousMethodList index
|
941
1008
|
while (meth.smoke->ambiguousMethodList[i] != 0) {
|
942
|
-
if (
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
"QWidget*" ) == 0
|
948
|
-
&& Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QWidget") ) )
|
1009
|
+
if ((qstrcmp(meth.smoke->types[meth.smoke->argumentList[meth.smoke->methods[meth.smoke->ambiguousMethodList[i]].args]].name, "QObject*" ) == 0
|
1010
|
+
&& Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QObject")
|
1011
|
+
&& !Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QWidget") )
|
1012
|
+
|| (qstrcmp(meth.smoke->types[meth.smoke->argumentList[meth.smoke->methods[meth.smoke->ambiguousMethodList[i]].args]].name, "QWidget*" ) == 0
|
1013
|
+
&& Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QWidget") ) )
|
949
1014
|
{
|
950
1015
|
_current_method.smoke = meth.smoke;
|
951
1016
|
_current_method.index = meth.smoke->ambiguousMethodList[i];
|
@@ -975,13 +1040,11 @@ qsignalmapper_set_mapping(int argc, VALUE * argv, VALUE self)
|
|
975
1040
|
Smoke::Index i = meth.smoke->methodMaps[meth.index].method;
|
976
1041
|
i = -i; // turn into ambiguousMethodList index
|
977
1042
|
while (meth.smoke->ambiguousMethodList[i] != 0) {
|
978
|
-
if (
|
979
|
-
|
980
|
-
|
981
|
-
|
982
|
-
|
983
|
-
"QWidget*" ) == 0
|
984
|
-
&& Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QWidget") ) )
|
1043
|
+
if ((qstrcmp(meth.smoke->types[meth.smoke->argumentList[meth.smoke->methods[meth.smoke->ambiguousMethodList[i]].args + 1]].name, "QObject*" ) == 0
|
1044
|
+
&& Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QObject")
|
1045
|
+
&& !Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QWidget") )
|
1046
|
+
|| (qstrcmp(meth.smoke->types[meth.smoke->argumentList[meth.smoke->methods[meth.smoke->ambiguousMethodList[i]].args + 1]].name, "QWidget*" ) == 0
|
1047
|
+
&& Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QWidget") ) )
|
985
1048
|
{
|
986
1049
|
_current_method.smoke = meth.smoke;
|
987
1050
|
_current_method.index = meth.smoke->ambiguousMethodList[i];
|
@@ -1027,7 +1090,7 @@ qvariant_value(VALUE /*self*/, VALUE variant_value_klass, VALUE variant_value)
|
|
1027
1090
|
VALUE result = Qnil;
|
1028
1091
|
smokeruby_object * vo = 0;
|
1029
1092
|
|
1030
|
-
|
1093
|
+
smokeruby_object *o = value_obj_info(variant_value);
|
1031
1094
|
if (o == 0 || o->ptr == 0) {
|
1032
1095
|
return Qnil;
|
1033
1096
|
}
|
@@ -1057,7 +1120,7 @@ qvariant_value(VALUE /*self*/, VALUE variant_value_klass, VALUE variant_value)
|
|
1057
1120
|
}
|
1058
1121
|
|
1059
1122
|
const char * classname = rb_class2name(variant_value_klass);
|
1060
|
-
|
1123
|
+
Smoke::ModuleIndex * value_class_id = classcache.value(classname);
|
1061
1124
|
if (value_class_id == 0) {
|
1062
1125
|
return Qnil;
|
1063
1126
|
}
|
@@ -1153,8 +1216,7 @@ qvariant_from_value(int argc, VALUE * argv, VALUE self)
|
|
1153
1216
|
Smoke::Index i = meth.smoke->methodMaps[meth.index].method;
|
1154
1217
|
i = -i; // turn into ambiguousMethodList index
|
1155
1218
|
while (meth.smoke->ambiguousMethodList[i] != 0) {
|
1156
|
-
if (
|
1157
|
-
typeName ) == 0 )
|
1219
|
+
if (qstrcmp(meth.smoke->types[meth.smoke->argumentList[meth.smoke->methods[meth.smoke->ambiguousMethodList[i]].args]].name, typeName ) == 0 )
|
1158
1220
|
{
|
1159
1221
|
_current_method.smoke = meth.smoke;
|
1160
1222
|
_current_method.index = meth.smoke->ambiguousMethodList[i];
|
@@ -1172,7 +1234,7 @@ qvariant_from_value(int argc, VALUE * argv, VALUE self)
|
|
1172
1234
|
QVariant * v = 0;
|
1173
1235
|
|
1174
1236
|
const char * classname = rb_obj_classname(argv[0]);
|
1175
|
-
|
1237
|
+
smokeruby_object *o = value_obj_info(argv[0]);
|
1176
1238
|
int type = 0;
|
1177
1239
|
|
1178
1240
|
if (qstrcmp(classname, "Qt::Enum") == 0) {
|
@@ -1186,7 +1248,7 @@ qvariant_from_value(int argc, VALUE * argv, VALUE self)
|
|
1186
1248
|
return result;
|
1187
1249
|
} else {
|
1188
1250
|
VALUE lasterr = rb_gv_get("$!");
|
1189
|
-
VALUE klass =
|
1251
|
+
VALUE klass = rb_class_name(CLASS_OF(lasterr));
|
1190
1252
|
if (qstrcmp(StringValuePtr(klass), "ArgumentError") == 0) {
|
1191
1253
|
// ArgumentError - no suitable constructor found
|
1192
1254
|
// Create a QVariant that contains an rObject
|
@@ -1232,7 +1294,7 @@ static Smoke::Index new_qvariant_qmap = 0;
|
|
1232
1294
|
_current_method.index = new_qvariant_qmap;
|
1233
1295
|
QtRuby::MethodCall c(qtcore_Smoke, _current_method.index, self, argv, argc-1);
|
1234
1296
|
c.next();
|
1235
|
-
|
1297
|
+
return *(c.var());
|
1236
1298
|
} else if ( argc == 1
|
1237
1299
|
&& TYPE(argv[0]) == T_ARRAY
|
1238
1300
|
&& RARRAY_LEN(argv[0]) > 0
|
@@ -1250,7 +1312,7 @@ static Smoke::Index new_qvariant_qmap = 0;
|
|
1250
1312
|
|
1251
1313
|
static VALUE module_method_missing(int argc, VALUE * argv, VALUE klass)
|
1252
1314
|
{
|
1253
|
-
|
1315
|
+
return class_method_missing(argc, argv, klass);
|
1254
1316
|
}
|
1255
1317
|
|
1256
1318
|
/*
|
@@ -1288,7 +1350,6 @@ initialize_qt(int argc, VALUE * argv, VALUE self)
|
|
1288
1350
|
if (rb_block_given_p()) {
|
1289
1351
|
rb_funcall(qt_internal_module, rb_intern("run_initializer_block"), 2, self, rb_block_proc());
|
1290
1352
|
}
|
1291
|
-
|
1292
1353
|
return self;
|
1293
1354
|
}
|
1294
1355
|
|
@@ -1335,9 +1396,9 @@ initialize_qt(int argc, VALUE * argv, VALUE self)
|
|
1335
1396
|
Data_Get_Struct(temp_obj, smokeruby_object, p);
|
1336
1397
|
|
1337
1398
|
smokeruby_object * o = alloc_smokeruby_object( true,
|
1338
|
-
|
1339
|
-
|
1340
|
-
|
1399
|
+
p->smoke,
|
1400
|
+
p->classId,
|
1401
|
+
p->ptr );
|
1341
1402
|
p->ptr = 0;
|
1342
1403
|
p->allocated = false;
|
1343
1404
|
|
@@ -1352,7 +1413,7 @@ initialize_qt(int argc, VALUE * argv, VALUE self)
|
|
1352
1413
|
VALUE
|
1353
1414
|
new_qt(int argc, VALUE * argv, VALUE klass)
|
1354
1415
|
{
|
1355
|
-
|
1416
|
+
VALUE * temp_stack = ALLOCA_N(VALUE, argc + 1);
|
1356
1417
|
temp_stack[0] = rb_obj_alloc(klass);
|
1357
1418
|
|
1358
1419
|
for (int count = 0; count < argc; count++) {
|
@@ -1387,7 +1448,7 @@ qt_signal(int argc, VALUE * argv, VALUE self)
|
|
1387
1448
|
{
|
1388
1449
|
smokeruby_object *o = value_obj_info(self);
|
1389
1450
|
QObject *qobj = (QObject*)o->smoke->cast(o->ptr, o->classId, o->smoke->idClass("QObject").index);
|
1390
|
-
|
1451
|
+
if (qobj->signalsBlocked()) {
|
1391
1452
|
return Qfalse;
|
1392
1453
|
}
|
1393
1454
|
|
@@ -1406,9 +1467,9 @@ qt_signal(int argc, VALUE * argv, VALUE self)
|
|
1406
1467
|
return Qnil;
|
1407
1468
|
}
|
1408
1469
|
|
1409
|
-
|
1470
|
+
int i = -1;
|
1410
1471
|
const QMetaObject * m = (QMetaObject*) ometa->ptr;
|
1411
|
-
|
1472
|
+
for (i = m->methodCount() - 1; i > -1; i--) {
|
1412
1473
|
if (m->method(i).methodType() == QMetaMethod::Signal) {
|
1413
1474
|
QString name(m->method(i).signature());
|
1414
1475
|
static QRegExp * rx = 0;
|
@@ -1421,7 +1482,7 @@ static QRegExp * rx = 0;
|
|
1421
1482
|
break;
|
1422
1483
|
}
|
1423
1484
|
}
|
1424
|
-
|
1485
|
+
}
|
1425
1486
|
|
1426
1487
|
if (i == -1) {
|
1427
1488
|
return Qnil;
|
@@ -1474,7 +1535,7 @@ qt_metacall(int /*argc*/, VALUE * argv, VALUE self)
|
|
1474
1535
|
o->smoke->classes[o->classId].className );
|
1475
1536
|
}
|
1476
1537
|
|
1477
|
-
|
1538
|
+
if (_c != QMetaObject::InvokeMetaMethod) {
|
1478
1539
|
return argv[1];
|
1479
1540
|
}
|
1480
1541
|
|
@@ -1501,7 +1562,7 @@ qt_metacall(int /*argc*/, VALUE * argv, VALUE self)
|
|
1501
1562
|
QList<MocArgument*> mocArgs = get_moc_arguments(o->smoke, method.typeName(), method.parameterTypes());
|
1502
1563
|
|
1503
1564
|
QString name(method.signature());
|
1504
|
-
static QRegExp * rx = 0;
|
1565
|
+
static QRegExp * rx = 0;
|
1505
1566
|
if (rx == 0) {
|
1506
1567
|
rx = new QRegExp("\\(.*");
|
1507
1568
|
}
|
@@ -1555,38 +1616,38 @@ qtimer_single_shot(int argc, VALUE * argv, VALUE /*self*/)
|
|
1555
1616
|
static VALUE
|
1556
1617
|
getMethStat(VALUE /*self*/)
|
1557
1618
|
{
|
1558
|
-
|
1559
|
-
|
1560
|
-
|
1561
|
-
|
1619
|
+
VALUE result_list = rb_ary_new();
|
1620
|
+
rb_ary_push(result_list, INT2NUM((int)methcache.size()));
|
1621
|
+
rb_ary_push(result_list, INT2NUM((int)methcache.count()));
|
1622
|
+
return result_list;
|
1562
1623
|
}
|
1563
1624
|
|
1564
1625
|
static VALUE
|
1565
1626
|
getClassStat(VALUE /*self*/)
|
1566
1627
|
{
|
1567
|
-
|
1568
|
-
|
1569
|
-
|
1570
|
-
|
1628
|
+
VALUE result_list = rb_ary_new();
|
1629
|
+
rb_ary_push(result_list, INT2NUM((int)classcache.size()));
|
1630
|
+
rb_ary_push(result_list, INT2NUM((int)classcache.count()));
|
1631
|
+
return result_list;
|
1571
1632
|
}
|
1572
1633
|
|
1573
1634
|
static VALUE
|
1574
1635
|
getIsa(VALUE /*self*/, VALUE classId)
|
1575
1636
|
{
|
1576
|
-
|
1637
|
+
VALUE parents_list = rb_ary_new();
|
1577
1638
|
|
1578
|
-
|
1579
|
-
|
1639
|
+
int id = NUM2INT(rb_funcall(classId, rb_intern("index"), 0));
|
1640
|
+
Smoke* smoke = smokeList[NUM2INT(rb_funcall(classId, rb_intern("smoke"), 0))];
|
1580
1641
|
|
1581
|
-
|
1642
|
+
Smoke::Index *parents =
|
1582
1643
|
smoke->inheritanceList +
|
1583
1644
|
smoke->classes[id].parents;
|
1584
1645
|
|
1585
|
-
|
1646
|
+
while(*parents) {
|
1586
1647
|
//logger("\tparent: %s", qtcore_Smoke->classes[*parents].className);
|
1587
1648
|
rb_ary_push(parents_list, rb_str_new2(smoke->classes[*parents++].className));
|
1588
|
-
|
1589
|
-
|
1649
|
+
}
|
1650
|
+
return parents_list;
|
1590
1651
|
}
|
1591
1652
|
|
1592
1653
|
// Return the class name of a QObject. Note that the name will be in the
|
@@ -1594,8 +1655,8 @@ getIsa(VALUE /*self*/, VALUE classId)
|
|
1594
1655
|
static VALUE
|
1595
1656
|
class_name(VALUE self)
|
1596
1657
|
{
|
1597
|
-
|
1598
|
-
|
1658
|
+
VALUE klass = rb_funcall(self, rb_intern("class"), 0);
|
1659
|
+
return rb_funcall(klass, rb_intern("name"), 0);
|
1599
1660
|
}
|
1600
1661
|
|
1601
1662
|
// Allow classnames in both 'Qt::Widget' and 'QWidget' formats to be
|
@@ -1620,37 +1681,37 @@ inherits_qobject(int argc, VALUE * argv, VALUE /*self*/)
|
|
1620
1681
|
/* Adapted from the internal function qt_qFindChildren() in qobject.cpp */
|
1621
1682
|
static void
|
1622
1683
|
rb_qFindChildren_helper(VALUE parent, const QString &name, VALUE re,
|
1623
|
-
|
1684
|
+
const QMetaObject &mo, VALUE list)
|
1624
1685
|
{
|
1625
|
-
|
1626
|
-
|
1686
|
+
if (parent == Qnil || list == Qnil)
|
1687
|
+
return;
|
1627
1688
|
VALUE children = rb_funcall(parent, rb_intern("children"), 0);
|
1628
|
-
|
1629
|
-
|
1630
|
-
|
1689
|
+
VALUE rv = Qnil;
|
1690
|
+
for (int i = 0; i < RARRAY_LEN(children); ++i) {
|
1691
|
+
rv = RARRAY_PTR(children)[i];
|
1631
1692
|
smokeruby_object *o = value_obj_info(rv);
|
1632
1693
|
QObject * obj = (QObject *) o->smoke->cast(o->ptr, o->classId, o->smoke->idClass("QObject").index);
|
1633
1694
|
|
1634
1695
|
// The original code had 'if (mo.cast(obj))' as a test, but it doesn't work here
|
1635
|
-
|
1636
|
-
|
1696
|
+
if (obj->qt_metacast(mo.className()) != 0) {
|
1697
|
+
if (re != Qnil) {
|
1637
1698
|
VALUE re_test = rb_funcall(re, rb_intern("=~"), 1, rb_funcall(rv, rb_intern("objectName"), 0));
|
1638
1699
|
if (re_test != Qnil && re_test != Qfalse) {
|
1639
1700
|
rb_ary_push(list, rv);
|
1640
1701
|
}
|
1641
|
-
|
1642
|
-
|
1702
|
+
} else {
|
1703
|
+
if (name.isNull() || obj->objectName() == name) {
|
1643
1704
|
rb_ary_push(list, rv);
|
1644
1705
|
}
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1706
|
+
}
|
1707
|
+
}
|
1708
|
+
rb_qFindChildren_helper(rv, name, re, mo, list);
|
1709
|
+
}
|
1649
1710
|
return;
|
1650
1711
|
}
|
1651
1712
|
|
1652
1713
|
/* Should mimic Qt4's QObject::findChildren method with this syntax:
|
1653
|
-
|
1714
|
+
obj.findChildren(Qt::Widget, "Optional Widget Name")
|
1654
1715
|
*/
|
1655
1716
|
static VALUE
|
1656
1717
|
find_qobject_children(int argc, VALUE *argv, VALUE self)
|
@@ -1681,24 +1742,24 @@ find_qobject_children(int argc, VALUE *argv, VALUE self)
|
|
1681
1742
|
static VALUE
|
1682
1743
|
rb_qFindChild_helper(VALUE parent, const QString &name, const QMetaObject &mo)
|
1683
1744
|
{
|
1684
|
-
|
1685
|
-
|
1745
|
+
if (parent == Qnil)
|
1746
|
+
return Qnil;
|
1686
1747
|
VALUE children = rb_funcall(parent, rb_intern("children"), 0);
|
1687
|
-
|
1748
|
+
VALUE rv;
|
1688
1749
|
int i;
|
1689
|
-
|
1690
|
-
|
1750
|
+
for (i = 0; i < RARRAY_LEN(children); ++i) {
|
1751
|
+
rv = RARRAY_PTR(children)[i];
|
1691
1752
|
smokeruby_object *o = value_obj_info(rv);
|
1692
1753
|
QObject * obj = (QObject *) o->smoke->cast(o->ptr, o->classId, o->smoke->idClass("QObject").index);
|
1693
|
-
|
1694
|
-
|
1695
|
-
|
1696
|
-
|
1697
|
-
|
1698
|
-
|
1699
|
-
|
1700
|
-
|
1701
|
-
|
1754
|
+
if (obj->qt_metacast(mo.className()) != 0 && (name.isNull() || obj->objectName() == name))
|
1755
|
+
return rv;
|
1756
|
+
}
|
1757
|
+
for (i = 0; i < RARRAY_LEN(children); ++i) {
|
1758
|
+
rv = rb_qFindChild_helper(RARRAY_PTR(children)[i], name, mo);
|
1759
|
+
if (rv != Qnil)
|
1760
|
+
return rv;
|
1761
|
+
}
|
1762
|
+
return Qnil;
|
1702
1763
|
}
|
1703
1764
|
|
1704
1765
|
static VALUE
|
@@ -1721,50 +1782,50 @@ find_qobject_child(int argc, VALUE *argv, VALUE self)
|
|
1721
1782
|
static VALUE
|
1722
1783
|
setDebug(VALUE self, VALUE on_value)
|
1723
1784
|
{
|
1724
|
-
|
1725
|
-
|
1726
|
-
|
1785
|
+
int on = NUM2INT(on_value);
|
1786
|
+
do_debug = on;
|
1787
|
+
return self;
|
1727
1788
|
}
|
1728
1789
|
|
1729
1790
|
static VALUE
|
1730
1791
|
debugging(VALUE /*self*/)
|
1731
1792
|
{
|
1732
|
-
|
1793
|
+
return INT2NUM(do_debug);
|
1733
1794
|
}
|
1734
1795
|
|
1735
1796
|
static VALUE
|
1736
1797
|
get_arg_type_name(VALUE /*self*/, VALUE method_value, VALUE idx_value)
|
1737
1798
|
{
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
1799
|
+
int method = NUM2INT(rb_funcall(method_value, rb_intern("index"), 0));
|
1800
|
+
int smokeIndex = NUM2INT(rb_funcall(method_value, rb_intern("smoke"), 0));
|
1801
|
+
Smoke * smoke = smokeList[smokeIndex];
|
1802
|
+
int idx = NUM2INT(idx_value);
|
1803
|
+
const Smoke::Method &m = smoke->methods[method];
|
1804
|
+
Smoke::Index *args = smoke->argumentList + m.args;
|
1805
|
+
return rb_str_new2((char*)smoke->types[args[idx]].name);
|
1745
1806
|
}
|
1746
1807
|
|
1747
1808
|
static VALUE
|
1748
1809
|
classIsa(VALUE /*self*/, VALUE className_value, VALUE base_value)
|
1749
1810
|
{
|
1750
|
-
|
1751
|
-
|
1752
|
-
|
1811
|
+
char *className = StringValuePtr(className_value);
|
1812
|
+
char *base = StringValuePtr(base_value);
|
1813
|
+
return Smoke::isDerivedFrom(className, base) ? Qtrue : Qfalse;
|
1753
1814
|
}
|
1754
1815
|
|
1755
1816
|
static VALUE
|
1756
1817
|
isEnum(VALUE /*self*/, VALUE enumName_value)
|
1757
1818
|
{
|
1758
|
-
|
1759
|
-
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1763
|
-
|
1764
|
-
|
1765
|
-
|
1766
|
-
|
1767
|
-
|
1819
|
+
char *enumName = StringValuePtr(enumName_value);
|
1820
|
+
Smoke::Index typeId = 0;
|
1821
|
+
Smoke* s = 0;
|
1822
|
+
for (int i = 0; i < smokeList.count(); i++) {
|
1823
|
+
typeId = smokeList[i]->idType(enumName);
|
1824
|
+
if (typeId > 0) {
|
1825
|
+
s = smokeList[i];
|
1826
|
+
break;
|
1827
|
+
}
|
1828
|
+
}
|
1768
1829
|
return typeId > 0
|
1769
1830
|
&& ( (s->types[typeId].flags & Smoke::tf_elem) == Smoke::t_enum
|
1770
1831
|
|| (s->types[typeId].flags & Smoke::tf_elem) == Smoke::t_ulong
|
@@ -1776,44 +1837,44 @@ isEnum(VALUE /*self*/, VALUE enumName_value)
|
|
1776
1837
|
static VALUE
|
1777
1838
|
insert_pclassid(VALUE self, VALUE p_value, VALUE mi_value)
|
1778
1839
|
{
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1782
|
-
|
1783
|
-
|
1784
|
-
|
1785
|
-
|
1840
|
+
char *p = StringValuePtr(p_value);
|
1841
|
+
int ix = NUM2INT(rb_funcall(mi_value, rb_intern("index"), 0));
|
1842
|
+
int smokeidx = NUM2INT(rb_funcall(mi_value, rb_intern("smoke"), 0));
|
1843
|
+
Smoke::ModuleIndex mi(smokeList[smokeidx], ix);
|
1844
|
+
classcache.insert(QByteArray(p), new Smoke::ModuleIndex(mi));
|
1845
|
+
IdToClassNameMap.insert(mi, new QByteArray(p));
|
1846
|
+
return self;
|
1786
1847
|
}
|
1787
1848
|
|
1788
1849
|
static VALUE
|
1789
1850
|
classid2name(VALUE /*self*/, VALUE mi_value)
|
1790
1851
|
{
|
1791
|
-
|
1792
|
-
|
1793
|
-
|
1794
|
-
|
1852
|
+
int ix = NUM2INT(rb_funcall(mi_value, rb_intern("index"), 0));
|
1853
|
+
int smokeidx = NUM2INT(rb_funcall(mi_value, rb_intern("smoke"), 0));
|
1854
|
+
Smoke::ModuleIndex mi(smokeList[smokeidx], ix);
|
1855
|
+
return rb_str_new2(IdToClassNameMap[mi]->constData());
|
1795
1856
|
}
|
1796
1857
|
|
1797
1858
|
static VALUE
|
1798
1859
|
find_pclassid(VALUE /*self*/, VALUE p_value)
|
1799
1860
|
{
|
1800
|
-
|
1801
|
-
|
1802
|
-
|
1861
|
+
if (NIL_P(p_value)) {
|
1862
|
+
return rb_funcall(moduleindex_class, rb_intern("new"), 2, 0, 0);
|
1863
|
+
}
|
1803
1864
|
|
1804
|
-
|
1805
|
-
|
1806
|
-
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1865
|
+
char *p = StringValuePtr(p_value);
|
1866
|
+
Smoke::ModuleIndex *r = classcache.value(QByteArray(p));
|
1867
|
+
if (r != 0) {
|
1868
|
+
return rb_funcall(moduleindex_class, rb_intern("new"), 2, INT2NUM(smokeList.indexOf(r->smoke)), INT2NUM(r->index));
|
1869
|
+
} else {
|
1870
|
+
return rb_funcall(moduleindex_class, rb_intern("new"), 2, Qnil, Qnil);
|
1871
|
+
}
|
1811
1872
|
}
|
1812
1873
|
|
1813
1874
|
static VALUE
|
1814
1875
|
get_value_type(VALUE /*self*/, VALUE ruby_value)
|
1815
1876
|
{
|
1816
|
-
|
1877
|
+
return rb_str_new2(value_to_type_flag(ruby_value));
|
1817
1878
|
}
|
1818
1879
|
|
1819
1880
|
static QMetaObject*
|
@@ -1874,12 +1935,12 @@ make_metaObject(VALUE /*self*/, VALUE obj, VALUE parentMeta, VALUE stringdata_va
|
|
1874
1935
|
|
1875
1936
|
printf(
|
1876
1937
|
" // content:\n"
|
1877
|
-
"
|
1878
|
-
"
|
1879
|
-
"
|
1880
|
-
"
|
1881
|
-
"
|
1882
|
-
"
|
1938
|
+
" %d, // revision\n"
|
1939
|
+
" %d, // classname\n"
|
1940
|
+
" %d, %d, // classinfo\n"
|
1941
|
+
" %d, %d, // methods\n"
|
1942
|
+
" %d, %d, // properties\n"
|
1943
|
+
" %d, %d, // enums/sets\n",
|
1883
1944
|
data[0], data[1], data[2], data[3],
|
1884
1945
|
data[4], data[5], data[6], data[7], data[8], data[9]);
|
1885
1946
|
|
@@ -1888,7 +1949,7 @@ make_metaObject(VALUE /*self*/, VALUE obj, VALUE parentMeta, VALUE stringdata_va
|
|
1888
1949
|
if (data[2] > 0) {
|
1889
1950
|
printf("\n // classinfo: key, value\n");
|
1890
1951
|
for (uint j = 0; j < data[2]; j++) {
|
1891
|
-
printf("
|
1952
|
+
printf(" %d, %d\n", data[s + (j * 2)], data[s + (j * 2) + 1]);
|
1892
1953
|
}
|
1893
1954
|
}
|
1894
1955
|
|
@@ -1907,7 +1968,7 @@ make_metaObject(VALUE /*self*/, VALUE obj, VALUE parentMeta, VALUE stringdata_va
|
|
1907
1968
|
slot_headings = false;
|
1908
1969
|
}
|
1909
1970
|
|
1910
|
-
printf("
|
1971
|
+
printf(" %d, %d, %d, %d, 0x%2.2x\n",
|
1911
1972
|
data[s + (j * 5)], data[s + (j * 5) + 1], data[s + (j * 5) + 2],
|
1912
1973
|
data[s + (j * 5) + 3], data[s + (j * 5) + 4]);
|
1913
1974
|
}
|
@@ -1915,24 +1976,24 @@ make_metaObject(VALUE /*self*/, VALUE obj, VALUE parentMeta, VALUE stringdata_va
|
|
1915
1976
|
s += (data[4] * 5);
|
1916
1977
|
for (uint j = 0; j < data[6]; j++) {
|
1917
1978
|
printf("\n // properties: name, type, flags\n");
|
1918
|
-
printf("
|
1979
|
+
printf(" %d, %d, 0x%8.8x\n",
|
1919
1980
|
data[s + (j * 3)], data[s + (j * 3) + 1], data[s + (j * 3) + 2]);
|
1920
1981
|
}
|
1921
1982
|
|
1922
1983
|
s += (data[6] * 3);
|
1923
1984
|
for (int i = s; i < count; i++) {
|
1924
|
-
printf("\n
|
1985
|
+
printf("\n %d // eod\n", data[i]);
|
1925
1986
|
}
|
1926
1987
|
|
1927
|
-
printf("\nqt_meta_stringdata:\n
|
1988
|
+
printf("\nqt_meta_stringdata:\n \"");
|
1928
1989
|
|
1929
|
-
|
1990
|
+
int strlength = 0;
|
1930
1991
|
for (int j = 0; j < RSTRING_LEN(stringdata_value); j++) {
|
1931
|
-
|
1992
|
+
strlength++;
|
1932
1993
|
if (meta->d.stringdata[j] == 0) {
|
1933
1994
|
printf("\\0");
|
1934
1995
|
if (strlength > 40) {
|
1935
|
-
printf("\"\n
|
1996
|
+
printf("\"\n \"");
|
1936
1997
|
strlength = 0;
|
1937
1998
|
}
|
1938
1999
|
} else {
|
@@ -1943,11 +2004,11 @@ make_metaObject(VALUE /*self*/, VALUE obj, VALUE parentMeta, VALUE stringdata_va
|
|
1943
2004
|
|
1944
2005
|
#endif
|
1945
2006
|
smokeruby_object * m = alloc_smokeruby_object( true,
|
1946
|
-
|
1947
|
-
|
1948
|
-
|
2007
|
+
qtcore_Smoke,
|
2008
|
+
qtcore_Smoke->idClass("QMetaObject").index,
|
2009
|
+
meta );
|
1949
2010
|
|
1950
|
-
|
2011
|
+
return Data_Wrap_Struct(qmetaobject_class, smokeruby_mark, smokeruby_free, m);
|
1951
2012
|
}
|
1952
2013
|
|
1953
2014
|
static VALUE
|
@@ -1971,10 +2032,10 @@ add_signal_methods(VALUE self, VALUE klass, VALUE signalNames)
|
|
1971
2032
|
static VALUE
|
1972
2033
|
dispose(VALUE self)
|
1973
2034
|
{
|
1974
|
-
|
1975
|
-
|
2035
|
+
smokeruby_object *o = value_obj_info(self);
|
2036
|
+
if (o == 0 || o->ptr == 0) { return Qnil; }
|
1976
2037
|
|
1977
|
-
|
2038
|
+
const char *className = o->smoke->classes[o->classId].className;
|
1978
2039
|
if(do_debug & qtdb_gc) printf("Deleting (%s*)%p\n", className, o->ptr);
|
1979
2040
|
|
1980
2041
|
unmapPointer(o, o->classId, 0);
|
@@ -2009,60 +2070,60 @@ is_disposed(VALUE self)
|
|
2009
2070
|
VALUE
|
2010
2071
|
isQObject(VALUE /*self*/, VALUE c)
|
2011
2072
|
{
|
2012
|
-
|
2073
|
+
return Smoke::isDerivedFrom(StringValuePtr(c), "QObject");
|
2013
2074
|
}
|
2014
2075
|
|
2015
2076
|
// Returns the Smoke classId of a ruby instance
|
2016
2077
|
static VALUE
|
2017
2078
|
idInstance(VALUE /*self*/, VALUE instance)
|
2018
2079
|
{
|
2019
|
-
|
2020
|
-
|
2021
|
-
|
2080
|
+
smokeruby_object *o = value_obj_info(instance);
|
2081
|
+
if(!o)
|
2082
|
+
return Qnil;
|
2022
2083
|
|
2023
|
-
|
2084
|
+
return rb_funcall(moduleindex_class, rb_intern("new"), 2, INT2NUM(smokeList.indexOf(o->smoke)), INT2NUM(o->classId));
|
2024
2085
|
}
|
2025
2086
|
|
2026
2087
|
static VALUE
|
2027
2088
|
findClass(VALUE /*self*/, VALUE name_value)
|
2028
2089
|
{
|
2029
|
-
|
2030
|
-
|
2031
|
-
|
2090
|
+
char *name = StringValuePtr(name_value);
|
2091
|
+
Smoke::ModuleIndex mi = Smoke::findClass(name);
|
2092
|
+
return rb_funcall(moduleindex_class, rb_intern("new"), 2, INT2NUM(smokeList.indexOf(mi.smoke)), INT2NUM(mi.index));
|
2032
2093
|
}
|
2033
2094
|
|
2034
2095
|
// static VALUE
|
2035
2096
|
// idMethodName(VALUE /*self*/, VALUE name_value)
|
2036
2097
|
// {
|
2037
|
-
//
|
2038
|
-
//
|
2098
|
+
// char *name = StringValuePtr(name_value);
|
2099
|
+
// return INT2NUM(qtcore_Smoke->idMethodName(name).index);
|
2039
2100
|
// }
|
2040
2101
|
//
|
2041
2102
|
// static VALUE
|
2042
2103
|
// idMethod(VALUE /*self*/, VALUE idclass_value, VALUE idmethodname_value)
|
2043
2104
|
// {
|
2044
|
-
//
|
2045
|
-
//
|
2046
|
-
//
|
2105
|
+
// int idclass = NUM2INT(idclass_value);
|
2106
|
+
// int idmethodname = NUM2INT(idmethodname_value);
|
2107
|
+
// return INT2NUM(qtcore_Smoke->idMethod(idclass, idmethodname).index);
|
2047
2108
|
// }
|
2048
2109
|
|
2049
2110
|
static VALUE
|
2050
2111
|
dumpCandidates(VALUE /*self*/, VALUE rmeths)
|
2051
2112
|
{
|
2052
|
-
|
2053
|
-
|
2113
|
+
VALUE errmsg = rb_str_new2("");
|
2114
|
+
if(rmeths != Qnil) {
|
2054
2115
|
int count = RARRAY_LEN(rmeths);
|
2055
|
-
|
2056
|
-
|
2057
|
-
|
2058
|
-
|
2059
|
-
|
2060
|
-
|
2061
|
-
|
2116
|
+
for(int i = 0; i < count; i++) {
|
2117
|
+
rb_str_catf(errmsg, "\t");
|
2118
|
+
int id = NUM2INT(rb_funcall(rb_ary_entry(rmeths, i), rb_intern("index"), 0));
|
2119
|
+
Smoke* smoke = smokeList[NUM2INT(rb_funcall(rb_ary_entry(rmeths, i), rb_intern("smoke"), 0))];
|
2120
|
+
const Smoke::Method &meth = smoke->methods[id];
|
2121
|
+
const char *tname = smoke->types[meth.ret].name;
|
2122
|
+
if(meth.flags & Smoke::mf_enum) {
|
2062
2123
|
rb_str_catf(errmsg, "enum ");
|
2063
2124
|
rb_str_catf(errmsg, "%s::%s", smoke->classes[meth.classId].className, smoke->methodNames[meth.name]);
|
2064
2125
|
rb_str_catf(errmsg, "\n");
|
2065
|
-
|
2126
|
+
} else {
|
2066
2127
|
if(meth.flags & Smoke::mf_static) rb_str_catf(errmsg, "static ");
|
2067
2128
|
rb_str_catf(errmsg, "%s ", (tname ? tname:"void"));
|
2068
2129
|
rb_str_catf(errmsg, "%s::%s(", smoke->classes[meth.classId].className, smoke->methodNames[meth.name]);
|
@@ -2074,10 +2135,10 @@ dumpCandidates(VALUE /*self*/, VALUE rmeths)
|
|
2074
2135
|
rb_str_catf(errmsg, ")");
|
2075
2136
|
if(meth.flags & Smoke::mf_const) rb_str_catf(errmsg, " const");
|
2076
2137
|
rb_str_catf(errmsg, "\n");
|
2077
|
-
|
2078
|
-
|
2079
|
-
|
2080
|
-
|
2138
|
+
}
|
2139
|
+
}
|
2140
|
+
}
|
2141
|
+
return errmsg;
|
2081
2142
|
}
|
2082
2143
|
|
2083
2144
|
static VALUE
|
@@ -2092,70 +2153,70 @@ isConstMethod(VALUE /*self*/, VALUE idx)
|
|
2092
2153
|
static VALUE
|
2093
2154
|
isObject(VALUE /*self*/, VALUE obj)
|
2094
2155
|
{
|
2095
|
-
|
2096
|
-
|
2097
|
-
|
2156
|
+
void * ptr = 0;
|
2157
|
+
ptr = value_to_ptr(obj);
|
2158
|
+
return (ptr > 0 ? Qtrue : Qfalse);
|
2098
2159
|
}
|
2099
2160
|
|
2100
2161
|
static VALUE
|
2101
2162
|
setCurrentMethod(VALUE self, VALUE meth_value)
|
2102
2163
|
{
|
2103
|
-
|
2104
|
-
|
2105
|
-
|
2106
|
-
|
2107
|
-
|
2108
|
-
|
2164
|
+
int smokeidx = NUM2INT(rb_funcall(meth_value, rb_intern("smoke"), 0));
|
2165
|
+
int meth = NUM2INT(rb_funcall(meth_value, rb_intern("index"), 0));
|
2166
|
+
// FIXME: damn, this is lame, and it doesn't handle ambiguous methods
|
2167
|
+
_current_method.smoke = smokeList[smokeidx]; //qtcore_Smoke->methodMaps[meth].method;
|
2168
|
+
_current_method.index = meth;
|
2169
|
+
return self;
|
2109
2170
|
}
|
2110
2171
|
|
2111
2172
|
static VALUE
|
2112
2173
|
getClassList(VALUE /*self*/)
|
2113
2174
|
{
|
2114
|
-
|
2175
|
+
VALUE class_list = rb_ary_new();
|
2115
2176
|
|
2116
|
-
|
2117
|
-
|
2118
|
-
|
2119
|
-
|
2177
|
+
for (int i = 1; i <= qtcore_Smoke->numClasses; i++) {
|
2178
|
+
if (qtcore_Smoke->classes[i].className && !qtcore_Smoke->classes[i].external)
|
2179
|
+
rb_ary_push(class_list, rb_str_new2(qtcore_Smoke->classes[i].className));
|
2180
|
+
}
|
2120
2181
|
|
2121
|
-
|
2122
|
-
|
2123
|
-
|
2124
|
-
|
2182
|
+
for (int i = 1; i <= qtgui_Smoke->numClasses; i++) {
|
2183
|
+
if (qtgui_Smoke->classes[i].className && !qtgui_Smoke->classes[i].external)
|
2184
|
+
rb_ary_push(class_list, rb_str_new2(qtgui_Smoke->classes[i].className));
|
2185
|
+
}
|
2125
2186
|
|
2126
|
-
|
2127
|
-
|
2128
|
-
|
2129
|
-
|
2187
|
+
for (int i = 1; i <= qtxml_Smoke->numClasses; i++) {
|
2188
|
+
if (qtxml_Smoke->classes[i].className && !qtxml_Smoke->classes[i].external)
|
2189
|
+
rb_ary_push(class_list, rb_str_new2(qtxml_Smoke->classes[i].className));
|
2190
|
+
}
|
2130
2191
|
|
2131
|
-
|
2132
|
-
|
2133
|
-
|
2134
|
-
|
2192
|
+
for (int i = 1; i <= qtsql_Smoke->numClasses; i++) {
|
2193
|
+
if (qtsql_Smoke->classes[i].className && !qtsql_Smoke->classes[i].external)
|
2194
|
+
rb_ary_push(class_list, rb_str_new2(qtsql_Smoke->classes[i].className));
|
2195
|
+
}
|
2135
2196
|
|
2136
|
-
|
2137
|
-
|
2138
|
-
|
2139
|
-
|
2197
|
+
for (int i = 1; i <= qtopengl_Smoke->numClasses; i++) {
|
2198
|
+
if (qtopengl_Smoke->classes[i].className && !qtopengl_Smoke->classes[i].external)
|
2199
|
+
rb_ary_push(class_list, rb_str_new2(qtopengl_Smoke->classes[i].className));
|
2200
|
+
}
|
2140
2201
|
|
2141
|
-
|
2142
|
-
|
2143
|
-
|
2144
|
-
|
2202
|
+
for (int i = 1; i <= qtnetwork_Smoke->numClasses; i++) {
|
2203
|
+
if (qtnetwork_Smoke->classes[i].className && !qtnetwork_Smoke->classes[i].external)
|
2204
|
+
rb_ary_push(class_list, rb_str_new2(qtnetwork_Smoke->classes[i].className));
|
2205
|
+
}
|
2145
2206
|
|
2146
|
-
|
2147
|
-
|
2148
|
-
|
2149
|
-
|
2207
|
+
for (int i = 1; i <= qtsvg_Smoke->numClasses; i++) {
|
2208
|
+
if (qtsvg_Smoke->classes[i].className && !qtsvg_Smoke->classes[i].external)
|
2209
|
+
rb_ary_push(class_list, rb_str_new2(qtsvg_Smoke->classes[i].className));
|
2210
|
+
}
|
2150
2211
|
|
2151
2212
|
#ifdef QT_QTDBUS
|
2152
|
-
|
2153
|
-
|
2154
|
-
|
2155
|
-
|
2213
|
+
for (int i = 1; i <= qtdbus_Smoke->numClasses; i++) {
|
2214
|
+
if (qtdbus_Smoke->classes[i].className && !qtdbus_Smoke->classes[i].external)
|
2215
|
+
rb_ary_push(class_list, rb_str_new2(qtdbus_Smoke->classes[i].className));
|
2216
|
+
}
|
2156
2217
|
#endif
|
2157
2218
|
|
2158
|
-
|
2219
|
+
return class_list;
|
2159
2220
|
}
|
2160
2221
|
|
2161
2222
|
static VALUE
|
@@ -2215,6 +2276,13 @@ create_qobject_class(VALUE /*self*/, VALUE package_value, VALUE module_value)
|
|
2215
2276
|
rb_define_method(qlistmodel_class, "remove_rows", (VALUE (*) (...)) qabstract_item_model_removerows, -1);
|
2216
2277
|
rb_define_method(qlistmodel_class, "removeColumns", (VALUE (*) (...)) qabstract_item_model_removecolumns, -1);
|
2217
2278
|
rb_define_method(qlistmodel_class, "remove_columns", (VALUE (*) (...)) qabstract_item_model_removecolumns, -1);
|
2279
|
+
#if QT_VERSION >= 0x040600
|
2280
|
+
// make it work with qml
|
2281
|
+
rb_define_method(qlistmodel_class, "roleNames", (VALUE (*) (...)) qabstractitemmodel_rolenames, -1);
|
2282
|
+
rb_define_method(qlistmodel_class, "role_names", (VALUE (*) (...)) qabstractitemmodel_rolenames, -1);
|
2283
|
+
rb_define_method(qlistmodel_class, "setRoleNames", (VALUE (*) (...)) qabstractitemmodel_setrolenames, -1);
|
2284
|
+
rb_define_method(qlistmodel_class, "set_role_names", (VALUE (*) (...)) qabstractitemmodel_setrolenames, -1);
|
2285
|
+
#endif
|
2218
2286
|
}
|
2219
2287
|
else if (packageName == "Qt::AbstractItemModel") {
|
2220
2288
|
rb_define_method(klass, "createIndex", (VALUE (*) (...)) qabstractitemmodel_createindex, -1);
|
@@ -2260,8 +2328,8 @@ create_qt_class(VALUE /*self*/, VALUE package_value, VALUE module_value)
|
|
2260
2328
|
QString packageName(package);
|
2261
2329
|
|
2262
2330
|
/*
|
2263
|
-
|
2264
|
-
|
2331
|
+
rb_define_singleton_method(module_value, "method_missing", (VALUE (*) (...)) module_method_missing, -1);
|
2332
|
+
rb_define_singleton_method(module_value, "const_missing", (VALUE (*) (...)) module_method_missing, -1);
|
2265
2333
|
*/
|
2266
2334
|
foreach(QString s, packageName.mid(strlen(moduleName) + 2).split("::")) {
|
2267
2335
|
klass = rb_define_class_under(klass, (const char*) s.toLatin1(), qt_base_class);
|
@@ -2273,12 +2341,12 @@ create_qt_class(VALUE /*self*/, VALUE package_value, VALUE module_value)
|
|
2273
2341
|
qvariant_class = klass;
|
2274
2342
|
rb_define_singleton_method(qvariant_class, "fromValue", (VALUE (*) (...)) qvariant_from_value, -1);
|
2275
2343
|
rb_define_singleton_method(qvariant_class, "from_value", (VALUE (*) (...)) qvariant_from_value, -1);
|
2276
|
-
|
2344
|
+
rb_define_singleton_method(qvariant_class, "new", (VALUE (*) (...)) new_qvariant, -1);
|
2277
2345
|
} else if (packageName == "Qt::ByteArray") {
|
2278
2346
|
rb_define_method(klass, "+", (VALUE (*) (...)) qbytearray_append, 1);
|
2279
|
-
|
2280
|
-
|
2281
|
-
|
2347
|
+
rb_define_method(klass, "data", (VALUE (*) (...)) qbytearray_data, 0);
|
2348
|
+
rb_define_method(klass, "constData", (VALUE (*) (...)) qbytearray_data, 0);
|
2349
|
+
rb_define_method(klass, "const_data", (VALUE (*) (...)) qbytearray_data, 0);
|
2282
2350
|
} else if (packageName == "Qt::Char") {
|
2283
2351
|
rb_define_method(klass, "to_s", (VALUE (*) (...)) qchar_to_s, 0);
|
2284
2352
|
} else if (packageName == "Qt::Image") {
|
@@ -2326,19 +2394,19 @@ create_qt_class(VALUE /*self*/, VALUE package_value, VALUE module_value)
|
|
2326
2394
|
static VALUE
|
2327
2395
|
version(VALUE /*self*/)
|
2328
2396
|
{
|
2329
|
-
|
2397
|
+
return rb_str_new2(QT_VERSION_STR);
|
2330
2398
|
}
|
2331
2399
|
|
2332
2400
|
static VALUE
|
2333
2401
|
qtruby_version(VALUE /*self*/)
|
2334
2402
|
{
|
2335
|
-
|
2403
|
+
return rb_str_new2(QTRUBY_VERSION);
|
2336
2404
|
}
|
2337
2405
|
|
2338
2406
|
static VALUE
|
2339
2407
|
set_application_terminated(VALUE /*self*/, VALUE yn)
|
2340
2408
|
{
|
2341
|
-
|
2409
|
+
application_terminated = (yn == Qtrue ? true : false);
|
2342
2410
|
return Qnil;
|
2343
2411
|
}
|
2344
2412
|
|
@@ -2350,35 +2418,35 @@ set_qtruby_embedded_wrapped(VALUE /*self*/, VALUE yn)
|
|
2350
2418
|
}
|
2351
2419
|
|
2352
2420
|
#define INIT_BINDING(module) \
|
2353
|
-
|
2354
|
-
|
2355
|
-
|
2421
|
+
static QtRuby::Binding module##_binding = QtRuby::Binding(module##_Smoke); \
|
2422
|
+
QtRubyModule module = { "QtRuby_" #module, resolve_classname_qt, 0, &module##_binding }; \
|
2423
|
+
qtruby_modules[module##_Smoke] = module; \
|
2356
2424
|
smokeList << module##_Smoke;
|
2357
2425
|
|
2358
2426
|
extern Q_DECL_EXPORT void
|
2359
2427
|
Init_qtruby4()
|
2360
2428
|
{
|
2361
|
-
|
2362
|
-
|
2363
|
-
|
2364
|
-
|
2365
|
-
|
2366
|
-
|
2367
|
-
|
2429
|
+
init_qtcore_Smoke();
|
2430
|
+
init_qtgui_Smoke();
|
2431
|
+
init_qtxml_Smoke();
|
2432
|
+
init_qtsql_Smoke();
|
2433
|
+
init_qtopengl_Smoke();
|
2434
|
+
init_qtnetwork_Smoke();
|
2435
|
+
init_qtsvg_Smoke();
|
2368
2436
|
#ifdef QT_QTDBUS
|
2369
|
-
|
2437
|
+
init_qtdbus_Smoke();
|
2370
2438
|
#endif
|
2371
|
-
|
2372
|
-
|
2373
|
-
|
2374
|
-
|
2375
|
-
|
2376
|
-
|
2377
|
-
|
2378
|
-
|
2379
|
-
|
2439
|
+
install_handlers(Qt_handlers);
|
2440
|
+
|
2441
|
+
INIT_BINDING(qtcore)
|
2442
|
+
INIT_BINDING(qtgui)
|
2443
|
+
INIT_BINDING(qtxml)
|
2444
|
+
INIT_BINDING(qtsql)
|
2445
|
+
INIT_BINDING(qtopengl)
|
2446
|
+
INIT_BINDING(qtnetwork)
|
2447
|
+
INIT_BINDING(qtsvg)
|
2380
2448
|
#ifdef QT_QTDBUS
|
2381
|
-
|
2449
|
+
INIT_BINDING(qtdbus)
|
2382
2450
|
#endif
|
2383
2451
|
|
2384
2452
|
if (qt_module == Qnil) {
|
@@ -2388,19 +2456,19 @@ Init_qtruby4()
|
|
2388
2456
|
moduleindex_class = rb_define_class_under(qt_internal_module, "ModuleIndex", rb_cObject);
|
2389
2457
|
}
|
2390
2458
|
|
2391
|
-
|
2392
|
-
|
2393
|
-
|
2394
|
-
|
2395
|
-
|
2459
|
+
rb_define_singleton_method(qt_base_class, "new", (VALUE (*) (...)) new_qt, -1);
|
2460
|
+
rb_define_method(qt_base_class, "initialize", (VALUE (*) (...)) initialize_qt, -1);
|
2461
|
+
rb_define_singleton_method(qt_base_class, "method_missing", (VALUE (*) (...)) class_method_missing, -1);
|
2462
|
+
rb_define_singleton_method(qt_module, "method_missing", (VALUE (*) (...)) module_method_missing, -1);
|
2463
|
+
rb_define_method(qt_base_class, "method_missing", (VALUE (*) (...)) method_missing, -1);
|
2396
2464
|
|
2397
|
-
|
2398
|
-
|
2399
|
-
|
2465
|
+
rb_define_singleton_method(qt_base_class, "const_missing", (VALUE (*) (...)) class_method_missing, -1);
|
2466
|
+
rb_define_singleton_method(qt_module, "const_missing", (VALUE (*) (...)) module_method_missing, -1);
|
2467
|
+
rb_define_method(qt_base_class, "const_missing", (VALUE (*) (...)) method_missing, -1);
|
2400
2468
|
|
2401
|
-
|
2402
|
-
|
2403
|
-
|
2469
|
+
rb_define_method(qt_base_class, "dispose", (VALUE (*) (...)) dispose, 0);
|
2470
|
+
rb_define_method(qt_base_class, "isDisposed", (VALUE (*) (...)) is_disposed, 0);
|
2471
|
+
rb_define_method(qt_base_class, "disposed?", (VALUE (*) (...)) is_disposed, 0);
|
2404
2472
|
|
2405
2473
|
rb_define_method(qt_base_class, "qVariantValue", (VALUE (*) (...)) qvariant_value, 2);
|
2406
2474
|
rb_define_method(qt_base_class, "qVariantFromValue", (VALUE (*) (...)) qvariant_from_value, -1);
|
@@ -2409,86 +2477,86 @@ Init_qtruby4()
|
|
2409
2477
|
rb_define_method(rb_cObject, "qFatal", (VALUE (*) (...)) qfatal, 1);
|
2410
2478
|
rb_define_method(rb_cObject, "qWarning", (VALUE (*) (...)) qwarning, 1);
|
2411
2479
|
|
2412
|
-
|
2413
|
-
|
2414
|
-
|
2415
|
-
|
2416
|
-
|
2417
|
-
|
2418
|
-
|
2419
|
-
|
2420
|
-
|
2421
|
-
|
2422
|
-
|
2423
|
-
|
2424
|
-
|
2425
|
-
|
2426
|
-
|
2427
|
-
|
2428
|
-
|
2429
|
-
|
2430
|
-
|
2431
|
-
|
2432
|
-
|
2433
|
-
//
|
2434
|
-
//
|
2435
|
-
|
2436
|
-
|
2437
|
-
|
2438
|
-
|
2439
|
-
|
2440
|
-
|
2441
|
-
|
2442
|
-
|
2443
|
-
|
2444
|
-
|
2445
|
-
|
2446
|
-
|
2447
|
-
|
2448
|
-
|
2449
|
-
|
2450
|
-
|
2480
|
+
rb_define_module_function(qt_internal_module, "getMethStat", (VALUE (*) (...)) getMethStat, 0);
|
2481
|
+
rb_define_module_function(qt_internal_module, "getClassStat", (VALUE (*) (...)) getClassStat, 0);
|
2482
|
+
rb_define_module_function(qt_internal_module, "getIsa", (VALUE (*) (...)) getIsa, 1);
|
2483
|
+
rb_define_module_function(qt_internal_module, "setDebug", (VALUE (*) (...)) setDebug, 1);
|
2484
|
+
rb_define_module_function(qt_internal_module, "debug", (VALUE (*) (...)) debugging, 0);
|
2485
|
+
rb_define_module_function(qt_internal_module, "get_arg_type_name", (VALUE (*) (...)) get_arg_type_name, 2);
|
2486
|
+
rb_define_module_function(qt_internal_module, "classIsa", (VALUE (*) (...)) classIsa, 2);
|
2487
|
+
rb_define_module_function(qt_internal_module, "isEnum", (VALUE (*) (...)) isEnum, 1);
|
2488
|
+
rb_define_module_function(qt_internal_module, "insert_pclassid", (VALUE (*) (...)) insert_pclassid, 2);
|
2489
|
+
rb_define_module_function(qt_internal_module, "classid2name", (VALUE (*) (...)) classid2name, 1);
|
2490
|
+
rb_define_module_function(qt_internal_module, "find_pclassid", (VALUE (*) (...)) find_pclassid, 1);
|
2491
|
+
rb_define_module_function(qt_internal_module, "get_value_type", (VALUE (*) (...)) get_value_type, 1);
|
2492
|
+
|
2493
|
+
rb_define_module_function(qt_internal_module, "make_metaObject", (VALUE (*) (...)) make_metaObject, 4);
|
2494
|
+
rb_define_module_function(qt_internal_module, "addMetaObjectMethods", (VALUE (*) (...)) add_metaobject_methods, 1);
|
2495
|
+
rb_define_module_function(qt_internal_module, "addSignalMethods", (VALUE (*) (...)) add_signal_methods, 2);
|
2496
|
+
rb_define_module_function(qt_internal_module, "mapObject", (VALUE (*) (...)) mapObject, 1);
|
2497
|
+
|
2498
|
+
rb_define_module_function(qt_internal_module, "isQObject", (VALUE (*) (...)) isQObject, 1);
|
2499
|
+
rb_define_module_function(qt_internal_module, "idInstance", (VALUE (*) (...)) idInstance, 1);
|
2500
|
+
rb_define_module_function(qt_internal_module, "findClass", (VALUE (*) (...)) findClass, 1);
|
2501
|
+
// rb_define_module_function(qt_internal_module, "idMethodName", (VALUE (*) (...)) idMethodName, 1);
|
2502
|
+
// rb_define_module_function(qt_internal_module, "idMethod", (VALUE (*) (...)) idMethod, 2);
|
2503
|
+
rb_define_module_function(qt_internal_module, "findMethod", (VALUE (*) (...)) findMethod, 2);
|
2504
|
+
rb_define_module_function(qt_internal_module, "findAllMethods", (VALUE (*) (...)) findAllMethods, -1);
|
2505
|
+
rb_define_module_function(qt_internal_module, "findAllMethodNames", (VALUE (*) (...)) findAllMethodNames, 3);
|
2506
|
+
rb_define_module_function(qt_internal_module, "dumpCandidates", (VALUE (*) (...)) dumpCandidates, 1);
|
2507
|
+
rb_define_module_function(qt_internal_module, "isConstMethod", (VALUE (*) (...)) isConstMethod, 1);
|
2508
|
+
rb_define_module_function(qt_internal_module, "isObject", (VALUE (*) (...)) isObject, 1);
|
2509
|
+
rb_define_module_function(qt_internal_module, "setCurrentMethod", (VALUE (*) (...)) setCurrentMethod, 1);
|
2510
|
+
rb_define_module_function(qt_internal_module, "getClassList", (VALUE (*) (...)) getClassList, 0);
|
2511
|
+
rb_define_module_function(qt_internal_module, "create_qt_class", (VALUE (*) (...)) create_qt_class, 2);
|
2512
|
+
rb_define_module_function(qt_internal_module, "create_qobject_class", (VALUE (*) (...)) create_qobject_class, 2);
|
2513
|
+
rb_define_module_function(qt_internal_module, "cast_object_to", (VALUE (*) (...)) cast_object_to, 2);
|
2514
|
+
rb_define_module_function(qt_module, "dynamic_cast", (VALUE (*) (...)) cast_object_to, 2);
|
2515
|
+
rb_define_module_function(qt_internal_module, "kross2smoke", (VALUE (*) (...)) kross2smoke, 2);
|
2516
|
+
rb_define_module_function(qt_internal_module, "set_qtruby_embedded", (VALUE (*) (...)) set_qtruby_embedded_wrapped, 1);
|
2517
|
+
|
2518
|
+
rb_define_module_function(qt_internal_module, "application_terminated=", (VALUE (*) (...)) set_application_terminated, 1);
|
2451
2519
|
|
2452
2520
|
rb_define_module_function(qt_module, "version", (VALUE (*) (...)) version, 0);
|
2453
|
-
|
2454
|
-
|
2455
|
-
|
2456
|
-
|
2457
|
-
|
2458
|
-
|
2459
|
-
|
2460
|
-
|
2461
|
-
|
2462
|
-
|
2463
|
-
|
2464
|
-
|
2465
|
-
|
2466
|
-
|
2467
|
-
|
2468
|
-
|
2469
|
-
|
2470
|
-
|
2471
|
-
|
2472
|
-
|
2473
|
-
|
2474
|
-
|
2475
|
-
|
2476
|
-
|
2477
|
-
|
2478
|
-
|
2479
|
-
|
2480
|
-
|
2481
|
-
|
2482
|
-
|
2483
|
-
|
2484
|
-
|
2521
|
+
rb_define_module_function(qt_module, "qtruby_version", (VALUE (*) (...)) qtruby_version, 0);
|
2522
|
+
|
2523
|
+
rb_define_module_function(qt_module, "qRegisterResourceData", (VALUE (*) (...)) q_register_resource_data, 4);
|
2524
|
+
rb_define_module_function(qt_module, "qUnregisterResourceData", (VALUE (*) (...)) q_unregister_resource_data, 4);
|
2525
|
+
|
2526
|
+
// A problem has been found with QtRuby when it is run with Ruby 1.9.1
|
2527
|
+
// and GC.stess is true.
|
2528
|
+
// In the smokeruby_mark() function called during garbage collection,
|
2529
|
+
// any virtual methods which are called on the instances being checked
|
2530
|
+
// could have overriden by Ruby methods. So the Wt::Ruby runtime uses
|
2531
|
+
// 'respond_to()' to find out whether they have been overriden.
|
2532
|
+
// However, this involves calling 'rb_intern()' on the method name,
|
2533
|
+
// which means memory could be allocated, giving an error when running under
|
2534
|
+
// GC.stress mode. So workround it by pre-allocating any strings with
|
2535
|
+
// rb_intern() for all the C++ methods used in smokeruby_mark()
|
2536
|
+
rb_intern("children");
|
2537
|
+
rb_intern("childItems");
|
2538
|
+
rb_intern("childCount");
|
2539
|
+
rb_intern("child");
|
2540
|
+
rb_intern("hasChildren");
|
2541
|
+
rb_intern("parent");
|
2542
|
+
rb_intern("parentItem");
|
2543
|
+
rb_intern("item");
|
2544
|
+
rb_intern("items");
|
2545
|
+
rb_intern("rowCount");
|
2546
|
+
rb_intern("rowAt");
|
2547
|
+
rb_intern("columnCount");
|
2548
|
+
rb_intern("elementAt");
|
2549
|
+
rb_intern("columnAt");
|
2550
|
+
rb_intern("topLevelItem");
|
2551
|
+
rb_intern("itemAt");
|
2552
|
+
rb_intern("internalPointer");
|
2485
2553
|
|
2486
2554
|
rb_require("Qt/qtruby4.rb");
|
2487
2555
|
|
2488
2556
|
rObject_typeId = QMetaType::registerType("rObject", &delete_ruby_object, &create_ruby_object);
|
2489
2557
|
|
2490
|
-
|
2491
|
-
|
2558
|
+
// Do package initialization
|
2559
|
+
rb_funcall(qt_internal_module, rb_intern("init_all_classes"), 0);
|
2492
2560
|
}
|
2493
2561
|
|
2494
2562
|
}
|