2007-02-19 Richard Dale * Fixed a bug where the sort method of TQt::ListView and TQt::ListViewItem was no longer working, as the classes are 'Enumerable' and ruby was calling the ruby sort method instead. Thanks to kelko for reporting it on #kde-ruby. 2006-12-05 Richard Dale * Backported some improvements to TQt::Variants from Qt4 QtRuby * When marhalling TQMap types with TQVariant values, if the Ruby value isn't a TQt::Variant then one is created * TQt::Variants can now be constructed with Hash's of String/TQt::Variant pairs, and from Arrays of TQt::Variants * When marshalling TQValueList types from Ruby to C++, if any elements aren't Ruby TQt::Variants, they are automatically converted. Hence, the following will work: v = TQt::Variant.new([1, 2, 3]) The TQt::Variant v will contain a list of 3 TQVariants with typeName 'int' * Change all instances of strcmp() to tqstrcmp() 2006-11-20 Richard Dale * Made TQt::ListView, TQt::ListViewItem, TQt::BoxLayout, TQt::HBoxLayout, TQt::VBoxLayout and TQt::GridLayout Enumerable with implementations of each() so they don't need to use the Qt External iterators like TQt::LayoutIterator anymore. For instance: lv = TQt::ListView.new do ["one", "two", "three", "four"].each do |label| TQt::ListViewItem.new(self, label, "zzz") end end lv.each do |item| p item.inspect pp item.inspect end * Add inspect() and pretty_print() methods to TQt::ListViewItem so that they show the text of their columns 2006-09-19 Richard Dale * Upped the QtRuby version to 1.0.13 for the KDE 3.5.5 release * Fixed a crash when a slot was inherited by a subclass, and the subclass had no slots or signals of its own 2006-09-17 Richard Dale * Fixed bug reported by Caleb Tennis where temporary TQString const arguments were only being deleting after marshalling if they weren't const types. 2006-09-14 Richard Dale * Added a new variant of connect, which takes a SIGNAL as an argument, along with a block. For example: quit.connect(SIGNAL(:clicked)) { puts 'quit pressed' } The block is called in the context of where the connect call was made, and 'self' needn't be a TQt::Object. It is similar to the signal_connect() method in ruby-gnome. This was suggested by rickdangerous on the #qtruby irc channel. 2006-09-13 Richard Dale * Blocks can now be used as slots in TQt::Object.connect() calls. There are two versions, a singleton method and an instance method. * Here is an example of the class method connect() call with a block as a target: app = TQt::Application.new(ARGV) quit = TQt::PushButton.new('Quit') TQt::Object.connect(quit, SIGNAL('clicked()'), app) { puts 'quit clicked' } The block is executed in the context of the target instance, 'app' in this case. * And the instance method form: class MyButton < TQt::Button def initialize(text) super(text) connect(self, SIGNAL('clicked()')) { puts 'button clicked' } end ... The block is executed in the context of self - the instance making the connect() call. * The Rails version of the Ruby 1.9 method Object#instance_exec was used to invoke the block. Thanks to kelko on the #kde-ruby channel for the idea and the code, and #rickdangerous for further discussion. 2006-08-29 Richard Dale * Backported some memory leak fixes from Qt4 QtRuby 2006-08-10 Richard Dale * The Ruby VALUE to 'uchar *' marshaller wasn't working correctly if the Ruby string contained nulls. Fixed by Dirk Mueller (thanks) and also applied for 'char *' types. 2006-07-12 Richard Dale * The Ruby String to 'char *' and String to 'unsigned char *' were using the pointer within the Ruby String directly which meant they were deleted when the Ruby String was gc'd. So they are copied with strdup () instead. 2006-06-05 Richard Dale * The metaObject methods for slots and signals are no longer added when a TQt::Object is constructed, but when slots or signals are added to a class. This means that signals as well as slots can be added to an existing instance. 2006-06-04 Richard Dale * For TQt::TQObject classes which are immediate subclasses of TQt::Base, don't add C metaObject() and tqt_invoke() methods as they aren't needed. This means that a TQMetaObject is no longer constructed for these classes, and the one that the corresponding C++ class has is returned instead. 2006-05-20 Richard Dale * Fix regression for dynamic class creation via TQMetaObject info causing a crash. * A list of properties is now returned via TQt::MetaObject.propertyNames for a TQt::Object with properties for the inspect and pretty_print methods. 2006-05-15 Richard Dale * Removed the customized version of Kernel.exec, Kernel.open etc as they aren't needed anymore. 2006-05-14 Richard Dale * When an unknown C++ class is found, a corresponding Ruby class is now created. For instance, if a KPresenter KPart is loaded, a KDE::PresenterDoc class is created. * It is now possible to set and get properties without needing to use TQt::Object.property() and TQt::Object.setProperty(). For instance: factory = KDE::LibLoader.self().factory("libkpresenterpart") @kpresenter = factory.create(self) p @kpresenter.presentationDuration @kpresenter.presentationDuration = true * A TQt::Variant.to_ruby method has been added which returns a Ruby value corresponding to the current value of a TQt::Variant * A boolean TQt::Variant can now be constructed with a TQt::Variant.new(true) call, and a dummy second arg (as for C++) is no longer needed. 2006-05-07 Richard Dale * An an type of TQ_UINT16 wasn't working with QtRuby. Fixes problem reported by maelclerambault. 2006-05-03 Richard Dale * The tqt_emit() and tqt_invoke() methods are overriden by the QtRuby runtime. When they are called the runtime looks for a Ruby slot or signal matching the call, and invokes it if found. If a Ruby version wasn't found for a signal however, the tqt_invoke() method was being called in the Smoke library instead of tqt_emit(). This occasionally caused a crash in code using KDE::HTMLPart. 2006-04-17 Richard Dale * Made :foobar a synonym for 'foobar()' for slots and signals * Added some calls for TQt::Event.type methods to force them to go via method_missing() 2006-03-29 Richard Dale * Don't special case open() in virtual method callbacks, because all the Qt classes with open methods now have explicit open() method calls. So it isn't possible that Kernel.open() will be called wrongly anymore. 2006-03-29 Richard Dale * Added a KDE::KonsolePart class for when a konsolePart KPart is dynamically loaded. 2006-03-21 Richard Dale * Added various explicit calls to method_missing() for methods which are defined in Kernel and Object, such as 'exec', 'select', 'format' etc. Otherwise, the corresponding methods in the Smoke library were not being invoked correctly. * Removed a virtual destructor compile warning * Removed obsolete qtruby-only.patch and tdevelop project file 2006-03-14 Richard Dale * Fixed bugs in const lists marshallers, where the items in the ruby Array were wrongly being updated after a method call 2006-02-09 Richard Dale * The Kernel#select method was being redefined as it clashed with TQt::SqlCursor#select and TQt::SqlSelectCursor#select methods. This caused a problem when QtRuby was used with Rails ActiveRecord which also has a select method. So the methods are now defined in the Sql classes, and use method_missing() to explictly invoke the methods in the Smoke library. Fixes problem reported by Imo Sosa. 2006-01-18 Richard Dale * Improved the debug logging of virtual method callbacks so that the arg types are shown too 2005-12-16 Richard Dale * The logger_backend() function has been removed and replaced with tqWarning() calls. This was because of problems with getting the logger_backend() code to work on Windows. 2005-12-16 Richard Dale * Improved the code to call a C++ slot via tqt_invoke() when a ruby slot hasn't been defined. It now invokes the method in the Smoke lib directly, rather than going via method_missing(). 2005-12-08 Richard Dale * The ruby display() method was clashing with a display() method in some QtRuby classes, and so it was aliased to _display(). However, this caused problems with the ruby RMagick extension. The display methods are now special cased in TQt::LCDNumber, TQt::WhatsThis and TQt::TimeEdit. Fixes problem reported by David Corbin. * The slots and signals methods are now module methods of TQt::Base, rather than defined as ordinary methods in class Module, reducing name space pollution. Thanks to Esteban Manchado for pointing this out. 2005-12-06 Richard Dale * QtRuby didn't work with versions of ruby > 1.8.3, as it didn't call initialize methods correctly. It used the rb_respond_to() method to check it a newly created qt instance responded to :initialize. However, in newer versions of ruby rb_responds_to() ignores private methods such as initialize(). The solution was to just remove the test, as it was redundant anyway. * Fixes problem reported by Hans Fugel and Caleb Tennis. 2005-11-21 Richard Dale * When dispose() was used to delete a ruby instance, the mapping between the C++ ptr and corresponding ruby instance was not being removed, and this caused a crash. Fixes problem reported by Christopher Chan-Nui. 2005-11-04 Richard Dale * 'signed int&' types were not being matched or marshalled correctly 2005-11-02 Richard Dale * A TQt::Canvas owned by a TQt::CanvasItem is marked as in use and not needing garbage collection 2005-10-21 Richard Dale * Argument types of 'unsigned short int' were not working. Fixes problem reported by Ian Monroe 2005-10-05 Richard Dale * More fixes from the Qt4 version * The TQt::ByteArray class is now a normal Smoke class, rather than a special case, as it's easier to make a TQt::ByteArray look like a ruby String, than the other way round. * The overloaded method resolution for enum arg types has been improved * Added missing relational operators to TQt::Integer 2005-09-26 Richard Dale * Added some fixes from the Qt4 version of QtRuby * There was a clash between operator methods in Kernel for '>', '>=', '<' and '<=' and the ones in the Smoke lib. * Fixed a TQt::ByteArray marshalling problem 2005-09-12 Richard Dale * Fixed various problems with the rbuic code generation for database .ui forms reported by Daniel Morris 2005-09-11 Richard Dale * Fixed problem with TQt::SqlCursor.select() reported by Daniel Morris 2005-09-02 Richard Dale * Added a TQt::Char.to_s method for converting a TQt::Char to a ruby string 2005-08-09 Richard Dale * Caleb Tennis wrote: One nice feature would be to allow TQt::Object::inherits() to use the QtRuby naming scheme for valid lookups. For example, right now: irb(main):001:0> w = TQt::Widget.new(nil) irb(main):002:0> w.inherits("TQt::Widget") => true irb(main):003:0> w.inherits("TQt::Object") => false irb(main):004:0> w.inherits("TQWidget") => true irb(main):005:0> w.inherits("TQObject") => true * Inherits now works for "TQObject", and for "TQt::Object" as well. 2005-08-04 Richard Dale * Added a file called 'COPYING' to the qtruby project, with a note that the 'Qt' trademark in the QtRuby name is used with Trolltech's permission, followed by the text of the GPL v2 license. 2005-07-30 Richard Dale * TQt::version and TQt::ruby_version are now module methods 2005-07-15 Richard Dale * TQt::Socket started working correctly when I and regenerated and rebuilt my Smoke library. Before then it was calling the wrong version of TQSocket::at() for some reason, and wasn't discarding bytes that had already been read. * Removed comment from the client.rb example about TQt::Socket.canReadLine always returning true now it works. 2005-07-14 Richard Dale * Added example programs for client/server programming with TQt::Socket and associated classes. client.rb illustrates current bugs in QtRuby * TQt::Socket.canReadLine() always returns true * TQt::readLine() seg faults when called a second time * A memory leak and seg faulting problems like the above were reported by Caleb Tennis 2005-07-09 Richard Dale * When a Qt method returned a TQString value type, such as: TQString TQSocket::readLine() A temporary TQString was being created that wasn't deleted and caused a memory leak. Fixes problem reported by Caleb Tennis. 2005-06-28 Richard Dale * Improved display of TQt::Enums in the KDevelop debugger. With a p command it just looks like a constant, but a pretty print pp command shows the type of the underlying C++ enum: (rdb:1) p AlignTop 16 (rdb:1) pp AlignTop # 2005-06-04 Richard Dale * Upped the version to 1.0.10 2005-06-04 Richard Dale * The Object.id method was clashing with the one in TQt::WidgetStack. Both methods now work correctly. Fixes problem reported by Dave M. 2005-05-29 Richard Dale * The rbuic '-subimpl' option now works correctly 2005-05-29 Richard Dale * The initialize methods in code generated by the rbuic tool, now have named parameters with default values, rather than '*k' 2005-05-29 Richard Dale * Fixed bug where the rbuic tool was generating incorrect code for an array of strings used as a combo box value 2005-05-28 Richard Dale * Added support for the TQScintilla text editing widget, including an optional '--enable-qscintilla=yes' configure option. The TQScintilla classes are included in a Qext:: namespace. Thanks to Blackshack for the idea and configure code. * The KDE namespace modules are only created if the Korundum extension is used. Otherwise the Object namespace was being polluted with unused constants. * Some enums in the TQScintilla headers had a spurious comma after the last enum value, and kalyptus was failing with a parse error. The comma is now ignored. 2005-05-25 Richard Dale * '!=' operator methods in the Smoke library were being shown via ruby introspection when they can't actually be written in ruby, and are derived from the corresponding '==' operator method. * '==' operator methods can now be called. 2005-05-22 Richard Dale * Fixed bug in Smoke code generation where spaces were not being removed from operator methods such as 'operator *' * Operator methods are now displayed correctly via ruby introspection 2005-05-21 Richard Dale * Improved the format of enums displayed by rbqtapi and rbkdeapi 2005-05-20 Richard Dale * Removed unused TQt::Internal functions * Added KNS:: to the namespaces expected by the rbkdeapi tool * Introspection via Object#methods, public_methods, protected_methods and singleton_methods or Module#constants, instance_methods, protected_instance_methods and public_instance_methods now all include methods from the Smoke runtime. This fixes part of the request in bug 105772, but not enabling 'respond_to?' to be used with Smoke methods. 2005-05-16 Richard Dale * The Kernel.format() method was clashing with the TQt::MimeSource.format() method. The correct method is now called according to the type of the first argument. Fixes problem reported by Armin Joellenbeck 2005-04-29 Richard Dale * Removed superfluous "require 'pp'" statement 2005-04-25 Richard Dale * Upped the version to 1.0.9 for the RubyForge release 2005-04-09 Richard Dale * Fixed regressions in the rbqtapi and rbkdeapi utilities caused by the TQt::Internal namespace tidy up * TQt::version and TQt::ruby_version had wrongly been moved to the TQt::Internal module 2005-04-03 Richard Dale * Upped the version to 1.0.8 for the RubyForge release 2005-03-30 Richard Dale * An 'include Qt' statement in qtruby.rb where a couple of methods were being added to class Module was causing all the Qt methods to be added to Module. Oops, this a really serious bug. Various methods in qtruby.rb are now module methods in the TQt::Internal module. Big thanks to Eric Veensta and Samir Patel for pointing out this can of worms. * It also fixes a problem reported by David Crosby where a "require 'time'" statement was incompatible with a "require 'Qt'" statement. As the cause was unknown, a hacky workround had to be added, which is no longer needed. 2005-03-24 Richard Dale * When a subclass of TQObject is instantiated in the C++ world, and the exact class doesn't exist in ruby, then scan up the inheritance heirarchy via TQObject::metaObject() until a class is found which does have a ruby equivalent. Fixes problem reported by Dmitry Morozhnikor where a KViewPart was being returned as a TQt::Object, rather than a KParts::ReadOnlyPart. * The internal method 'cast_object_to()' now takes a class literal as a second parameter, rather than the class name as a string 2005-03-21 Richard Dale * Moved Qt.rb from qtruby/lib/Qt to qtruby/lib. Fixes problem building qtruby on Mac OS X with extconf.rb reported by Michael Doppler * Rename 'README.build' as INSTALL 2005-02-21 Richard Dale * Upped the version to 1.0.7 for the KDE 3.4 release * Removed the tdehtml:: namespace as it wasn't being used 2005-02-07 Richard Dale * Added a KNS:: namespace for the KNewStuff library 2005-02-06 Richard Dale * The KDE::Win::WindowInfo nested class is included in the Korundum runtime 2005-01-27 Richard Dale * Made some changes to get code generated by the rbkconfig_compiler to work. When an argument is a non-const reference to a primitive type, or a TQString or TQStringList, then don't delete it after the method call. This is because a class like TDEConfigSkeleton takes references, and then 'stquirrels them away' - before the references were just pointing to junk on the stack. * The method 'isImmutable' is added to KDE::ConfigSkeletonItems 2005-01-26 Richard Dale * If a ruby Array is passed as an argument to an overloaded method, give priority to TQStringList args. 2005-01-21 Richard Dale * rbuic was giving widgets names containing a '@' to match the ruby instance variable name. However, this doesn't work with KDE::ConfigDialog which expects the names to match the ones generated in a KDE::ConfigSkeleton by rbkconfig_compiler so '@' is no longer added. 2005-01-20 Richard Dale * Fixed bug reported by Ian Monroe where the KIO.copy() method wasn't being found in the Smoke runtime. Modules methods are now trapped with method_missing and despatched to call Smoke methods correctly * Added support for the KDE::ConfigSkeleton and subclasses. Constructors for nested classes can now be called correctly CCMAIL: ian.monroe@gmail.com 2005-01-16 Richard Dale * Added a TQt::Integer.coerce method so that TQt::Integers and TQt::Enums can be combined in arithmetic expressions with ruby Integers. 2005-01-04 Richard Dale * Upped the version to 1.0.6 for the KDE 3.4 beta 1 release 2005-01-02 Richard Dale * The TQt::Object pretty_print method now shows the class name of enum properties 2004-12-30 Richard Dale * Fixed an interesting bug reported by Stephan Oehlert. Kernel has a method called open() which takes a String as the first argument. But when a call is made to an open() method in the Qt classes, it messes up the method_missing() logic to divert it to the Smoke library. Instead it attempts to call the Kernel method with the wrong arg types. * The problem is fixed by calling the appropriate method based on the type of the first arg. However, it is no longer possible to override virtual methods called 'open'. CCMAIL: stephan.oehlert@gmx.net 2004-12-28 Richard Dale * Added a parent attribute to the TQt::Object pretty_print() method * Removed all the properties from the TQt::Object inspect() method except name, x, y, width, height (the last four for for TQt::Widgets only). This speeds up fetching the details of TQt::Objects that have more than just a handful of children. The full details can still be fetched with a pretty_print() call via a debugger 'pp' command. 2004-12-21 Richard Dale * The qtruby runtime needs to be able to run the code for an initialize() method up to the point where the C++ instance has been constructed and wrapped, and then jump out. It then re-runs initialize() with the wrapped instance. Before a callcc() call had been used for the jumping which worked fine. However, it made the frame stack look strange when debugging code with the KDevelop debugger. The fix is to use catch and throw instead, as they leave the stack in a more normal looking state. 2004-12-20 Richard Dale * Added a work round for a bug caused by an incompatibility between QtRuby the 'require time' statement, reported by David Crosby CCMAIL: dcrosby42@gmail.com 2004-12-18 Richard Dale * Added a 'receivers' property to the TQt::Object inspector. This allows the active signal connections for a TQt::Object instance to be viewed in the KDevelop debugger as a Hash. The hash keys are the signal names, and the hash values are arrays of the target signals/slots as TQt::Connection instances. 2004-12-17 Richard Dale * Added 'metaObject' as an expandable property for TQt::Objects. This allows the TQt::MetaClass class heirarchy to be browsed, and signals/slots declarations inspected. 2004-12-17 Richard Dale * Fixed bug in lower case/underscore method naming to camel case conversion 2004-12-15 Richard Dale * Added an attribute of 'children' to the TQt::Object inspect method, which is an array of the TQt::Object's children * The TQObjects in a TQObjectList were not being created with the exact ruby class if they hadn't been allocated from within the ruby code, and just left as TQt::Objects 2004-12-14 Richard Dale * TQt::Object properities of type enum are shown by name in the KDevelop debugger, and not as numeric literals 2004-12-14 Richard Dale * Changed the format of the TQt::Color inspect string to # * Added some more attributes to the TQt::Font inspector * Added a TQt::Cursor inspector 2004-12-12 Richard Dale * Fixed a bug where the debugger was calling an inspect method on an instance which wasn't fully initialized yet, and not of type T_DATA. 2004-12-10 Richard Dale * Added inspect() and pretty_print() methods for TQt::SizePolicy * Greatly improved the TQt::Object Qt property based inspect() and pretty_print() methods. Property types such as TQt::Point, TQt::Font and TQt::Rect can be viewed as expandable items in the KDevelop debugger variable tree. 2004-12-09 Richard Dale * More inspect() and pretty_print() methods for common classes to improve debugging - TQt::Color, TQt::Font, TQt::Point, TQt::Rect, TQt::Size, TQt::Date, TQt::DateTime and TQt::Time 2004-12-08 Richard Dale * Added inspect() and pretty_print() methods for TQt::Objects that get the TQObject properties and show them as 'name=value' pairs. This means the KDevelop debugger can make TQt::Object variables expandable and show their properties. 2004-11-29 Richard Dale * Upped the QtRuby version to 1.0.5 for the KDE 3.3.2 release 2004-10-30 Richard Dale * qError(), tqWarning() and tqFatal() are now Object instance methods, rather than Qt module methods. This means they don't need to be referenced with an ugly 'Qt.' module scope anymore. 2004-10-21 Richard Dale * If a class method was called before super, it was wrongly throwing an exception as an error. For instance, this call to i18n(): def initialize() super(TreeList, i18n("My App Preferences"), Help|Default|Ok|Apply|Cancel, Ok) ... 2004-10-16 Richard Dale * Until super has been called in an initialize() method, Qt methods can't be called on it. An exception is now thrown 'Instance not initialized', instead of it causing a seg fault. * For instance: class MyWidget < TQt::ComboBox def initialize # Must call super first insertItem('abc') super end end * Fixes problem reported by Han Holl CCMAIL: kde-bindings@kde.org 2004-10-16 Richard Dale * Upped the version to 1.0.4 for the RubyForge release * Added some names to AUTHORS from the ChangeLog 2004-10-14 Richard Dale * If the smokeruby_mark() function was called for an instance of a TQObject, it should mark all the instances below it in the TQObject tree, as not needing garbage collection. However, if a node in the tree didn't have a mapping onto a ruby instance the marking process stopped there, even though the grandchildren and their descendants might have a valid mapping onto ruby instances. * The solution is to always traverse the entire tree. Fixes problem reported by Han Holl. CCMAIL: kde-bindings@kde.org 2004-10-13 Richard Dale * All the TQt::CanvasItems owned by a TQt::Canvas are marked with rb_gc_mark() to prevent them being garbage collected * The top level widgets are no longer disposed() on TQt::Application exit * Fixed some bugs in the chart example. 2004-10-13 Richard Dale * Fixed arg matching to give priority to 'int' or 'signed' when passed a ruby Integer, or 'double' when passed a ruby Float * The chart example can now save and load chart files 2004-10-13 Richard Dale * Added greater than and less than operators to TQt::Enum, so that enums can be compared with Integers * Added the chart example for Qt Tutorial #2 2004-10-12 Richard Dale * Added TQt::Application.ARGV. It returns the original ruby ARGV array with Qt command line options removed. 2004-10-11 Richard Dale * Added a global flag 'application_terminated'. Once this is set the QtRuby runtime will no longer delete any C++ instances. This will hopefully fix crash on application exit problems reported by Thibauld Favre. CCMAIL: kde-bindings@kde.org 2004-10-10 Richard Dale * The recent fix for checking invalid arg types, didn't work with nil passed as a value 2004-10-10 Richard Dale * A TQRgb[] color table was being wrongly deleted after marshalling 2004-10-10 Richard Dale * If a ruby method overriding a virtual method returned a primitive type when an instance of a class was expected, it caused a seg fault. A ruby exception is now thrown instead. Fixes problem reported by Han Holl. * For instance, class ContainerGrid < TQt::Widget def sizeHint # next line should return a TQt::Size, not an integer 100 end end Now gives the following error: qsize.rb:12:in `method_missing': Invalid type, expecting TQSize (ArgumentError) from qsize.rb:12 CCMAIL: kde-bindings@kde.org 2004-10-10 Richard Dale * The smokeruby_mark() function was only marking the immediate children of a TQt::Object for not being garbage collected. It now marks all the TQt::Objects in the object tree below it. 2004-10-07 Richard Dale * Added Qt Designer Tutorial 'Creating Dialogs' translated into QtRuby. It shows how you can combine ruby code generated from .ui files with the rbuic tool, with your own code. * The .ui files and images are identical to the original C++ versions. * It features a simple Makefile to run rbuic when you change the .ui files, and regenerate the ruby sources. 2004-10-06 Richard Dale * Fixed rbuic '-embed' option which had been broken after adding DCOP suppot to Korundum, after changes in the TQt::ByteArray class. * Fixed TQRgb* marshalling problem where the ruby value was overflowing a signed int. The target for marshalling is now an array of unsigned ints. * When a TQt::Application exits after returning for an TQt::Application.exec() call, the top level widgets are deleted as well as the TQt::Application itself. This fixes a problem where ruby does garbage collection in an arbitrary order after the ruby app has exited. It destroys a ruby Hash of TQMetaData info that the TQt::Application or TQt::MainWindow need to clean up. * The layout of the ruby code generated by rbuic has been improved with better indenting. * attr_reader attribute accessors have been added for the most important instance variables in an rbuic generated class to make them more easily accessed from another class. 2004-10-05 Richard Dale * Given a C++ instance and an approximate classname, the QtRuby runtime uses the various Qt rtti mechanisms such as TQObject::className() to improve the resolution of the name. However, the numeric classId into the array of classnames in the Smoke runtime was not being updated in line with the more accurate name. * This caused problems with method argument matching which uses the numeric classId rather than the ruby object's classname, and so QtRuby wrongly assumed that a an instance of a TQt::Widget was a TQt::Object. * Fixes problem reported by Han Holl CCMAIL: kde-bindings@kde.org 2004-10-05 Richard Dale * Fixed a couple of errors in the rbuic generated code found as a result of the recently improved stricter arg type matching. 2004-10-04 Richard Dale * When a ruby app exits, rb_gc_call_finalizer_at_exit() is called and all the ruby instances are garbage collected. The problem is that this is done in an arbitrary order, and TQt::Application was occasionally crashing in its destructor because TQMetaObject info it still needed was being deleted before then. * Fixes problem reported by Thibauld Favre CCMAIL: 2004-10-04 Richard Dale * When a TQMetaData object was contructed the class name was a pointer from a ruby string, and was being corrupted when the string was freed. The string is now copied. 2004-10-03 Richard Dale * Han Holl's report about a when you pass an incorrect arg type to a QtRuby method, it caused a crash has opened a 'can of worms'. This was because there was no arg type checking if there was only one candidate method in the Smoke runtime. Now that arg type checking is applied to all QtRuby method calls, not not just those that after lookup in Smoke map onto a single method, the overloaded method resolution via the arg types has had to be greatly improved. This has been done, and so the arg type matching is now extremely fussy. CCMAIL: kde-bindings@kde.org 2004-10-03 Richard Dale * An optimization in the overloaded method resolution matching causes a crash; instead of throwing a ruby exception when a programming error is made. If there is only one method found in the Smoke runtime, it assumes that it must be the right one and just takes that. * For example: lay = TQt::HBoxLayout.new(self) ed = TQt::LineEdit.new('blah',self) # The next line should be: lay.addWidget(ed) lay.addLayout(ed) * Fixes problem reported by Han Holl CCMAIL: kde-bindings@kde.org 2004-10-03 Richard Dale * A common programming error is to accidently leave off the 'new' method call when creating an instance. The QtRuby runtime wasn't correctly trapping an attempt to call an instance method on a class object, and was seg faulting rather than throwing an exception. * For example: # The next line should be: lay = TQt::HBoxLayout.new(self) lay = TQt::HBoxLayout ed = TQt::LineEdit.new('blah',self) lay.addWidget(ed) * Fixes problem reported by Han Holl CCMAIL: kde-bindings@kde.org 2004-10-03 Richard Dale * Upped version to 1.0.3 for the KDE 3.3.1 release 2004-10-02 Richard Dale * Added Ruby Array to TQPair& marshaller 2004-09-30 Richard Dale * The resolve_classname() function in handlers.cpp uses the various Qt rtti mechanisms to get a more accurate classname to instantiate as a ruby instance. It has now been extended with a callback to the Korundum library to do the same for KDE classes. CCMAIL: zack@kde.org 2004-09-29 Richard Dale * Added Jim Menard's ruboids as an OpenGL/TQt::GL* Widgets example * Improved instructions and exconf.rb for building the gui extension from Michal 'hramrach' Suchanek 2004-09-13 Richard Dale * Upped the version to 1.0.2 for Rubyforge release 2004-09-12 Richard Dale * Added a 'tqui' extension for reading in .ui Qt Designer files at runtime * For example: require 'Qt' require 'tqui' a = TQt::Application.new(ARGV) if ARGV.length == 0 exit end if ARGV.length == 2 QUI::WidgetFactory.loadImages( ARGV[ 0 ] ) w = QUI::WidgetFactory.create( ARGV[ 1 ] ) if w.nil? exit end w.show() a.connect( a, SIGNAL('lastWindowClosed()'), a, SLOT('quit()') ) a.exec() end 2004-09-07 Richard Dale * Upped the version to 1.0.1 for the current Rubyforge release 2004-09-05 Richard Dale * Added Kate:: and KTextEdit:: namespaces for writing Kate plugins 2004-09-03 Richard Dale * Some newer changes from the uic were added to the rbuic tool. 2004-09-03 Richard Dale * Brought the rbuic code to uncompress zip files in line with the current uic code * Added a qmake project file for building the rbuic tool on Mac OS X, and some notes on how to build QtRuby on a Mac. 2004-08-29 Richard Dale * Added Kontact module to provide a namespace for the kontact plugin api 2004-08-25 Richard Dale * Underscore naming for can be used for method names instead of camel case if preferred. Any underscores in method names are removed, and the following character is capitalised. For example, either of these two forms can be used to call the same method: create_standard_status_bar_action() createStandardStatusBarAction() 2004-08-23 Richard Dale * A 'thing?' ruby method can now be used as a synonym for either isThing() or hasThing() in the Smoke runtime 2004-08-04 Richard Dale * Upped the QtRuby version to 1.0.0 - it must work now then.. 2004-08-02 Richard Dale * Added 'long long' and 'unsigned long long' marshallers 2004-07-29 Richard Dale * The smokeruby_mark() gc marking f'n now marks the TQTableItems owned by a TQTable so they don't get garbage collected, even if there are no remaining references in the user code. 2004-07-29 Richard Dale * Added a template based method for TQValueList marshallers, and several TQValueList types. 2004-07-28 Richard Dale * Removed any marshaller types that weren't in the Smoke runtime from the type name to marshaller function lookup table. 2004-07-28 Richard Dale * If a class doesn't have a virtual destructor, then no mapping was being kept from the C++ instance to the corresponding ruby value. If the class had virtual method callbacks, this meant that the ruby instance couldn't be found, and the callback couldn't be made. * Hence, the TQt::ToolTip callback in examples/qt-examples/tooltip didn't work, as that class doesn't have a virtual destructor. * Added an 'isEnum()' function to use when matching args in overloaded method resolution. * TQCString arg types are chosen in preference to TQByteArray ones, matching against ruby strings, when resolving an overloaded method call. * TQt::Enums and TQt::Integers can be marshalled to uints, longs and ulongs as well as ints. * Added a '==' operator to TQt::Enums so they can be compared with ruby Integers 2004-07-27 Richard Dale * TQt::Integer arithmetic and bit operations return TQt::Integers, rather than ruby Integers so that ops can be nested as for TQt::Enums. 2004-07-27 Richard Dale * The recently added TQt::Integer bit operators were returning a ruby Integer type. When they were nested, the Integer didn't know how to convert the Enum it was being or'd with to an Integer. * The solution is to add bit operators to the Enum class which return Enums rather than Integers. * The following code didn't work: def initialize(message) super(nil, "passivedlg", TQt::WStyle_Customize | TQt::WX11BypassWM | TQt::WStyle_StaysOnTop | TQt::WStyle_Tool | TQt::WStyle_NoBorder) 2004-07-27 Richard Dale * Replaced TQString casts to 'const char *' with latin1() calls 2004-07-27 Richard Dale * The TQt::Enum class was missing bit operations, so various bit methods were added to TQt::Enum's superclass, TQt::Integer. * This was causing this line from examples/uimodules/uidialogs.rb to fail: dlg = KDE::DialogBase.new(parent, "sample_dialog", false, caption, KDE::DialogBase::Ok | KDE::DialogBase::Cancel, KDE::DialogBase::Ok, true ) 2004-07-27 Richard Dale * Added error messages for invalid slot or signal declarations 2004-07-27 Richard Dale * The standard ruby error message for missing constants and methods is now used when they can't be found in the Smoke library. Removed Alex's comment about the previous approach, now I agree this is the best way to show errors. CCMAIL: me@lypanov.ne 2004-07-27 Richard Dale * Added tqDebug(), tqFatal() and tqWarning() module methods 2004-07-26 Richard Dale * The parsing of types passed to slots, (or returned from dcop slots) didn't work with template types containing commas such as 'TQMap'. * Added 'TQMap&' and 'TQMap&' to the handlers.cpp string to marshaller lookup table. 2004-07-26 Richard Dale * Added marshallers for TQMap and TQMap to and from ruby hashes 2004-07-26 Richard Dale * The error messages for missing methods or missing constants now give the name of the missing item. * For example, this incorrect line: color_group.setColor( ColorGroup::MyMissingConst, blue ) Gives this error: splitter.rb:16:in `const_missing': unresolved constant reference MyMissingConst (ArgumentError) * Implements suggestion from Jeff on the tdebindings list CCMAIL: kde-bindings@kde.org 2004-07-19 Richard Dale * Added TQt::Enum type. Before a C++ enum was being marshalled to a ruby Integer, and the type name of the enum was lost. A TQt::Enum is a subclass of Integer with an extra type name. * This fixes a problem with overloaded method resolution where two methods differ only be an enum type such as this: # KPasswordEdit(EchoMode echoMode, TQWidget *parent, const char *name); # KPasswordEdit(EchoModes echoMode, TQWidget *parent, const char *name); pw2 = KDE::PasswordEdit.new(KDE::PasswordEdit::ThreeStars, page, "") 2004-07-17 Richard Dale * After a non-const string arg was passed to a method, the value of the TQString is copied into the ruby value. But it wasn't being correctly converted to the correct string format according to $KCODE. * TQString to ruby string conversions in TQStringLists were not localised either. 2004-07-14 Richard Dale * Removed superfluous '(void *)' cast which was causing compilation problems with gcc 3.4 * Fixes problem reported by Jochen Immend�fer on comp.lang.ruby CCMAIL: kde-bindings@kde.org 2004-07-11 Richard Dale * Qt eucJP and Shift-JIS codecs used to support ruby $KCODE values of 's' for SJIS and 'e' for EUC 2004-07-08 Richard Dale * Added support for strings in QtRuby programs being written in UTF-8. Use the '-Ku' command line option or '$KCODE=u' in the program. * Removed recently added TQChar marshalling as it wasn't very i18n friendly 2004-07-07 Richard Dale * Added TQChar marshalling 2004-07-06 Richard Dale * Fix for passing C++ 'bool*' and 'bool&' argument types There is a similar problem for bool arg types as with ints, and the mutable TQt::Boolean class can be used like this: # TQFont getFont(bool * ok, const TQFont&initial, TQWidget* parent = 0); ok = TQt::Boolean.new font = TQt::FontDialog.getFont(ok, TQt::Font.new("Helvetica [Cronyx]", 10), self) if !ok.nil? # font is set to the font the user selected else # the user canceled the dialog end Use 'nil?' to test the value returned in the Boolean * Signal and slot type signatures are 'normalized' and any unwanted white space removed * Fixed problem with TQByteArray arg type matching in overloaded method resolution 2004-07-04 Richard Dale * Fix for passing C++ 'int*' and 'int&' argument types Ruby passes numeric values by value, and so they can't be changed when passed to a method. The TQt::Integer class provides a mutable numeric type which does get updated when passed as an argument. For example, this C++ method 'findByFileContent()': # static Ptr findByFileContent( const TQString &fileName, int *accuracy=0 ); acc = TQt::Integer.new(0) fc = KDE::MimeType.findByFileContent("mimetype.rb", acc) It supports the arithmetic operators, and so expressions such as 'acc + 3' will work. 2004-07-02 Richard Dale * Replaced obsolete STR2CSTR() calls with StringValuePtr() 2004-06-29 Richard Dale * The internal findAllMethods() method now returns nil rather than an empty array if the given classid is greater than 'smoke->numClasses'. Otherwise, it wasn't possible to distinguish between a class with no methods, or reaching the end of the classes array. 2004-06-29 Richard Dale * Added TQStrList marshalling 2004-06-29 Richard Dale * Improved Garbage Collection, dispose() and isDisposed() methods - When a ruby instance is garbage collected, the underlying C++ instance will only be deleted if it isn't 'owned' by a parent object. Normally this will 'just work', but there are occasions when you need to delete the C++ ahead of garbage collection, and whether or not it has a parent. Use the dispose() and isDisposed() methods like this: item0.takeItem(item1) item0.insertItem(item1) item2.dispose if item2.isDisposed puts "item2 is disposed" end - Fixes problem reported by Hans Fugel 2004-06-26 Richard Dale * The marshalling TypeHandler function pointers are now looked up in a TQAsciiDict, rather than a ruby Hash. * Some unused functions removed * QtRuby version upped to 0.9.8 2004-06-09 Richard Dale * New flags were added for Smoke methods - mf_internal and mf_copyctor. This allows copy constructors which are only used internally by the ruby runtime, to be excluded from the standard api. 2004-05-12 Richard Dale * When ARGV was passed to the TQt::Application constructor, it was being altered, and the name of the ruby program added as a first entry. The constructor now uses a copy of the array, and ARGV is left unchanged. 2004-05-03 Richard Dale * Added a '-kde' option to the rbuic tool to generate require 'Korundum' instead of require 'Qt' statements, and use KDE widgets. 2004-04-30 Richard Dale * Applied patch from Marek Janukowicz. * The patch fixes some perlisms, that caused errors on loading a Ruby file generated from .ui file for TQt::MainWindow subclass 2004-04-20 Richard Dale * The rbuic now correctly names KDE widgets with a KDE:: prefix * If the rbuic -x option is used, a KDE top level is generated if any KDE widgets have been found. 2004-04-17 Richard Dale * Fixed bug in rbuic generated code for setResizeMode() 2004-04-05 Richard Dale * Improved classname resolution for TQListViewItem and TQTableItem subclasses using rtti() calls 2004-03-26 Richard Dale * Ruby slots and signals are now inherited correctly * This causes problems with code generated by the rbuic utility * Fixes bug 78273 reported by Imobach Sosa 2004-03-10 Richard Dale * When a mutable, non-const TQString, int*, int&, bool* or bool& is passed to a method, the corresponding ruby value is now updated after the method call. * Some f'ns are no longer static, so that the korundum extension can link against them. 2004-03-03 Richard Dale * The f'n new_qobject is no longer static, and can be called from korundum 2004-03-01 Richard Dale * Fixed bugs in TQCString, TQString and TQByteArray marshalling. - When a C++ method with a mutable, non-const TQCString arg type is called from ruby, the C++ arg value is copied back into the corresponding ruby arg VALUE after the call. - A pointer to a locally allocated TQString was being returned, giving memory corruption problems. * The default debug level in qtruby.rb is DebugLevel::OFF, otherwise very verbose error messages are produced. 2004-01-28 Richard Dale * Fixed bug where a TQCString was being ranked equally with a TQString, when resolving ambiguous method overloading. Caused the KDE::URL constructor to fail with a string arg. 2003-11-29 Richard Dale * Added DOM:: namespace for the DOM:: classes in the Smoke library. * The scope operator in nested classnames is now '::' rather than '__', so changed the qtruby runtime to expect that. 2003-11-13 Richard Dale * Added the KillerFilter event filtering example from chapter 16 of 'Programming with Qt' * Improved classname resolution via the Qt rtti mechanisms in TQObject, TQEvent and TQCanvasItem. This fixed a problem in the KillerFilter example when a TQMouseEvent was passed to the ruby event handler, it was being instantiated as a ruby TQt::Event, rather than a TQt::MouseEvent. 2003-11-11 Richard Dale * Improved nil argument matching, and nil can match any type now not just classes. Translated the code from the Qt.pm in PerlQt, after discussion on the kde-perl list. * Fixed bug in rbuic where a C++ 'TQString::null' was "" in ruby, and should have been a nil. 2003-11-08 Richard Dale * Finally fixed huge leak, causing the progress.rb example to grow by 1 Mb a minute. * Added a cache from ruby classname to Smoke class id * Speeded up method selector look ups * Put some C++ code inside blocks to ensure that the destructor clean up code was called, when the current f'n longjmp's up the stack rather than returns normally. * QtRuby looking good, raised the version to 0.9.6 to celebrate 2003-11-07 Richard Dale * Fixed some memory leaks * Ensured that any instance 'owned' by ruby, ie with the the allocated flag set to true, is always added to the pointer_map. Otherwise, the same C++ instance can be wrapped twice and will be deleted twice. 2003-11-03 Richard Dale * When marshalling a const ref type to a ruby VALUE, it is now copied * Applied some fixes for construct_copy() from the PerlQt version of handlers.cpp * Fixed some minor bugs in the progress.rb Qt example 2003-11-03 Richard Dale * Added method selector caching for class methods and constructors, although performance still 'sedate' compared with C++ or Perl. 2003-10-29 Richard Dale * The smokeruby_mark() f'n now marks the TQListViewItems in a TQListView * Fixed a TQLayoutItem crash in smokeruby_free() 2003-10-27 Richard Dale * The smokeruby_mark() f'n was completely wrong, as it is only called if the current object is already marked. So marking the current object doesn't make a lot of sense. Instead, if the instance is a kind of TQObject then its childeren are marked. * The smokeruby_delete() object doesn't delete instances which have parents of one sort or another. * Made some fixes to the tutorial examples * Removed equality '==' operator overloading as it only expects a single arg in ruby, and not two. 2003-10-22 Richard Dale * Changed some error messages in do_method_missing() to be 'debug only' for now. 2003-10-22 Richard Dale * Got the checklists.rb example working after bug report from Mikhail Yakshin - Corrected some coding errors in the example itself. - The arg matching code in method_missing() has been improved and simplified. - In the overloaded arg type resolution matching, an enum is type 'long' - A class which matches exactly is a better match than a subclass. Multiple matches are allowed as long as there is a 'best match'. - Operator overloading now looks for methods of the form 'operator+=', 'operator-=' etc in the Smoke runtime. 2003-10-14 Richard Dale * Fixed serious random crash problem - tqt_invoke() and tqt_emit() were not calling super if a ruby signal or slot hadn't been found, which stopped C++ signals from working. - This prevented destroy() signals from invoking event filter list clean up when a TQObject was deleted, leaving deleted instances in the list. - 'TQUObject*' args are now marshalled as a ruby list with a single entry of a VALUE wrapping the pointer. * The ruby ALLOCA_N macro is no longer used as it is based on alloca(), which doesn't seem a good idea. malloc(), calloc() and free() are used instead 2003-10-11 Richard Dale * Added tdehtml:: namespace, although it isn't in the SmokeKDE runtime yet * Improved method_missing error messages if a method can't be resolved 2003-10-09 Richard Dale * Added TDEIO:: and KParts:: namespaces for the new classes in libsmokekde 2003-10-08 Richard Dale * Korundum KDE ruby extension - made various changes so it can be linked against the QtRuby code 2003-09-18 Richard Dale * Removed leading 'K' from class names of when adding to KDE:: namespace. As per Germain Garand's suggestion on the kde-bindings list: ..actually, I used the same scheme as for Qt when possible, that is: $class =~ s/^Q/TQt::/ or $class =~ s/^K/KDE::/ or $class = "KDE::" . $class unless $class eq "Qt"; 2003-09-18 Richard Dale * Added support for KDE classes under module KDE:: for use with the new libsmokekde.so. You can now write KDE programs in Ruby, here is Hello World: about = KDE::TDEAboutData.new("one", "two", "three") KDE::TDECmdLineArgs.init(1, ["four"], about) a = KDE::TDEApplication.new() hello = KDE::KPushButton.new(nil) { setText "Hello World" } a.setMainWidget(hello) hello.show() a.exec() 2003-09-14 Richard Dale * The rbuic -embed option finally works. Fixed TQByteArray marshalling. 2003-09-13 Richard Dale * Improved the rbuic -embed option, and added some fixes 2003-09-12 Richard Dale * More passing blocks to constructors fun! You can now also pass an arg to the block, and it will be run in the context of the arg: w = MyWidget.new { |theWidget| theWidget.setCaption "foobar" } I got this idea from the FXRuby bindings, from the ChangeLog: "This approach has the advantage that the initialization code now has access to the outer scope, as blocks normally would. Thanks to Rich Kilmer for this suggestion." If you don't pass an arg to the block, the block is run in the context of the new instance as before. * Debugging left in handlers.cpp (must stop doing this) 2003-09-12 Richard Dale * Marshallers now return Qnil, rather than Qundef (for internal use only) 2003-09-10 Richard Dale * Improved garbage collection with various 'ad hoc' rules from the QtJava bindings about when it's ok/not ok to destruct an instance. Not always just a 'parent() != 0' check in Qt. 2003-09-10 Richard Dale * Added TQByteArray <-> Ruby string marshaller 2003-09-09 Richard Dale * Blocks can now be passed to constructors, like this: w = MyWidget.new { setCaption("foobar") } 2003-09-08 Richard Dale * Added method selector caching, scribbling may be slightly faster.. 2003-09-08 Richard Dale * GC getting closer to working. Debugging code improved. 2003-09-08 Richard Dale * From below 'watch out for extra crashes!' - indeed! Have now disabled smokeruby_free() and smokeruby_mark() until garbage collection works. 2003-09-08 Richard Dale * The pointer_map is now a TQPtrDict rather than a ruby Hash, and the entries are weak references. An implementation was tried using the ruby WeakRef class, but it didn't work because rb_gc_mark() didn't prevent them being garbage collected. * smokeruby_free() and smokeruby_mark() have been implemented * The C++ instance for a ruby object is deleted in smokeruby_free(), so watch out for extra crashes! * Improved README with more details about QtRuby 2003-09-07 Richard Dale * Improved error message handling, changed rb_error() calls to rb_raise() * Decided changing method calls like foobar? to isFoobar() not a good idea, as the Qt property could just as also be hasFoobar() or foobar() 2003-09-06 Richard Dale * Set methods such as autoMask= are converted to setAutoMask() * Get methods such as modal? are converted to isModal() 2003-08-31 Richard Dale * rbuic code generation brought up to date wrt Qt 3.2 uic Main change is that a 'languageChanged()' method is generated 2003-08-30 Richard Dale * rbuic() code generation fixes 2003-08-30 Richard Dale * Added 'Run Selection' menu option to the QtRuby shell 2003-08-30 Richard Dale * Operator methods are now called 'operator..' in TQGlobalSpace and not renamed * Added unary minus, and a test in opoverloading.rb 2003-08-29 Richard Dale * Updated TODO list, improved rbuic code generation for images 2003-08-28 Richard Dale * Improved operator overloading to work with operators not in TQGlobalSpace 2003-08-27 Richard Dale * Changed the operator overloading implementation to be more like PerlQt 2003-08-27 Richard Dale * Translated the rbqtsh filePrint() method from perl 2003-08-26 Richard Dale * Added 'changed' attribute to the MetaInfo class, so that the C++ metaObject is reconstructed if the slots or signals are changed. * Changed window title on rbqtsh to 'QtRuby'. The example slot now works correctly. Only just tried this utility - Wow Alex!! 2003-08-26 Richard Dale * findMethod() now looks in the TQGlobalSpace pseudo class as well as the normal target class. * The bitBlt() code in the scribble example works correctly 2003-08-25 Richard Dale * Removed ugly _current_object global variable. The current target object is now passed to the MethodCall constructor. 2003-08-25 Richard Dale * Removed obsolete rb_enable_super() calls * Removed test for _current_object in class_method_missing() * Fixed missing index in signalInfo() method * Added Qt scribble example - TODO add TQt::PaintDevice.bitBlt() calls to SMOKE runtime 2003-08-23 Richard Dale * Added rbuic tool for ruby Qt Designer support 2003-08-12 Alexander Kellett * Add debug level setting via TQt::debug_level * When calling .new on a Qt object with a incorrect prototype the list of appropriate constructors is printed * Fix a number of cases in which imperfect code would cause a crash 2003-08-11 Alex Zepeda * Various fixes to get TQStringList marshalling working * Treat Ruby strings as UTF-8 strings in order to fix the TQFont examples 2003-08-09 Alexander Kellett * Added support for operator overloading 2003-08-07 Alexander Kellett * Added rbqtapi and rbqt tools (port of the PerlQt tools of the same name) 2003-08-06 Richard Dale * Added some TODO list entries, added Alex to the AUTHORS list 2003-08-06 Richard Dale * Fixed 'int&' marshalling so script name appears in window title 2003-08-12 Alexander Kellett * Add several new marshalling types - TQCanvasItemList for example, unfortuantely due to several improvements in Qt 3.2 these improvements will not be seen when compiling against Qt 3.1.2 2003-08-05 Richard Dale * Moved SLOT(), SIGNAL() and emit() to global scope 2003-08-05 Richard Dale * Removed redundant 'rb_eval_string("include Qt")' call from extension initialization. 2003-08-05 Richard Dale * TQt::Application constructor safer, but program name still not appearing in the window title 2003-08-05 Richard Dale * Fixed bug in resolution of overloaded TQt::Popup.insertItem() methods 2003-08-05 Richard Dale * Use new const_missing from ruby 1.8.x to allow for constant access from base class, for example "TQt::RichText" * TQString::null now maps onto Qnil, rather than a zero length ruby string 2003-08-04 Alexander Kellett * Allow for accumulative slots/signals declarations in a class * Minor build fixes 2003-08-02 Alexander Kellett * Fix several deprecation warnings when running under 1.8.x * Several more build fixes 2003-08-01 Alexander Kellett * Slightly improve ease of debugging of qtruby programs which subclass Qt base classes by print out some useful debugging informationn when/if method_missing ever fails to find a matching function in the baseclass. 2003-08-01 Alex Zepeda * Remove need to manually run extconf.rb by some automation via a configure.in.in * Various other build fixes 2003-07-31 Richard Dale * Fixed bug in marshalling TQString::null to a ruby VALUE 2003-07-31 Richard Dale * Changed require in Qt.cpp to 'Qt/Qt.rb' instead of 'lib/Qt/Qt.rb' 2003-07-31 Richard Dale * Fixed problem with non-working installed version, lib/Qt.rb moved to lib/Qt/Qt.rb 2003-07-30 Richard Dale * QtRuby - a Ruby SMOKE adaptor for Qt, initial checkin