* Look in all loaded Assemblies for types in lists that might not be in
[kdebindings.git] / csharp / qyoto / ChangeLog
blob130c7688abb8648d1d1e21998be0ca361aa36370
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
15           that QVariant holds.
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
33           'MocArgument *'.
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
48           qt one.
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
58           is initialized.
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
103           C++ to C# name maps.
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
133           this:
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 
141           links
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
150           lines of code.
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);
160                 });
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
163           Connect<int>(...)
165 2008-05-16  Richard Dale  <richard.j.dale@gmail.com>
167         * After the modular smoke changes, the QtWebKit classes were not being
168           built
169         * Rename the 'modules' global variable qyoto_modules to reduce the chances
170           of a name clash
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 
184           noticing
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
190           'smokeObject'.
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
200           sources
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
210           a uint
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
217           generation
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
227           the GCHandle.
228         * Added implicit type conversions for QUrl.
229         * Fixed generation of ToolBarArea and DockWidgetArea related stuff in
230           uics.
231         * Improved Qyoto.GetPrimitiveString()
233 2007-08-09  Richard Dale  <rdale@foton.es>
235         * Added some missing implicit type conversions to better match 
236           the C++ api
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
265           package)
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
286           aren't needed
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
305           problems
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>
316         * Added README
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
325                   install them.
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
342           macros
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
383           to be copied back.
384         * Added a marshaller for 'short&' and 'short*' arg types
385         * Attempted to add a QyotoHash function that will compile on 64 bit 
386           machines
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
422           delegate anymore.
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>
437         
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
457           change.
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
463           the assembly.
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
474           public methods.
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 
486           classes
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*
491           classes
493 2007-04-03  Richard Dale  <rdale@foton.es>
495         * No need to special case the metaObject() method any more when caching 
496           smoke method ids
497         * After a smoke method has been called, free the GCHandle for the instance
498           on the C# side
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
504           its C++ base class.
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
507           work.
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, 
518                                                                 string signature, 
519                                                                 Type returnType, 
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) {
527                         CreateProxy();
528                         interceptor.Invoke(     "QPoint$$", 
529                                                                 "QPoint(int, int)", 
530                                                                 typeof(void), 
531                                                                 typeof(int), xpos, typeof(int), ypos);
532                 }
535 2007-03-27  Richard Dale  <rdale@foton.es>
537         * When a reference in the weak reference map is found to be dead, remove
538           it from the map
539         * Fixed bug in debugging logging where weak refs were wrongly being
540           labelled as dead
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;
591                 }
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 
597                         new instance
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
609           no apparent reason.
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
631           from C++
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
646           need casting at all.
647         * When marshalling pointer lists from C++ to C# use the 
648           'resolve_classname()' function to get a more accurate name of the class
649           to instantiate.
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
657           created twice
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:
668                 1) Enums
669                 2) Properties
670                 3) Methods not converted
671                 4) Instance methods
672                 5) Static methods
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
678           these methods public
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
695           as 'new'
696         * Classes with pure virtual methods are now 'abstract' as are the pure
697           virtual methods.
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 
700           changes
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
704           generated code
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
710           were just noise
711         * Don't generate destructors for the Qt class as it only has static 
712           methods
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
732           can now be selected.
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
754                   and call them
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.
769         
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
781           problem on Mac OS X
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
812           longer called.
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>
819           as a cache instead.
820         * When a destructor has been called, remove the item from the weak 
821           reference map
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
832           delete the instance.
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
861           constructor
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
887           builds working
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
914           a for loop
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
935           Example usage:
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 
941           it are in Qt.cs
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,
951           for example:
953                 [SmokeMethod("eventFilter", "(QObject*, QEvent*)", "##")]
954                 public virtual bool EventFilter(QObject arg1, QEvent arg2) {
955                         return ProxyQObject().EventFilter(arg1,arg2);
956                 }
958         * There are four properties to access the values of a SmokeMethod.
959           For example:
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);
995                 }
997           And a static method is defined like this:
999                 [SmokeMethod("sessionBus", "()")]
1000                 QDBusConnection SessionBus();
1001                 ...
1003                 public static QDBusConnection SessionBus() {
1004                         return StaticQDBusConnection().SessionBus();
1005                 }
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
1031           and qyoto.cpp
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
1065           Q_SLOTS.
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 {
1079                         get {
1080                                 return (ICannonFieldSignals) Q_EMIT;
1081                         }
1082                 }
1084                 ...
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
1092           subclasses.
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
1120           C# ulongs.
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
1131           methods.
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
1151           being setup.
1153 2007-14-01  Paolo Capriotti  <paolo.capriotti@gmail.com>
1155         * Ported most of the .NET 1.1 code to .NET 2.0
1156         
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#
1172           DateTime class
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
1211           superclass
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
1235           (not tested yet)
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.
1258           Needs improvement!
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
1293           void.
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>
1358         * Added example t9.
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
1381           of the qt version.
1382         * make_metaObject didn't create the parent meta object
1383           correctly. Modified it so that it calls the parent version
1384           of metaObject().
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
1407           commit.
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
1413           and signals.
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
1421           class.
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 
1432                   garbage collection.
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
1459           in qtruby).
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
1463           make_metaObject.
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.
1488 2006-04-21  sedwards
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