[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-bindings
Subject: [Kde-bindings] branches/KDE/3.5/kdebindings/qtruby
From: Richard Dale <Richard_Dale () tipitina ! demon ! co ! uk>
Date: 2006-09-14 10:34:57
Message-ID: 1158230097.296191.9440.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 584205 by rdale:
* 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 Qt::Object. It is similar to the signal_connect() method in
ruby-gnome. This was suggested by rickdangerous on the #qtruby irc channel.
CCMAIL: kde-bindings@kde.org
M +11 -0 ChangeLog
M +3 -1 rubylib/qtruby/Qt.cpp
M +20 -0 rubylib/qtruby/lib/Qt/qtruby.rb
--- branches/KDE/3.5/kdebindings/qtruby/ChangeLog #584204:584205
@@ -1,3 +1,14 @@
+2006-09-14 Richard Dale <rdale@foton.es>
+
+ * 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 Qt::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 <rdale@foton.es>
* Blocks can now be used as slots in Qt::Object.connect() calls. There are two
--- branches/KDE/3.5/kdebindings/qtruby/rubylib/qtruby/Qt.cpp #584204:584205
@@ -1857,7 +1857,9 @@
qobject_connect(int argc, VALUE * argv, VALUE self)
{
if (rb_block_given_p()) {
- if (argc == 2) {
+ if (argc == 1) {
+ return rb_funcall(qt_internal_module, rb_intern("signal_connect"), 3, self, \
argv[0], rb_block_proc()); + } else if (argc == 2) {
return rb_funcall(qt_internal_module, rb_intern("connect"), 4, argv[0], argv[1], \
self, rb_block_proc()); } else if (argc == 3) {
return rb_funcall(qt_internal_module, rb_intern("connect"), 4, argv[0], argv[1], \
argv[2], rb_block_proc());
--- branches/KDE/3.5/kdebindings/qtruby/rubylib/qtruby/lib/Qt/qtruby.rb \
#584204:584205 @@ -1205,6 +1205,18 @@
end
end
+ class SignalBlockInvocation < Qt::Object
+ def initialize(parent, block, args)
+ super(parent)
+ self.class.slots "invoke(#{args})"
+ @block = block
+ end
+
+ def invoke(*args)
+ @block.call(*args)
+ end
+ end
+
class BlockInvocation < Qt::Object
def initialize(target, block, args)
super(target)
@@ -1622,6 +1634,14 @@
Qt::BlockInvocation.new(target, block, signature),
SLOT("invoke(#{signature})") )
end
+
+ def Internal.signal_connect(src, signal, block)
+ signature = (signal =~ /\((.*)\)/) ? $1 : ""
+ return Qt::Object.connect( src,
+ signal,
+ Qt::SignalBlockInvocation.new(src, block, signature),
+ SLOT("invoke(#{signature})") )
+ end
end # Qt::Internal
Meta = {}
_______________________________________________
Kde-bindings mailing list
Kde-bindings@kde.org
https://mail.kde.org/mailman/listinfo/kde-bindings
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic