* A problem has been found with QtRuby when it is run with Ruby 1.9.1
[kdebindings.git] / ruby / qtruby / ChangeLog
blob87688f17ce3607c713e7a4586c85b4b3ab734b21
1 2009-03-16  Richard Dale  <richard.j.dale@gmail.com>
2         * Make the dispose() method always return nil. Otherwise, when an instance
3           is deleted from within irb, it makes irb crash when it tries to run
4           run inspect() on the newly deleted value returned by dispose(). Thanks
5           to Stefano Crocco for finding the problem.
6         * A problem has been found with QtRuby when it is run with Ruby 1.9.1
7           and GC.stess is true. Thanks to Davor Ocelic for reporting it.
8           In the smokeruby_mark() function called during garbage collection, 
9           any virtual methods which are called on the instances being checked 
10           could have overriden by Ruby methods.  So the Wt::Ruby runtime uses 
11           'respond_to()' to find out whether they have been overriden.
12           However, this involves calling 'rb_intern()' on the method name,
13           which means memory could be allocated, giving an error when running under
14           GC.stress mode. So workround it by pre-allocating any strings with
15           rb_intern() for all the C++ methods used in smokeruby_mark()
17 2009-03-13  Richard Dale  <richard.j.dale@gmail.com>
18         * Improved the rbqtapi '-s' option
20 2009-03-11  Richard Dale  <richard.j.dale@gmail.com>
21         * Rewritten the rbqtapi command line tool to simplify the code
22                 - Added a '-r' or '--require' option for specifying QtRuby extension.
23                   This means that there is no longer a need for different sym links to
24                   the script for each QtRuby extension.
25                 - One or more class names can be specifed. If no class name is given
26                   it means that all of the classes in the loaded QtRuby extensions 
27                   should be searched
28                 - A '-s' option attempts to show matching methods with Ruby types
29         * Removed the rbqtsh program as it was never really very useful
30         * The 'Type' enum was not working with the Qt::Graphics* classes, and so
31           special case them as Ruby constants
33 2009-03-10  Richard Dale  <richard.j.dale@gmail.com>
34         * Change the license text in the QtRuby headers to LGPL
36 2009-03-02  Richard Dale  <richard.j.dale@gmail.com>
37         * Add method_missing and const_missing handlers for top level modules such
38           as Soprano
40 2009-02-25  Richard Dale  <richard.j.dale@gmail.com>
41         * Restored the note in the COPYING file about having permission from 
42           Trolltech, now Qt Software, to use the 'Qt' in QtRuby.
44 2009-02-07  Richard Dale  <richard.j.dale@gmail.com>
45         * Add a Qt::dynamic_cast method as a synonym with a less clunky name for 
46           Qt::Internal.cast_object_to
48 2009-02-04  Richard Dale  <richard.j.dale@gmail.com>
49         * In Ruby 1.9.1 the arity of a block with no arguments is 0, whereas in 
50           Ruby 1.8.x it is -1. This meant that blocks passed to QtRuby 
51           constructors with no args weren't working with Ruby 1.9.1
53 2009-02-02  Richard Dale  <richard.j.dale@gmail.com>
54         * Set up a RUBY_VERSION macro to use to test for whether QtRuby is being 
55           built for Ruby 1.9 or not. Add patches from Mr Napalm for building with
56           Ruby 1.9, for the new 'per string' encoding. Also add conditional code
57           for whether to use the new rb_frame_callee() function or the old
58           rb_frame_last_func() one.
60 2009-02-01  Richard Dale  <richard.j.dale@gmail.com>
61         * The construct_copy() function was using the full classname of the class
62           to construct which meant that it didn't work with classnames containing
63           '::' scope operators. So strip out the scope part of the classname to
64           create the consructor name.
65         * Make Qt::Internal#try_initialize catch a ':newqt' symbol rather than a 
66           string.
68 2009-01-14  Richard Dale  <richard.j.dale@gmail.com>
69         * For the enum values whose names clashed with Ruby classes, make them
70           Qt::Enums instead of just Fixnums
72 2009-01-13  Richard Dale  <richard.j.dale@gmail.com>
73         * Upped the QtRuby version number to 2.0.0
74         * Special cased some constants whose names clashed with Ruby classes. 
76 2008-12-19  Richard Dale  <richard.j.dale@gmail.com>
77         * When the construct_copy() function was used to copy and instance, it
78           wasn't initializing the binding for the new instance. This caused a
79           crash when the destructor for the instance tried to make a callback with
80           the null binding. Fixes a crash in a Qt::Image destructor reported by David
81           Palacio
83 2008-12-18  Richard Dale  <richard.j.dale@gmail.com>
84         * Added another patch from Davor Ocelic for Ruby 1.9 compatible RSTRING 
85           usage - thanks Davor
87 2008-12-12  Richard Dale  <richard.j.dale@gmail.com>
88         * When resolving overloaded methods with 'uchar*' and 'const uchar*' arg
89           types prefer the non-const version of the arg. Thanks to Davor Ocelic
90           for explaining why this was a good idea in the case of the Qt::Image
91           constructors.
92         * Revert the recent change for marshalling 'unsigned char*' types which
93           expected them to be null terminated. After more thought it is pretty
94           likely they won't be null terminated because if they were they would
95           have been defined as just 'char *' instead. It better to have a clear
96           message saying they aren't supported and need special casing, rather
97           than needing to track down possible random buggy effects.
98         * Added Davor Ocelic's patch for Ruby 1.9 compatible RSTRING usage and
99           improved instructions for building QtRuby without KDE.
100         * When an overriden virtual method with a non-const QVector/QList argument
101           was called, such as Generator.openDocument() in Okular, the Ruby values
102           in the Ruby Array were not being converted back to the values in the
103           C++ list after the method call. Thanks to David Palacio for the bug
104           report.
106 2008-12-11  Richard Dale  <richard.j.dale@gmail.com>
107         * Make some changes from the patch at 
108       http://napalm.sf.cz/qt4-qtruby-ruby1.9.patch to make it easier to port
109           qtruby to Ruby 1.9. Thanks to Davor Ocelic and Mr Napalm.
111 2008-12-10  Richard Dale  <richard.j.dale@gmail.com>
112         * Special case the Qt::Image.bits() method. Use the const variant so that
113           Qt doesn't make a deep copy. Is that what Davor Ocelic and David Palacio
114           would like it to do?
115         * For other uses of 'uchar *' return types add a marshaller, hoping that
116           will be null terminated.
117         * Add a Qt::Image.scanLine() method
119 2008-12-09  Richard Dale  <richard.j.dale@gmail.com>
120         * Added an ancestors() method to Qt::Base that returns an Array of the
121           super classes of a class in the Smoke library. For instance:
123                 irb(main):001:0> Qt::Widget.ancestors
124                 => [Qt::Widget, Qt::Object, Qt::PaintDevice, Object, Kernel]
126         * Fixed regression caused by adding to Qt::Object.connect() the feature
127           to connect an arbitrary ruby method to a signal. It was causing the
128           standard three argument form of connect() to not work.
129         * Renamed the QHash of smoke index against class name as 'IdToClassNameMap'
130           instead of 'classname'.
131         * The child items of a QGraphicsItem are marked as not needing garbage
132           collection of they have corresponding ruby instances.
134 2008-12-04  Richard Dale  <richard.j.dale@gmail.com>
136         * From Bartosz Wadolowski (thanks for the patch):
138         unsigned char* marshalling in qtruby didn't work. The patch works as char* 
139         case does - I simply copied code and added one casting.
140         It also fixes method matching with string argument in qtruby4.rb. In
141         cases when method could take constant or regular (unsigned)char
142         pointer Qt::Internal.checkarg was returning the same value. Now in
143         case of constant arguments it returns lower value. I also made this
144         part of code a little bit more readable.
145         Those changes made possible to use those QImage constructors and
146         probably some other methods:
148           QImage ( uchar * data, int width, int height, Format format )
149           QImage ( const uchar * data, int width, int height, Format format )
150           QImage ( uchar * data, int width, int height, int bytesPerLine, Format 
151                format )
152           QImage ( const uchar * data, int width, int height, int bytesPerLine,
153                           Format format )
155         IMPORTANT NOTE:
156         Some Qt/KDE objects use Ruby String*, passed as (unsigned )char*
157         method argument, as internal buffer/array(call it as you like). In
158         those cases programmer need to make sure that Ruby String object is
159         not being garbage collected or changed(in most cases) for the time its
160         being used by Qt/KDE object. It is also quite possible that Qt/KDE
161         object will change Ruby String (or rather its internal C char array).
163 2008-11-24  Richard Dale  <richard.j.dale@gmail.com>
164         * Added a DEF_MAP_MARSHALLER() macro for defining marshallers for
165           QMaps with QString keys and value types as the values
166         * The YAML library was adding a y() method to Kernel, which was messing
167           up the inspect() methods for Qt::Rects and Qt::RectFs. So instead of
168           calling y(), call self.y() instead. Thanks to Stefano Crocco for the
169           bug report and fix.
171 2008-11-17  Richard Dale  <richard.j.dale@gmail.com>
172         * Comparisons between Qt instances and nil were causing QtRuby to
173           crash. Fixes bug reported by Stefano Crocco.
175 2008-09-22  Richard Dale  <richard.j.dale@gmail.com>
177         * Rename get_VALUEtype() as value_to_type_flag()
178         * Change the inspect() method for Qt::Rects and RectFs to use the
179           Qt4 convention of x, y, width, height
180         * module_method_missing() had the Qt:: module hard wired into it, and
181           so constants in other modules wouldn't be found
183 2008-08-22  Richard Dale  <richard.j.dale@gmail.com>
185         * Argument types of 'unsigned short' were not being matched in the 
186           overloaded method resolution code which was causing a Qt::KeyEvent
187           constructor to fail. Fixes a problem reported by Stefano Crocco.
189 2008-08-18  Richard Dale  <richard.j.dale@gmail.com>
191         * The disposed? method was round the wrong way, and true if an instance
192           had not been disposed. Thanks to Stefano Crocco for finding the bug.
194 2008-08-12  Richard Dale  <richard.j.dale@gmail.com>
196         * The new qobject_cast() method was wrongly changing the smoke classId of
197           the Ruby source instance. This was messing up method calls such as
198           empty?, and fixes a problem reported by Stefano Crocco (thanks again
199           Stefano for all these reports!).
201 2008-08-11  Richard Dale  <richard.j.dale@gmail.com>
203         * Added a qobject_cast() method that uses qt_metacast() to cast one 
204           instance of QObject to another. This allow the KTextEditor:: 
205           interface classes to be used. Fixes a problem reported by Stefano
206           Crocco. Example usage:
208                 doc = KTextEditor::EditorChooser.editor('katepart').create_document( nil)
209                 annotator = doc.qobject_cast(KTextEditor::AnnotationInterface)
210         * Special case the Qt::SignalMapper#mapping and Qt::SignalMapper#setMapping
211           methods so they work with both Qt::Object and Qt::Widget arguments as it
212           confuses the method overloading resolution code at present.
213         * Add lower case/underscore methods as well as camel case for special cased
214           methods
216 2008-08-10  Richard Dale  <richard.j.dale@gmail.com>
218         * Fix a bug reported by Stefano Crocco where primitives types and QStrings
219           were not working as arguments to slots and signals in smoke libs outside
220           the qt one.
222 2008-08-07  Richard Dale  <richard.j.dale@gmail.com>
224         * Fix the Qt::CoreApplication constructor so it handles the ARGV array
225           correctly
227 2008-07-28  Richard Dale  <richard.j.dale@gmail.com>
229         * The code to look up the types of slot arguments was failing for types
230           in the KTextEditor library
232 2008-07-21  Richard Dale  <richard.j.dale@gmail.com>
234         * Qt::Variant.fromValue() and Qt::Variant.value() now both work correctly
235           with custom types, after a regression in the change to modular smoke. 
236           It should no longer be necessary to use qVariantValue() or 
237           qVariantFromValue().
238         * In the smoke library method calls for pure virtual methods were not
239           being generated, only callbacks to override them. However, that
240           meant that interfaces which were based on classes with pure virtual
241           methods, with private implementation classes wouldn't work. This fixes
242           a problem reported by Stefano Crocco where he found the ktexteditor
243           ruby extension didn't work.
245 2008-07-20  Arno Rehn  <arno@arnorehn.de>
247         * Put the classes derived from Marshall in the 'QtRuby' namespace.
248         * Set the SmokeBinding for each class individually by calling the
249           method with index 0 on the instance.
251 2008-07-18  Richard Dale  <richard.j.dale@gmail.com>
253         * Fixed the Qt::Application constructor so that it can subclassed. Thanks
254           to Stefano Crocco for reporting the bug
256 2008-07-13  Cyrille Berger  <cberger@cberger.net>
257   * Reverting kross2smoke to use a pointer, since that what kross use for now.
259 2008-07-13  Richard Dale  <richard.j.dale@gmail.com>
261         * Remove the smoke2kross() function as it isn't needed anymore. Change
262           the kross2smoke() function so that it assumes Kross will return a 
263           pointer to a pointer, instead of just a pointer to the C++ instance.
265 2008-07-12  Richard Dale  <richard.j.dale@gmail.com>
267         * Change the layout of the smokeruby_object struct so that the ptr to
268       the C++ instance is at the start. This should make it easier for
269           QtRuby to interoperate with Kross
270         * The type of a slot arg should always be in the smoke module of the slot
271           being invoked. However, that isn't true for a dataUpdated() slot in a 
272       PlasmaScripting::Applet. So make GetMocArguments search through all the
273           loaded smoke modules if the arg type isn't found at first.
274         * In the GC mark function the tests for a QObject type had gone missing, so
275           restore it.
277 2008-07-11  Cyrille Berger <cberger@cberger.net>
279         * Make it possible to call set_qtruby_embedded from ruby.
281 2008-07-03  Richard Dale  <richard.j.dale@gmail.com>
283         * Fixed bug in the rbuic4 tool where a QPixmap constructor was not being
284           converted to ruby correctly. Thanks to Henrik Tikanvaara for reporting
285           the error.
287 2008-06-30  Richard Dale  <richard.j.dale@gmail.com>
289         * When a ruby value was marshalled to C++, and the actual type of
290           the C++ instance was cast to the type of the return value, it
291           was working correctly if the target type for the cast wasn't in
292           the same smoke module as the type of the instance. For instance,
293           an instance of type Plasma::Applet wasn't being correctly cast
294           to a QGraphicsLayoutItem, which caused a crash.
295         * Fixed a similar bug to the above description, but for where the target
296           of a method call was being cast to the correct class. For instance,
297           a call of parentWidget() on a Plasma::Applet() needed the correct cast
298           to a QWidget for it to work. This fixes the strange error messages in
299           Plasma applets like the clock, about zero pixmap sizes and QPainter
300           problems.
302 2008-06-28  Arno Rehn  <arno@arnorehn.de>
304         * Special case QDBusVariants in SlotReturnValue and make it behave
305           like the moc. This makes the complexpingpong example work.
306           Maybe more things need to be special cased, like in
307           SigSlotBase::prepareReturnValue().
308         * Add special cases for lists and maps to
309           SigSlotBase::prepareReturnValue().
310         * Add 'QList<QObject*>' to the handlers array.
311         * Small fixes to complexping.rb.
313 2008-06-23  Richard Dale  <richard.j.dale@gmail.com>
315         * Change prepareQtReturnType from a standalone function to a method
316           in the SigSlotBase class. It should work with int types, and fix
317           the bug reported by Stefano Crocco.
319 2008-06-22  Richard Dale  <richard.j.dale@gmail.com>
321         * Fix bug in resolve_classname_qt() caused by missing break statments
322         * Move list marshaller macro definitions to the top of the 
323           marshall_macros.h header, and add a DEF_HASH_MARSHALLER macro
324         * Add a set_qtruby_embedded() function to qtruby for use with plugins
325           like plasma
327 2008-06-20  Arno Rehn  <arno@arnorehn.de>
329         * Fix bug reported by Stefano Crocco. qt_metacall tried to write
330           data via an uninitialized pointer.
332 2008-06-20  Richard Dale  <richard.j.dale@gmail.com>
334         * Partly fix bug reported by Stefan Crocco - this explains why a slot
335           return value of type QPoint was nil. However, it's value is wrong,
336           and the problem with a QString return value crashing is still not
337           explained.
339 2008-06-13  Richard Dale  <richard.j.dale@gmail.com>
341         * Remove unnecessary special casing for Qt::TextEdit::ExtraSelection,
342       just make it an ording QtRuby class instead of a Struct, and add a 
343           marshaller for QList<QTextEdit::ExtraSelection>
345 2008-06-14  Arno Rehn  <arno@arnorehn.de>
347         * Since every smoke module defines a class 'QGlobalSpace', don't rely
348           on Smoke::classMap and search every smoke module for methods of this
349           class.
351 2008-06-13  Richard Dale  <richard.j.dale@gmail.com>
353         * Pass the resolve_classname() functions a 'smokeruby_object *' so that
354           they can change the smoke lib and classId on it.
355         * Added Qt::KeySequence inspect and pretty_print methods
357 2008-06-12  Richard Dale  <richard.j.dale@gmail.com>
359         * When resolve_classname_qt() was given a class outside the Qt smoke
360           library, such as KAction, it was failing to resolve it. This was
361           because it was only looking in the smoke library of the arg type
362           declared in the method. Hence, an arg type of 'QAction' was not
363           being resolved to 'KAction'. Thanks to Stefano Crocco for reporting 
364           the bug.
366 2008-06-09  Richard Dale  <richard.j.dale@gmail.com>
368         * The rb_id2name() function has changed to return a 'const char *'
369           in Ruby 1.8.7, which meant the QtRuby wouldn't compile. So attempt
370           to make it build on both 1.8.6 and 1.8.7. Thanks to Stefano Crocco
371           for reporting the bug.
373 2008-06-08  Richard Dale  <richard.j.dale@gmail.com>
375         * Move the template based List marshallers to a new header
376           marshall.macros.h and add marshallers for QLinkedList types
378 2008-06-05  Richard Dale  <richard.j.dale@gmail.com>
380         * Make the template based QList marshallers more DRY by moving them
381           to marshall_complex.h instead of copied into every extension.
383 2008-06-04  Richard Dale  <richard.j.dale@gmail.com>
385         * Make it possible to include marshall_basetypes.h so that korundum
386           can build
388 2008-05-31  Arno Rehn  <arno@arnorehn.de>
390         * Updated qtruby.cpp's header.
392 2008-05-29  Richard Dale  <richard.j.dale@gmail.com>
394         * Fixed bug in the FindAllMethods() f'n, and made the debug logging work
395           when a method couldn't be found in do_method_missing()
397 2008-05-28  Richard Dale  <richard.j.dale@gmail.com>
399         * The enum Qt::Process::StandardError was clashing with the exception of
400           the same name, so add a constant to the Qt::Process class instead. 
401           Thanks to Stefano Crocco for reporting the bug.
403 2008-05-22  Arno Rehn  <arno@arnorehn.de>
405         * Fixed dumpCandidates().
407 2008-05-19  Richard Dale  <richard.j.dale@gmail.com>
409         * The method selector cache function had an off by one error, which meant
410           it assumed there was one more argument to a method than there actually
411           was. This caused a crash. Why such a major problem hasn't caused any
412           problems before is a mystery - it wasn't a result of the modular smoke
413           changes.
414         * qtruby4.rb calls Kernel#y instead of Qt::Point#y on inspect and 
415           pretty_print when the yaml gem is loaded.
416           The attached patch fixes the problem by calling Qt::Point#y and 
417           Qt::PointF#y explicitly. Thanks to Paolo Capriotti for the bug report
418           and fix.
420 2008-05-16  Arno Rehn  <arno@arnorehn.de>
422         * Bring qtruby.cpp up to date with the branch-version.
424 2008-05-16  Richard Dale  <richard.j.dale@gmail.com>
426         * Rename the 'modules' global variable qtruby_modules to reduce the chances
427           of a name clash
429 2008-04-29  Richard Dale  <richard.j.dale@gmail.com>
431         * Added a marshaller for references to unsigned ints
432         * Added initialization for the various KDE::ConfigSkeleton classes
434 2008-04-24  Richard Dale  <richard.j.dale@gmail.com>
436         * Fixed a couple of differences between C++ code generation and Ruby.
437           The variable names weren't being stripped of any leading 'q' or 'k',
438           and the brush initialization hadn't been updated for Qt 4.4.
440 2008-04-22  Sebastian Sauer <mail@dipe.org>
442         * Fix reported crash on shutdown if QtRuby is used embedded.
444 2008-04-14  Richard Dale  <richard.j.dale@gmail.com>
446         * Special case the KDE::DateTime and KDE::TimeZone classes so that
447           nested classes, such as KDE::DateTime::Spec work with them. 
448           TODO: make this work automatically without needing extra code.
450 2008-04-10  Richard Dale  <richard.j.dale@gmail.com>
452         * When matching arg types, strip off an '::Ptr' or 'Ptr' at the end
453           of the type. This is to ensure that something like a KDE::Service
454           ruby instance can be passed to a method expecting a type of
455       KService::Ptr
457 2008-04-07  Richard Dale  <richard.j.dale@gmail.com>
459         * Added a QTRUBY_FUNCALL2 macro. If QtRuby is built with the
460           -DRUBY_EMBEDDED option, then the rb_funcall2s for invoking
461           virtual method callbacks and slot invocations in wrapped with
462           a rb_protect() call. Otherwise, rb_funcall() is called directly
463           and any uncaught Ruby exceptions will terminate the app.
464         * Borrowed a function from the kross code to put out an error message 
465           and stacktrace on stderr for the current exception, when qtruby
466           has been compiled with the embedded option.
468 2008-04-06  Richard Dale  <richard.j.dale@gmail.com>
470         * Change the way the 'MocArgument*' structs are created, instead
471           building them up in a Ruby Array, use a QList<MocArgument*>.
472           Move all the code to C/C++ and don't call Ruby anymore.
473         * Add QTRUBY_INIT_STACK and QTRUBY_RESTORE_STACK macros based on
474           the SWIG_INIT_STACK and SWIG_RESTORE_STACK macros. If QtRuby is
475           compiled with a '-DRUBY_EMBEDDED' option, then before each virtual
476           method callback and slot invocation call, which isn't nested
477           within another, call RUBY_INIT_STACK.
478         * This fixes a problem with Ruby Plasmoids where the Ruby runtime was
479           giving sys stackerror exceptions because the stack underflowed
480           relative to where it was when the krubypluginfactory was loaded.
481         * Add more checking for Qnil in the marshallers for primitive types
482           to make the runtime more robust. 
483         * Added some more range=(Range) methods as synonyms for 
484           setRange(Integer, Integer)
485         * Changed the examples to use range=
486         * Added a rbplasmaapi command line tool for introspecting the Ruby api
488 2008-04-05  Richard Dale  <richard.j.dale@gmail.com>
490         * Added rb_protect() wrappers around virtual method callbacks and
491           slot invocations. When there is a Ruby exception, the app no
492           longer terminates which is useful for Plasma applets.
494 2008-04-04  Richard Dale  <richard.j.dale@gmail.com>
496         * Ensure the class and module names in rbuic4 generated code
497           start with an upper case letter, even if they didn't in the
498           .ui file
500 2008-04-03  Richard Dale  <richard.j.dale@gmail.com>
502         * Updated the rbuic4 to be in line with the Qt 4.4 uic code
503         * Added a '-k' or '-kde' option to the rbuic4 tool, used in
504           conjunction with '-x' to generate a KDE app korundum4 test stub
506 2008-04-01  Richard Dale  <richard.j.dale@gmail.com>
508         * Qt::TimeLine.setFrameRange() can now be called like this:
509                 time_line.frameRange = 0..90
510         * Qt::Timer.singleShot can now be called with a block:
511                 timer = Qt::Timer.singleShot(5000, obj) { puts "In a block" }
512         * Thanks to stefo on #kde-bindings for both suggestions
513         * Added a few more 'range=' methods
514         * Fixed range setters so that both 1..10 and 1...10 work properly
516 2008-03-28  Richard Dale  <richard.j.dale@gmail.com>
518         * Added a QList<QTextEdit::ExtraSelection> marshallers as requested
519           by volty on the #qtruby irc channel. Qt::TextEdit::ExtraSelection
520           is a Ruby Struct with cursor and format fields.
522 2008-03-24  Richard Dale  <richard.j.dale@gmail.com>
524         * Attempt to improve the marshalling of WIds and assume they are
525           either signed ints (Mac OS) or signed longs.
527 2008-03-14  Richard Dale  <richard.j.dale@gmail.com>
529         * Fixed a bug in constructing Qt::Variants with custom types such
530           as Soprano::Statement
531         * Added a Soprano:: namespace
533 2008-03-11  Richard Dale  <richard.j.dale@gmail.com>
535         * When a method call began or ended with an underscore, and it
536           was missing from a qtruby instance, it caused ruby to loop,
537           rather than report the method as missing. Thanks to Daniel 
538           Brumbaugh Keeney for reporting the bug.
540 2008-03-04  Richard Dale  <richard.j.dale@gmail.com>
542         * Make symbolic links to rbqtapi as rbqt3api, rbqt4api, rbkdeapi 
543           and rbkde4api
545 2008-03-03  Richard Dale  <richard.j.dale@gmail.com>
547         * Added some marshallers for new Qt 4.4 QList types
549 2008-03-02  Richard Dale  <rdale@foton.es>
551         * The QModelIndex::internalPointer() method was returning nil, as
552           as result of the code change attempting to return nil if the C++
553           pointer is 0. Thanks to CyrilleB for reportin the error
555 2008-02-18  Richard Dale  <rdale@foton.es>
557         * Ignore the WebCore:: and std:: namespaces when loading classes
558         * Added marshallers for the WebKit QList types
560 2007-12-19  Richard Dale  <rdale@foton.es>
562         * The Qt::Polygon and Qt::PolygonF classes had no means of getting
563           the array of Qt::Points that they hold. Added count() and size()
564           methods and made the classes Enumerable, so this is now possible:
566           irb(main):002:0> poly = Qt::Polygon.new([Qt::Point.new(1,2),
567 Qt::Point.new(3,4)])
568           => #<Qt::Polygon:0xb5ee3094>
569           irb(main):003:0> poly.each {|t| p t}
570           #<Qt::Point:0xb5ee0510 x=1, y=2>
571           #<Qt::Point:0xb5ee018c x=3, y=4>
573         * Thanks to Sylvain Sauvage for reporting the problem on the Korundum
574 help forum
576 2007-11-21 ï¿½    Sebastian Sauer <mail@dipe.org>
578         * Fixed crash on shutdown of Ruby cause of a partly destroyed
579           pointer_map QHash.
581 2007-11-19  Richard Dale  <rdale@foton.es>
583         * Slot arguments types of 'uint', 'long' and 'ulong' weren't working.
584           Thanks to maniel for the bug report.
585         * When calling a slot directly, it wouldn't work when then slot had
587           arguments
588         * Special case any classes which are sub classes of
589 QDBusAbstractInterface
590           when calling slots directly as the slots will be remote.
591         * When there is more than one return value in a Qt::DBusMessage the
592 value
593           method now will return a Ruby Array
595 2007-11-18  Richard Dale  <rdale@foton.es>
597         * At the suggestion of Vincent Fourmond added a Qt::DateTime.to_time
598           method which returns a Ruby time. Also enhanced the Qt::DateTime
599           constructor so that it can be passed a Ruby Time.
600         * Qt::Variants containing either QDBusObjectPaths or QDBusSignatures
601           can now be converted to Ruby Strings with a Qt::Variant.value call.
602           Fixes bug reported by maniel on the #qtruby IRC channel.
604 2007-11-12  Richard Dale  <rdale@foton.es>
606         * If QModelIndex.internalPointer() is zero, return Qnil
607         * Don't attempt to mark a zero internalPointer() for the garbage
608           collector. Thanks to cheiron for reporting the bug.
610 2007-11-11  Richard Dale  <rdale@foton.es>
612         * Fixed a regression introduced when slots were made directly
613 callable.
614           It broke the code to invoke remote QtDBus methods because the 
615           remote methods become slots in the QMetaObject of the
616 QDBusInterface
617           being used as a proxy. The code was trying to invoke those slots
618           directly which didn't work. So special case any QMetaObjects which
619           have classNames of "local::Merge" as it means they are remote.
621 2007-10-31  Richard Dale  <rdale@foton.es>
623         * Don't build the qtrubyinternal library anymore as it gave trouble
625           AMD64 machines and needed an '-fPIC' option there. Instead just
626           include the qtruby sources in the korundum (and plasma) projects.
628 2007-10-30  Richard Dale  <rdale@foton.es>
630         * The Qt::KeyEvent#type method wasn't working. Fixes problem reported
631           by Magicloud Magiclouds
633 2007-10-19  Richard Dale  <rdale@foton.es>
635         * Ruby signal declared in superclasses were not being inherited by
636           subclasses correctly. Fixed bug reported by cheiron on the #qtruby
637           irc channel - thanks for the report and test program.
639 2007-10-14  Richard Dale  <rdale@foton.es>
641         * The QScintilla class names now all start with Qsci instead of Qext,
642           so change the QtRuby module name from Qext:: to Qsci::
643         * Fixes a seg fault pointed out by Adreas Pakulat
645 2007-10-08  Richard Dale  <rdale@foton.es>
647         * Added some missing modules for namespaces in the KDE4 classes
649 2007-09-07  Richard Dale  <rdale@foton.es>
651         * Added a kross2qtruby method from Cyrille Berger to convert from a
652 kross 
653           instance to a qtruby instance
654         * Fixed bug in overloaded method resolution where a quint32 was being
655 given
656           equal priority to a qint32 type. Thanks to joseph/vista on #qtruby
658           reporting the bug
660 2007-07-28  Richard Dale  <rdale@foton.es>
662         * Up the version to 1.4.9
663         * Add a Plasma:: module for the plasma classes
665 2007-06-19  Richard Dale  <rdale@foton.es>
667         * Released Qt4 QtRuby 1.4.8 on Rubyforge
668         * Fixed an error in the QGraphicsPixmapItem class which made it
669 impossible
670           to instantiate
671         * Building QtRuby against Qt 4.2 failed because of a reference to 
672           the Qt 4.3 QMdiSubWindow class not being #ifdef'd correctly. Thanks
674           mhlmi on #qtruby irc for reporting these two bugs.
676 2007-06-18  Richard Dale  <rdale@foton.es>
678         * When a Qt::Object is subclassed more than once, a Qt::MetaObject is
679           now correctly constructed for each subclass. Before a half-working
680           hack was used where a Qt::MetaObject containing all the slots and
681           signal of its superclass too, was constructed for the twice
682 sub-classed
683           class. Fixes problems reported by Caleb Tennis amoungst several
684 others.
685         * When a signal is defined, and Ruby method is created to call it.
686 Before
687           the signal methods were only being created when the Qt::MetaObject
689           a class was created. This caused problems if the signal was emitted
690           before the Qt::MetaObject was created. Fixes problem reported for
692           QtRuby by Gadi Aleksandrowicz on the Korundum Rubyforge help forum.
694 2007-06-12  Richard Dale  <rdale@foton.es>
696         * Added some missing list marshallers
697         * Fixed a bug in the resolution of QGraphicsItem subclass names
699 2007-04-19  Richard Dale  <rdale@foton.es>
701         * Fixed a bug in resolving overloaded methods where an enum passed as
703           quint64 arg type needed to be given a lower priority that an
704 Integer one
705         * Added two models useful for Rails ActiveRecord or ActiveResource
706 with Qt
707           widgets
708         * Fixed a bug in the Qt::HttpRequestHeader method() method
710 2007-04-05  Richard Dale  <rdale@foton.es>
712         * Add some marshallers for the QVector types in the new Qt 4.3
713 QXmlStream*
714           classes
715         * Improved the cannon game t14 code
717 2007-03-17  Richard Dale  <rdale@foton.es>
719         * The code to allow the type() method to be used for Qt::GraphicsItem 
720           classes had the wrong names for the classes
721         * Improved the resolution of QGraphicsItem classes in
722 resolve_classname()
724 2007-04-16  Richard Dale  <rdale@foton.es>
726         * Added some marshallers for Qt 4.3 classes
727         * Fixed bug in deleting Qt::StandardItems when they had a parent or
728 model
730 2007-03-13  Richard Dale  <rdale@foton.es>
732         * When a ruby string was converted to a 'char *' arg, a copy was
733 malloc'd
734           and then never freed. This behaviour was added to fix a problem
735 with the
736           small number of methods that 'took ownership' of the string and
737 expected
738           it to stay around after the method call. However, it introduces a 
739           memory leak for the 95% of methods that don't need it, and also
740 means
741           that if the 'char *' is changed during the method call, the changes 
742           aren't reflected in the ruby string. Thanks to Jan Wedekind for the
743           discussion leading up to changing the code. Any methods where this 
744           behaviour is wrong will now need to be special cased.
746 2007-03-06  Richard Dale  <rdale@foton.es>
748         * Call rb_gc_mark() on the internalPointer VALUE within a
749 Qt::ModelIndex 
750           to prevent it being GC'd too early
751         * Added 'double&' and 'double*' marshallers
752         * Fixed memory leak when creating new Qt::ModelIndexes
754 2007-02-27  Richard Dale  <rdale@foton.es>
756         * Added marshallers for QwtArray<double> and QwtArray<int> 
757           (ie QVector<int>)
758         * Added a fix from Knut Franke to make the QVector<double> marshaller
759           work with any sort of Ruby number. Thanks Knut..
761 2007-02-22  Richard Dale  <rdale@foton.es>
763         * Made 'Qt::Variant.new(nil)' a synonym for 'Qt::Variant.new'
765 2007-02-19  Richard Dale  <rdale@foton.es>
767         * Added inspect and pp methods for Qt::MetaEnums
768         * Qt::Variants can be constructed from ruby Dates, Times and
769 DateTimes.
770           Qt::Dates, Qt::Times and Qt::DateTimes can also be constructed from
771           their ruby equivalents as a single arg. This makes it easier to
772           integrate Qt::AbstractItemModels with Rails ActiveRecord and 
773           ActiveResource
775 2007-02-17  Richard Dale  <rdale@foton.es>
777         * If a new Ruby class is created for a custom C++ QObject derived
778 class,
779           then create Ruby constants in the class for any enums defined via 
780           Q_ENUMS which are in the same scope as the new class. For instance:
782                 class TestObject : public QObject
783                 {
784                         Q_OBJECT
785                         Q_ENUMS(Priority)
786                         public:
787                                 enum Priority { High, Low, VeryHigh, VeryLow };
789                 ...
791                 irb(main):001:0> app = Qt::Application.new(ARGV)
792                 => #<Qt::Application:0xb6aaaf58 objectName="irb">
793                 irb(main):002:0> require 'testqobject'
794                 => true
795                 irb(main):003:0> test = app.findChild(Qt::Object, "QtRuby
796 TestObject")
797                 => #<TestObject:0xb6aa5184 objectName="QtRuby TestObject">
798                 irb(main):004:0> TestObject::High
799                 => 0
800                 irb(main):005:0> TestObject::Low
801                 => 1
802                 irb(main):006:0> TestObject::VeryHigh
803                 => 2
805 2007-02-16  Richard Dale  <rdale@foton.es>
807         * Thomas Moenicke fixed the qtruby cmake build so it works on
808           all machines by adding a KDE_EXPORT macro to Init_qtruby4()
809           Big thanks to Thomas and Guillaume Laurent for getting it all
810 working.
811         * Added calling slots directly in custom C++ QObject classes.
812           If a method isn't found in the Smoke library, and the instance is
813           a kind of QObject with a class not in the Smoke library, then look
814           for a slot matching the method name and invoke it. Thanks to Eric
815 Landuy
816           for the idea and discussion leading to implementing it.
817         * Added a check for QtDBus in the qtruby cmake file and set a define
818           of -DQT_QTDBUS if the library was found
819         * Changed the ADD_LIBRARY line in the qtruby cmake file to use MODULE
820           so that a bundle should be built on Mac OS X.
822 2007-02-08  Richard Dale  <rdale@foton.es>
824         * Fixed bugs in the debug dump of QMetaObjects created at runtime
825         * When a block was used as a slot, a new entry was being added to
826           the QMetaObject object every time they were connected. A new
827           entry is now only created if a slot with the same signature didn't
828           already exist.
830 2007-02-04  Richard Dale  <rdale@foton.es>
832         * The ListModel internal class was being wrongly named as TableModel
834 2007-02-01  Richard Dale  <rdale@foton.es>
836         * Added the qdbus/complexpingpong example
837         * Qt::DBusVariant have to be passed Qt::Variants, and a suitable
838           Qt::Variant will be created
839         * Improved the format of debugging info for the contents of a
840 QMetaObject
841         * A Qt::Variant can now be obtained when contained in a
842 Qt::DBusVariant
844 2007-01-31  Richard Dale  <rdale@foton.es>
846         * Added a Qt::DBusVariant class and a marshaller for it
848 2007-01-17  Richard Dale  <rdale@foton.es>
850         * QtRuby was crashing in virtual method callbacks with a memory
851 corruption
852           problem. The stack of ruby VALUES for the arguments to the callback
853 is 
854           now allocated via ALLOCA_N, rather than calloc which cures the
855 crashes.
856         * Changed tabs to spaces in the pixelator example
858 2007-01-15  Richard Dale  <rdale@foton.es>
860         * Code generated with the rbuic tool '-x' option has a require 'Qt4'
861           option. Fixes problem reported by Sylvain Joyeux
862         * Add setup_ui() and retranslate_ui() methods as aliases for the
863 camel
864           case ones as suggested by Sylvain Joyeux
866 2006-12-16  Richard Dale  <rdale@foton.es>
868         * Added the painting/fontsampler example
869         * There is no way to distinguish between the two constructors:
870                  QTreeWidgetItem (const QTreeWidgetItem & other) 
871                  QTreeWidgetItem (QTreeWidgetItem * parent, const QStringList & 
872            strings, int type = Type)
873           when the latter has a single argument. So force the second variant
874 to 
875       be called
876         * Added the desktop/screenshot example
877         * Added the desktop/systray example
879 2006-12-14  Richard Dale  <rdale@foton.es>
881         * Added the painting/svgviewer example
882         * Added the painting/imagecomposition example
883         * Added a convenience method Qt::Image.fromImage() to assign one
884 image
885           from another. This is because the C++ QImage::operator=(const
886 QImage&)
887           method isn't easily called from QtRuby
888         * Fixed do_method_missing() so that 'operator=' methods don't get 
889           transformed into setOperator() methods
891 2006-12-12  Richard Dale  <rdale@foton.es>
893         * Removed the qtrubyinit program as it's a pita to build, and isn't
894 very
895           useful
897 2006-12-04  Richard Dale  <rdale@foton.es>
899         * Add a QMap<int,QVariant> marshaller
900         * When marhalling QMap types with QVariant values, if the Ruby value
901 isn't
902           a Qt::Variant then one is created
903         * Qt::Variants can now be constructed with Hash's of
904 String/Qt::Variant
905           pairs, and from Arrays of Qt::Variants
906         * Custom types know to the QMetaType system, such as some QtDBus
907 types,
908           can be used to construct Qt::Variant via the
909 QMetaType::constructor() call
910         * Fixed a bug in Qt::AbstractItemModel.createIndex() which meant it
911 wouldn't
912           work on 64 bit machines
913         * When marshalling QList<QVariant> types from Ruby to C++, if any
914 elements
915           aren't Ruby Qt::Variants, they are automatically converted. Hence,
917           following will work:
919                 v = Qt::Variant.new([1, 2, 3])
921           The Qt::Variant v will contain a list of 3 QVariants with
922 typeName 'int'
924         * Add an option extra argument to Qt::Variant.fromValue() and
925 qVariantFromValue
926           to specify a type string, for use with QtDBus args. For example:
928                 v = Qt::Variant.fromValue(5, "uint")
930           Will force the Qt::Variant to be a specific type
931         * Change all instances of strcmp() to qstrcmp()
933 2006-11-30  Richard Dale  <rdale@foton.es>
935         * The Qt::KeySequence constructor wasn't working when passed a
936           Qt::Key enum type and it needed to be cast to an Integer via 
937           a to_i() call.
938         * When a Qt::DBusInterface.call() method was invoked without using
939           the call() method, but by calling the method directly, and the
940 method
941           returned a QVariant Qt::DBusArgument value, the QVariant return
942           value was converted to nil.
943         * Fixed some errors in the mainwindows/mdi example, thanks to shirk
944           and |Vargas| for pointing them out.
945           
946 2006-11-23  Richard Dale  <rdale@foton.es>
948         * Made Qt::TreeWidgetItem and Qt::TreeWidget Enumerable
949         * Added a Qt::TreeWidgetItemIterator.current() method to get the
950           current value of the iterator without needing to use 'operator*'
951         * Added inspect() and pretty_print() methods to Qt::TreeWidgetItem,
952           Qt::ListWidgetItem and Qt::TableWidgetItem
953         * Removed instructions for creating a 'rubyw' executable in Mac OS X
954           as it isn't needed anymore with Qt 4.x. Thanks to Hans Fugal for 
955           pointing that out.
957 2006-11-21  Richard Dale  <rdale@foton.es>
959         * The rbuic and rbrcc tools were being built with a .app extension
960           on Mac OS X when using qmake. Fixed the .pro files so this doesn't
961           happen. Thanks to Hans Fugel for reporting the problem.
963 2006-11-15  Richard Dale  <rdale@foton.es>
965         * When Qt::DBusInterface.call() was called with a single argument,
966           it was failing with a method_missing() error. Fixes problem
967           reported by Carsten Niehaus.
969 2006-11-07  Richard Dale  <rdale@foton.es>
971         * Fixed a crash when a slot was inherited by a subclass, and the
972           subclass had no slots or signals of its own
974 2006-10-30  Richard Dale  <rdale@foton.es>
976         * Upped the QtRuby version to 1.4.7 for the RubyForge release
978 2006-10-20  Richard Dale  <rdale@foton.es>
980         * All allocs and frees for the smokeruby_object struct now go through
981           two methods alloc_smokeruby_object() and free_smokeruby_object().
982           Before some instances were being allocated with Ruby's ALLOC, and
983           some with malloc(). Now they are all created with malloc().
984         * Removed a call to ALLOC_N and replaced it will calloc().
986         * Reversed the decision to get rid of ALLOC, and replaced all mallocs
987           with ALLOC and all callocs with ALLOCA_N
988         * Commented out some code that mapped an instance which was allocated
989           in the C++ world onto the corresponding ruby instance. It doesn't
990           work if the C++ address is reused and the Ruby side doesn't know
991           about it.
993 2006-10-19  Richard Dale  <rdale@foton.es>
995         * A Qt::DBusArgument can be obtained via a call to qVariantValue(),
996 like
997           this:
999                 qVariantValue(Qt::DBusArgument, variant)
1001 2006-10-16  Richard Dale  <rdale@foton.es>
1003         * Fixed Qt::DBusInterface.call() so it automatically wraps the
1004 arguments
1005           as Qt::Variants. Thanks to prullmann for testing and finding
1006 problems.
1008         * Improved the pingpong example to be more like the C++ version.
1010 2006-10-13  Richard Dale  <rdale@foton.es>
1012         * Added marshallers for QList<QPair<QString,QString> > and
1013 QGradiantStops
1014           (QPair<qreal,QColor>) types
1016 2006-10-06  Richard Dale  <rdale@foton.es>
1018         * Added the QtDBus pingpong example
1020         * Fixed a bug in slot return values where they were only
1021           working when a signal was emitted in Ruby, and not when
1022           a C++ signal was emitted. The zeroth element in the array
1023           of 'void*'s passed to qt_metacall() was being overwritten
1024           by a pointer to the result of the slot invocation. Instead
1025           the pointer in the zeroth element is now correctly deref'd,
1026           and the result put where it points to.
1028 2006-10-05  Richard Dale  <rdale@foton.es>
1030         * Each rbuic generated class is now wrapped in a Ui module so that as 
1031           well as class 'Ui_Foobar' there is a 'Ui::Foobar' version.
1033         * Added the QtDBus chat example
1035         * Made the Qt::DBusMessage '<<' create a Qt::Variant if the arg
1036 passed
1037           to it wasn't already a Qt::Variant
1039 2006-10-04  Richard Dale  <rdale@foton.es>
1041         * Added the QtDBus remote contoller car example
1043         * Fixed warning messsage caused be the Qt::Variant::Time value
1045 2006-10-03  Richard Dale  <rdale@foton.es>
1047         * Added ruby implementations of
1048 Qt::DBusConnectionInterface.serviceOwner(), 
1049           registeredServiceNames(), isServiceRegistered(), servicePid(),
1050 serviceUid()
1051           and startService()
1053         * Added a Qt::DBusMessage.value() method to return the Ruby value of
1054 the Qt::Variant
1055           at the beginning of the arguments array, or nil if the message
1056 wasn't a ReplyMessage.
1058         * Fixed incorrect Qt::Variant.toUInt() method name
1060         * Added a ruby version of the Qt::DBusReply class
1062         * Converted the qdbus/listnames example to Ruby
1064 2006-10-02  Richard Dale  <rdale@foton.es>
1066         * qVariantFromValue() wasn't working with non-Qt classes as
1067 arguments,
1068           such as Ruby Strings and Integers
1070         * The rbuic4 tool was not setting up slot/signal connections.
1072         * It is now possible to call on a Qt::DBusInterface instance directly
1073 like
1074           this:
1076                 app = Qt::Application.new(ARGV)
1077                 bus = Qt::DBusConnection.sessionBus()
1078                 proxy = Qt::DBusInterface.new(  "org.freedesktop.DBus", 
1079                                                 "/org/freedesktop/DBus", 
1080                                                 "org.freedesktop.DBus", 
1081                                                 bus )
1082                 
1083                 result = proxy.ListNames()
1085                 # result is
1086 ["org.freedesktop.DBus", ":1.0", "com.trolltech.Assistant", ":1.15"]
1088         * Fixed bugs in Qt::Variant where some constants were missing, and
1089 the one for 'String'
1090                 gave a warning
1092 2006-10-01  Richard Dale  <rdale@foton.es>
1094         * The Qt::DBusMessage.type method now works. Fixes problem reported
1095 by 
1096           Peter Rullmann.
1098 2006-09-28  Richard Dale  <rdale@foton.es>
1100         * Redone the rbuic tool based on the Qt 4.2 code with the
1101 ruby-specific
1102           code generation in a 'ruby' subdirectory.
1104         * The rbuic tool has been renamed 'rbuic4' so it can be used at the
1105 same
1106           time as the Qt3 one.
1108         * Changed 'setShortcut' method calls so a string can be passed to
1109 them
1110           as well as a Qt::KeySequence to be more similar to the C++ api.
1112 2006-09-26  Richard Dale  <rdale@foton.es>
1114         * Sym links 'rbqt3api' and 'rbqt4api' to rbqtapi created so that the
1116           and Qt4 apis can still be queried when both QtRuby versions are
1117 installed
1119 2006-09-25  Richard Dale  <rdale@foton.es>
1121         * Renamed 'qtruby.rb' as qtruby4.rb, and qtruby.so as qtruby4.so
1123         * Qt4.rb and Qt3.rb files are installed to allow either Qt3 or
1124           Qt4 versions of QtRuby to be used with require 'Qt4' or 
1125           require 'Qt3' statements
1127         * A Qt.rb symbolic link is created by the install so that by default
1128           a require 'Qt' statement will use Qt4 QtRuby
1130 2006-09-17  Richard Dale  <rdale@foton.es>
1132         * Fixed bug reported by Caleb Tennis where temporary QString const
1133 arguments
1134           were only being deleting after marshalling if they weren't const
1135 types.
1137 2006-09-15  Richard Dale  <rdale@foton.es>
1139         * Fixed bug reported by Henri Sundelin where Qwt classes in .ui files
1140 weren't
1141           being correctly given Qwt:: module namespaces
1143 2006-09-14  Richard Dale  <rdale@foton.es>
1145         * Added a new variant of connect, which takes a SIGNAL as an
1146 argument, along with
1147           a block. For example:
1149                 quit.connect(SIGNAL(:clicked)) { puts 'quit pressed' }
1151           The block is called in the context of where the connect call was
1152 made, and 'self'
1153           needn't be a Qt::Object. It is similar to the signal_connect()
1154 method in
1155           ruby-gnome. This was suggested by rickdangerous on the #qtruby irc
1156 channel.
1158 2006-09-13  Richard Dale  <rdale@foton.es>
1160         * Blocks can now be used as slots in Qt::Object.connect() calls.
1161 There are two
1162           versions, a singleton method and an instance method. 
1164         * Here is an example of the class method connect() call with a block
1165 as a target:
1167                 app = Qt::Application.new(ARGV)
1168                 quit = Qt::PushButton.new('Quit')
1169                 Qt::Object.connect(quit, SIGNAL('clicked()'), app) { puts 'quit
1170 clicked' }
1172           The block is executed in the context of the target instance, 'app'
1173 in this 
1174           case.
1176         * And the instance method form:
1178                 class MyButton < Qt::Button
1179                         def initialize(text)
1180                                 super(text)
1181                                 connect(self, SIGNAL('clicked()')) { puts 'button clicked' }
1182                         end
1183                         ...
1185           The block is executed in the context of self - the instance making
1186 the 
1187           connect() call.
1189         * The Rails version of the Ruby 1.9 method Object#instance_exec was
1190 used
1191           to invoke the block. Thanks to kelko on the #kde-ruby channel for
1193           idea and the code, and rickdangerous for further discussion.
1195 2006-09-04  Richard Dale  <rdale@foton.es>
1197         * The 'default.txt' file was missing from the
1198 itemviews/simpletreemodel
1199           example. Added it, and converted the example to use the rbrcc tool.
1201         * Fixed a bug in the rbrcc compiler in the code generation for the
1202           qt_resource_struct.
1204         * Fixed some bugs in the network/ftp and itemviews/chart examples
1206         * Made marshall_primitives.h compile
1208 2006-08-25  Richard Dale  <rdale@foton.es>
1210         * Fixed bug in the rbuic tool where a QTextEdit::AutoNone value
1211 wasn't
1212           being converted into the Qt::TextEdit::AutoNone qtruby form.
1213 Reported
1214           by #freqmod on the irc channel #kde-ruby.
1216         * Brought the rbrcc code in line with the latest Qt 4.2 version with
1217           changes to the locale handling.
1219 2006-08-21  Richard Dale  <rdale@foton.es>
1221         * Reimplemented the Qt::Object.findChild() and findChildren() methods
1222           using code based on the implementation in qobject.cpp. Fixes
1223 problem
1224           reported by Robert Gstoehl. It is now possible to pass a regular
1225           expression to findChildren() in the same way as the C++ original:
1227                 mywidget.findChildren(Qt::Pushbutton, /^foo/)
1229         * Added a Qt::Object.staticMetaObject method to work round the
1230 problem
1231           of it being missing from the Smoke runtime.
1233 2006-08-18  Richard Dale  <rdale@foton.es>
1235         * Some more leak fixing and minimising use of the heap
1237 2006-08-17  Richard Dale  <rdale@foton.es>
1239         * Used the excellent MallocDebug tool on Mac OS X to track down and
1241           some memory leaks. Some QRegExps and QByteArrays are now allocated
1242           statically to minimise memory usage.
1244 2006-07-18  Richard Dale  <rdale@foton.es>
1246         * The code to change a Ruby 'foo?' method call to a Qt C++ 'setFoo()'
1247 was 
1248           using QStrings to change the text. However, it then converted the
1249 result
1250           to a QByteArray via toLatin() and referenced the contents of the 
1251           QByteArray via a 'const char *' cast when the QByteArray had gone
1252 out of
1253           scope and had been deleted. Thanks to Carlto Wang again for
1254 reporting 
1255       this bug.
1257         * Some of the code for debug logging of garbage collection wrote
1258 spurious
1259           newlines
1261 2006-07-17  Richard Dale  <rdale@foton.es>
1263         * Some QtRuby QHash based caches were defined with QStrings, and when
1264 the value
1265           was accessed the QString was converted to a QByteArray via toLatin
1266 () and then
1267           to a 'char *'. However, the 'char *' only lasted as long as the
1268 QByteArray,
1269           and this caused memory corruption if the 'char *' was still in use
1270 after the
1271           QByteArray was freed. So the QHash's are now defined like this:
1273                 QHash<QByteArray, Smoke::Index *> methcache;
1274                 QHash<QByteArray, Smoke::Index *> classcache;
1275                 QHash<int, QByteArray> classname;
1277           This doesn't completely fix a crash in QtRuby though, although it
1278 does seem to
1279           improve things. Thanks to Charlton Wang for tracking down where the
1280 string was
1281           being corrupted.
1283 2006-07-16  Richard Dale  <rdale@foton.es>
1285         * Added a QVariantList marshaller
1286         * The correct QGraphicsScene event class instance is instantianted
1287 from
1288           the event.type()'s
1289         * The Qt::GraphicsItems in a Qt::GraphicsScene are marked so they
1290 won't
1291           won't get garbage collected prematurely
1292         * Added QT_TR_NOOP() and QT_TRANSLATE_NOOP() methods for completeness
1293         * Added Qt::Graphics examples: graphicsview/collidingmice and
1294 dragdroprobot
1296 2006-07-05  Richard Dale  <rdale@foton.es>
1298         * Added some marshallers for Qt 4.2, for QList<QGraphicsItem*>,
1299           QList<QStandardItem*> and QList<QUndoStack*> types.
1300         * The Ruby String to 'char *' and String to 'unsigned char *' were
1301 using
1302           the pointer within the Ruby String directly which meant they were
1303           deleted when the Ruby String was gc'd. So they are copied with
1304           strdup () instead.
1306 2006-06-26  Richard Dale  <rdale@foton.es>
1308         * Applied a fix from Cvetoslav Ludmiloff to make 
1309           Qt::AbstractItemModel.createIndex() work without conversion errrors
1310           for large Ruby BigNum values.
1312 2006-06-19  Richard Dale  <rdale@foton.es>
1314         * The 'EmitSignal' class in marshall_types.cpp was not linking
1315 against
1316           the code calling it from Qt.cpp with some versions of the gcc
1317           compiler/linker. So the code was moved to Qt.cpp so that it should
1318           build on all environments.
1319         * Added a 'designer/calculatorbuilder' example using the
1320 Qt::UiBuilder
1321           class to load .ui files from a .qrc file compiled with the rbrcc
1322           resource compiler
1323         * Added some extra marshallers for QList<QWidget*> and QVector<qreal>
1324           types.
1326 2006-06-13  Richard Dale  <rdale@foton.es>
1328         * Slot and signals can now have return types and return values.
1329           For example:
1331                 class Foo < Qt::PushButton
1332                         slots 'int greeting(QString)'
1333                         signals 'int doit(QString)'
1334                 
1335                         def initialize
1336                                 super
1337                                 connect(self, SIGNAL('doit(QString)'), self,
1338 SLOT('greeting(QString)'))
1339                         end
1340                         ...
1341         * Added some missing marshaller types for QTreeWidgetItem and
1342 QListWidgetItem
1343           lists
1345 2006-06-07  Richard Dale  <rdale@foton.es>
1347         * qt_metacall() was returning an incorrect value when called with, 
1348           Ruby slots. This doesn't normally matter, but was causing D-BUS
1349           slot invocations via qt-dbus to fail.
1351 2006-06-05  Richard Dale  <rdale@foton.es>
1353         * Added support for q_classinfo() attributes, equivalent to the c++
1354           Q_CLASSINFO() macro. If the key of the q_classinfo is 'D-Bus
1355 Interface'
1356           the slots in the class are marked as Q_SCRIPTABLE in the
1357 QMetaObject.
1358           For example:
1360                 class LCDRange < Qt::Widget
1361                         q_classinfo('D-Bus Interface', 'MyInterface')
1362                 signals 'valueChanged(int)'
1363                 slots 'setValue(int)'
1364                         ...
1366         * The metaObject methods for slots and signals are no longer added
1367 when
1368           a Qt::Object is constructed, but when slots or signals are added to
1369           a class. This means that signals as well as slots can be added to
1371           existing instance.
1373 2006-06-04  Richard Dale  <rdale@foton.es>
1375         * For Qt::QObject classes which are immediate subclasses of Qt::Base,
1376           don't add C metaObject() and qt_metacall() methods as they aren't
1377           needed. This means that a QMetaObject is no longer constructed for
1378           these classes, and the one that the corresponding C++ class has is
1379           returned instead.
1380         * Bring the itemviews/pixelator example code in line with the current
1381           C++ version.
1383 2006-06-01  Richard Dale  <rdale@foton.es>
1385         * Added a rbrcc resource compiler, a ruby version of rcc
1386         * Two new module methods Qt.qRegisterResourceData() and
1387           Qt.qRegisterResourceData() were added to Qt.cpp to support the
1388           resource compiler.
1390 2006-05-23  Richard Dale  <rdale@foton.es>
1392         * With code like the following, the QtRuby runtime was choosing
1393           an operator method which took a QByteArray and a QString and
1394           returned a QString. So the 'block' became a Ruby String, rather
1395           than staying as a Qt::ByteArray:
1397         block = Qt::ByteArray.new
1398     
1399         if comment
1400             block += "/*\n"
1401             block += "    " + header + "\n"
1403           So the operator '+' for Qt::ByteArray is special cased to return
1404           a Qt::ByteArray.
1405         * The example dialogs/simplewizard now works correctly
1407 2006-05-22  Richard Dale  <rdale@foton.es>
1409         * Fix regression for dynamic class creation via QMetaObject info
1410 causing
1411           a crash.
1412         * A list of properties is now returned via
1413 Qt::MetaObject.propertyNames
1414           for a Qt::Object with properties for the inspect and pretty_print 
1415           methods.
1416         * Fixed a pile of errors in the itemviews/chart example
1417         * Added Qt::ItemSelection.at, [], count and length methods
1419 2006-05-19  Richard Dale  <rdale@foton.es>
1421         * When an unknown C++ class is found, a corresponding Ruby class is
1423           created. For instance, if a KPresenter KPart is loaded, a 
1424           KDE::PresenterDoc class is created.
1425         * It is now possible to set and get properties without needing to use
1426           Qt::Object.property() and Qt::Object.setProperty(). For instance:
1428                 factory = KDE::LibLoader.self().factory("libkpresenterpart")
1429                 @kpresenter = factory.create(self)
1430                 p @kpresenter.presentationDuration
1431                 @kpresenter.presentationDuration = true
1433         * A Qt::Variant.to_ruby method has been added which returns a Ruby
1434 value
1435           corresponding to the current value of a Qt::Variant
1436         * Added a Qt::MetaObject.propertyNames method to return a list of
1437 property
1438           names
1440 2006-05-15  Richard Dale  <rdale@foton.es>
1442         * Added an entry for a missing marshaller for QModelIndexLists.
1443           Thanks to Daniel Morris for the bug report and fix.
1445 2006-05-07  Richard Dale  <rdale@foton.es>
1447         * Added a Qt3:: module for the Q3* support classes
1448         * The rbuic now correctly gives Q3* classes a Qt3::
1449           module prefix.
1451 2006-05-04  Richard Dale  <rdale@foton.es>
1453         * A spurious warning was be output when Qt::ContextMenuEvent.type
1454           was called. Fixes problem reported by Alessio Caiazza
1456 2006-04-25  Richard Dale  <rdale@foton.es>
1458         * Added a namespace of Qwt:: for use with widgets from the Qwt
1459           3D plotting library
1461 2006-04-20  Richard Dale  <rdale@foton.es>
1463         * Added marshalling for WId and Q_PID types which will work
1464           on Windows.
1465         * Fixed the rbuic qmake project file so it will build on Windows
1467 2006-04-19  Richard Dale  <rdale@foton.es>
1469         * Removed a call to vasprintf() as it didn't compile with mingw
1470           on Windows. Replaced with qvsnprintf() using a statically
1471           allocated buffer.
1472         * Fixed bugs in slot/signal marshalling. The qint64 type is now
1473           marshalled correctly.
1474         * Added a line to extconf.rb for the libraries needed to link the
1475           QtRuby extension on Window.
1477 2006-04-18  Richard Dale  <rdale@foton.es>
1479         * Added the network/http and loopback examples
1480         * Slots with 'qint64' arg types don't yet work
1481     * Fixed bug where qtruby failed to link on some machines
1482           such as Windows, where the 'char' type defaults to
1483           unsigned, so define them as 'signed char' instead.
1485 2006-04-17  Richard Dale  <rdale@foton.es>
1487         * Added the network/ftp, broadcastreceiver and broadcastsender
1488 examples
1490 2006-04-12  Richard Dale  <rdale@foton.es>
1492         * Change source files to headers to make it easier to build the
1493 qtruby
1494           extension on Windows and Mac OS X. marshall_basetypes.cpp,
1495 marshall_complex.cpp
1496           and marshall_primitives.cpp are now all headers. marshall_types.cpp
1497 is now split
1498           into an implementation source file and a header.
1500 2006-04-11  Richard Dale  <rdale@foton.es>
1502         * Added xml/saxbookmarks, xml/dombookmarks and widgets/tooltips
1503 examples
1504         * Improved garbage collection marking, Children QTreeWidgets and 
1505           QListWidgets are now marked. QObject tree instances are only marked
1506           starting at an instance which has no parent to improved efficiency,
1507           otherwise the same sub trees would be marked several times as a
1508           traversal is started for each node in the heirarchy.
1509         * The 'type' method in QEvent subclasses now works correctly.
1510         * Added inspect and pretty_print methods to the Qt::WidgetTreeItem
1511 class
1513 2006-04-10  Richard Dale  <rdale@foton.es>
1515         * Added mainwindows/dockwidgets example
1516         * Added mainwindows/mdi example
1517         * Added widgets/movie example
1519 2006-04-10  Richard Dale  <rdale@foton.es>
1521         * Added draganddrop/dropsite example
1522         * Fixed bug where non-primitive signal types weren't working
1524 2006-04-10  Richard Dale  <rdale@foton.es>
1526         * Various fixes to the rbuic tool:
1527                 * Variable names were not always correct. Now they always start with
1528                   a '@' if they are ruby instances variables, and all have an
1529 initial
1530                   lower case letter.
1531                 * The various names used in signal/slot connect statements should
1533                   be correct.
1534                 * Qt::SizePolicy literals were not always correct
1535                 * The code for embedded icons is now translated into Ruby
1536                 * Multiline string literals are now terminated with a '\' on each
1537 line
1539 2006-04-07  Richard Dale  <rdale@foton.es>
1541         * Added the dialogs/configdialog example
1542         * Fixed bug in slot invocation marshalling where non-primitive
1543           types, apart from QStrings weren't working
1544         * Fixed crash caused by recently introduced 'fix',
1545           deleting 'argv' passed to QApplication
1547 2006-04-06  Richard Dale  <rdale@foton.es>
1549         * Marshalling of Value lists to Ruby wasn't working at all. The
1550           bug was because the following two lines are not equivalent:
1552             void *p = &valuelist[i];
1553             void *p = (void *) &(valuelist->at(i));
1555           The first line doesn't work correctly, but the second was does.
1557         * The marshaller for QList<QImageTextKeyLang> was defined wrongly.
1559 2006-04-05  Richard Dale  <rdale@foton.es>
1560         
1561         * Added the itemviews/puzzle example
1562         * Added a QModelIndexList marshaller
1563         * Added inspect and pretty_print methods for Qt::ModelIndex
1565 2006-04-05  Richard Dale  <rdale@foton.es>
1567         * Added the itemviews/sortingmodel example
1569 2006-04-05  Richard Dale  <rdale@foton.es>
1571         * Simplify the Qt::AbstractItemModel.createIndex() code
1572         * Fix bug where return values from rb_call_super() were being ignored
1573         * Make :foobar a synonym for 'foobar()' in SLOT()/SIGNAL() calls and
1574           slot/signal declarations
1576 2006-04-04  Richard Dale  <rdale@foton.es>
1578         * Added the itemviews/simpledommodel and itemviews/simpletreemodel
1579           examples
1581         * Special cased the Qt::AbstractItemModel.createIndex() and 
1582           Qt::ModelIndex.internalPointer() methods so they can save
1583           and restore Ruby VALUE instances.
1585 2006-04-03  Richard Dale  <rdale@foton.es>
1587         * The QtRuby runtime's overloaded method resolution mechanism can't
1588 currently
1589           distinguish between Ruby Arrays containing different sort of
1590 instances.
1591           Unfortunately Qt::Painter.drawLines() and Qt::Painter.drawRects()
1592 methods can
1593           be passed a Ruby Array as an argument containing either Qt::Points
1594 or Qt::PointFs
1595           for instance. These methods need to call the correct Qt C++
1596 methods, so special case
1597           the overload method resolution for now..
1599 2006-04-03  Richard Dale  <rdale@foton.es>
1600         
1601         * The models used for QTableView and QListView are the private
1602 classes
1603           QTableModel and QListModel. They are accessed as
1604 QAbstractItemModels
1605           via the apis for the view classes. Unfortunately,
1606 QAbstractItemModel
1607           has pure virtual functions which don't appear in the corresponding
1608           Ruby class Qt::AbstractItemModel. So Ruby implementations of
1609 Qt::TableModel
1610           and Qt::ListModel need to be special cased, and given the missing
1611           methods in order to access the model data.
1613 2006-03-29  Richard Dale  <rdale@foton.es>
1615         * Don't special case open() in virtual method callbacks,
1616 because all
1617           the Qt classes with open methods now have explicit open()
1618 method
1619           calls. So it isn't possible that Kernel.open() will be
1620 called
1621           wrongly anymore.
1623 2006-03-14  Richard Dale  <rdale@foton.es>
1625         * Added various explicit calls to method_missing() for methods which
1626           are defined in Kernel and Object, such
1627 as 'exec', 'select', 'format'
1628           etc. Otherwise, the corresponding methods in the Smoke library were 
1629           not being invoked correctly.
1630         * Removed a virtual destructor compile warning
1631         * Removed obsolete qtruby-only.patch and kdevelop project file
1633 2006-03-14  Richard Dale  <rdale@foton.es>
1635         * Fixed bugs in const lists marshallers, where the items in the ruby
1636 Array
1637           were wrongly being updated after a method call
1639 2006-02-20  Richard Dale  <rdale@foton.es>
1641         * Added a '-x' option to the rbuic tool to generate a ruby top level
1642           code for testing a compiled .ui file
1643         * Removed spurious "Warning: action `%s' not declared\n" message
1644         * Fixed bug in code generation where the top level arg name in
1645           setupUI() was being wrongly referenced as an instance variable.
1646           Fixes bug reported by Florent Ruard-Dumaine
1647         * Fixed bug in const pointer lists, where the items in the ruby Array
1648           were wrongly being updated after a method call
1650 2006-02-20  Richard Dale  <rdale@foton.es>
1652         * After a const value based list such as QVector<QPointF> was passed
1653           to a C++ method, the correspoding Ruby Array was being updating 
1654           with the values when it didn't need to be. There is also a bug
1655 which
1656           meant the the values in the Ruby Array were being set to nil. That
1657           bug still isn't fixed. Partly fixes bug reported by akincisor on
1659           #qtruby irc channel.
1660          
1661 2006-02-16  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1662         
1663         * In Qt4 when the type signature of a slot or signal argument type is
1664           normalized, any '&' character for a reference type is removed,
1665 along
1666           with any 'const' qualifiers. So 'const QString&' becomes 'QString'.
1667           After a 'QString' slot type has been marshalled to a Ruby string it
1668           is deleted, as it was assumed to be a temporary copy. However, this
1669           caused a crash with QString references such as in the
1670 widgets/wiggly
1671           example. Fixes a problem reported by mserms on #qtruby.
1673         * Added the correct Qt4 libs to the extconf.rb compile command
1675 2006-01-19  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1677         * Improved the debug logging of virtual method callbacks so that the
1678           arg types are shown too
1680 2005-12-20  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1682         * Restored Caleb Tennis's refactored marshall_types.cpp code after
1683           accidently deleting it in August.
1685 2005-12-16  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1687         * The logger_backend() function has been removed and replaced with 
1688           qWarning() calls. This was because of problems with getting the 
1689           logger_backend() code to work on Windows.
1691 2005-12-08  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1693         * The ruby display() method was clashing with a display() method in
1694 some
1695           QtRuby classes, and so it was aliased to _display(). However, this
1696 caused
1697           problems with the ruby RMagick extension. The display methods are
1699           special cased in Qt::LCDNumber. Fixes problem reported by David
1700 Corbin.
1701         * The slots and signals methods are now module methods of Qt::Base,
1702           rather than defined as ordinary methods in class Module, reducing
1703 name
1704           space pollution. Thanks to Esteban Manchado for pointing this out.
1706 2005-12-06  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1708         * QtRuby didn't work with versions of ruby > 1.8.3, as it didn't call
1709           initialize methods correctly. It used the rb_respond_to() method
1710           to check it a newly created qt instance responded to :initialize.
1711           However, in newer versions of ruby rb_responds_to() ignores
1712           private methods such as initialize(). The solution was to just
1713 remove
1714           the test, as it was redundant anyway.
1715         * Fixes problem reported by Hans Fugel and Caleb Tennis.
1717 2005-11-21  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1719         * When dispose() was used to delete a ruby instance, the mapping
1720 between
1721           the C++ ptr and corresponding ruby instance was not being removed,
1723           this caused a crash. Fixes problem reported by Christopher
1724 Chan-Nui.
1726 2005-11-04  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1728         * 'signed int&' types were not being matched or marshalled correctly
1730 2005-10-21  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1732         * Argument types of 'unsigned short int' were not working. Fixes
1733           problem reported by Ian Monroe
1735 2005-10-05  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1737         * Added network/fortuneserver and fortuneclient examples
1738         * The Qt::ByteArray class is now a normal Smoke class, 
1739           rather than a special case, as it's easier to make a
1740           Qt::ByteArray look like a ruby String, than the other way
1741           round.
1742         * The overloaded method resolution for enum arg types has been 
1743           improved
1744         * Added missing relational operators to Qt::Integer
1745         * Fixed bug in marshalling unsigned shorts
1747 2005-10-03  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1749         * Ported the RuBoids OpenGL artificial life example to Qt4 and 
1750           added opengl/grabber
1752 2005-10-01  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1754         * The the value of a Qt::Variant can now be accessed with
1755           with to_s, to_i, to_a and to_f methods
1756         * Deleted the svn:mime-type property from the qtruby.rb source
1757           so that diffs will be shown on checkin
1759 2005-09-25  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1761         * Added richtext/calendar, orderform and syntaxhighlighter examples
1762         * Fix bug in '>', '<=', '<' and '<=' operator methods where they were
1763           clashing with methods in Kernel
1764         * The struct Qt::TextLayout::FormatRange is now in QtRuby
1766 2005-09-24  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1768         * Added painting/basicdrawing,  concentriccircles,  painterpaths  and
1769           transformations examples
1771 2005-09-23  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1773         * Added mainwindows/application, menus, recentfiles and sdi examples
1775 2005-09-22  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1777         * Added layouts/basiclayouts, borderlayout and flowlayouts examples
1778         * Either a Qt::Layout, Qt::WidgetItem or Qt::SpacerItem ruby instance
1779           is created to wrap a C++ QLayoutItem instance, using
1780           QLayoutItem::widget() and QLayoutItem::spacerItem() methods to
1781           determine the exact class.
1783 2005-09-18  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1785         * Initial checkin of the Qt4 version of the rbuic tool
1786         * Added designer/calculatorform example
1788 2005-09-11  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1790         * Fixed problem with Qt::SqlTableModel.select() reported by
1791           Daniel Morris as a Qt3 QtRuby bug
1793 2005-09-01  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1795         * Added draganddrop/draggabletext, draggableicons, fridgemagnets, 
1796           puzzle examples.
1797         * Added itemviews/dirview, chart and pixelator Qt4 examples.
1798         * Fixed bug in QtByteArray marshalling where an underlying QByteArray
1799           was not being created if the Qt::ByteArray was created by passing a
1800           ruby String to the constructor.
1801         * Qt::ModelIndex's are not deleted on garbage collection as it caused
1803           crash
1804         * Added qVariantValue() and qVariantFromValue() methods
1806 2005-08-25 Caleb Tennsi <caleb@aei-tech.com>
1807         * Changed metaobject creation to not use d pointers per the comment
1808 in the
1809           code.
1811 2005-08-24  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1813         * Added dialogs examples; complexwizard, extension,  findfiles,  
1814           simplewizard,  standarddialogs and  tabdialog
1815         * Changed the types of Qt3 long longs and other Q_* types to the 
1816           Qt4 equivalents
1818 2005-08-24  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1820         * Added windowflags example
1821         * Some enum names for Qt::WindowFlags were clashing with QtRuby
1822           class names, such as Qt::Dialog. So some constants were added to
1823           use instead, renamed with an ending of 'Type'.
1825 2005-08-23  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1827         * Fixed some code to obtain a Qt::Object's properties for Qt4. Added 
1828           property inspecting code for the new QPointF, QRectF etc types
1829         * Fixed a missing attr accessor bug in Qt::Enum
1830         * Added the sliders, spinboxes and tetrix code examples
1832 2005-08-22  Caleb Tennis <caleb@aei-tech.com>
1833         * Started a migration to more template based classes. 
1834 Hopefully this is
1835           just a start, but this *should* reduce redundant code by
1836 making use of
1837           C++ templates for marshalling the various types.
1839 2005-08-22  Caleb Tennis <caleb@aei-tech.com>
1841         * Readded findChildren and findChild methods in C code under
1842 Qt::Object
1844 2005-08-22  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1846         * It isn't an error to pass a NULL void** stack to a qt_metacall()
1847 invocation.
1848           So don't throw a ruby exception, and assume it's for a slot with no
1849 args and
1850           no return type.
1851         * Added the icons, imageviewer, lineedits, screenshot and scribble
1852 example
1853           programs
1854         * Qt::Enum is no longer a subclass of Qt::Integer, and it handles its
1856           arithmetic ops. A logical or arithmetic op on a Qt::Enum always
1857 returns a
1858           ruby Integer, rather than a Qt::Enum as before.
1861 2005-08-21  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1863         * Added calculator, charactermap, groupbox and wiggly to code
1864 examples
1865         * Fixed crash in ruby QString signal types
1866         * Improved runtime resolution of the Qt4 Qt::Event classes
1867         * Added a Qt::Char.to_s method for converting a Qt::Char to a ruby
1868           string
1870 2005-08-21  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1872         * Added digitalclock example
1874 2005-08-20  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1876         * Added various marshallers for QVector list types
1877         * Added the analogclock example from Qt4
1878         * Added inspect methods for the new Qt::PointF, Qt::RectF etc
1879           types
1881 2005-08-19  Caleb Tennis <caleb@aei-tech.com>
1882         * For marshalling ItemLists, prefer using ->at(index) over an
1883 iterator
1885         * Add findChild and findChildren methods which attempt to mimic their
1886 Qt::Object
1887           counterparts.  Unit tests included.  e.g.:   
1888             object.findChildren(Qt::Widget) 
1889             object.findChildren(Qt::Object, "ObjectName")
1890             object.findChildren(Qt::Object, /SomeName*/)
1892             findChild just returns the closest child to the parent
1893 from findChildren
1895 2005-08-19  Caleb Tennis <caleb@aei-tech.com>
1897         * Added a unittests.rb file as the start of a unit test suite
1899           verifying QtRuby things are working properly and we don't
1900 create
1901           regressions.
1903         * Qt4ify some of the code in handlers.cpp
1905         * Modified new_qobject to only add method definitions if the
1906 kclass
1907           doesn't respond_to qt_metacall (was a TODO item).
1909         * Prefer using Ruby's ALLOCA_N over calloc in new_qt
1911 2005-08-19  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1913         * Added various marshallers for converting Qt4 C++ lists to and from
1914           ruby Arrays
1916 2005-08-19  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1918         * Added marshaller to convert QMap<int,QVariant> to ruby Hash
1920 2005-08-18  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1922         * When a QMetaObject was constructed on the fly, the metaObject
1923           for the superClass was being obtained via Qbject::staticMetaClass()
1924           which returns a copy. However, this messed up qobject_cast() and
1925           QMetaObject::cast(), so now the parent metaObject is obtained via
1926           QObject::metaObject() which returns a pointer to a QMetaObject.
1928 2005-08-17  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1930         * Added Qt::MetaObject.slotNames() and signalNames() from Qt3 as they
1931           are very useful when using the KDevelop debugger
1932         * If Qt::Object.metacall() can't be found in the Smoke library a ruby
1933 exception
1934           is thrown
1936 2005-08-17  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1938         * Left some debugging code in. qt_metacall() was not being called 
1939           correctly for non-ruby C++ slots.
1941 2005-08-17  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1943         * QtRuby now ported to Qt4. Pure Qt4 code with no dependencies on
1944           libQt3Support
1945         * Qt4 style QMetaObjects are created on the fly. Slots and signals
1946 work
1947           using QObject::qt_metacall() and QMetaObject::activate()
1948         * The Cannon games tutorials t1 to t14 have been ported to Qt4
1949 QtRuby.
1950         * More work needed on the garbage collection mark() function. For
1951 instance,
1952           it isn't possible to iterate through the items in a QListView in
1953 the same way as
1954           before.
1956 2005-08-09  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1957         
1958         * Caleb Tennis wrote:
1959           One nice feature would be to allow Qt::Object::inherits() to use
1960 the QtRuby 
1961           naming scheme for valid lookups.  For example, right now:
1963             irb(main):001:0> w = Qt::Widget.new(nil)
1964             irb(main):002:0> w.inherits("Qt::Widget")
1965             => true
1966             irb(main):003:0> w.inherits("Qt::Object")
1967             => false
1968             irb(main):004:0> w.inherits("QWidget")
1969             => true
1970             irb(main):005:0> w.inherits("QObject")
1971             => true
1973         * Inherits now works for "QObject", and for "Qt::Object" as well.
1975 2005-08-04  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1977         * Added a file called 'COPYING' to the qtruby project, with a
1978 note that
1979           the 'Qt' trademark in the QtRuby name is used with
1980 Trolltech's permission,
1981           followed by the text of the GPL v2 license.
1983 2005-07-28  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1985         * Qt4 port, initial checkin
1986         * Very little works yet, just hello world
1988 2005-07-15  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
1990         * Qt::Socket started working correctly when I and regenerated and
1991 rebuilt 
1992           my Smoke library. Before then it was calling the wrong version of 
1993           QSocket::at() for some reason, and wasn't discarding bytes that had 
1994           already been read.
1995         * Removed comment from the client.rb example about
1996 Qt::Socket.canReadLine
1997           always returning true now it works.
1999 2005-07-14  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2001         * Added example programs for client/server programming with
2002 Qt::Socket
2003           and associated classes. client.rb illustrates current bugs in
2004 QtRuby
2005         * Qt::Socket.canReadLine() always returns true
2006         * Qt::readLine() seg faults when called a second time
2007         * A memory leak and seg faulting problems like the above were
2008 reported
2009           by Caleb Tennis
2011 2005-07-09  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2013         * When a Qt method returned a QString value type, such as:
2014                QString QSocket::readLine()
2015           A temporary QString was being created that wasn't deleted and
2016 caused a 
2017           memory leak. Fixes problem reported by Caleb Tennis.
2019 2005-06-28  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2021         * Improved display of Qt::Enums in the KDevelop debugger. With a p
2022           command it just looks like a constant, but a pretty print pp
2023 command
2024           shows the type of the underlying C++ enum:
2026           (rdb:1) p AlignTop 
2027           16
2029           (rdb:1) pp AlignTop 
2030           #<Qt::Enum:0x1825db68 @type=Qt::AlignmentFlags, @value=16>
2032 2005-06-04  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2033         
2034         * Upped the version to 1.0.10
2036 2005-06-04  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2038         * The Object.id method was clashing with the one in Qt::WidgetStack.
2039           Both methods now work correctly. Fixes problem reported by Dave M.
2041 2005-05-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2043         * The rbuic '-subimpl' option now works correctly
2045 2005-05-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2047         * The initialize methods in code generated by the rbuic tool, now
2048 have
2049           named parameters with default values, rather than '*k'
2051 2005-05-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2053         * Fixed bug where the rbuic tool was generating incorrect code
2054           for an array of strings used as a combo box value
2056 2005-05-28  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2058         * Added support for the QScintilla text editing widget, including an
2059 optional 
2060            '--enable-qscintilla=yes' configure option. The QScintilla classes
2061 are included in a
2062           Qext:: namespace. Thanks to Blackshack for the idea and configure
2063 code.
2064         * The KDE namespace modules are only created if the Korundum
2065 extension is used.
2066           Otherwise the Object namespace was being polluted with unused
2067 constants.
2068         * Some enums in the QScintilla headers had a spurious comma after
2069           the last enum value, and kalyptus was failing with a parse error.
2070           The comma is now ignored.
2072 2005-05-25  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2074         * '!=' operator methods in the Smoke library were being shown via
2075 ruby introspection when they
2076           can't actually be written in ruby, and are derived from the
2077 corresponding '==' operator method.
2078         * '==' operator methods can now be called.
2080 2005-05-22  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2082         * Fixed bug in Smoke code generation where spaces were not
2083 being removed from operator
2084           methods such as 'operator *'
2085         * Operator methods are now displayed correctly via ruby
2086 introspection
2088 2005-05-21  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2090         * Improved the format of enums displayed by rbqtapi and rbkdeapi
2092 2005-05-20  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2094         * Removed unused Qt::Internal functions
2095         * Added KNS:: to the namespaces expected by the rbkdeapi tool
2096         * Introspection via Object#methods, public_methods, protected_methods
2097 and singleton_methods
2098           or Module#constants, instance_methods, protected_instance_methods
2099 and public_instance_methods
2100           now all include methods from the Smoke runtime. This fixes part of
2101 the request in bug 105772, but
2102           not enabling 'respond_to?' to be used with Smoke methods.
2104 2005-05-16  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2106         * The Kernel.format() method was clashing with the
2107 Qt::MimeSource.format() method.
2108           The correct method is now called according to the type of the first
2109 argument. Fixes
2110           problem reported by Armin Joellenbeck
2112 2005-04-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2114         * Removed superfluous "require 'pp'" statement
2116 2005-04-25  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2118         *  Upped the version to 1.0.9 for the RubyForge release
2120 2005-04-09  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2122         * Fixed regressions in the rbqtapi and rbkdeapi utilities caused by
2123 the Qt::Internal namespace
2124           tidy up
2125         * Qt::version and Qt::ruby_version had wrongly been moved to the
2126 Qt::Internal module
2128 2005-04-03  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2130         * Upped the version to 1.0.8 for the RubyForge release
2132 2005-03-30  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2134         * An 'include Qt' statement in qtruby.rb where a couple of methods
2135 were being added to
2136           class Module was causing all the Qt methods to be added to Module.
2137 Oops, this a really
2138           serious bug. Various methods in qtruby.rb are now module methods in
2139 the Qt::Internal
2140           module. Big thanks to Eric Veensta and Samir Patel for pointing out
2141 this can of worms.
2143         * It also fixes a problem reported by David Crosby where
2144 a "require 'time'" statement was
2145           incompatible with a "require 'Qt'" statement. As the cause was
2146 unknown, a hacky workround
2147           had to be added, which is no longer needed.
2149 2005-03-24  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2151         * When a subclass of QObject is instantiated in the C++ world, and
2152 the exact class doesn't
2153           exist in ruby, then scan up the inheritance heirarchy via
2154 QObject::metaObject() until a
2155           class is found which does have a ruby equivalent. Fixes problem
2156 reported by Dmitry Morozhnikor
2157           where a KViewPart was being returned as a Qt::Object, rather than a
2158 KParts::ReadOnlyPart.
2159         * The internal method 'cast_object_to()' now takes a class literal as
2160 a second parameter,
2161           rather than the class name as a string
2163 2005-03-21  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2165         * Moved Qt.rb from qtruby/lib/Qt to qtruby/lib. Fixes problem
2166 building qtruby on Mac OS X
2167           with extconf.rb reported by Michael Doppler
2168         * Rename 'README.build' as INSTALL
2170 2005-02-21  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2172         * Upped the version to 1.0.7 for the KDE 3.4 release
2173         * Removed the khtml:: namespace as it wasn't being used
2175 2005-02-07  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2177         * Added a KNS:: namespace for the KNewStuff library
2179 2005-02-06  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2181         * The KDE::Win::WindowInfo nested class is included in the Korundum
2182 runtime
2184 2005-01-27  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2186         * Made some changes to get code generated by the rbkconfig_compiler
2187           to work. When an argument is a non-const reference to a primitive 
2188           type, or a QString or QStringList, then don't delete it after the
2189           method call. This is because a class like KConfigSkeleton takes
2190           references, and then 'squirrels them away' - before the references
2191           were just pointing to junk on the stack.
2192         * The method 'isImmutable' is added to KDE::ConfigSkeletonItems
2194 2005-01-26  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2196         * If a ruby Array is passed as an argument to an overloaded method,
2197 give
2198           priority to QStringList args.
2200 2005-01-21  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2202         * rbuic was giving widgets names containing a '@' to match the ruby
2203 instance variable
2204           name. However, this doesn't work with KDE::ConfigDialog which
2205 expects the names to
2206           match the ones generated in a KDE::ConfigSkeleton by
2207 rbkconfig_compiler so '@' is no
2208           longer added.
2210 2005-01-20  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2212         * Fixed bug reported by Ian Monroe where the KIO.copy() method wasn't
2213 being found in
2214           the Smoke runtime. Modules methods are now trapped with
2215 method_missing and
2216           despatched to call Smoke methods correctly
2217         * Added support for the KDE::ConfigSkeleton and subclasses.
2218 Constructors for nested
2219           classes can now be called correctly
2221         CCMAIL: ian.monroe@gmail.com
2223 2005-01-16  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2225         * Added a Qt::Integer.coerce method so that Qt::Integers and
2226 Qt::Enums can be
2227           combined in arithmetic expressions with ruby Integers. 
2229 2005-01-04  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2231         * Upped the version to 1.0.6 for the KDE 3.4 beta 1 release
2233 2005-01-02  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2235         * The Qt::Object pretty_print method now shows the class name of enum
2236 properties
2238 2004-12-30  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2240         * Fixed an interesting bug reported by Stephan Oehlert. Kernel has a
2241 method called 
2242           open() which takes a String as the first argument. But when a call
2243 is made to an open() 
2244           method in the Qt classes, it messes up the method_missing() logic
2245 to divert it to the 
2246           Smoke library. Instead it attempts to call the Kernel method with
2247 the wrong arg types.
2249         * The problem is fixed by calling the appropriate method based on the 
2250           type of the first arg. However, it is no longer possible to
2251 override virtual methods
2252           called 'open'.
2254         CCMAIL: stephan.oehlert@gmx.net
2256 2004-12-28  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2258         * Added a parent attribute to the Qt::Object pretty_print() method
2259         * Removed all the properties from the Qt::Object inspect() method
2260 except name,
2261           x, y, width, height (the last four for for Qt::Widgets only). This
2262 speeds up fetching
2263           the details of Qt::Objects that have more than just a handful of
2264 children.
2265           The full details can still be fetched with a pretty_print() call
2266 via a debugger 'pp'
2267           command.
2269 2004-12-21  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2271         * The qtruby runtime needs to be able to run the code for an
2272 initialize() method up
2273           to the point where the C++ instance has been constructed and
2274 wrapped, and then
2275           jump out. It then re-runs initialize() with the wrapped instance.
2276 Before a callcc() call
2277           had been used for the jumping which worked fine. However, it made
2278 the frame stack
2279           look strange when debugging code with the KDevelop debugger. The
2280 fix is to use 
2281           catch and throw instead, as they leave the stack in a more normal
2282 looking state.
2284 2004-12-20  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2286         * Added a work round for a bug caused by an incompatibility between
2287 QtRuby
2288           the 'require time' statement, reported by David Crosby
2289         
2290         CCMAIL: dcrosby42@gmail.com
2292 2004-12-18  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2294         * Added a 'receivers' property to the Qt::Object inspector. This
2295 allows the active signal
2296           connections for a Qt::Object instance to be viewed in the KDevelop
2297 debugger as a 
2298           Hash. The hash keys are the signal names, and the hash values are
2299 arrays of the target 
2300           signals/slots as Qt::Connection instances.
2302 2004-12-17  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2304         * Added 'metaObject' as an expandable property for Qt::Objects. This
2305 allows the
2306           Qt::MetaClass class heirarchy to be browsed, and signals/slots
2307 declarations inspected.
2309 2004-12-17  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2311         * Fixed bug in lower case/underscore method naming to camel case
2312 conversion
2314 2004-12-15  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2316  * Added an attribute of 'children' to the Qt::Object inspect method,
2317 which is an array
2318    of the Qt::Object's children
2319  * The QObjects in a QObjectList were not being created with the exact
2320 ruby class
2321    if they hadn't been allocated from within the ruby code, and just
2322 left as Qt::Objects
2324 2004-12-14  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2326  * Qt::Object properities of type enum are shown by name in the
2327 KDevelop debugger,
2328    and not as numeric literals
2330 2004-12-14  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2332  * Changed the format of the Qt::Color inspect string to
2333 #<Qt::Color:0x0 #ffffff>
2334  * Added some more attributes to the Qt::Font inspector
2335  * Added a Qt::Cursor inspector
2337 2004-12-12  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2339  * Fixed a bug where the debugger was calling an inspect method on an
2340 instance
2341    which wasn't fully initialized yet, and not of type T_DATA.
2343 2004-12-10  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2345  * Added inspect() and pretty_print() methods for Qt::SizePolicy
2346  * Greatly improved the Qt::Object Qt property based inspect() and
2347 pretty_print()
2348    methods. Property types such as Qt::Point, Qt::Font and Qt::Rect
2349 can be 
2350    viewed as expandable items in the KDevelop debugger variable tree.
2352 2004-12-09  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2354  * More inspect() and pretty_print() methods for common classes to
2355 improve debugging -
2356    Qt::Color, Qt::Font, Qt::Point, Qt::Rect, Qt::Size, Qt::Date,
2357 Qt::DateTime and Qt::Time
2358    
2359 2004-12-08  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2361  * Added inspect() and pretty_print() methods for Qt::Objects that get
2362 the QObject properties and
2363    show them as 'name=value' pairs. This means the KDevelop debugger
2364 can make Qt::Object 
2365    variables expandable and show their properties.
2367 2004-11-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2369  * Upped the QtRuby version to 1.0.5 for the KDE 3.3.2 release
2371 2004-10-30  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2373  * qError(), qWarning() and qFatal() are now Object instance methods,
2374 rather than Qt module
2375    methods. This means they don't need to be referenced with an
2376 ugly 'Qt.' module scope anymore.
2378 2004-10-21  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2380  * If a class method was called before super, it was wrongly throwing
2381 an exception
2382    as an error. For instance, this call to i18n():
2384                def initialize()
2385                    super(TreeList, i18n("My App Preferences"),
2386                             Help|Default|Ok|Apply|Cancel, Ok)
2387       ...
2390 2004-10-16  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2392  * Until super has been called in an initialize() method, Qt methods
2393 can't be called on
2394    it. An exception is now thrown 'Instance not initialized', instead
2395 of it causing a seg fault.
2396  * For instance:
2398      class MyWidget < Qt::ComboBox
2399          def initialize
2400              # Must call super first
2401              insertItem('abc')
2402              super
2403          end
2404      end
2406  * Fixes problem reported by Han Holl
2407  CCMAIL: kde-bindings@kde.org
2409 2004-10-16  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2411  * Upped the version to 1.0.4 for the RubyForge release
2412  * Added some names to AUTHORS from the ChangeLog
2414 2004-10-14  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2416  * If the smokeruby_mark() function was called for an instance of a
2417 QObject, it should
2418    mark all the instances below it in the QObject tree, as not needing
2419 garbage collection. 
2420    However, if a node in the tree didn't have a mapping onto a ruby
2421 instance the marking 
2422    process stopped there, even though the grandchildren and their
2423 descendants might 
2424    have a valid mapping onto ruby instances.
2425  * The solution is to always traverse the entire tree. Fixes problem
2426 reported by Han Holl.
2428  CCMAIL: kde-bindings@kde.org
2430 2004-10-13  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2432  * All the Qt::CanvasItems owned by a Qt::Canvas are marked with
2433 rb_gc_mark() to
2434    prevent them being garbage collected
2435  * The top level widgets are no longer disposed() on Qt::Application
2436 exit
2437  * Fixed some bugs in the chart example. 
2439 2004-10-13  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2441  * Fixed arg matching to give priority to 'int' or 'signed' when
2442 passed a ruby Integer, or
2443    'double' when passed a ruby Float
2444  * The chart example can now save and load chart files
2446 2004-10-13  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2448  * Added greater than and less than operators to Qt::Enum, so that
2449 enums can be compared with
2450    Integers
2451  * Added the chart example for Qt Tutorial #2
2453 2004-10-12  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2455  * Added Qt::Application.ARGV. It returns the original ruby ARGV array
2456 with Qt command line 
2457    options removed.
2459 2004-10-11  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2461  * Added a global flag 'application_terminated'. Once this is set the
2462 QtRuby runtime will no longer
2463    delete any C++ instances. This will hopefully fix crash on
2464 application exit problems reported 
2465    by Thibauld Favre.
2467  CCMAIL: kde-bindings@kde.org
2469 2004-10-10  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2471  * The recent fix for checking invalid arg types, didn't work with nil
2472 passed as a value
2474 2004-10-10  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2476  * A QRgb[] color table was being wrongly deleted after marshalling
2478 2004-10-10  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2480  * If a ruby method overriding a virtual method returned a primitive
2481 type when an instance of a class
2482    was expected, it caused a seg fault. A ruby exception is now thrown
2483 instead. Fixes problem reported by
2484    Han Holl.
2486  * For instance,
2487                     class ContainerGrid < Qt::Widget
2488                         def sizeHint
2489                             # next line should return a Qt::Size, not
2490 an integer
2491                             100
2492                         end
2493                      end
2495    Now gives the following error:
2497                qsize.rb:12:in `method_missing': Invalid type,
2498 expecting QSize (ArgumentError)
2499                    from qsize.rb:12
2501  CCMAIL: kde-bindings@kde.org
2503 2004-10-10  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2505  * The smokeruby_mark() function was only marking the immediate
2506 children of a
2507    Qt::Object for not being garbage collected. It now marks all the
2508 Qt::Objects
2509    in the object tree below it.
2511 2004-10-07  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2513  * Added Qt Designer Tutorial 'Creating Dialogs' translated into
2514 QtRuby. It
2515    shows how you can combine ruby code generated from .ui files with
2516 the rbuic
2517    tool, with your own code.
2519  * The .ui files and images are identical to the original C++
2520 versions.
2522  * It features a simple Makefile to run rbuic when you change the .ui
2523 files, and
2524    regenerate the ruby sources.
2526 2004-10-06  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2528  * Fixed rbuic '-embed' option which had been broken after adding DCOP
2529 suppot
2530    to Korundum, after changes in the Qt::ByteArray class.
2531  * Fixed QRgb* marshalling problem where the ruby value was
2532 overflowing a signed int.
2533    The target for marshalling is now an array of unsigned ints.
2534  * When a Qt::Application exits after returning for an
2535 Qt::Application.exec() call, the top
2536    level widgets are deleted as well as the Qt::Application itself.
2537 This fixes a problem where
2538    ruby does garbage collection in an arbitrary order after the ruby
2539 app has exited. It destroys
2540    a ruby Hash of QMetaData info that the Qt::Application or
2541 Qt::MainWindow need to clean up.
2542  * The layout of the ruby code generated by rbuic has been improved
2543 with better indenting.
2544  * attr_reader attribute accessors have been added for the most
2545 important instance variables 
2546    in an rbuic generated class to make them more easily accessed from
2547 another class.
2549 2004-10-05  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2551  * Given a C++ instance and an approximate classname, the QtRuby
2552 runtime uses the
2553    various Qt rtti mechanisms such as QObject::className() to improve
2554 the resolution
2555    of the name. However, the numeric classId into the array of
2556 classnames in the Smoke
2557    runtime was not being updated in line with the more accurate name. 
2558  * This caused problems with method argument matching which uses the
2559 numeric classId
2560    rather than the ruby object's classname, and so QtRuby wrongly
2561 assumed that a an
2562    instance of a Qt::Widget was a Qt::Object.
2563  * Fixes problem reported by Han Holl
2565  CCMAIL: kde-bindings@kde.org
2567 2004-10-05  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2569  * Fixed a couple of errors in the rbuic generated code found as a
2570 result of
2571    the recently improved stricter arg type matching.
2573 2004-10-04  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2575  * When a ruby app exits, rb_gc_call_finalizer_at_exit() is called and
2576 all the ruby
2577    instances are garbage collected. The problem is that this is done
2578 in an arbitrary
2579    order, and Qt::Application was occasionally crashing in its
2580 destructor because 
2581    QMetaObject info it still needed was being deleted before then.
2583  * Fixes problem reported by Thibauld Favre
2585  CCMAIL: <tfavre@mandrakesoft.com>
2587 2004-10-04  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2589  * When a QMetaData object was contructed the class name was a pointer
2590 from a ruby
2591    string, and was being corrupted when the string was freed. The
2592 string is now copied.
2594 2004-10-03  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2596  * Han Holl's report about a when you pass an incorrect arg type to a
2597 QtRuby
2598    method, it caused a crash has opened a 'can of worms'. This was
2599 because there
2600    was no arg type checking if there was only one candidate method in
2602    Smoke runtime. Now that arg type checking is applied to all QtRuby
2603 method calls, not
2604    not just those that after lookup in Smoke map onto a single method,
2605 the overloaded
2606    method resolution via the arg types has had to be greatly improved.
2607 This has
2608    been done, and so the arg type matching is now extremely fussy.
2610  CCMAIL: kde-bindings@kde.org
2612 2004-10-03  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2614  * An optimization in the overloaded method resolution matching causes
2615 a crash;
2616    instead of throwing a ruby exception when a programming error is
2617 made.
2618    If there is only one method found in the Smoke runtime, it assumes
2619 that it must 
2620    be the right one and just takes that.
2622  * For example:
2624      lay = Qt::HBoxLayout.new(self)
2625      ed = Qt::LineEdit.new('blah',self)
2626      # The next line should be: lay.addWidget(ed)
2627      lay.addLayout(ed)
2629   * Fixes problem reported by Han Holl
2631   CCMAIL: kde-bindings@kde.org
2633 2004-10-03  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2635  * A common programming error is to accidently leave off the 'new'
2636 method call when
2637    creating an instance. The QtRuby runtime wasn't correctly trapping
2638 an attempt to
2639    call an instance method on a class object, and was seg faulting
2640 rather than
2641    throwing an exception.
2643  * For example:
2645                     # The next line should be:  lay =
2646 Qt::HBoxLayout.new(self)
2647                    lay = Qt::HBoxLayout
2648                    ed = Qt::LineEdit.new('blah',self)
2649                    lay.addWidget(ed)
2651  * Fixes problem reported by Han Holl
2653  CCMAIL: kde-bindings@kde.org
2655 2004-10-03  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2657  * Upped version to 1.0.3 for the KDE 3.3.1 release
2659 2004-10-02  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2661  * Added Ruby Array to QPair<int,int>& marshaller
2663 2004-09-30  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2665  * The resolve_classname() function in handlers.cpp uses the various
2666 Qt rtti mechanisms to
2667    get a more accurate classname to instantiate as a ruby instance. It
2668 has now been extended
2669    with a callback to the Korundum library to do the same for KDE
2670 classes.
2672  CCMAIL: zack@kde.org
2674 2004-09-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2676  * Added Jim Menard's ruboids as an OpenGL/Qt::GL* Widgets example
2677  * Improved instructions and exconf.rb for building the gui extension
2678 from Michal 'hramrach' Suchanek
2680 2004-09-13  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2682  * Upped the version to 1.0.2 for Rubyforge release
2684 2004-09-12  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2686  * Added a 'qui' extension for reading in .ui Qt Designer files at
2687 runtime
2688  * For example:
2690      require 'Qt'
2691      require 'qui'
2693      a = Qt::Application.new(ARGV)
2694      if ARGV.length == 0
2695          exit
2696      end
2698      if ARGV.length == 2
2699          QUI::WidgetFactory.loadImages( ARGV[ 0 ] )
2700              w = QUI::WidgetFactory.create( ARGV[ 1 ] )
2701              if w.nil?
2702              exit
2703          end
2704              w.show()
2705             a.connect( a, SIGNAL('lastWindowClosed()'), a,
2706 SLOT('quit()') )
2707             a.exec()
2708      end
2711 2004-09-07  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2713  * Upped the version to 1.0.1 for the current Rubyforge release
2715 2004-09-05  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2717  * Added Kate:: and KTextEdit:: namespaces for writing Kate plugins
2719 2004-09-03  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2721  * Some newer changes from the uic were added to the rbuic tool.
2723 2004-09-03  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2725  * Brought the rbuic code to uncompress zip files in line with the
2726 current uic code
2727  * Added a qmake project file for building the rbuic tool on Mac OS X,
2728 and some
2729    notes on how to build QtRuby on a Mac.
2731 2004-08-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2733  * Added Kontact module to provide a namespace for the kontact plugin
2736 2004-08-25  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2738  * Underscore naming for can be used for method names instead of camel
2739 case if
2740    preferred. Any underscores in method names are removed, and the
2741 following
2742    character is capitalised. For example, either of these two forms
2743 can be used
2744    to call the same method:
2745   
2746      create_standard_status_bar_action()
2747   
2748      createStandardStatusBarAction()
2750 2004-08-23  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2752  * A 'thing?' ruby method can now be used as a synonym for either
2753 isThing() or hasThing() in the Smoke runtime
2755 2004-08-04  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2757  * Upped the QtRuby version to 1.0.0 - it must work now then..
2759 2004-08-02  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2761  * Added 'long long' and 'unsigned long long' marshallers
2763 2004-07-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2765  * The smokeruby_mark() gc marking f'n now marks the QTableItems owned
2766    by a QTable so they don't get garbage collected, even if there are
2768    remaining references in the user code.
2770 2004-07-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2772  * Added a template based method for QValueList marshallers, and
2773 several
2774    QValueList types.
2776 2004-07-28  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2778  * Removed any marshaller types that weren't in the Smoke runtime from
2780    type name to marshaller function lookup table.
2782 2004-07-28  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2784  * If a class doesn't have a virtual destructor, then no mapping was
2785 being
2786    kept from the C++ instance to the corresponding ruby value. If the
2787 class
2788    had virtual method callbacks, this meant that the ruby instance
2789 couldn't
2790    be found, and the callback couldn't be made.
2792  * Hence, the Qt::ToolTip callback in examples/qt-examples/tooltip
2793 didn't
2794    work, as that class doesn't have a virtual destructor.
2796  * Added an 'isEnum()' function to use when matching args in
2797 overloaded
2798    method resolution.
2800  * QCString arg types are chosen in preference to QByteArray ones,
2801 matching
2802    against ruby strings, when resolving an overloaded method call.
2804  * Qt::Enums and Qt::Integers can be marshalled to uints, longs and
2805 ulongs as
2806    well as ints.
2807    
2808  * Added a '==' operator to Qt::Enums so they can be compared with
2809 ruby Integers
2811 2004-07-27  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2813  * Qt::Integer arithmetic and bit operations return Qt::Integers,
2814 rather
2815    than ruby Integers so that ops can be nested as for Qt::Enums.
2817 2004-07-27  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2819  * The recently added Qt::Integer bit operators were returning a ruby
2820 Integer
2821    type. When they were nested, the Integer didn't know how to convert
2823    Enum it was being or'd with to an Integer.
2825  * The solution is to add bit operators to the Enum class which return
2826 Enums
2827    rather than Integers.
2829  * The following code didn't work:
2830      
2831      def initialize(message)
2832          super(nil, "passivedlg",
2833                  Qt::WStyle_Customize | Qt::WX11BypassWM |
2834 Qt::WStyle_StaysOnTop |
2835                  Qt::WStyle_Tool | Qt::WStyle_NoBorder)
2837 2004-07-27  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2839  * Replaced QString casts to 'const char *' with latin1() calls
2841 2004-07-27  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2843  * The Qt::Enum class was missing bit operations, so various bit
2844 methods
2845    were added to Qt::Enum's superclass, Qt::Integer.
2847  * This was causing this line from examples/uimodules/uidialogs.rb to
2848 fail:
2850      dlg =   KDE::DialogBase.new(parent, "sample_dialog", false,
2851 caption,
2852                                         KDE::DialogBase::Ok |
2853 KDE::DialogBase::Cancel, 
2854                                  KDE::DialogBase::Ok, true )
2856 2004-07-27  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2858         * Added error messages for invalid slot or signal declarations
2860 2004-07-27  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2862         * The standard ruby error message for missing constants and methods
2864           now used when they can't be found in the Smoke library. Removed
2865 Alex's
2866           comment about the previous approach, now I agree this is the best
2867 way 
2868           to show errors.
2870         CCMAIL: me@lypanov.ne
2872 2004-07-27  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2874         * Added qDebug(), qFatal() and qWarning() module methods
2876 2004-07-26  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2878         * The parsing of types passed to slots, (or returned from dcop slots)
2879 didn't
2880           work with template types containing commas such
2881 as 'QMap<QString,QString>'.
2882         * Added 'QMap<QString,QString>&' and 'QMap<QString,QVariant>&' to the
2883           handlers.cpp string to marshaller lookup table.
2885 2004-07-26  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2887         * Added marshallers for QMap<QString,QString> and
2888 QMap<QString,QVariant> to and from ruby hashes
2890 2004-07-26  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2892         * The error messages for missing methods or missing constants now
2893 give the
2894           name of the missing item.
2895         * For example, this incorrect line:
2897             color_group.setColor( ColorGroup::MyMissingConst, blue )
2898           
2899           Gives this error:
2901             splitter.rb:16:in `const_missing': unresolved constant 
2902                 reference MyMissingConst (ArgumentError)
2904         * Implements suggestion from Jeff on the kdebindings list
2906         CCMAIL: kde-bindings@kde.org
2908 2004-07-19  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2910         * Added Qt::Enum type. Before a C++ enum was being marshalled to a
2911 ruby
2912           Integer, and the type name of the enum was lost. A Qt::Enum is a
2913 subclass
2914           of Integer with an extra type name.
2915         * This fixes a problem with overloaded method resolution where two
2916 methods differ
2917           only be an enum type such as this:
2919             # KPasswordEdit(EchoMode echoMode, QWidget *parent, const char
2920 *name);
2921             # KPasswordEdit(EchoModes echoMode, QWidget *parent, const char
2922 *name);
2924             pw2 = KDE::PasswordEdit.new(KDE::PasswordEdit::ThreeStars,
2925 page, "")
2927 2004-07-17  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2929         * After a non-const string arg was passed to a method, the value of
2930 the QString
2931           is copied into the ruby value. But it wasn't being correctly
2932 converted to the
2933           correct string format according to $KCODE.
2934         * QString to ruby string conversions in QStringLists were not
2935 localised either.
2937 2004-07-14  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2939         * Removed superfluous '(void *)' cast which was causing compilation
2940           problems with gcc 3.4
2941         * Fixes problem reported by Jochen Immend�fer on comp.lang.ruby
2942           CCMAIL: kde-bindings@kde.org
2944 2004-07-11  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2946         * Qt eucJP and Shift-JIS codecs used to support ruby $KCODE values
2947 of 's' 
2948           for SJIS and 'e' for EUC
2950 2004-07-08  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2952         * Added support for strings in QtRuby programs being written in
2953 UTF-8.
2954           Use the '-Ku' command line option or '$KCODE=u' in the program.
2955         * Removed recently added QChar marshalling as it wasn't very i18n
2956 friendly
2958 2004-07-07  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2960         * Added QChar marshalling
2962 2004-07-06  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2964         * Fix for passing C++ 'bool*' and 'bool&' argument types
2965           There is a similar problem for bool arg types as with ints, and the
2966 mutable
2967           Qt::Boolean class can be used like this:
2968                 
2969             # QFont getFont(bool * ok, const QFont&initial, QWidget* parent =
2970 0);             
2971                 
2972             ok = Qt::Boolean.new
2973             font = Qt::FontDialog.getFont(ok, Qt::Font.new("Helvetica
2974 [Cronyx]", 10), self)
2975             if !ok.nil? 
2976                 # font is set to the font the user selected
2977             else 
2978                 # the user canceled the dialog
2979             end
2980                 
2981           Use 'nil?' to test the value returned in the Boolean
2982         * Signal and slot type signatures are 'normalized' and any unwanted
2983 white space
2984           removed
2985         * Fixed problem with QByteArray arg type matching in overloaded
2986 method resolution
2988 2004-07-04  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
2990         * Fix for passing C++ 'int*' and 'int&' argument types
2991           Ruby passes numeric values by value, and so they can't be changed
2992 when passed to a
2993           method. The Qt::Integer class provides a mutable numeric type which
2994 does get updated
2995           when passed as an argument. For example, this C++
2996 method 'findByFileContent()':
2997                 
2998                 # static Ptr findByFileContent( const QString &fileName, int
2999 *accuracy=0 );
3001                 acc = Qt::Integer.new(0)
3002                 fc = KDE::MimeType.findByFileContent("mimetype.rb", acc)
3003                 
3004           It supports the arithmetic operators, and so expressions such
3005 as 'acc + 3' 
3006           will work.
3008 2004-07-02  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3010         * Replaced obsolete STR2CSTR() calls with StringValuePtr()
3012 2004-06-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3014         * The internal findAllMethods() method now returns nil rather than an
3015 empty array
3016           if the given classid is greater than 'smoke->numClasses'.
3017 Otherwise, it wasn't 
3018           possible to distinguish between a class with no methods, or
3019 reaching the end of
3020           the classes array.
3022 2004-06-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3024         * Added QStrList marshalling
3026 2004-06-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3028         * Improved Garbage Collection, dispose() and isDisposed() methods
3029           - When a ruby instance is garbage collected, the underlying C++
3030 instance will only be
3031             deleted if it isn't 'owned' by a parent object. Normally this
3032 will 'just work', but
3033             there are occasions when you need to delete the C++ ahead of
3034 garbage collection, and
3035             whether or not it has a parent. Use the dispose() and
3036 isDisposed() methods like
3037             this:
3038                 
3039                 item0.takeItem(item1)  
3040                 item0.insertItem(item1)  
3041                 
3042                 item2.dispose
3043                 if item2.isDisposed
3044                     puts "item2 is disposed"
3045                 end
3047           - Fixes problem reported by Hans Fugel
3048         
3049 2004-06-26  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3051         * The marshalling TypeHandler function pointers are now looked up in
3053           QAsciiDict, rather than a ruby Hash.
3054         * Some unused functions removed
3055         * QtRuby version upped to 0.9.8
3057 2004-06-09  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3059         * New flags were added for Smoke methods - mf_internal and
3060 mf_copyctor.
3061           This allows copy constructors which are only used internally by the
3062 ruby
3063           runtime, to be excluded from the standard api.
3066 2004-05-12  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3068         * When ARGV was passed to the Qt::Application constructor, it was
3069 being
3070           altered, and the name of the ruby program added as a first entry.
3072           constructor now uses a copy of the array, and ARGV is left
3073 unchanged.
3075 2004-05-03  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3077         * Added a '-kde' option to the rbuic tool to generate
3078 require 'Korundum'
3079           instead of require 'Qt' statements, and use KDE widgets.
3081 2004-04-30  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3083         * Applied patch from Marek Janukowicz.
3084         * The patch fixes some perlisms, that caused errors on loading a Ruby
3085 file
3086           generated from .ui file for Qt::MainWindow subclass
3088 2004-04-20  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3090         * The rbuic now correctly names KDE widgets with a KDE:: prefix
3091         * If the rbuic -x option is used, a KDE top level is generated if any
3092           KDE widgets have been found.
3094 2004-04-17  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3096         * Fixed bug in rbuic generated code for setResizeMode()
3098 2004-04-05  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3100         * Improved classname resolution for QListViewItem and QTableItem
3101 subclasses using rtti() calls
3103 2004-03-26  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3105         * Ruby slots and signals are now inherited correctly
3106         * This causes problems with code generated by the rbuic utility
3107         * Fixes bug 78273 reported by Imobach Sosa
3109 2004-03-10  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3111         * When a mutable, non-const QString, int*, int&, bool* or bool& is
3112 passed
3113           to a method, the corresponding ruby value is now updated after the 
3114           method call.
3115         * Some f'ns are no longer static, so that the korundum extension can
3116 link
3117           against them.
3119 2004-03-03  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3121         * The f'n new_qobject is no longer static, and can be called from
3122 korundum
3124 2004-03-01  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3126         * Fixed bugs in QCString, QString and QByteArray marshalling.
3127           - When a C++ method with a mutable, non-const QCString arg type 
3128             is called from ruby, the C++ arg value is copied back into the
3129             corresponding ruby arg VALUE after the call.
3130           - A pointer to a locally allocated QString was being returned,
3131             giving memory corruption problems.
3132         * The default debug level in qtruby.rb is DebugLevel::OFF, otherwise
3133           very verbose error messages are produced.
3135 2004-01-28  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3137         * Fixed bug where a QCString was being ranked equally with a QString,
3138           when resolving ambiguous method overloading. Caused the KDE::URL
3139           constructor to fail with a string arg.
3141 2003-11-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3143         * Added DOM:: namespace for the DOM:: classes in the Smoke library.
3144         * The scope operator in nested classnames is now '::' rather
3145           than '__', so changed the qtruby runtime to expect that.
3147 2003-11-13  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3149         * Added the KillerFilter event filtering example from chapter 16
3150           of 'Programming with Qt'
3151         * Improved classname resolution via the Qt rtti mechanisms in
3152           QObject, QEvent and QCanvasItem. This fixed a problem in the
3153           KillerFilter example when a QMouseEvent was passed to the ruby 
3154           event handler, it was being instantiated as a ruby Qt::Event, 
3155           rather than a Qt::MouseEvent.
3157 2003-11-11  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3159         * Improved nil argument matching, and nil can match any type now
3160           not just classes. Translated the code from the Qt.pm in PerlQt,
3161           after discussion on the kde-perl list.
3162         * Fixed bug in rbuic where a C++ 'QString::null' was "" in ruby, and
3163           should have been a nil.
3165 2003-11-08  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3167         * Finally fixed huge leak, causing the progress.rb example to grow by
3168           1 Mb a minute.
3169         * Added a cache from ruby classname to Smoke class id
3170         * Speeded up method selector look ups
3171         * Put some C++ code inside blocks to ensure that the destructor clean
3172           up code was called, when the current f'n longjmp's up the stack
3173 rather
3174           than returns normally.
3175         * QtRuby looking good, raised the version to 0.9.6 to celebrate
3177 2003-11-07  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3179         * Fixed some memory leaks
3180         * Ensured that any instance 'owned' by ruby, ie with the the
3181 allocated
3182           flag set to true, is always added to the pointer_map.
3183           Otherwise, the same C++ instance can be wrapped twice and will be
3184 deleted
3185           twice.
3187 2003-11-03  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3189         * When marshalling a const ref type to a ruby VALUE, it is now copied
3190         * Applied some fixes for construct_copy() from the PerlQt version of
3191           handlers.cpp
3192         * Fixed some minor bugs in the progress.rb Qt example
3194 2003-11-03  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3196         * Added method selector caching for class methods and constructors,
3197           although performance still 'sedate' compared with C++ or Perl.
3199 2003-10-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3201         * The smokeruby_mark() f'n now marks the QListViewItems in a
3202 QListView
3203         * Fixed a QLayoutItem crash in smokeruby_free()
3205 2003-10-27  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3207         * The smokeruby_mark() f'n was completely wrong, as it is only called
3208 if 
3209           the current object is already marked. So marking the current object
3210           doesn't make a lot of sense. Instead, if the instance is a kind of
3211           QObject then its childeren are marked.
3212         * The smokeruby_delete() object doesn't delete instances which have
3213           parents of one sort or another.
3214         * Made some fixes to the tutorial examples
3215         * Removed equality '==' operator overloading as it only expects a
3216 single
3217           arg in ruby, and not two.
3219 2003-10-22  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3221         * Changed some error messages in do_method_missing() to be 'debug
3222 only' for now.
3224 2003-10-22  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3226         * Got the checklists.rb example working after bug report from Mikhail
3227 Yakshin
3228           - Corrected some coding errors in the example itself.
3229           - The arg matching code in method_missing() has been improved and
3230 simplified.
3231           - In the overloaded arg type resolution matching, an enum is
3232 type 'long'
3233           - A class which matches exactly is a better match than a subclass.
3234             Multiple matches are allowed as long as there is a 'best match'.
3235           - Operator overloading now looks for methods of the
3236 form 'operator+=',
3237             'operator-=' etc in the Smoke runtime.
3239 2003-10-14  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3241         * Fixed serious random crash problem
3242           - qt_invoke() and qt_emit() were not calling super if a ruby signal
3244             slot hadn't been found, which stopped C++ signals from working. 
3245           - This prevented destroy() signals from invoking event filter list
3246 clean
3247             up when a QObject was deleted, leaving deleted instances in the
3248 list.
3249           - 'QUObject*' args are now marshalled as a ruby list with a single
3250             entry of a VALUE wrapping the pointer.
3251         * The ruby ALLOCA_N macro is no longer used as it is based on
3252 alloca(),
3253           which doesn't seem a good idea. malloc(), calloc() and free() are
3254 used
3255           instead
3257 2003-10-11  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3259         * Added khtml:: namespace, although it isn't in the SmokeKDE runtime
3261         * Improved method_missing error messages if a method can't be
3262 resolved
3264 2003-10-09  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3266         * Added KIO:: and KParts:: namespaces for the new classes in
3267 libsmokekde
3269 2003-10-08  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3271         * Korundum KDE ruby extension 
3272           - made various changes so it can be linked against the QtRuby code
3274 2003-09-18  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3276         * Removed leading 'K' from class names of when adding to KDE::
3277 namespace.
3278           As per Germain Garand's suggestion on the kde-bindings list:
3280           ..actually, I used the same scheme as for Qt when possible, that
3282                 $class =~ s/^Q/Qt::/ or
3283                 $class =~ s/^K/KDE::/ or
3284                 $class = "KDE::" . $class
3285                 unless $class eq "Qt";
3287 2003-09-18  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3289         * Added support for KDE classes under module KDE:: for use with
3290           the new libsmokekde.so. You can now write KDE programs in Ruby,
3291           here is Hello World:
3293             about = KDE::KAboutData.new("one", "two", "three")
3294             KDE::KCmdLineArgs.init(1, ["four"], about)
3295             a = KDE::KApplication.new()
3296             hello = KDE::KPushButton.new(nil) { setText "Hello World" }
3297             a.setMainWidget(hello)
3298             hello.show()
3299             a.exec()
3301 2003-09-14  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3303         * The rbuic -embed option finally works. Fixed QByteArray
3304 marshalling.
3306 2003-09-13  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3308         * Improved the rbuic -embed option, and added some fixes
3310 2003-09-12  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3312         * More passing blocks to constructors fun! You can now also pass 
3313           an arg to the block, and it will be run in the context of the arg:
3314                 
3315                 w = MyWidget.new { |theWidget| theWidget.setCaption "foobar" }
3317         I got this idea from the FXRuby bindings, from the ChangeLog:
3319         "This approach has the advantage that the initialization code now has
3320         access to the outer scope, as blocks normally would. Thanks to
3321         Rich Kilmer for this suggestion."
3323         If you don't pass an arg to the block, the block is run in the
3324 context 
3325           of the new instance as before.
3327         * Debugging left in handlers.cpp (must stop doing this)
3329 2003-09-12  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3331         * Marshallers now return Qnil, rather than Qundef (for internal use
3332 only)
3334 2003-09-10  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3336         * Improved garbage collection with various 'ad hoc' rules from the
3337           QtJava bindings about when it's ok/not ok to destruct an instance.
3338           Not always just a 'parent() != 0' check in Qt.
3340 2003-09-10  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3342         * Added QByteArray <-> Ruby string marshaller
3344 2003-09-09  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3346         * Blocks can now be passed to constructors, like this:
3347             w = MyWidget.new { setCaption("foobar") }
3349 2003-09-08  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3351         * Added method selector caching, scribbling may be slightly faster..
3353 2003-09-08  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3355         * GC getting closer to working. Debugging code improved.
3357 2003-09-08  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3359         * From below 'watch out for extra crashes!' - indeed! Have now
3360 disabled
3361           smokeruby_free() and smokeruby_mark() until garbage collection
3362 works.
3364 2003-09-08  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3366         * The pointer_map is now a QPtrDict rather than a ruby Hash, and
3367           the entries are weak references. An implementation was tried 
3368           using the ruby WeakRef class, but it didn't work because
3369 rb_gc_mark()
3370           didn't prevent them being garbage collected.
3371         * smokeruby_free() and smokeruby_mark() have been implemented
3372         * The C++ instance for a ruby object is deleted in smokeruby_free(),
3373           so watch out for extra crashes!
3374         * Improved README with more details about QtRuby
3376 2003-09-07  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3378         * Improved error message handling, changed rb_error() calls to
3379 rb_raise()
3380         * Decided changing method calls like foobar? to isFoobar() not a good
3381 idea,
3382           as the Qt property could just as also be hasFoobar() or foobar() 
3384 2003-09-06  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3386         * Set methods such as autoMask= are converted to setAutoMask()
3387         * Get methods such as modal? are converted to isModal()
3389 2003-08-31  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3391         * rbuic code generation brought up to date wrt Qt 3.2 uic
3392           Main change is that a 'languageChanged()' method is generated
3394 2003-08-30  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3396         * rbuic() code generation fixes
3398 2003-08-30  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3400         * Added 'Run Selection' menu option to the QtRuby shell
3402 2003-08-30  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3404         * Operator methods are now called 'operator..' in QGlobalSpace and
3405 not renamed
3406         * Added unary minus, and a test in opoverloading.rb
3408 2003-08-29  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3410         * Updated TODO list, improved rbuic code generation for images
3412 2003-08-28  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3414         * Improved operator overloading to work with operators not in
3415 QGlobalSpace
3417 2003-08-27  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3419         * Changed the operator overloading implementation to be more like
3420 PerlQt
3422 2003-08-27  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3424         * Translated the rbqtsh filePrint() method from perl
3426 2003-08-26  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3428         * Added 'changed' attribute to the MetaInfo class, so that the C++
3429 metaObject
3430           is reconstructed if the slots or signals are changed.
3431         * Changed window title on rbqtsh to 'QtRuby'. The example slot now
3432 works
3433           correctly. Only just tried this utility - Wow Alex!!
3435 2003-08-26  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3437         * findMethod() now looks in the QGlobalSpace pseudo class as well as
3438 the normal target class.
3439         * The bitBlt() code in the scribble example works correctly
3441 2003-08-25  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3443         * Removed ugly _current_object global variable. 
3444           The current target object is now passed to the MethodCall
3445 constructor.
3447 2003-08-25  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3449         * Removed obsolete rb_enable_super() calls
3450         * Removed test for _current_object in class_method_missing()
3451         * Fixed missing index in signalInfo() method
3452         * Added Qt scribble example - TODO add Qt::PaintDevice.bitBlt() calls
3453 to SMOKE runtime
3455 2003-08-23  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3457         * Added rbuic tool for ruby Qt Designer support
3459 2003-08-12  Alexander Kellett   <lypanov@kde.org>
3461         * Add debug level setting via Qt::debug_level
3462         * When calling .new on a Qt object with a incorrect prototype
3463           the list of appropriate constructors is printed
3464         * Fix a number of cases in which imperfect code would cause a crash
3466 2003-08-11  Alex Zepeda   <zipzippy@sonic.net>
3468         * Various fixes to get QStringList marshalling working
3469         * Treat Ruby strings as UTF-8 strings in order to fix the QFont
3470 examples
3472 2003-08-09  Alexander Kellett   <lypanov@kde.org>
3474         * Added support for operator overloading
3476 2003-08-07  Alexander Kellett   <lypanov@kde.org>
3478         * Added rbqtapi and rbqt tools (port of the PerlQt tools of the same
3479 name)
3481 2003-08-06  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3483         * Added some TODO list entries, added Alex to the AUTHORS list
3485 2003-08-06  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3487         * Fixed 'int&' marshalling so script name appears in window title
3489 2003-08-12  Alexander Kellett   <lypanov@kde.org>
3491         * Add several new marshalling types - QCanvasItemList for example,
3492           unfortuantely due to several improvements in Qt 3.2 these 
3493           improvements will not be seen when compiling against Qt 3.1.2
3495 2003-08-05  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3497         * Moved SLOT(), SIGNAL() and emit() to global scope
3499 2003-08-05  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3501         * Removed redundant 'rb_eval_string("include Qt")' call from
3502 extension initialization.
3504 2003-08-05  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3506         * Qt::Application constructor safer, but program name still not
3507 appearing in the window title
3509 2003-08-05  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3511         * Fixed bug in resolution of overloaded Qt::Popup.insertItem()
3512 methods
3514 2003-08-05  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3516         * Use new const_missing from ruby 1.8.x to allow for constant access
3517 from base class, for example "Qt::RichText"
3518         * QString::null now maps onto Qnil, rather than a zero length ruby
3519 string
3521 2003-08-04  Alexander Kellett   <lypanov@kde.org>
3523         * Allow for accumulative slots/signals declarations in a class
3524         * Minor build fixes
3526 2003-08-02  Alexander Kellett   <lypanov@kde.org>
3528         * Fix several deprecation warnings when running under 1.8.x
3529         * Several more build fixes
3531 2003-08-01  Alexander Kellett   <lypanov@kde.org>
3533         * Slightly improve ease of debugging of qtruby programs 
3534           which subclass Qt base classes by print out some useful
3535           debugging informationn when/if method_missing ever 
3536           fails to find a matching function in the baseclass.
3538 2003-08-01  Alex Zepeda   <zipzippy@sonic.net>
3540         * Remove need to manually run extconf.rb by some automation via a
3541 configure.in.in
3542         * Various other build fixes
3544 2003-07-31  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3546         * Fixed bug in marshalling QString::null to a ruby VALUE
3548 2003-07-31  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3550         * Changed require in Qt.cpp to 'Qt/Qt.rb' instead of 'lib/Qt/Qt.rb'
3552 2003-07-31  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3554         * Fixed problem with non-working installed version, lib/Qt.rb moved
3555 to lib/Qt/Qt.rb
3557 2003-07-30  Richard Dale  <Richard_Dale@tipitina.demon.co.uk>
3559         * QtRuby - a Ruby SMOKE adaptor for Qt, initial checkin