qtbindings 4.6.3.4 → 4.8.3.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.
Files changed (75) hide show
  1. data/KNOWN_ISSUES.txt +19 -5
  2. data/README.txt +119 -93
  3. data/Rakefile +28 -27
  4. data/examples/desktop/systray/window.rb +43 -47
  5. data/examples/draganddrop/dropsite/dropsitewidget.rb +10 -9
  6. data/examples/mainwindows/mdi/mainwindow.rb +4 -4
  7. data/examples/network/broadcastsender/sender.rb +3 -1
  8. data/examples/qtscribble/scribble.rb +270 -0
  9. data/examples/ruboids/LICENSE.txt +58 -0
  10. data/examples/run_all.rb +1 -0
  11. data/examples/textedit/textedit.rb +150 -0
  12. data/examples/widgets/scribble/scribblearea.rb +19 -19
  13. data/ext/cmake/modules/BasicFindPackageVersion.cmake.in +30 -0
  14. data/ext/cmake/modules/FindLibraryWithDebug.cmake +113 -0
  15. data/ext/cmake/modules/FindPhonon.cmake +71 -0
  16. data/ext/cmake/modules/FindQImageBlitz.cmake +51 -0
  17. data/ext/cmake/modules/FindRuby.cmake +17 -17
  18. data/ext/cmake/modules/MacroOptionalFindPackage.cmake +6 -26
  19. data/ext/cmake/modules/MacroWriteBasicCMakeVersionFile.cmake +22 -0
  20. data/ext/cmake/modules/SmokeConfig.cmake.in +109 -0
  21. data/ext/generator/cmake/BasicFindPackageVersion.cmake.in +30 -0
  22. data/ext/generator/cmake/CMakeLists.txt +24 -0
  23. data/ext/generator/cmake/FindLibraryWithDebug.cmake +113 -0
  24. data/ext/generator/cmake/FindPhonon.cmake +71 -0
  25. data/ext/generator/cmake/FindQImageBlitz.cmake +51 -0
  26. data/ext/generator/cmake/FindQScintilla.cmake +57 -0
  27. data/ext/generator/cmake/FindQwt5.cmake +104 -0
  28. data/ext/generator/cmake/HandleImportedTargetsInCMakeRequiredLibraries.cmake +85 -0
  29. data/ext/generator/cmake/MacroLogFeature.cmake +146 -0
  30. data/ext/generator/cmake/MacroOptionalAddBindings.cmake +47 -0
  31. data/ext/generator/cmake/MacroOptionalFindPackage.cmake +28 -0
  32. data/ext/generator/cmake/MacroWriteBasicCMakeVersionFile.cmake +22 -0
  33. data/ext/generator/cmake/SmokeConfig.cmake.in +109 -0
  34. data/ext/generator/config.h +25 -0
  35. data/ext/generator/generatorpreprocessor.cpp +60 -41
  36. data/ext/generator/generators/dump/CMakeLists.txt +5 -0
  37. data/ext/generator/generators/smoke/CMakeLists.txt +5 -0
  38. data/ext/generator/generators/smoke/globals.h +3 -1
  39. data/ext/generator/generators/smoke/helpers.cpp +21 -2
  40. data/ext/generator/generators/smoke/writeSmokeDataFile.cpp +26 -1
  41. data/ext/generator/main.cpp +5 -1
  42. data/ext/generator/options.cpp +1 -0
  43. data/ext/generator/options.h +1 -0
  44. data/ext/generator/parser/CMakeLists.txt +10 -1
  45. data/ext/generator/parser/parser.cpp +6 -6
  46. data/ext/generator/parser/parser.h +2 -12
  47. data/ext/generator/parser/parsesession.cpp +1 -0
  48. data/ext/generator/parser/rpp/CMakeLists.txt +6 -0
  49. data/ext/generator/parser/rpp/chartools.cpp +3 -3
  50. data/ext/generator/parser/rpp/chartools.h +3 -1
  51. data/ext/generator/parser/rpp/pp-scanner.cpp +2 -1
  52. data/ext/generator/parser/rpp/tests/CMakeLists.txt +4 -0
  53. data/ext/generator/parser/tests/CMakeLists.txt +16 -0
  54. data/ext/generator/smoke.h +557 -0
  55. data/ext/generator/smokegen_string.h +43 -0
  56. data/ext/generator/type.cpp +15 -6
  57. data/ext/generator/type_compiler.cpp +2 -0
  58. data/ext/ruby/qtruby/src/qtruby.cpp +147 -143
  59. data/ext/ruby/qttest/qttesthandlers.cpp +1 -0
  60. data/ext/smoke/qtcore/QtGuess.txt +23 -25
  61. data/ext/smoke/qtcore/smokeconfig.xml +1 -0
  62. data/ext/smoke/qtdbus/smokeconfig.xml +2 -0
  63. data/ext/smoke/qtgui/smokeconfig.xml +14 -4
  64. data/ext/smoke/qthelp/smokeconfig.xml +1 -0
  65. data/ext/smoke/qtmultimedia/smokeconfig.xml +1 -0
  66. data/ext/smoke/qtnetwork/smokeconfig.xml +2 -0
  67. data/ext/smoke/qtopengl/smokeconfig.xml +1 -0
  68. data/ext/smoke/qtsql/smokeconfig.xml +1 -0
  69. data/ext/smoke/qtsvg/smokeconfig.xml +1 -0
  70. data/ext/smoke/qtwebkit/smokeconfig.xml +3 -0
  71. data/extconf.rb +37 -23
  72. data/lib/Qt/qtruby4.rb +4 -4
  73. data/lib/Qt4.rb +1 -1
  74. data/lib/qtbindings_version.rb +2 -2
  75. metadata +50 -40
@@ -0,0 +1,22 @@
1
+ # MACRO_WRITE_BASIC_CMAKE_VERSION_FILE( _filename _major _minor _patch)
2
+ # Writes a file for use as <package>ConfigVersion.cmake file to <_filename>.
3
+ # See the documentation of FIND_PACKAGE() for details on this.
4
+ # _filename is the output filename, it should be in the build tree.
5
+ # _major is the major version number of the project to be installed
6
+ # _minor is the minor version number of the project to be installed
7
+ # _patch is the patch version number of the project to be installed
8
+ #
9
+
10
+ # Copyright (c) 2008, Alexander Neundorf, <neundorf@kde.org>
11
+ #
12
+ # Redistribution and use is allowed according to the terms of the BSD license.
13
+ # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
14
+
15
+ get_filename_component(_currentListFileDir ${CMAKE_CURRENT_LIST_FILE} PATH)
16
+
17
+ function(MACRO_WRITE_BASIC_CMAKE_VERSION_FILE _filename _major _minor _patch)
18
+ set(PROJECT_VERSION_MAJOR ${_major})
19
+ set(PROJECT_VERSION_MINOR ${_minor})
20
+ set(PROJECT_VERSION_PATCH ${_patch})
21
+ configure_file(${_currentListFileDir}/BasicFindPackageVersion.cmake.in "${_filename}" @ONLY)
22
+ endfunction(MACRO_WRITE_BASIC_CMAKE_VERSION_FILE _major _minor _patch)
@@ -0,0 +1,109 @@
1
+ # Find smoke libraries.
2
+ #
3
+ # Use:
4
+ #
5
+ # find_package(Smoke [REQUIRED] COMPONENTS QtCore QtGui <other components>)
6
+ #
7
+ # Defines:
8
+ #
9
+ # SMOKE_INCLUDE_DIR Directory in which smoke.h is located
10
+ # SMOKE_CMAKE_MODULE_DIR Directory with additional cmake files used by kdebindings
11
+ # SMOKE_GEN_BIN The path of the smokegen executable
12
+ # SMOKE_GEN_SHARED Directory in which commonly used smokegen files reside
13
+ # SMOKE_API_BIN The path of the smokeapi executable
14
+ # SMOKE_GENERATOR_SMOKE_LIB Path of generator_smoke library
15
+ # SMOKE_GENERATOR_DUMP_LIB Path of generator_dump library
16
+ # SMOKE_<component>_INCLUDE_DIR Directory in which to find smoke/<component>_smoke.h
17
+ # SMOKE_<component>_LIBRARY Library for the smoke lib
18
+ #
19
+ # Copyright (c) 2010, Arno Rehn <arno@arnorehn.de>
20
+ # (c) 2010, Ian Monroe <ian@monroe.nu>
21
+ # Redistribution and use is allowed according to the terms of the BSD license.
22
+ # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
23
+
24
+ #####################
25
+ # utility functions #
26
+ #####################
27
+
28
+ function (_print type message)
29
+ if (NOT Smoke_FIND_QUIETLY)
30
+ message (${type} "${message}")
31
+ endif (NOT Smoke_FIND_QUIETLY)
32
+ endfunction (_print type message)
33
+
34
+
35
+ ##############################
36
+ # find individual smoke libs #
37
+ ##############################Smoke_FIND_REQUIRED
38
+
39
+ macro (find_smoke_component name)
40
+ string(TOUPPER ${name} uppercase)
41
+ string(TOLOWER ${name} lowercase)
42
+
43
+ if (NOT SMOKE_${uppercase}_FOUND)
44
+ set (SMOKE_${uppercase}_FOUND FALSE CACHE INTERNAL "")
45
+
46
+ find_path(SMOKE_${uppercase}_INCLUDE_DIR
47
+ ${lowercase}_smoke.h
48
+ PATH ${SMOKE_INCLUDE_DIR}
49
+ NO_DEFAULT_PATH
50
+ )
51
+ if(WIN32)
52
+ # DLLs are in the bin directory.
53
+ find_library(SMOKE_${uppercase}_LIBRARY
54
+ smoke${lowercase}
55
+ PATHS "@CMAKE_INSTALL_PREFIX@/bin"
56
+ NO_DEFAULT_PATH)
57
+ else(WIN32)
58
+ find_library(SMOKE_${uppercase}_LIBRARY
59
+ smoke${lowercase}
60
+ PATHS "@SMOKE_LIBRARY_PREFIX@"
61
+ NO_DEFAULT_PATH)
62
+ endif(WIN32)
63
+
64
+ if (NOT SMOKE_${uppercase}_INCLUDE_DIR OR NOT SMOKE_${uppercase}_LIBRARY)
65
+ if (Smoke_FIND_REQUIRED)
66
+ _print(FATAL_ERROR "Could not find Smoke${name}")
67
+ else (Smoke_FIND_REQUIRED)
68
+ _print(STATUS "Could not find Smoke${name}")
69
+ endif (Smoke_FIND_REQUIRED)
70
+ else (NOT SMOKE_${uppercase}_INCLUDE_DIR OR NOT SMOKE_${uppercase}_LIBRARY)
71
+ set (SMOKE_${uppercase}_FOUND TRUE CACHE INTERNAL "")
72
+ _print(STATUS "Found Smoke${name}: ${SMOKE_${uppercase}_LIBRARY}")
73
+ endif (NOT SMOKE_${uppercase}_INCLUDE_DIR OR NOT SMOKE_${uppercase}_LIBRARY)
74
+
75
+ mark_as_advanced(SMOKE_${uppercase}_INCLUDE_DIR SMOKE_${uppercase}_LIBRARY SMOKE_${uppercase}_FOUND)
76
+ endif (NOT SMOKE_${uppercase}_FOUND)
77
+ endmacro (find_smoke_component)
78
+
79
+ ################
80
+ # find smoke.h #
81
+ ################
82
+ set(SMOKE_INCLUDE_DIR "@SMOKE_INCLUDE_DIR@")
83
+ set(SMOKE_CMAKE_MODULE_DIR "@SMOKE_CMAKE_MODULE_DIR@")
84
+ set(SMOKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@")
85
+ set(SMOKE_GENERATOR_SMOKE_LIB "@SMOKE_GENERATOR_SMOKE_LIB@")
86
+ set(SMOKE_GENERATOR_DUMP_LIB "@SMOKE_GENERATOR_DUMP_LIB@")
87
+ set(SMOKE_GEN_BIN "@SMOKE_GEN_BIN@")
88
+ set(SMOKE_GEN_SHARED "@SMOKE_GEN_SHARED@")
89
+ set(SMOKE_API_BIN "@SMOKE_API_BIN@")
90
+
91
+ find_library(SMOKE_BASE_LIBRARY smokebase
92
+ PATHS "@SMOKE_LIBRARY_PREFIX@"
93
+ NO_DEFAULT_PATH)
94
+
95
+ if (NOT SMOKE_BASE_LIBRARY)
96
+ if (Smoke_FIND_REQUIRED)
97
+ _print(FATAL_ERROR "Could not find SMOKE")
98
+ else (Smoke_FIND_REQUIRED)
99
+ _print(STATUS "Could not find SMOKE")
100
+ endif (Smoke_FIND_REQUIRED)
101
+ endif (NOT SMOKE_BASE_LIBRARY)
102
+
103
+ mark_as_advanced(SMOKE_INCLUDE_DIR SMOKE_BASE_LIBRARY)
104
+
105
+ if (Smoke_FIND_COMPONENTS)
106
+ foreach (component ${Smoke_FIND_COMPONENTS})
107
+ find_smoke_component(${component})
108
+ endforeach(component)
109
+ endif (Smoke_FIND_COMPONENTS)
@@ -0,0 +1,25 @@
1
+ #ifndef SMOKEGEN_CONFIG_H_7990E7PK
2
+ #define SMOKEGEN_CONFIG_H_7990E7PK
3
+ /*
4
+ Copyright (C) 2011 Michael Jansen <kde@michael-jansen.biz>
5
+
6
+ This program is free software; you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation; either version 2 of the License, or
9
+ (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License along
17
+ with this program; if not, write to the Free Software Foundation, Inc.,
18
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+
22
+ // The library suffix used when compiling smoke
23
+ #define LIB_SUFFIX "@LIB_SUFFIX@"
24
+
25
+ #endif // #define SMOKEGEN_CONFIG_H_7990E7PK
@@ -22,6 +22,8 @@
22
22
  #include <rpp/pp-environment.h>
23
23
  #include <rpp/pp-macro.h>
24
24
 
25
+ #include <QCoreApplication>
26
+
25
27
  #include <QtDebug>
26
28
 
27
29
  QList<QString> parsedHeaders;
@@ -100,6 +102,32 @@ Preprocessor::Preprocessor(const QList<QDir>& includeDirs, const QStringList& de
100
102
  exportMacro->variadics = false;
101
103
  m_topBlock->setMacro(exportMacro);
102
104
 
105
+ // the following macros are gcc specialties
106
+ exportMacro = new rpp::pp_macro;
107
+ exportMacro->name = IndexedString("__extension__");
108
+ exportMacro->function_like = false;
109
+ exportMacro->variadics = false;
110
+ m_topBlock->setMacro(exportMacro);
111
+
112
+ exportMacro = new rpp::pp_macro;
113
+ exportMacro->name = IndexedString("__restrict");
114
+ exportMacro->function_like = false;
115
+ exportMacro->variadics = false;
116
+ m_topBlock->setMacro(exportMacro);
117
+
118
+ exportMacro = new rpp::pp_macro;
119
+ exportMacro->name = IndexedString("__const");
120
+ exportMacro->definition.append(IndexedString("const"));
121
+ exportMacro->function_like = false;
122
+ exportMacro->variadics = false;
123
+ m_topBlock->setMacro(exportMacro);
124
+
125
+ exportMacro = new rpp::pp_macro;
126
+ exportMacro->name = IndexedString("__attribute__");
127
+ exportMacro->function_like = true;
128
+ exportMacro->variadics = false;
129
+ m_topBlock->setMacro(exportMacro);
130
+
103
131
  exportMacro = new rpp::pp_macro;
104
132
  exportMacro->name = IndexedString("__SMOKEGEN_RUN__");
105
133
  exportMacro->definition.append(IndexedString('1'));
@@ -175,9 +203,13 @@ PreprocessedContents Preprocessor::preprocess()
175
203
 
176
204
  rpp::Stream* Preprocessor::sourceNeeded(QString& fileName, rpp::Preprocessor::IncludeType type, int sourceLine, bool skipCurrentPath)
177
205
  {
206
+ #ifdef Q_WS_MAC
207
+ static QRegExp frameworkExpr("([^/]+)/(.*)");
208
+ #endif
209
+
178
210
  if (m_fileStack.top().fileName() == fileName && type == rpp::Preprocessor::IncludeGlobal) {
179
211
  #ifdef DEBUG
180
- qDebug("prevented possible endless loop because of #include<%s>", qPrintable(fileName));
212
+ qDebug("prevented possible endless loop because of #include <%s>", qPrintable(fileName));
181
213
  #endif
182
214
  return 0;
183
215
  }
@@ -191,8 +223,12 @@ rpp::Stream* Preprocessor::sourceNeeded(QString& fileName, rpp::Preprocessor::In
191
223
 
192
224
  QString path;
193
225
  QFileInfo info(fileName);
194
-
195
- if (info.isAbsolute()) {
226
+
227
+ // smokegen chokes on gcc's string.h, so use our simplified version here
228
+ if (type == rpp::Preprocessor::IncludeGlobal && fileName == "string.h") {
229
+ static QString customStringHPath = qApp->applicationDirPath() + "/../share/smokegen/string.h";
230
+ path = customStringHPath;
231
+ } else if (info.isAbsolute()) {
196
232
  path = fileName;
197
233
  } else if (type == rpp::Preprocessor::IncludeLocal) {
198
234
  info.setFile(m_fileStack.last().dir(), fileName);
@@ -200,57 +236,40 @@ rpp::Stream* Preprocessor::sourceNeeded(QString& fileName, rpp::Preprocessor::In
200
236
  path = info.absoluteFilePath();
201
237
  }
202
238
  if (path.isEmpty()) {
203
- foreach (QDir dir, m_includeDirs) {
204
- #if 0
205
- if (dir.absolutePath().endsWith(".framework"))
206
- {
207
- dir.setPath(dir.absolutePath() + "/Headers");
208
- }
239
+ #ifdef Q_WS_MAC
240
+ QString framework;
241
+ QString header;
242
+ if (frameworkExpr.exactMatch(fileName)) {
243
+ framework = frameworkExpr.cap(1);
244
+ header = frameworkExpr.cap(2);
245
+ }
209
246
  #endif
210
- // qWarning("Searching in %s", qPrintable(dir.absolutePath()));
247
+
248
+ Q_FOREACH (const QDir& dir, m_includeDirs) {
211
249
  info.setFile(dir, fileName);
212
250
  if (info.isFile()) {
213
251
  path = info.absoluteFilePath();
214
- // qWarning("Found #include<%s>", qPrintable(fileName));
215
252
  break;
216
253
  }
217
- }
218
- }
219
-
220
- #if defined(Q_OS_DARWIN)
221
- /* Try searching for frameworks in default locations */
222
- if (path.isEmpty()) {
223
- QStringList splitString = fileName.split("/");
224
- if (splitString.size() >= 2) {
225
- QString frameworkName = splitString.takeFirst();
226
- QString remainingFileName = splitString.join("/");
227
- QDir dir1 = QDir(("/System/Library/Frameworks/" + frameworkName) + ".framework/Headers");
228
- QDir dir2 = QDir(("/Library/Frameworks/" + frameworkName) + ".framework/Headers");
229
- info.setFile(dir1, remainingFileName);
230
- if (info.isFile()) {
231
- path = info.absoluteFilePath();
232
- // qWarning("Found #include<%s>", qPrintable(fileName));
233
- }
234
- else {
235
- info.setFile(dir2, remainingFileName);
254
+
255
+ #ifdef Q_WS_MAC
256
+ QDir parentDir = dir;
257
+ parentDir.cdUp();
258
+ if (parentDir.dirName() == framework + ".framework" && dir.dirName() == "Headers") {
259
+ info.setFile(dir, header);
236
260
  if (info.isFile()) {
237
261
  path = info.absoluteFilePath();
238
- // qWarning("Found #include<%s>", qPrintable(fileName));
262
+ break;
239
263
  }
240
264
  }
265
+ #endif
241
266
  }
242
267
  }
268
+
269
+ if (path.isEmpty()) {
270
+ #ifdef DEBUG
271
+ qDebug("PP: File not found: %s", qPrintable(fileName));
243
272
  #endif
244
-
245
- if (fileName == "stdio.h")
246
- {
247
- qWarning("Not parsing stdio.h because it is not handled correctly by smokegen on FreeBSD based systems");
248
- return 0;
249
- }
250
-
251
- if (path.isEmpty())
252
- {
253
- qWarning("Couldn't find file for #include<%s>", qPrintable(fileName));
254
273
  return 0;
255
274
  }
256
275
 
@@ -7,4 +7,9 @@ add_library(generator_dump MODULE ${generator_dump_SRC})
7
7
  target_link_libraries(generator_dump ${QT_QTCORE_LIBRARY} smokegen)
8
8
  set_target_properties(generator_dump PROPERTIES PREFIX "")
9
9
 
10
+ if (WIN32)
11
+ # Realign the stack, for compatibility with an older ABI.
12
+ set_target_properties (generator_dump PROPERTIES COMPILE_FLAGS -mstackrealign)
13
+ endif (WIN32)
14
+
10
15
  install(TARGETS generator_dump LIBRARY DESTINATION ${LIB_INSTALL_DIR}/smokegen)
@@ -10,4 +10,9 @@ add_library(generator_smoke MODULE ${generator_smoke_SRC})
10
10
  target_link_libraries(generator_smoke ${QT_QTCORE_LIBRARY} ${QT_QTXML_LIBRARY} smokegen)
11
11
  set_target_properties(generator_smoke PROPERTIES PREFIX "")
12
12
 
13
+ if (WIN32)
14
+ # Realign the stack, for compatibility with an older ABI.
15
+ set_target_properties (generator_smoke PROPERTIES COMPILE_FLAGS -mstackrealign)
16
+ endif (WIN32)
17
+
13
18
  install(TARGETS generator_smoke LIBRARY DESTINATION ${LIB_INSTALL_DIR}/smokegen/)
@@ -127,7 +127,9 @@ struct Util
127
127
 
128
128
  static QChar munge(const Type *type);
129
129
  static QString mungedName(const Method&);
130
-
130
+
131
+ static Type* normalizeType(const Type* type);
132
+
131
133
  static QString stackItemField(const Type* type);
132
134
  static QString assignmentString(const Type* type, const QString& var);
133
135
  static QList<const Method*> collectVirtualMethods(const Class* klass);
@@ -191,8 +191,13 @@ void Util::preparse(QSet<Type*> *usedTypes, QSet<const Class*> *superClasses, co
191
191
  }
192
192
  addOverloads(m);
193
193
  (*usedTypes) << m.type();
194
- foreach (const Parameter& param, m.parameters())
194
+ foreach (const Parameter& param, m.parameters()) {
195
195
  (*usedTypes) << param.type();
196
+
197
+ if (m.isSlot() || m.isSignal() || m.isQPropertyAccessor()) {
198
+ (*usedTypes) << Util::normalizeType(param.type());
199
+ }
200
+ }
196
201
  }
197
202
  foreach (const Field& f, klass.fields()) {
198
203
  if (f.access() == Access_private)
@@ -490,6 +495,20 @@ QString Util::mungedName(const Method& meth) {
490
495
  return ret;
491
496
  }
492
497
 
498
+ Type* Util::normalizeType(const Type* type) {
499
+ Type normalizedType = *type;
500
+ if (normalizedType.isConst() && normalizedType.isRef()) {
501
+ normalizedType.setIsConst(false);
502
+ normalizedType.setIsRef(false);
503
+ }
504
+
505
+ if (normalizedType.pointerDepth() == 0) {
506
+ normalizedType.setIsConst(false);
507
+ }
508
+
509
+ return Type::registerType(normalizedType);
510
+ }
511
+
493
512
  QString Util::stackItemField(const Type* type)
494
513
  {
495
514
  if (type->getTypedef()) {
@@ -590,7 +609,7 @@ void Util::addAccessorMethods(const Field& field, QSet<Type*> *usedTypes)
590
609
  {
591
610
  Class* klass = field.getClass();
592
611
  Type* type = field.type();
593
- if (type->getClass() && type->pointerDepth() == 0) {
612
+ if (type->getClass() && type->pointerDepth() == 0 && !(ParserOptions::qtMode && type->getClass()->name() == "QFlags")) {
594
613
  Type newType = *type;
595
614
  newType.setIsRef(true);
596
615
  type = Type::registerType(newType);
@@ -59,6 +59,9 @@ SmokeDataFile::SmokeDataFile()
59
59
  usedTypes << meth->type();
60
60
  foreach (const Parameter& param, meth->parameters()) {
61
61
  usedTypes << param.type();
62
+ if (meth->isSlot() || meth->isSignal() || meth->isQPropertyAccessor()) {
63
+ usedTypes << Util::normalizeType(param.type());
64
+ }
62
65
  }
63
66
  declaredVirtualMethods[meth->getClass()] << meth;
64
67
  }
@@ -173,6 +176,9 @@ void SmokeDataFile::write()
173
176
  QFile smokedata(Options::outputDir.filePath("smokedata.cpp"));
174
177
  smokedata.open(QFile::ReadWrite | QFile::Truncate);
175
178
  QTextStream out(&smokedata);
179
+ QFile argNames(Options::outputDir.filePath(QString("%1.argnames.txt").arg(Options::module)));
180
+ argNames.open(QFile::ReadWrite | QFile::Truncate);
181
+ QTextStream outArgNames(&argNames);
176
182
  foreach (const QFileInfo& file, Options::headerList)
177
183
  out << "#include <" << file.fileName() << ">\n";
178
184
  out << "\n#include <smoke.h>\n";
@@ -419,14 +425,32 @@ void SmokeDataFile::write()
419
425
  }
420
426
  QVector<int> indices(meth.parameters().count());
421
427
  QStringList comment;
428
+ if (meth.parameters().size() > 0) {
429
+ outArgNames << klass->name() << "," << meth.name();
430
+ }
422
431
  for (int i = 0; i < indices.size(); i++) {
423
432
  Type* t = meth.parameters()[i].type();
424
433
  if (!typeIndex.contains(t)) {
425
434
  qFatal("missing type: %s in method %s (while building munged names map)", qPrintable(t->toString()), qPrintable(meth.toString(false, true)));
426
435
  }
427
- indices[i] = typeIndex[t];
436
+ outArgNames << ",";
437
+ outArgNames << (indices[i] = typeIndex[t]);
428
438
  comment << t->toString();
429
439
  }
440
+ if (meth.parameters().size() > 0) {
441
+ outArgNames << ";";
442
+ for (int i = 0; i < meth.parameters().size(); i++) {
443
+ QString paramName = meth.parameters()[i].name();
444
+ if (paramName == "") {
445
+ paramName = "arg" + QString::number(i + 1);
446
+ }
447
+ outArgNames << paramName;
448
+ if (i < meth.parameters().size() - 1) {
449
+ outArgNames << ",";
450
+ }
451
+ }
452
+ outArgNames << "\n";
453
+ }
430
454
  int idx = 0;
431
455
  if ((idx = parameterList.value(indices, -1)) == -1) {
432
456
  idx = currentIdx;
@@ -726,4 +750,5 @@ void SmokeDataFile::write()
726
750
  out << "}\n";
727
751
 
728
752
  smokedata.close();
753
+ argNames.close();
729
754
  }