1 2008-07-26 Richard Dale <richard.j.dale@gmail.com>
3 * Look in all loaded Assemblies for types in lists that might not be in
4 the Qt assembly such as List<KUrl>.
5 * The code to look up the types of slot arguments was failing for types
6 in the KTextEditor library
8 2008-07-26 Arno Rehn <arno@arnorehn.de>
10 * Add a qobject_cast based on C# reflection and qt_metacast.
12 2008-07-25 Richard Dale <richard.j.dale@gmail.com>
14 * Add implicit conversion operations for converting QVariants to types
17 2008-07-20 Arno Rehn <arno@arnorehn.de>
19 * Put the classes derived from Marshall in the 'Qyoto' namespace.
20 * Set the SmokeBinding for each class individually by calling the
21 method with index 0 on the instance.
23 2008-07-12 Arno Rehn <arno@arnorehn.de>
25 * Special case QDBusVariant in SlotReturnValue.
26 * Make QDBusVariant work with CreateInstance()
27 * Make QDBusReply similar to C++'s QDBusReply.
29 2008-07-12 Richard Dale <richard.j.dale@gmail.com>
31 * Change the slot/signal argument parsing code to work the same way as in
32 QtRuby. Use a QList<MocArgument*> type instead of just an array of
34 * The type of a slot arg should always be in the smoke module of the slot
35 being invoked. However, that isn't true for a dataUpdated() slot in a
36 PlasmaScripting.Applet. So make GetMocArguments search through all the
37 loaded smoke modules if the arg type isn't found at first.
39 2008-07-11 Arno Rehn <arno@arnorehn.de>
41 * Use IntPtrFromQString instead of StringFromQString.
42 * Export the rest of the C# marshalling functions.
44 2008-07-09 Richard Dale <richard.j.dale@gmail.com>
46 * When looking up the smoke type of a slot or signal argument, iterate
47 through all the loaded smoke modules, rather than just looking in the
50 2008-07-08 Richard Dale <richard.j.dale@gmail.com>
52 * Add marshallers for QHash types such as QHash<QString, QVariant> based
53 on the QMap marshalling code.
55 2008-07-07 Arno Rehn <arno@arnorehn.de>
57 * Allow to call InitRuntime() multiple times to make sure every binding
60 2008-07-06 Richard Dale <richard.j.dale@gmail.com>
62 * Where multiple inheritance was catered for in the Qyoto bindings each
63 superclass class other than the 'main' one was supposed to be an
64 interface type in method calls rather than the real type of the class.
65 For instance, QGraphicsWidget inherits from QObject, QGraphicsItem and
66 QGraphicsLayoutItem, and the last two classes have interfaces
67 IQGraphicsItem IQGraphicsLayoutItem respectively The two classes were
68 correctly implementing the interfaces, but the types in the method calls
69 were not using these interface types. So fix that.
70 * In the generated code, tabs are now replaced with 4 spaces.
72 2008-07-01 Arno Rehn <arno@arnorehn.de>
74 * Moved the runtime initialization from the static SmokeInvocation
75 constructor to a new method 'InitRuntime'. This is necessary for
76 KMonoPluginFactory to work.
78 2008-06-30 Richard Dale <richard.j.dale@gmail.com>
80 * When a C# value was marshalled to C++, and the actual type of
81 the C++ instance was cast to the type of the return value, it
82 wasn't working correctly if the target type for the cast wasn't in
83 the same smoke module as the type of the instance. For instance,
84 an instance of type Plasma::Applet wasn't being correctly cast
85 to a QGraphicsLayoutItem, which caused a crash.
86 * Fixed a similar bug to the above description, but for where the target
87 of a method call was being cast to the correct class. For instance,
88 a call of parentWidget() on a Plasma::Applet() needed the correct cast
89 to a QWidget for it to work.
91 2008-06-20 Richard Dale <richard.j.dale@gmail.com>
93 * Call QMetaObject.NormalizedSignature() on the Q_SLOT and Q_SIGNAL
94 strings when creating a QMetaObject with them, otherwise space and
95 other things will be significant.
97 2008-06-19 Richard Dale <richard.j.dale@gmail.com>
99 * If SmokeMarshallers.CreateInstance() couldn't find a C# class with
100 the name passed to it, it just crashed. So output an error message
101 so it is obvious what is going on.
102 * The names of the C# classes were not being set up correctly in the
105 2008-06-18 Richard Dale <richard.j.dale@gmail.com>
107 * Don't convert QChars to C# chars, keep them as QChars
109 2008-06-17 Richard Dale <richard.j.dale@gmail.com>
111 * Added an implicit constructor operator for converting strings to
112 QByteArrays as it is useful for the KAboutData classes
114 2008-06-16 Richard Dale <richard.j.dale@gmail.com>
116 * Add a header 'marshall_macros.h' with the template methods and macros
117 for QList and QVector pointer and value based marshallers.
118 * Regenerate the Qt sources with the recent changes in code generation
119 for namespaces and nested structs
121 2008-06-13 Richard Dale <richard.j.dale@gmail.com>
123 * Pass the resolve_classname() functions a 'smokeqyoto_object *' so that
124 they can change the smoke lib and classId on it.
126 2008-06-11 Arno Rehn <arno@arnorehn.de>
128 * Added the AssemblySmokeInitializer Attribute. It takes a Type of
129 another class as an argument and is intended to initialize the
130 underlying smoke lib for the binding. A method named 'InitSmoke'
131 has to exist in the class specifed by the 'Type' argument and this
132 will be called once to initialize the smoke lib. It is applied like
134 [assembly: AssemblySmokeInitializer(typeof(InitSoprano))]
135 * Added C++ sources to the kimono bindings. They work now.
136 * Applied this change to the Kimono and Soprano# bindings.
138 2008-06-04 Richard Dale <richard.j.dale@gmail.com>
140 * Remove references to QtWebKit from the Qyoto handlers.cpp so it
142 * Remove superfluous semi-colon from an extern C block
144 2008-05-31 Arno Rehn <arno@arnorehn.de>
146 * Updated AssemblyInfo.cs
147 * Regenerated the QScintilla sources from the 2.2 release.
148 * Removed the ReadProperty and WriteProperty classes and inlined the
149 code instead. It's not worth to have 2 extra classes for 5 or 6
152 2008-05-17 Arno Rehn <arno@arnorehn.de>
154 * Don't build kimono because the classes won't compile.
155 * Fixed resolve_classname.
156 * Changed 'modules' to 'qyoto_modules' in QScintillaSharp, too.
157 * Added delegate support. This is now possible:
158 Connect(slider, SIGNAL("valueChanged(int)"), delegate(int i) {
159 Console.WriteLine("value: {0}", i);
161 For the above to work you need either Mono 1.9+ or specify -langversion:linq.
162 Alternatively, you can give the parameter types as generic arguments, like
165 2008-05-16 Richard Dale <richard.j.dale@gmail.com>
167 * After the modular smoke changes, the QtWebKit classes were not being
169 * Rename the 'modules' global variable qyoto_modules to reduce the chances
172 2008-05-13 Arno Rehn <arno@arnorehn.de>
174 * Fix memory leak in WriteProperty.
175 * Added missing license information.
177 2008-05-06 Richard Dale <richard.j.dale@gmail.com>
179 * Regenerate the C# sources from the Qt 4.4 release headers
181 2008-04-10 Richard Dale <richard.j.dale@gmail.com>
183 * Added the missing QWebHitTestResult.cs source. Thanks to annma for
186 2008-04-20 Arno Rehn <arno@arnorehn.de>
188 * Since Mono 1.9 inherited private members are not included in the search
189 by Type.Get*. So now search in the whole hierarchy for the private field
193 * Regenerated the Qyoto sources from the Qt 4.4 rc1 headers
195 2008-03-03 Richard Dale <richard.j.dale@gmail.com>
197 * Added some more Qt 4.4 classes
198 * Added some marshallers for new Qt 4.4 QList types
199 * Brought the MonoDevelopment Qyoto project up to date with the current
202 2008-02-25 Richard Dale <richard.j.dale@gmail.com>
204 * Regenerated the sources with the Qt 4.4 headers
205 * Added the QtWebKit classes
207 2007-11-29 Richard Dale <rdale@foton.es>
209 * Fixed the simpletreemodel example so that the Flags() method returns
211 * The GetCPPEnumValue() used by uics generate code now returns a uint
212 * Thanks to Jos van den Oever for reporting these two bugs
214 2007-11-10 Richard Dale <rdale@foton.es>
216 * Fix regressions caused by attempt to tidy up the skipped methods code
219 2007-10-18 Richard Dale <rdale@foton.es>
221 * Simply the code to special case which classes and methods are to be skipped
222 when generating the bindings. Regenerate to add a few missing methods
224 2007-08-11 Arno Rehn <arno@arnorehn.de>
226 * If a marshaller is given a zero pointer, return zero and don't free
228 * Added implicit type conversions for QUrl.
229 * Fixed generation of ToolBarArea and DockWidgetArea related stuff in
231 * Improved Qyoto.GetPrimitiveString()
233 2007-08-09 Richard Dale <rdale@foton.es>
235 * Added some missing implicit type conversions to better match
238 2007-07-15 Arno Rehn <arno@arnorehn.de>
240 * Moved Init_qyoto() from the Q(Core)Application constructor to the
241 static SmokeInvocation constructor. It's now called before anything
242 else, even if you hadn't created a Q(Core)Application before.
244 2007-06-26 Richard Dale <rdale@foton.es>
246 * Fixed a bug parsing Q_PROPERTIES which messed up the code generation
247 * Code for nested classes is now generated
249 2007-06-25 Arno Rehn <arno@arnorehn.de>
251 * Made a seperate assembly out of the QScintilla namespace.
253 2007-06-19 Richard Dale <rdale@foton.es>
255 * Moved the QScintilla classes to a QScintilla namespace instead of
256 Qyoto.QScintilla as Qyoto should really just contain the Qt classes
257 * #ifdef'd the code to register a callback for events so the code
258 compiles with Qt 4.2.x
260 2007-06-23 Arno Rehn <arno@arnorehn.de>
262 * Added classes for QScintilla2
263 * Added a marshaller for QList<QWizard::WizardButton>
264 * Added FindSmokeQt.cmake (might be useful when someone wants to create a standalone
266 * Added a LINK_DIRECTORIES rule in CMakeLists.txt
268 2007-06-21 Arno Rehn <arno@arnorehn.de>
270 * When the assembly is installed, a symlink is created in the "2.0" directory, so
271 it can be directly referenced from gmcs with -r:qt-dotnet
273 2007-06-19 Richard Dale <rdale@foton.es>
275 * Added the missing QUiLoader class
276 * Improved the layout of the README, and made some changes to the text
278 2007-06-18 Arno Rehn <arno@arnorehn.de>
280 * Update CSharpMacros.cmake to work currectly with relative paths and improved
281 the build-comments a bit.
283 2007-06-18 Richard Dale <rdale@foton.es>
285 * Removed the various commented out QAbstractItemModel methods as they
287 * Fix the code generation for QWizard.cs so it has a C# List for the
288 'const QList<QWizard::WizardButton>&', although it doesn't have a
289 corresponding marshaller yet
291 2007-06-13 Richard Dale <rdale@foton.es>
293 * Finished fixing the virtual method callback code
294 * Removed a memory leak from the 'int&' marshaller
295 * Fixed some other minor problems reported by valgrind
296 * Don't garbage collect QGraphicsItem instance for now
298 2007-06-12 Richard Dale <rdale@foton.es>
300 * When the stack was allocated for a virtual method callback, an entry
301 wasn't being included for the reply value
302 * When the arguments for a virtual method callback were copied to the
303 C# arg stack, they were off by one
304 * The colliding mice example currently crashes with memory corruption
307 2007-06-10 Richard Dale <rdale@foton.es>
309 * Added an event callback handler to look for ChildAdded and ChildRemoved
310 events. It then creates or removes global references. Now call references
311 'global refs' instead of 'strong refs' in the code.
312 * Added some more list marshallers.
314 2007-06-07 Arno Rehn <arno@arnorehn.de>
317 * Updated AUTHORS and TODO
319 2007-06-05 Arno Rehn <arno@arnorehn.de>
321 * Improved the build system:
322 * Added FindMono.cmake to find mono, gmcs, mcs and gacutil
323 * Added CSharpMacros.cmake which consists of macros for dealing with C#.
324 It's now much easier to build C# libraries and executables and to
326 Further, a C# target is only built if the output file is missing
327 or the sources were modified.
328 * Updated all CMakeLists.txt to work with the improved build system.
330 2007-06-04 Richard Dale <rdale@foton.es>
332 * Added the QBitArray class for completeness
334 2007-06-03 Richard Dale <rdale@foton.es>
336 * Fixed implicit type conversions code for non-QtCore classes to QVariants
338 2007-06-02 Richard Dale <rdale@foton.es>
340 * Updated the uics tool against the Qt 4.3 sources
341 * Changed the code generation to generate properties for QDOC_PROPERTY
343 * Added a space after the '///'s for the documentation tags so that they
344 have Kate syntax highlighting
345 * Added a string to QKeySequence implicit type conversion
347 2007-06-02 Arno Rehn <arno@arnorehn.de>
349 * Special cased the QCoreApplication constructor, too.
350 * Added AssemblyInfo.cs
351 * Added a keyfile for strong naming the qt-dotnet assembly so it can
352 be added to the GAC. It won't be generated at compile time since there
353 might occur problems when it is regenerated and the assembly is reinstalled.
354 * Added rules in CMakeLists.txt for installing libqyoto.so.
355 * Added rules in CMakeLists.txt for installing qt-dotnet.dll into the GAC.
357 2007-06-01 Arno Rehn <arno@arnorehn.de>
359 * Special cased the QApplication constructor call to work correctly
361 2007-05-31 Arno Rehn <arno@arnorehn.de>
363 * Added a hack in uics for QFrame.Shape and QFrame.Shadow
365 2007-05-31 Richard Dale <rdale@foton.es>
367 * Regenerated the Qyoto sources from the release version of Qt 4.3
369 2007-05-29 Richard Dale <rdale@foton.es>
371 * Try Arno's suggestion of 'return (int) (qint64) o->ptr;' in the
372 QyotoHash f'n to make it compile on all architectures.
374 2007-05-28 Arno Rehn <arno@arnorehn.de>
376 * Updated the code of the first tutorials to be more like C++ ones.
378 2007-05-28 Richard Dale <rdale@foton.es>
380 * Further simplified the marshalling of primitive reference types. As
381 a pointer the the value on the C# stack is copied to the smoke stack
382 before the method call, the value after the method call doesn't need
384 * Added a marshaller for 'short&' and 'short*' arg types
385 * Attempted to add a QyotoHash function that will compile on 64 bit
388 2007-05-27 Arno Rehn <arno@arnorehn.de>
390 * Removed the redundant stuff for ref arguments again and implemented them
391 based on Richard's proposal, which is much simpler.
392 * Added marshallers for qreal (double) and bool references.
394 2007-05-18 Arno Rehn <arno@arnorehn.de>
396 * Made 'ref' arguments work.
398 2007-05-15 Richard Dale <rdale@foton.es>
400 * Regenerated the Qyoto sources from the current qt-copy snapshot as
401 there have been quite a few changes
402 * Added a QSsl class with enums, but this should really be a C# namespace
403 as the C++ version is a namespace.
405 2007-05-14 Richard Dale <rdale@foton.es>
407 * Added code generation for 'ref' argument types
409 2007-04-26 Richard Dale <rdale@foton.es>
411 * The classes which need to have interfaces, such as QUrl because they
412 are used with multiple inheritance in C++, were always being defined
413 as interface types in method arguments. This isn't needed, so change
414 arg types from 'IQUrl' etc to 'QUrl' etc.
416 2007-04-25 Arno Rehn <arno@arnorehn.de>
418 * Special cased QVector<QRgb> when marshalling.
419 * Fixed two more memory leaks.
420 * Removed all the instances of delegates in SmokeMarshallers.cs. In C# 2.0
421 we can directly specify a method, we don't need an instance of a correspondending
424 2007-04-16 Richard Dale <rdale@foton.es>
426 * Added a QyotoHash() method for deriving a hash value from the c++
427 pointer of an instance.
429 2007-04-15 Richard Dale <rdale@foton.es>
431 * The Qyoto project is built with no symbols visible by default in
432 kdebindings, so add function declarations in qyoto.h to make it work.
433 * Added some more implicit type conversion operator methods and chaanged
434 the code in the tutorial t14 example to use them
436 2007-04-14 Richard Dale <rdale@foton.es>
438 * Fixed some compiler warnings
439 * Added implicit operator conversions for various types to QVariants
441 2007-04-13 Arno Rehn <arno@arnorehn.de>
443 * Fixed CMakeLists.txt's to work with the new directory structure. Some lines of
444 the top-level CMakeLists.txt should be put in subdirectories, though.
445 * Subclasses of QTextBlockUserData are now contained instances.
447 2007-04-09 Richard Dale <rdale@foton.es>
449 * Added marshallers for some of the new Qt 4.3 list types
451 2007-04-08 Richard Dale <rdale@foton.es>
453 * Improved the code to only generate C# properties instead of normal
454 method calls. Only generate code for the Read and write methods of
455 the property if they are slots, signals or virtual methods.
456 * Fixed the uics tool to generate code that compiles with the above
459 2007-04-08 Arno Rehn <arno@arnorehn.de>
461 * Renamed all QAbstract*Helper classes to QAbstract*Internal and
462 marked them as internal, so they cannot be accessed from outside
465 2007-04-06 Richard Dale <rdale@foton.es>
467 * Fixed all compiler warnings in the generated code, except for 180
468 warnings about the smokeObject private variable not being used.
470 2007-04-06 Arno Rehn <arno@arnorehn.de>
472 * Added missing QItemModel.cs. Forgot to do a 'svn add' last time.
473 * Added more helper classes for abstract base classes which are returned by
475 * Fixed little bug in qdbus/chat/chat.cs.
477 2007-04-06 Richard Dale <rdale@foton.es>
479 * Improved the code generation to fix some of the many warnings, and fixed
480 some compiler warnings in the Qyoto runtime code too.
481 * Added a MonoDevelop project for the Qyoto source files
483 2007-04-05 Richard Dale <rdale@foton.es>
485 * Regenerated the Qyoto classes from the Qt 4.3 headers, and added new
487 * The test for instance operator methods was changing 'operator>>' and
488 'operator<<' calls from static to instance methods, when they are
489 actually still instance methods 'Read()' and 'Write()' in C#.
490 * Add some marshallers for the QVector types in the new QXmlStream*
493 2007-04-03 Richard Dale <rdale@foton.es>
495 * No need to special case the metaObject() method any more when caching
497 * After a smoke method has been called, free the GCHandle for the instance
500 2007-04-02 Arno Rehn <arno@arnorehn.de>
502 * Added a subclass of QAbstractItemModel called QItemModel which implements
503 the abstract methods of its super class by calling the original methods of
505 * Added workaround in resolve_classname to return "QItemModel" instead of "QAbstractItemModel"
506 so instances of this class can be constructed. Makes calls which return a QAbstractItemModel
509 2007-04-01 Richard Dale <rdale@foton.es>
511 * Replace transparent proxies to invoke methods, with a direct call to
512 'SmokeInvocation.Invoke()' to invoke a method in the Smoke library.
513 Performance is now 20x better than two weeks ago for a test consisting
514 of 5 goes at the cannon game with force 40. The new method to call a
515 method in the Smoke library looks like this:
517 public object Invoke( string mungedName,
520 params object[] args );
522 Where the 'params' object[] argument is a list of arg type/arg value pairs.
524 An example of calling it:
526 public QPoint(int xpos, int ypos) : this((Type) null) {
528 interceptor.Invoke( "QPoint$$",
531 typeof(int), xpos, typeof(int), ypos);
535 2007-03-27 Richard Dale <rdale@foton.es>
537 * When a reference in the weak reference map is found to be dead, remove
539 * Fixed bug in debugging logging where weak refs were wrongly being
542 2007-03-26 Richard Dale <rdale@foton.es>
544 * Before an entry was removed from the weak reference map, a check was
545 made to see if it was still there. But the check always returned 0
546 because the reference was a dead weak reference, and so no entries
547 were ever removed causing a memory leak
548 * Tidied up the code to call the C# delegate pointers directly, rather
549 than via C wrapper functions, which didn't really do anything useful
550 * The 'CreateInstance()' method is now passed a pointer to a
551 smokeqyoto_object instance
553 2007-03-25 Richard Dale <rdale@foton.es>
555 * Tidy up the caching the slot and signal type signatures and removed
556 duplicated code. The signal signatures are no longer obtained every
557 time is signal is emitted, but got from a cache in a dictionary.
559 2007-03-25 Arno Rehn <arno@arnorehn.de>
561 * If a object is destroyed, don't call any methods on it anymore (fixes
562 the crash of e.g. the pingpong example)
564 2007-03-24 Richard Dale <rdale@foton.es>
566 * The 'IsSmokeClass()' test now uses the Smoke class data cache
567 * Renamed the method to retrieve a C# instance given a pointer to the C++
568 instance as 'GetInstance(). Given it an a boolean argument 'allInstances'
569 and if false, GetInstance() will only return instances that are custom
570 subclasses of Qyoto classes. This is useful when dealing with overriden
571 virtual method callbacks, as only custom subclasses can have their own
572 slots or overriden virtual methods.
573 * These two improvements give a 2-3 times speed up, and Qyoto now uses
574 about 6 times less mill than it did a week ago.
576 2007-03-23 Richard Dale <rdale@foton.es>
578 * Cache various items in a dictionary with a key of the Smoke class's
579 type to avoid using reflection to look up the items each time. A timing
580 test consisting of starting the t14 cannon game and firing 5 shots at
581 force 40, used half the mill of the version without caching.
583 * The following class is used to cache the data:
585 public class SmokeClassData {
586 public string className;
587 public ConstructorInfo constructorInfo;
588 public object[] constructorParamTypes;
589 public MethodInfo proxyCreator;
590 public FieldInfo smokeObjectField;
593 - classname: the C++ signature of the Smoke class
594 - constructorInfo: the ConstructorInfo to construct a new instance
595 - constructorParamTypes: the argument to pass to the constructorInfo
596 - proxyCreator: the method to create the transparent proxy for the
598 - smokeObjectField: the field for holding a pointer to the
599 smokeqyoto_object struct for the instance
601 * Add an entry to the strong reference map for custom QWidget subclasses
602 to prevent them being GC'd prematurally.
604 2007-03-22 Richard Dale <rdale@foton.es>
606 * Added debug methods for logging GCHandle.Alloc() and Free() calls
607 * Freed GCHandles in a few places, but there are still a lot of leaks
608 * Hmm, a fix for a GCHandle leak stopped custom slots from working for
610 * The above problem is caused by the GCHandle leak preventing premature
611 garbage collection, and once the leak problem was fixed it exposed
612 Qyoto's problems with coordinatign C#'s GC with Qt memory management
613 via QObject trees etc.
614 * Qyoto method calls can now return null values
616 2007-03-21 Arno Rehn <arno@arnorehn.de>
618 * Moved the check and 'workaround' for instance operators from C# to C++.
619 Doesn't create any additional overhead like the C# solution.
621 2007-03-18 Richard Dale <rdale@foton.es>
623 * Changed the name of the debug class from Debug to QDebug as it made
624 using Debug.Asserts inconvenient
625 * Added some copyright headers to the source files
626 * Build the project with debug by default
628 2007-03-20 Arno Rehn <arno@arnorehn.de>
630 * Allow 'zero' return types for methods and for args of methods being called
632 * Made instance operators work
634 2007-03-18 Richard Dale <rdale@foton.es>
636 * Instead of setting and getting properties via QObject.SetProperty() and
637 QObject.Property() and creating QVariants, call the methods in the
638 Smoke library directly.
640 2007-03-17 Richard Dale <rdale@foton.es>
642 * Removed redundant method calls for invoking methods on the interceptors,
643 that only cast the interceptor to the type of the current class. Just
644 do the cast directly. The 'staticInterceptor' field now has the type of
645 the instance for which it is proxying the static methods and doesn't
647 * When marshalling pointer lists from C++ to C# use the
648 'resolve_classname()' function to get a more accurate name of the class
650 * Improved resolve_classname() for QGraphicsItem subclasses
652 2007-03-16 Richard Dale <rdale@foton.es>
654 * Overriding abstract methods wasn't working because no SmokeMethod
655 Attribute was being generated for them
656 * Fixed bug in invoking constructors where wrapper instances were being
658 * When constructing an instance via CreateInstance() the CreateProxy()
659 method is now optional, so just don't call it if not found.
661 2007-03-14 Richard Dale <rdale@foton.es>
663 * Only generate destructors if the class is implementing IDisposible
664 * Only generate code to set up transparent proxy interceptors for instance
665 or static methods if the class has some instance or static methods that
666 would need an interceptor
667 * Order the generated code:
670 3) Methods not converted
674 2007-03-12 Richard Dale <rdale@foton.es>
676 * When the access level of an overriden method is changed, use 'new' in
677 the method declaration allow the change, rather than always making
679 * Allow covariant return types as C# has them
680 * Make some classes non-abstract by adding the missing methods
681 * Fix code generation of QApplication.Exec() so apps don't crash on exit
682 * Convert 'qreal*' to 'double out' argument types
684 2007-03-11 Richard Dale <rdale@foton.es>
686 * For pure virtual methods with optional arguments, only translate the
687 longest version to a C# abstract method. Otherwise, it was necessary
688 to add extra methods in subclasses that wouldn't be needed in the C++
689 equivalent code. Fixed example code that needed to do that.
691 2007-03-08 Richard Dale <rdale@foton.es>
693 * Improved the code generation for overriden methods and they are
694 now labelled 'virtual' or 'override' where appropriate, rather than
696 * Classes with pure virtual methods are now 'abstract' as are the pure
698 * Made the code generated for Q_PROPERTIES shorter for clarity
699 * Fixed some compile errors in the examples as a result of the above
701 * The tutorial application t14 now seg faults on exit
702 * Pure virtual protected methods such as
703 QSyntaxHighlighter.HighlightBlock() are no longer omitted from the
706 2007-03-07 Richard Dale <rdale@foton.es>
708 * Made the simpletreemodel example use the csrcc resource compiler
709 * Removed the 'qt_metacall NOT CONVERTED' messages from the sources as
711 * Don't generate destructors for the Qt class as it only has static
714 2007-03-06 Richard Dale <rdale@foton.es>
716 * A GCHandle was being used to hold the 'internalPointer' value in a
717 QModelIndex. A new one was being allocated everytime a new index
718 was created by QAbstractItemModel.CreateIndex(), which meant that
719 different GCHandles could hold the same underlying 'Target' instance.
720 However, this meant that the equality operator for QModelIndex no longer
721 worked correctly. So GCHandles for holding the InternalPointer()
722 references are kept in a Dictionary with the object instance to be
723 wrapped as the key. A reference count against the handle is used to
724 ensure that the GCHandle is freed once there are no references to it
725 via InternalPointer().
727 2007-03-06 Arno Rehn <arno@arnorehn.de>
729 * GCHandles for QModelIndex'es are now stored in a Dictionary.
730 QAbstractItemModel.CreateIndex() looks up a GCHandle in the Dictionary
731 and if it exists it is passed to the C++ function. Child items of a tree model
733 * In the simpletreemodel example the entries of default.txt are now being read correctly
735 2007-03-05 Richard Dale <rdale@foton.es>
737 * Free up some GCHandles when they're finished with
739 2007-03-03 Arno Rehn <arno@arnorehn.de>
741 * Added QModelIndex.InternalPointer() and QAbstractItemModel.CreateIndex()
742 * Added simpletreemodel example (doesn't fully work yet)
743 * Fixed invocation of methods with an enum as a argument
745 2007-02-28 Arno Rehn <arno@arnorehn.de>
747 * Don't include inherited signals/slots when building up the metaobject
748 * Added seperate methods for getting all the signals/slots of a class, including
749 inherited ones. This is needed for InvokeCustomSlot() and SignalInvocation.Invoke()
750 * Changed qt_metacall to be more like the one genereted by moc:
751 * First call qt_metacall of the base class
752 * If the return value is postive, it was a C++ slot/signal/property, return
753 * If the return value is negative, look for C# slots/signals/properties
755 * Made QObject.FindChild() and QObject.FindChildren() work
757 2007-02-27 Richard Dale <rdale@foton.es>
759 * Made the QMetaObject creation work correctly with nested subclasses
761 2007-02-24 Arno Rehn <arno@arnorehn.de>
763 * Added ReadProperty and WriteProperty classes. Now custom properties can
764 be accessed via Property() and SetProperty() (and dbus?). However there seems
765 to be a problem with marshalling, see FIXMEs in the code. The workaround should
766 work as well as with marshalling, though.
767 * Autogeneration of Q_PROPERTY signatures and types now works properly.
768 * Flags of properties should now be set correctly.
770 2007-02-21 Arno Rehn <arno@arnorehn.de>
772 * QMetaObjects are now correctly inherited.
773 * If there was a request for a QMetaObject of a native Qt class, a new
774 QMetaObject was created with all the signals and slots of the class and
775 the native QMetaObject was just used as a parent. The resulting object had
776 every definition twice. Fixed.
778 2007-02-20 Richard Dale <rdale@foton.es>
780 * Commented out QList<QHostAddress> marshallers as it caused a linking
782 * Change 'ADD_LIBRARY (qyoto SHARED ${SRC_CPP})' to
783 'ADD_LIBRARY (qyoto MODULE ${SRC_CPP})' to build libqyoto.so, rather
784 than libqyoto.dyld on Mac OS X
786 2007-02-19 Arno Rehn <arno@arnorehn.de>
788 * Implemented adding Q_PROPERTY's to the QMetaObject. Next step is
789 adding classes like InvokeSlot for properties in qyoto.cpp.
790 * When retrieving slot signatures, also include the slots of the superclass,
791 if it isn't a native C++ class. Same has to be done for signals.
792 * Did some code cleanup:
793 * Moved QyotoMetaData class into a seperate file, QyotoMetaData.cs
794 * Made code in QyotoMetaData better readable
796 2007-02-14 Arno Rehn <arno@arnorehn.de>
798 * Fixed compilation error in t14
799 * Modified all CMakeLists.txt to produce nicer output
801 2007-02-14 Richard Dale <rdale@foton.es>
803 * Added cmake files for building the csrcc tool
804 * Fix the cmake file for building the uics tool
805 * Specify the ${UICS_PATH} and ${CSRCC_PATH} as their relative positions
806 within the qyoto project.
808 2007-02-13 Richard Dale <rdale@foton.es>
810 * Removed the signal spy check and replaced it with a global flag
811 'application_terminated'. Once the flag is set, destructors are no
814 2007-02-12 Richard Dale <rdale@foton.es>
816 * The scheme for caching the smoke methodId inside a SmokeMethod Attribute
817 didn't work, and the value returned was always -1, even when it had been
818 set to a value. So use a dictionary of type Dictionary<MethodInfo, int>
820 * When a destructor has been called, remove the item from the weak
822 * Additionally, in a destructor free the smokeqyoto_object struct, and
823 set the pointer to it in the C# instance to 0.
825 2007-02-11 Richard Dale <rdale@foton.es>
827 * Don't call a destructor is the instance was allocated in the C++ world
828 * If a destructor has been called then set the ptr field on the
829 smokeqyoto_object struct to 0, and don't call methods on it again.
830 * Renamed IsInstanceContained() as IsContainedInstance(), and only call
831 a destructor for instances where it is false, as the C++ side will
833 * Q_INIT_RESOURCE() now correctly finds the resource class to load
834 * Added QT_TRANSLATE_NOOP() and QT_TR_NOOP() methods
836 2007-02-10 Arno Rehn <arno@arnorehn.de>
838 * If the aboutToQuit() signal is catched, no destructors will be called.
839 Replaces the check for qApp == 0. No warning about QSocketNotifiers at
840 the end of the main event loop anymore.
842 2007-02-10 Richard Dale <rdale@foton.es>
844 * Improved debug messages in SmokeInvocation.cs
845 * The csrcc tool nearly works, but Qt.Q_INIT_RESOURCE() can't find the
846 class where the resource is.
848 2007-02-09 Arno Rehn <arno@arnorehn.de>
850 * When a qApp instance was destroyed, it would automatically destroy all
851 other Qt objects, in some cases our own destructor calls could interfere
852 with this mechanism. Fixed by checking if qApp == 0 and if so skipping
853 the destructor calls.
855 2007-02-09 Richard Dale <rdale@foton.es>
857 * Renamed CreateStrongReference() as IsInstanceContained()
858 * Added 'csrcc', a C# version of the Qt rcc tool
859 * Added the graphicsview/collidingmice example
860 * Fixed code generation of the csrcc tool, and added a static
862 * Added a cmake rule for a ${CSRCC_PATH} variable
864 2007-02-08 Arno Rehn <arno@arnorehn.de>
866 * Made destructors work. The only problem was that we have to check
867 if the instance of which a method should be invoked still exists.
868 This was not the case, e.g. if the QApplication instance was destroyed
869 at the end of an app and with it all other Qt instances.
870 Now the DeleteQApp-Hack isn't needed anymore, too.
872 2007-02-08 Richard Dale <rdale@foton.es>
874 * Added a first attempt at setting up the strongReferenceMap and calling
875 destructors. A boolean function CreateStrongReference() checks whether
876 or not a strong reference is needed when a new instance has been
877 constructed. Another function is needed to checked whether the C++
878 instance still has a parent or container, and not delete if it has.
880 * Currently apps crash on exit, but the Qyoto.DeleteQApp()
881 hack shouldn't be need anymore once destructors are working.
883 2007-02-08 Arno Rehn <arno@arnorehn.de>
885 * Fixed names of flags in Qyoto.cs
886 * Modified CMakeLists.txt to output more infos and to get out-of-source-dir
889 2007-02-08 Richard Dale <rdale@foton.es>
891 * Fixed bugs in the debug dump of QMetaObjects created at runtime
892 * Normalized some code layout
893 * Only QApplication and QCoreApplication destructors are now called
894 * Added a strongReferenceMap to hold a mapping from a C++ pointer to
895 a C# instance. It is used to prevent garbage collection for instances
896 which are contained in another instance, such as a QObject with a
897 parent, even when there are no references to the child within the C#
898 Qyoto application code. When the parent finally deletes the child on
899 the C++ side, the reference is removed from the Dictionary by the
900 SmokeMarshallers.UnmapPointer() method.
901 * Renamed the QTDB_METHOD_MISSING debugging flag as QTDB_TRANSPARENT_PROXY
903 2007-02-07 Richard Dale <rdale@foton.es>
905 * Added a Debug.DebugChannel() method to get debug setting in C#
907 2007-02-06 Richard Dale <rdale@foton.es>
909 * Added a QPair struct corresponding to the C++ one, and generate
910 method calls with arguments that use it
911 * Generate accessor methods for static variables and instance variables
912 * Added the widgets/analogclock example
913 * Fixed bug in marshalling QVector types with an unitialise variable in
915 * Added QMin() and QMax() methods
916 * Added marshalling for StringBuilder <--> QStrings
917 * Add a generically typed QDBusVariant.FromValue() method to make
918 constructing them less ugly.
919 * Use reflection via GetType() to find out whether a string or a
920 StringBuilder needs to be marshalled to a QString
922 2007-02-05 Richard Dale <rdale@foton.es>
924 * Moved operator methods out of Qt.cs, and made them operator
925 methods in the classes of their arguments. In Qt.cs they
926 had to be translated to use names like op_mult() or op_add()
927 because C# only allows operator methods to be defined in the
928 class of one of their arguments. Now they are proper operator
929 methods which looks better.
931 2007-02-04 Richard Dale <rdale@foton.es>
933 * Updated the project TODO list
934 * Added a a Qyoto Debug class for turning on debugging options
937 Debug.SetDebug(QtDebugChannel.QTDB_VIRTUAL);
939 This will show the virtual method callbacks from the Smoke lib
940 * Removed core/QGlobalSpace.cs as it isn't needed because the methods in
942 * The 'operator<<' and 'operator>>' methods are no longer renamed
943 'op_write' and 'op_read', but 'Write' and 'Read' instead.
944 * Started to implement QObject.FindChild() and QObject.FindChildren(),
945 but the code needs to be translated from QtRuby.
946 * Removed unwanted blank lines from the generated code.
948 2007-02-03 Richard Dale <rdale@foton.es>
950 * The SmokeMethod attribute constructor now takes three arguments,
953 [SmokeMethod("eventFilter", "(QObject*, QEvent*)", "##")]
954 public virtual bool EventFilter(QObject arg1, QEvent arg2) {
955 return ProxyQObject().EventFilter(arg1,arg2);
958 * There are four properties to access the values of a SmokeMethod.
961 SmokeMethod.Name => "eventFilter"
962 SmokeMethod.ArgsSignature => "(QObject*, QEvent*)"
963 SmokeMethod.MungedName => "eventFilter##"
964 SmokeMethod.Signature => "eventFilter(QObject*, QEvent*)"
966 * Virtual method callbacks are now working again
967 * In SmokeInvocation.Invoke() destructors aren't called until a way of
968 coordinating C# GC with C++ Qt instance deletion has been implemented.
969 * C# operator methods are always static, and so the SmokeMethod Attribute
970 must be for the method in the I<classname>Proxy interface, rather than
971 on the static method call implementation.
972 * Added a SmokeClass Attribute to the interfaces used to create the
973 transparent proxy for static method invocations.
974 * The SmokeClass Attribute is now used for the name of the class to use
975 when looking up methods in the Smoke library
976 * The default format of a string in mono is utf8, and so assume that when
977 converting to and from QStrings.
979 2007-02-03 Richard Dale <rdale@foton.es>
981 * Added qdbus/remotecontrolledcar example
982 * The enums named 'Type' clash with the C# method of the same name,
983 instead of renaming them 'E_Type', use 'TypeOf' as it looks better.
984 * Changed the SmokeMethod Attribute to include the 'munged method name'
985 as well as the C++ type signature of the method's arguments. This
986 make it easier and faster to look up the method in the Smoke library
987 at runtime. The SmokeMethod attribute wasn't working with static
988 methods as it needed to be on the interface where the static method
989 was defined, and not on the method itself. For instance, an instance
990 method is now defined like this:
992 [SmokeMethod("setParent#", "(QObject*)")]
993 public void SetParent(QObject arg1) {
994 ProxyQObject().SetParent(arg1);
997 And a static method is defined like this:
999 [SmokeMethod("sessionBus", "()")]
1000 QDBusConnection SessionBus();
1003 public static QDBusConnection SessionBus() {
1004 return StaticQDBusConnection().SessionBus();
1007 Once a methodId method selector has been looked up, it is cached inside
1008 the SmokeMethod Attribute.
1009 * The generation of the 'munged method names' in the Attributes is currently
1010 wrong, and needs fixing.
1012 2007-02-02 Richard Dale <rdale@foton.es>
1014 * Improved the debugging output for the content of a QMetaObject
1015 * Added the qdbus/chat example
1016 * Made the classes generated by uics public
1017 * Added a rule for setting up ${UICS_PATH}
1019 2007-31-01 Richard Dale <rdale@foton.es>
1021 * Changed the uics code generation to use C# properties
1022 * Special case shortcut properties to create a QKeySequence
1023 * Added an '-x' option to the uics tool to generate a Main method
1024 for testing purposes
1025 * Made QWidget.MiniumumSizeHint a method rather than a property
1026 and changed the uics code generation to match.
1028 2007-30-01 Arno Rehn <arno@arnorehn.de>
1030 * Fixed off-by-one mistake when invoking signals in SmokeInvocation.cs
1033 2007-30-01 Richard Dale <rdale@foton.es>
1035 * Fixed regressions caused by adding signal return values
1036 * Added a QDBusVariant class and marshalling for it
1037 * The complexpong example still doesn't return a QDBusVariant value
1039 2007-29-01 Richard Dale <rdale@foton.es>
1041 * Added reply values when emitting signals
1042 * Some static methods were being dropped because they had the same
1043 name as property names. So make the static methods start with a
1044 lower case letter and keep them.
1045 * When marshalling a QDBusVariant, special case as a QVariant as it
1046 doesn't exist in the Smoke library, but is needed for QtDBus support.
1047 * Added a not quite working qdbus/complexpingpong example
1049 2007-29-01 Arno Rehn <arno@arnorehn.de>
1051 * Fixed compiler options in examples to use -r instead of -addmodule
1053 2007-28-01 Richard Dale <rdale@foton.es>
1055 * Commented out the QMetaObject.InvokeMethod() call in the pong.cs
1056 example as it causes a crash
1057 * Fixed bug where the name of a slot was being lost when passed to
1058 Invoke slot as a temporary 'const char *' that was being deleted
1059 before it could be used.
1060 * In the C# to C++ list marshaller the temporary list of 'void*'s
1061 was not being deleted. If a C++ list element instance aleady has
1062 a mapping onto a C# instance, then use that.
1063 * Added a Q_PROPERTY atttribute to C# properties, restored Q_SLOT
1064 properties which were not being generated from slots labelled
1067 2007-26-01 Richard Dale <rdale@foton.es>
1069 * Added the qdbus/listnames example
1070 * Added the qdbus/pingpong example
1071 * When the type signature of a slot was being derived from the types of
1072 the C# arguments, a C# string should map onto 'QString' and not 'string'
1074 2007-25-01 Richard Dale <rdale@foton.es>
1076 * QObject.Emit is now a property, rather than a method. For example:
1078 protected new ICannonFieldSignals Emit {
1080 return (ICannonFieldSignals) Q_EMIT;
1086 Emit.forceChanged(currentForce);
1088 * Only add C# set properties for Q_PROPERTYs with a WRITE option
1089 * Added cannon game tutorial t12
1090 * Added tutorials t13 and t14
1091 * QWidget.SizeHint is no longer a property as it needs to be overriden in
1094 2007-24-01 Richard Dale <rdale@foton.es>
1096 * Q_PROPERTYs are now mapped onto C# properties, and the correponding set
1097 and get methods removed from the api
1098 * QDomNodeList is no longer an ArrayList type
1099 * Added QList<QRgb> as a C# List<uint> type
1100 * QVariant.Value() and QVariant.FromValue() now work correctly with enums
1101 * The Enums in properties are now fully qualified with the classname
1102 * Fixed up the code for the t11 example
1103 * Added some more CMakeLists.txt files
1104 * Implemented callbacks to construct QVariants and to get values via
1105 QVariant.FromValue() and QVariant.Value() when the type is greater
1106 than QVariant::LastCoreType
1108 2007-22-01 Arno Rehn <arno@arnorehn.de>
1110 * Updated marshallers to work with generic types
1112 2007-22-01 Richard Dale <rdale@foton.es>
1114 * Add QApplicationExtras.cs, QCoreApplicationExtras.cs and QtExtras.cs
1115 * Fix bug in setting up argv array passed to QApplication constructor
1116 pointed out by Arno.
1117 * Convert to generic types for marshalling QLists, QVectors and QMaps,
1118 and use C# List<>s and Dictionary<>s.
1119 * Convert qint64 and qlonglong to C# longs, and quint64 and qulonglong to
1122 2007-21-01 Richard Dale <rdale@foton.es>
1124 * Split QVariant.cs and QDBusConnectionInterface in two files with partial
1125 classes to make customisation easier to maintain.
1126 * Fixed bugs in the code generation for args with QStrings or QStringLists
1127 inside template type.
1128 * operator methods '<<' and '>>' were being converted to static methods even
1129 when the methods couldn't be operator methods in C# and should have been
1130 either 'op_read()' or 'op_write()' in which case they should be instance
1132 * Fixed parsing in for Q_PROPERTY which meant that some methods in
1133 QToolBar.cs were lost.
1134 * Added a QVariant.FromValue() method
1135 * Removed QTextCodecPlugin.cs
1136 * Fixed build error in QSysInfo.cs
1138 2007-17-01 Arno Rehn <arno@arnorehn.de>
1140 * Split SmokeInvocation.cs into SmokeInvocation.cs and SmokeMarshallers.cs
1141 * Updated CMakeLists.txt to work with more variables
1143 2007-16-01 Richard Dale <rdale@foton.es>
1145 * Added missing QX11EmbedContainer and QX11EmbedWidget classes
1147 2007-15-01 Richard Dale <rdale@foton.es>
1149 * Change the names of the methods that setup callbacks from
1150 AddFoobar() to InstallFoobar(), where Foobar() is the callback
1153 2007-14-01 Paolo Capriotti <paolo.capriotti@gmail.com>
1155 * Ported most of the .NET 1.1 code to .NET 2.0
1157 2007-13-01 Richard Dale <rdale@foton.es>
1159 * Added a generically typed QVariant.Value() method
1160 * QDBusReply uses QVariant.Value()
1161 * Added a couple of methods using QDBusReply to QDBusConnectionInterface
1163 2007-12-01 Richard Dale <rdale@foton.es>
1165 * Change the cmake build to use gmcs rather than mcs
1166 * Added a QDBusReply class using a generic type
1167 * Added some missing methods to QDBusConnectionInterface
1169 2006-12-07 Richard Dale <rdale@foton.es>
1171 * Use QDate, QDateTime and QTime for dates and times, not the C#
1173 * Added missing QAccessible* and QFileSystemWatcher classes
1175 2006-12-06 Richard Dale <rdale@foton.es>
1177 * Regenerate the Qyoto classes against the Qt 4.2.2 headers
1178 * Split the classes into core, qdbus, gui, network, opengl, sql, svg
1179 and xml directories corresponding to the Qt modules.
1180 * Changed the CMakeLists.txt build file to match the new structure
1182 2006-12-04 Arno Rehn <arno@arnorehn.de>
1184 * Added marshallers for QMaps
1186 2006-12-02 Arno Rehn <arno@arnorehn.de>
1188 * Added marshalling function for QList<int>
1190 2006-11-26 Arno Rehn <arno@arnorehn.de>
1192 * Added marshall_ItemList and all DEF_LIST_MARSHALLER and
1193 DEF_VALUELIST_MARSHALLER from qtruby.
1194 * Added a CMake file for compilation with CMake. Still keeping
1195 the old makefile in case for some reason we need it again.
1197 2006-10-23 Arno Rehn <arno@arnorehn.de>
1199 * Marshalling ItemLists should now fully work. But we still need
1200 many of the DEF_VALUELIST_MARSHALLER things.
1202 2006-10-23 Arno Rehn <arno@arnorehn.de>
1204 * Added more code for marshalling QLists. QList<T> return types
1205 should now work for all QLists where T is not a primitive type.
1207 2006-10-23 Richard Dale <rdale@foton.es>
1209 * When a QMetaObject was constructed, the parent was wrongly being
1210 set to the superclass of the superclass, rather than just the
1212 * If no Emit() method is found for a class, assume it doesn't have
1213 any signals and don't include any in the QMetaObject for it.
1214 * Only look for methods marked Q_SLOT in the current class, and not
1215 the superclasses when constructing a QMetaObject.
1217 2006-10-22 Arno Rehn <arno@arnorehn.de>
1219 * Currect return value for QyotoSmokeBinding::callMethod() where
1220 it would return 'true' if metaObject() was overriden
1221 (fixes QDockWidget bug)
1222 * Fixed some internal class names
1224 2006-10-20 Richard Dale <rdale@foton.es>
1226 * Added alloc_smokeqyoto_object() and free_smokeqyoto_object() f'ns
1228 2006-10-19 Arno Rehn <arno@arnorehn.de>
1230 * Fixed marshalling of QStringLists
1232 2006-10-19 Arno Rehn <arno@arnorehn.de>
1234 * Added support for marshalling C++-QStringLists to C#-ArrayLists
1237 2006-10-19 Richard Dale <rdale@foton.es>
1239 * Removed Qt3 Qyoto sources
1240 * Moved Qyoto.cs to the top directory, so that only autogenerated
1241 classes are in the qyoto directory.
1242 * Added some non-working list marshalling code for QStringLists and
1243 QList<QVector> so that they can be used for getting QDBus to work
1244 * Removed assignment to the qApp global variable in the QCoreApplication
1245 constructor as C# doesn't support downcasting.
1247 2006-10-18 Richard Dale <rdale@foton.es>
1249 * Enum return types were failing with an invalid cast error.
1250 They are now created correctly with a Enum.ToObject() call.
1251 * Regenerated the QDBus* classes from the Qt 4.2 headers
1253 2006-10-18 Arno Rehn <arno@arnorehn.de>
1255 * Implemented a very ugly hack to construct a QMainWindow in C++ and set
1256 the resulting smokeqyoto_object to the C#-instance. This fixes the
1257 QDockWidgets not being movable.
1260 2006-10-18 Arno Rehn <arno@arnorehn.de>
1262 * Added a methodCache, so if a methodId has already been looked up it can
1263 be retrieved from the methodCache.
1265 2006-10-15 Richard Dale <rdale@foton.es>
1267 * When there was more than one possible candidate for a method in the
1268 Smoke library, the SmokeInvocation code was just choosing the first one
1269 it found. Added some code to select the one that matched the SmokeMethod()
1270 type signature annotation. Fixes problem reported by Arno Rehn.
1272 2006-10-06 Arno Rehn <arno@arnorehn.de>
1274 * Fixed some problems with enums in uics.
1275 * Fixed problem where SetupUi() and RetranslateUi() weren't accessible
1276 due to a missing 'public'
1278 2006-10-06 Arno Rehn <arno@arnorehn.de>
1280 * Copied over some fixes from QtRuby:
1281 * Fixed a bug in slot return values where they were only
1282 working when a signal was emitted in Ruby, and not when
1283 a C++ signal was emitted. The zeroth element in the array
1284 of 'void*'s passed to qt_metacall() was being overwritten
1285 by a pointer to the result of the slot invocation. Instead
1286 the pointer in the zeroth element is now correctly deref'd,
1287 and the result put where it points to.
1289 2006-10-06 Arno Rehn <arno@arnorehn.de>
1291 * Implemented Q_CLASSINFO and Q_SCRIPTABLE attributes.
1292 * Fixed an error in the automatic signature generation when return type was
1295 2006-10-04 Arno Rehn <arno@arnorehn.de>
1297 * Now slot return values should work, but didn't test it.
1299 2006-10-03 Arno Rehn <arno@arnorehn.de>
1301 * Fixed crash when constructing a QSpacerItem (may need improvement)
1302 * Fixed crash when GetSmokeObject() was called without a proper InstanceHandle
1304 2006-09-23 Richard Dale <rdale@foton.es>
1306 * Fixed crash when a class didn't have any signals defined
1308 2006-09-23 Arno Rehn <arno@arnorehn.de>
1310 * The signatures for slots and signals are now autogenerated, so it's not necessary
1311 anymore to specify them by hand. It's still possible, though.
1312 * The signal signatures are now stored in a Hashtable, too.
1314 2006-09-22 Arno Rehn <arno@arnorehn.de>
1316 * The return type of a slot is now being added to the definition in the QMetaObject
1317 * Added a struct which holds the MethodInfo, the signature and the return type of a slot.
1318 This struct is now the 'Value' in the Slot-Hashtable
1320 2006-09-17 Richard Dale <rdale@foton.es>
1322 * Applied patches from Arno Rehn:
1323 * Added the code from QtRuby to marshall slot return types
1324 * TODO: add code to parse the return type in a Q_SLOT() attribute, and add it
1325 to the slot's definition in the QMetaObject
1327 2006-09-11 Richard Dale <rdale@foton.es>
1329 * Applied patches from Arno Rehn:
1330 * Fixed a bug in emitting signals where the arguments were being
1331 wrongly copied from the C# argument array to the smoke stack
1332 with an 'off by one' error.
1333 * A Qt.dll is now built by the makefile instead of all the sources
1334 always all being compiled.
1336 2006-08-24 Richard Dale <rdale@foton.es>
1338 * Applied patches from Arno Rehn:
1339 * Prevent crash when a custom slot was defined with no arguments
1340 * Fix crash when on application exit by deleting the qApp
1341 QApplication instance
1343 2006-07-16 Richard Dale <rdale@foton.es>
1345 * Regenerated the C# sources from the Qt 4.2 headers
1347 2006-06-08 Richard Dale <rdale@foton.es>
1349 * Add SmokeMethod() attribute to destructors
1350 * More list arguments are now C# ArrayLists
1352 2006-06-09 Paolo Capriotti <paolo.capriotti@gmail.com>
1354 * Added example t10.
1356 2006-06-09 Paolo Capriotti <paolo.capriotti@gmail.com>
1360 2006-06-09 Paolo Capriotti <paolo.capriotti@gmail.com>
1362 * Added example t8. It almost works.
1363 * Fixed resolve_classname.
1364 * Added IDisposable to QObject's parents.
1365 * Fixed off-by-one error when handling arguments in
1366 SmokeInvocation.InvokeMethod.
1368 2006-06-08 Richard Dale <rdale@foton.es>
1370 * Example t7 now works, which means that both custom slots
1371 slots and signals work.
1372 * At present an Emit() method and signals interface is
1373 needed for classes which don't have any custom signals
1374 * The example wasn't working because the slots and signals
1375 had return types of 'void', and slot/signal return values
1376 haven't been implemented yet.
1378 2006-06-08 Paolo Capriotti <paolo.capriotti@gmail.com>
1380 * The overriden MetaObject is now called in place
1382 * make_metaObject didn't create the parent meta object
1383 correctly. Modified it so that it calls the parent version
1385 * Slot arguments are now handled correctly.
1386 * Added static IsSmokeClass method to Qyoto.
1388 2006-06-08 Richard Dale <rdale@foton.es>
1390 * Added the QtDBus classes
1392 2006-06-07 Paolo Capriotti <paolo.capriotti@gmail.com>
1394 * Changed all occurences of Qt namespace to Qyoto in qyoto.cpp
1395 * Restored the _smokeObject field in QObject.
1397 2006-06-06 Richard Dale <rdale@foton.es>
1399 * Added a Q_SCRIPTABLE attribute for dbus support
1400 * The Qt class needs to be a MarshallByRefObject instance for
1401 transparent proxies to work with its subclasses
1402 * Added a Q_CLASSINFO attribute for dbus support
1404 2006-06-05 Richard Dale <rdale@foton.es>
1406 * QObject is now a subclass of Qt, as suggested in the previous
1408 * The Qyoto classes are now in a namespace called 'Qyoto' rather
1409 than 'Qt'. It would probably be best to make QObject.cs a sub
1410 class of Qt, to avoid needed to prefix SLOT() and SIGNAL() with
1411 'Qt.' in QObject subclasses.
1412 * Added QObject.MetaObject() as specified by Paolo for custom slots
1414 * Fixed the 'Hello.cs' example to work with the new namespace
1416 2006-06-02 Richard Dale <rdale@foton.es>
1418 * Invocations of signals via the qt_metacall() C function
1419 are now special cased, and QMetaObject::activate() is used
1420 to call them. C# slots are still invoked via the InvokeSlot
1422 * Fixed bug when emitting signals for pointer arg types
1423 * setMocType() now works with reference types when there
1424 in no corresponding value type in the Smoke lib.
1426 2006-05-31 Paolo Capriotti <paolo.capriotti@gmail.com>
1428 * Avoided some useless method calls to handle qt_metacall
1429 (removed InvokeMetaCallMethod and QyotoMetaCall)
1430 * Fixed QMetaObject creation
1431 * data and stringdata are now copied in C++ code to prevent
1433 * Changed data in QMetaObject to an array of uint instead of int.
1434 * Removed the void** marshaller since it was unneeded.
1435 * Partially implemented custom slot invocation.
1436 * Added tutorial 7 (doesn't work yet).
1438 2006-05-31 Richard Dale <rdale@foton.es>
1440 * Moved the tutorial examples to examples/tutorial
1442 2006-05-31 Paolo Capriotti <paolo.capriotti@gmail.com>
1444 * Added a void** marshaller in handler.cpp (needed for qt_metacall).
1445 * Decommented InvokeSlot and ported to qt4 (invokeSlot() method still empty).
1446 * Added some code to intercept a qt_metacall and invoke the corresponding slot (doesn't work yet).
1447 * Rewritten Hello.cs to test custom slot invocation.
1449 2006-05-30 Richard Dale <rdale@foton.es>
1451 * Applied patch from Arno Rehn for bringing the Qt3 version of Qyoto
1452 up to date with the Qt4 one wrt Paulo's changes
1454 2006-05-29 Richard Dale <rdale@foton.es>
1456 * More fixes from Paulo:
1457 * To avoid virtual method dispatch resulting in infinite loop, the
1458 meta object instance is now created in c++ code using smoke (just as
1460 * Qyoto.GetMetaObject now works for Qt types as well
1461 * Decommented code in set_obj_info. This function is used by the
1462 return value marshaller for non-primitive types and by
1465 * Added patch from Paulo Capriotti to create a QMetaObject at runtime
1466 for a Qyoto class with custom slots and/or signals
1468 2006-05-26 Richard Dale <rdale@foton.es>
1470 * Added code from Arno Rehn to access obtain the return value of
1471 a classes Emit() method as an interface and obtain the C++ signal
1472 type signatures and set them up in HashTables with a top level
1473 table with the classes as keys, containing sub tables with the
1474 C++ signatures as keys which map onto the correponding C#
1475 MethodInfo as a value
1476 * Some fixes from Paolo Capriotti:
1477 * Added fix for a crash in SmokeInvocation.cs when a class with
1478 virtual methods wasn't a subclass of Qt
1479 * The code for emitting signals now works with Qt4
1480 * The code in QObject.cs to set up the transparent proxy Q_EMIT
1481 for an instance's signal interfaces now works.
1483 2006-05-26 Richard Dale <rdale@foton.es>
1485 * The Hash table to get a marshaller given a type name wasn't working.
1486 Thanks to Paolo Capriotti for the fix.
1490 * C# bindings roughly converted from Qt3 to Qt4. (doesn't work yet).
1492 2006-05-01 Richard Dale <Richard_Dale@tipitina.demon.co.uk>
1494 * Regenerated the Qt4 *.cs sources
1496 2006-02-14 Richard Dale <Richard_Dale@tipitina.demon.co.uk>
1498 * Added a TODO list, and this ChangeLog to the project