qtruby4 1.4.9-mswin32

Sign up to get free protection for your applications and to get access to all the features.
Binary file
Binary file
Binary file
@@ -0,0 +1,9 @@
1
+ require 'mkmf'
2
+
3
+ require 'fileutils'
4
+
5
+ FileUtils.mv Dir["bin/*"], "../../../../../../bin/"
6
+
7
+ FileUtils.mv "lib/Makefile", "Makefile"
8
+
9
+ FileUtils.rmdir "bin"
@@ -0,0 +1,5 @@
1
+ all:
2
+
3
+ install:
4
+
5
+ clean:
@@ -0,0 +1 @@
1
+ require 'qtruby4'
@@ -0,0 +1,6 @@
1
+ begin
2
+ version = Qt::version
3
+ raise LoadError.new("Qt4 already loaded") unless version =~ /^3/
4
+ rescue NameError
5
+ require 'qtruby'
6
+ end
@@ -0,0 +1,6 @@
1
+ begin
2
+ version = Qt::version
3
+ raise LoadError.new("Qt3 already loaded") unless version =~ /^4/
4
+ rescue NameError
5
+ require 'qtruby4'
6
+ end
@@ -0,0 +1,2734 @@
1
+ =begin
2
+ /***************************************************************************
3
+ qtruby.rb - description
4
+ -------------------
5
+ begin : Fri Jul 4 2003
6
+ copyright : (C) 2003-2005 by Richard Dale
7
+ email : Richard_Dale@tipitina.demon.co.uk
8
+ ***************************************************************************/
9
+
10
+ /***************************************************************************
11
+ * *
12
+ * This program is free software; you can redistribute it and/or modify *
13
+ * it under the terms of the GNU General Public License as published by *
14
+ * the Free Software Foundation; either version 2 of the License, or *
15
+ * (at your option) any later version. *
16
+ * *
17
+ ***************************************************************************/
18
+ =end
19
+
20
+ module Qt
21
+ module DebugLevel
22
+ Off, Minimal, High, Extensive = 0, 1, 2, 3
23
+ end
24
+
25
+ module QtDebugChannel
26
+ QTDB_NONE = 0x00
27
+ QTDB_AMBIGUOUS = 0x01
28
+ QTDB_METHOD_MISSING = 0x02
29
+ QTDB_CALLS = 0x04
30
+ QTDB_GC = 0x08
31
+ QTDB_VIRTUAL = 0x10
32
+ QTDB_VERBOSE = 0x20
33
+ QTDB_ALL = QTDB_VERBOSE | QTDB_VIRTUAL | QTDB_GC | QTDB_CALLS | QTDB_METHOD_MISSING | QTDB_AMBIGUOUS
34
+ end
35
+
36
+ @@debug_level = DebugLevel::Off
37
+ def Qt.debug_level=(level)
38
+ @@debug_level = level
39
+ Internal::setDebug Qt::QtDebugChannel::QTDB_ALL if level >= DebugLevel::Extensive
40
+ end
41
+
42
+ def Qt.debug_level
43
+ @@debug_level
44
+ end
45
+
46
+ class Base
47
+ def self.signals(*signal_list)
48
+ meta = Qt::Meta[self.name] || Qt::MetaInfo.new(self)
49
+ meta.add_signals(signal_list)
50
+ meta.changed = true
51
+ end
52
+
53
+ def self.slots(*slot_list)
54
+ meta = Qt::Meta[self.name] || Qt::MetaInfo.new(self)
55
+ meta.add_slots(slot_list)
56
+ meta.changed = true
57
+ end
58
+
59
+ def self.q_signal(signal)
60
+ meta = Qt::Meta[self.name] || Qt::MetaInfo.new(self)
61
+ meta.add_signals([signal])
62
+ meta.changed = true
63
+ end
64
+
65
+ def self.q_slot(slot)
66
+ meta = Qt::Meta[self.name] || Qt::MetaInfo.new(self)
67
+ meta.add_slots([slot])
68
+ meta.changed = true
69
+ end
70
+
71
+ def self.q_classinfo(key, value)
72
+ meta = Qt::Meta[self.name] || Qt::MetaInfo.new(self)
73
+ meta.add_classinfo(key, value)
74
+ meta.changed = true
75
+ end
76
+
77
+ def **(a)
78
+ return Qt::**(self, a)
79
+ end
80
+ def +(a)
81
+ return Qt::+(self, a)
82
+ end
83
+ def ~(a)
84
+ return Qt::~(self, a)
85
+ end
86
+ def -@()
87
+ return Qt::-(self)
88
+ end
89
+ def -(a)
90
+ return Qt::-(self, a)
91
+ end
92
+ def *(a)
93
+ return Qt::*(self, a)
94
+ end
95
+ def /(a)
96
+ return Qt::/(self, a)
97
+ end
98
+ def %(a)
99
+ return Qt::%(self, a)
100
+ end
101
+ def >>(a)
102
+ return Qt::>>(self, a)
103
+ end
104
+ def <<(a)
105
+ return Qt::<<(self, a)
106
+ end
107
+ def &(a)
108
+ return Qt::&(self, a)
109
+ end
110
+ def ^(a)
111
+ return Qt::^(self, a)
112
+ end
113
+ def |(a)
114
+ return Qt::|(self, a)
115
+ end
116
+
117
+ # Module has '<', '<=', '>' and '>=' operator instance methods, so pretend they
118
+ # don't exist by calling method_missing() explicitely
119
+ def <(a)
120
+ begin
121
+ Qt::method_missing(:<, self, a)
122
+ rescue
123
+ super(a)
124
+ end
125
+ end
126
+
127
+ def <=(a)
128
+ begin
129
+ Qt::method_missing(:<=, self, a)
130
+ rescue
131
+ super(a)
132
+ end
133
+ end
134
+
135
+ def >(a)
136
+ begin
137
+ Qt::method_missing(:>, self, a)
138
+ rescue
139
+ super(a)
140
+ end
141
+ end
142
+
143
+ def >=(a)
144
+ begin
145
+ Qt::method_missing(:>=, self, a)
146
+ rescue
147
+ super(a)
148
+ end
149
+ end
150
+
151
+ # Object has a '==' operator instance method, so pretend it
152
+ # don't exist by calling method_missing() explicitely
153
+ def ==(a)
154
+ begin
155
+ Qt::method_missing(:==, self, a)
156
+ rescue
157
+ super(a)
158
+ end
159
+ end
160
+
161
+
162
+ def methods(regular=true)
163
+ if !regular
164
+ return singleton_methods
165
+ end
166
+
167
+ qt_methods(super, 0x0)
168
+ end
169
+
170
+ def protected_methods
171
+ # From smoke.h, Smoke::mf_protected 0x80
172
+ qt_methods(super, 0x80)
173
+ end
174
+
175
+ def public_methods
176
+ methods
177
+ end
178
+
179
+ def singleton_methods
180
+ # From smoke.h, Smoke::mf_static 0x01
181
+ qt_methods(super, 0x01)
182
+ end
183
+
184
+ private
185
+ def qt_methods(meths, flags)
186
+ ids = []
187
+ # These methods are all defined in Qt::Base, even if they aren't supported by a particular
188
+ # subclass, so remove them to avoid confusion
189
+ meths -= ["%", "&", "*", "**", "+", "-", "-@", "/", "<", "<<", "<=", ">", ">=", ">>", "|", "~", "^"]
190
+ classid = Qt::Internal::idInstance(self)
191
+ Qt::Internal::getAllParents(classid, ids)
192
+ ids << classid
193
+ ids.each { |c| Qt::Internal::findAllMethodNames(meths, c, flags) }
194
+ return meths.uniq
195
+ end
196
+ end # Qt::Base
197
+
198
+ class AbstractSocket < Qt::Base
199
+ def abort(*args)
200
+ method_missing(:abort, *args)
201
+ end
202
+ end
203
+
204
+ class AbstractTextDocumentLayout < Qt::Base
205
+ def format(*args)
206
+ method_missing(:format, *args)
207
+ end
208
+ end
209
+
210
+ class AccessibleEvent < Qt::Base
211
+ def type(*args)
212
+ method_missing(:type, *args)
213
+ end
214
+ end
215
+
216
+ class ActionEvent < Qt::Base
217
+ def type(*args)
218
+ method_missing(:type, *args)
219
+ end
220
+ end
221
+
222
+ class Action < Qt::Base
223
+ def setShortcut(arg)
224
+ if arg.kind_of?(String)
225
+ return super(Qt::KeySequence.new(arg))
226
+ else
227
+ return super(arg)
228
+ end
229
+ end
230
+
231
+ def shortcut=(arg)
232
+ setShortcut(arg)
233
+ end
234
+ end
235
+
236
+ class Application < Qt::Base
237
+ # Delete the underlying C++ instance after exec returns
238
+ # Otherwise, rb_gc_call_finalizer_at_exit() can delete
239
+ # stuff that Qt::Application still needs for its cleanup.
240
+ def exec
241
+ method_missing(:exec)
242
+ self.dispose
243
+ Qt::Internal.application_terminated = true
244
+ end
245
+
246
+ def type(*args)
247
+ method_missing(:type, *args)
248
+ end
249
+ end
250
+
251
+ class Buffer < Qt::Base
252
+ def open(*args)
253
+ method_missing(:open, *args)
254
+ end
255
+ end
256
+
257
+ class ButtonGroup < Qt::Base
258
+ def id(*args)
259
+ method_missing(:id, *args)
260
+ end
261
+ end
262
+
263
+ class ByteArray < Qt::Base
264
+ def to_s
265
+ return constData()
266
+ end
267
+
268
+ def to_i
269
+ return toInt()
270
+ end
271
+
272
+ def to_f
273
+ return toDouble()
274
+ end
275
+
276
+ def chop(*args)
277
+ method_missing(:chop, *args)
278
+ end
279
+
280
+ def split(*args)
281
+ method_missing(:split, *args)
282
+ end
283
+ end
284
+
285
+ class CheckBox < Qt::Base
286
+ def setShortcut(arg)
287
+ if arg.kind_of?(String)
288
+ return super(Qt::KeySequence.new(arg))
289
+ else
290
+ return super(arg)
291
+ end
292
+ end
293
+
294
+ def shortcut=(arg)
295
+ setShortcut(arg)
296
+ end
297
+ end
298
+
299
+ class ChildEvent < Qt::Base
300
+ def type(*args)
301
+ method_missing(:type, *args)
302
+ end
303
+ end
304
+
305
+ class CloseEvent < Qt::Base
306
+ def type(*args)
307
+ method_missing(:type, *args)
308
+ end
309
+ end
310
+
311
+ class Color < Qt::Base
312
+ def inspect
313
+ str = super
314
+ str.sub(/>$/, " %s>" % name)
315
+ end
316
+
317
+ def pretty_print(pp)
318
+ str = to_s
319
+ pp.text str.sub(/>$/, " %s>" % name)
320
+ end
321
+
322
+ def name(*args)
323
+ method_missing(:name, *args)
324
+ end
325
+ end
326
+
327
+ class Connection < Qt::Base
328
+ def inspect
329
+ str = super
330
+ str.sub(/>$/, " memberName=%s, memberType=%s, object=%s>" %
331
+ [memberName.inspect, memberType == 1 ? "SLOT" : "SIGNAL", object.inspect] )
332
+ end
333
+
334
+ def pretty_print(pp)
335
+ str = to_s
336
+ pp.text str.sub(/>$/, "\n memberName=%s,\n memberType=%s,\n object=%s>" %
337
+ [memberName.inspect, memberType == 1 ? "SLOT" : "SIGNAL", object.inspect] )
338
+ end
339
+ end
340
+
341
+ class ContextMenuEvent < Qt::Base
342
+ def type(*args)
343
+ method_missing(:type, *args)
344
+ end
345
+ end
346
+
347
+ class CoreApplication < Qt::Base
348
+ def exec
349
+ method_missing(:exec)
350
+ self.dispose
351
+ Qt::Internal.application_terminated = true
352
+ end
353
+
354
+ def exit(*args)
355
+ method_missing(:exit, *args)
356
+ end
357
+ end
358
+
359
+ class Cursor < Qt::Base
360
+ def inspect
361
+ str = super
362
+ str.sub(/>$/, " shape=%d>" % shape)
363
+ end
364
+
365
+ def pretty_print(pp)
366
+ str = to_s
367
+ pp.text str.sub(/>$/, " shape=%d>" % shape)
368
+ end
369
+ end
370
+
371
+ class CustomEvent < Qt::Base
372
+ def type(*args)
373
+ method_missing(:type, *args)
374
+ end
375
+ end
376
+
377
+ class Date < Qt::Base
378
+
379
+ def initialize(*args)
380
+ if args.size == 1 && args[0].class.name == "Date"
381
+ return super(args[0].year, args[0].month, args[0].day)
382
+ else
383
+ return super(*args)
384
+ end
385
+ end
386
+
387
+ def inspect
388
+ str = super
389
+ str.sub(/>$/, " %s>" % toString)
390
+ end
391
+
392
+ def pretty_print(pp)
393
+ str = to_s
394
+ pp.text str.sub(/>$/, " %s>" % toString)
395
+ end
396
+ end
397
+
398
+ class DateTime < Qt::Base
399
+ def initialize(*args)
400
+ if args.size == 1 && args[0].class.name == "DateTime"
401
+ return super( Qt::Date.new(args[0].year, args[0].month, args[0].day),
402
+ Qt::Time.new(args[0].hour, args[0].min, args[0].sec) )
403
+ else
404
+ return super(*args)
405
+ end
406
+ end
407
+
408
+ def inspect
409
+ str = super
410
+ str.sub(/>$/, " %s>" % toString)
411
+ end
412
+
413
+ def pretty_print(pp)
414
+ str = to_s
415
+ pp.text str.sub(/>$/, " %s>" % toString)
416
+ end
417
+ end
418
+
419
+ class DBusConnection < Qt::Base
420
+ def send(*args)
421
+ method_missing(:send, *args)
422
+ end
423
+ end
424
+
425
+ class DBusConnectionInterface < Qt::Base
426
+ def serviceOwner(name)
427
+ return Qt::DBusReply.new(internalConstCall(Qt::DBus::AutoDetect, "GetNameOwner", [Qt::Variant.new(name)]))
428
+ end
429
+
430
+ def registeredServiceNames
431
+ return Qt::DBusReply.new(internalConstCall(Qt::DBus::AutoDetect, "ListNames"))
432
+ end
433
+
434
+ def isServiceRegistered(serviceName)
435
+ return Qt::DBusReply.new(internalConstCall(Qt::DBus::AutoDetect, "NameHasOwner", [Qt::Variant.new(serviceName)]))
436
+ end
437
+
438
+ def serviceRegistered?(serviceName)
439
+ return isServiceRegistered(serviceName)
440
+ end
441
+
442
+ def servicePid(serviceName)
443
+ return Qt::DBusReply.new(internalConstCall(Qt::DBus::AutoDetect, "GetConnectionUnixProcessID", [Qt::Variant.new(serviceName)]))
444
+ end
445
+
446
+ def serviceUid(serviceName)
447
+ return Qt::DBusReply.new(internalConstCall(Qt::DBus::AutoDetect, "GetConnectionUnixUser", [Qt::Variant.new(serviceName)]))
448
+ end
449
+
450
+ def startService(name)
451
+ return call("StartServiceByName", Qt::Variant.new(name), Qt::Variant.new(0)).value
452
+ end
453
+ end
454
+
455
+ class DBusError < Qt::Base
456
+ def type(*args)
457
+ method_missing(:type, *args)
458
+ end
459
+ end
460
+
461
+ class DBusInterface < Qt::Base
462
+
463
+ def call(method_name, *args)
464
+ if args.length == 0
465
+ return super(method_name)
466
+ else
467
+ # If the method is Qt::DBusInterface.call(), create an Array
468
+ # 'dbusArgs' of Qt::Variants from '*args'
469
+ qdbusArgs = args.collect {|arg| qVariantFromValue(arg)}
470
+ return super(method_name, *qdbusArgs)
471
+ end
472
+ end
473
+
474
+ def method_missing(id, *args)
475
+ begin
476
+ # First look for a method in the Smoke runtime
477
+ # If not found, then throw an exception and try dbus.
478
+ super(id, *args)
479
+ rescue
480
+ if args.length == 0
481
+ return call(id.to_s).value
482
+ else
483
+ return call(id.to_s, *args).value
484
+ end
485
+ end
486
+ end
487
+ end
488
+
489
+ class DBusMessage < Qt::Base
490
+ def type(*args)
491
+ method_missing(:type, *args)
492
+ end
493
+
494
+ def value
495
+ if type() == Qt::DBusMessage::ReplyMessage
496
+ reply = arguments()
497
+ return reply.length > 0 ? reply[0].value : nil
498
+ else
499
+ return nil
500
+ end
501
+ end
502
+
503
+ def <<(a)
504
+ if a.kind_of?(Qt::Variant)
505
+ return super(a)
506
+ else
507
+ return super(qVariantFromValue(a))
508
+ end
509
+ end
510
+ end
511
+
512
+ class DBusReply
513
+ def initialize(reply)
514
+ @error = Qt::DBusError.new(reply)
515
+
516
+ if @error.valid?
517
+ @data = Qt::Variant.new
518
+ return
519
+ end
520
+
521
+ if reply.arguments.length >= 1
522
+ @data = reply.arguments[0]
523
+ return
524
+ end
525
+
526
+ # error
527
+ @error = Qt::DBusError.new( Qt::DBusError::InvalidSignature,
528
+ "Unexpected reply signature" )
529
+ @data = Qt::Variant.new # clear it
530
+ end
531
+
532
+ def isValid
533
+ return !@error.isValid
534
+ end
535
+
536
+ def valid?
537
+ return !@error.isValid
538
+ end
539
+
540
+ def value
541
+ return @data.value
542
+ end
543
+
544
+ def error
545
+ return @error
546
+ end
547
+ end
548
+
549
+ class Dialog < Qt::Base
550
+ def exec(*args)
551
+ method_missing(:exec, *args)
552
+ end
553
+ end
554
+
555
+ class DomAttr < Qt::Base
556
+ def name(*args)
557
+ method_missing(:name, *args)
558
+ end
559
+ end
560
+
561
+ class DomDocumentType < Qt::Base
562
+ def name(*args)
563
+ method_missing(:name, *args)
564
+ end
565
+
566
+ def type(*args)
567
+ method_missing(:type, *args)
568
+ end
569
+ end
570
+
571
+ class DragEnterEvent < Qt::Base
572
+ def type(*args)
573
+ method_missing(:type, *args)
574
+ end
575
+ end
576
+
577
+ class DragLeaveEvent < Qt::Base
578
+ def type(*args)
579
+ method_missing(:type, *args)
580
+ end
581
+ end
582
+
583
+ class DropEvent < Qt::Base
584
+ def format(*args)
585
+ method_missing(:format, *args)
586
+ end
587
+ def type(*args)
588
+ method_missing(:type, *args)
589
+ end
590
+ end
591
+
592
+ class Event < Qt::Base
593
+ def type(*args)
594
+ method_missing(:type, *args)
595
+ end
596
+ end
597
+
598
+ class EventLoop < Qt::Base
599
+ def exec(*args)
600
+ method_missing(:exec, *args)
601
+ end
602
+
603
+ def exit(*args)
604
+ method_missing(:exit, *args)
605
+ end
606
+ end
607
+
608
+ class File < Qt::Base
609
+ def open(*args)
610
+ method_missing(:open, *args)
611
+ end
612
+ end
613
+
614
+ class FileOpenEvent < Qt::Base
615
+ def type(*args)
616
+ method_missing(:type, *args)
617
+ end
618
+ end
619
+
620
+ class FileIconProvider < Qt::Base
621
+ def type(*args)
622
+ method_missing(:type, *args)
623
+ end
624
+ end
625
+
626
+ class FocusEvent < Qt::Base
627
+ def type(*args)
628
+ method_missing(:type, *args)
629
+ end
630
+ end
631
+
632
+ class Font < Qt::Base
633
+ def inspect
634
+ str = super
635
+ str.sub(/>$/, " family=%s, pointSize=%d, weight=%d, italic=%s, bold=%s, underline=%s, strikeOut=%s>" %
636
+ [family.inspect, pointSize, weight, italic, bold, underline, strikeOut])
637
+ end
638
+
639
+ def pretty_print(pp)
640
+ str = to_s
641
+ pp.text str.sub(/>$/, "\n family=%s,\n pointSize=%d,\n weight=%d,\n italic=%s,\n bold=%s,\n underline=%s,\n strikeOut=%s>" %
642
+ [family.inspect, pointSize, weight, italic, bold, underline, strikeOut])
643
+ end
644
+ end
645
+
646
+ class Ftp < Qt::Base
647
+ def abort(*args)
648
+ method_missing(:abort, *args)
649
+ end
650
+ end
651
+
652
+ class GLContext < Qt::Base
653
+ def format(*args)
654
+ method_missing(:format, *args)
655
+ end
656
+ end
657
+
658
+ class GLPixelBuffer < Qt::Base
659
+ def format(*args)
660
+ method_missing(:format, *args)
661
+ end
662
+ end
663
+
664
+ class GLWidget < Qt::Base
665
+ def format(*args)
666
+ method_missing(:format, *args)
667
+ end
668
+ end
669
+
670
+ class GenericArgument < Qt::Base
671
+ def name(*args)
672
+ method_missing(:name, *args)
673
+ end
674
+ end
675
+
676
+ class Gradient < Qt::Base
677
+ def type(*args)
678
+ method_missing(:type, *args)
679
+ end
680
+ end
681
+
682
+ class GraphicsEllipseItem < Qt::Base
683
+ def type(*args)
684
+ method_missing(:type, *args)
685
+ end
686
+ end
687
+
688
+ class GraphicsItem < Qt::Base
689
+ def type(*args)
690
+ method_missing(:type, *args)
691
+ end
692
+ end
693
+
694
+ class GraphicsItemGroup < Qt::Base
695
+ def type(*args)
696
+ method_missing(:type, *args)
697
+ end
698
+ end
699
+
700
+ class GraphicsLineItem < Qt::Base
701
+ def type(*args)
702
+ method_missing(:type, *args)
703
+ end
704
+ end
705
+
706
+ class GraphicsPathItem < Qt::Base
707
+ def type(*args)
708
+ method_missing(:type, *args)
709
+ end
710
+ end
711
+
712
+ class GraphicsPixmapItem < Qt::Base
713
+ def type(*args)
714
+ method_missing(:type, *args)
715
+ end
716
+ end
717
+
718
+ class GraphicsPolygonItem < Qt::Base
719
+ def type(*args)
720
+ method_missing(:type, *args)
721
+ end
722
+ end
723
+
724
+ class GraphicsRectItem < Qt::Base
725
+ def type(*args)
726
+ method_missing(:type, *args)
727
+ end
728
+ end
729
+
730
+ class GraphicsSceneMouseEvent < Qt::Base
731
+ def type(*args)
732
+ method_missing(:type, *args)
733
+ end
734
+ end
735
+
736
+ class GraphicsSceneContextMenuEvent < Qt::Base
737
+ def type(*args)
738
+ method_missing(:type, *args)
739
+ end
740
+ end
741
+
742
+ class GraphicsSceneHoverEvent < Qt::Base
743
+ def type(*args)
744
+ method_missing(:type, *args)
745
+ end
746
+ end
747
+
748
+ class GraphicsSceneHelpEvent < Qt::Base
749
+ def type(*args)
750
+ method_missing(:type, *args)
751
+ end
752
+ end
753
+
754
+ class GraphicsSceneWheelEvent < Qt::Base
755
+ def type(*args)
756
+ method_missing(:type, *args)
757
+ end
758
+ end
759
+
760
+ class GraphicsSimpleTextItem < Qt::Base
761
+ def type(*args)
762
+ method_missing(:type, *args)
763
+ end
764
+ end
765
+
766
+ class GraphicsTextItem < Qt::Base
767
+ def type(*args)
768
+ method_missing(:type, *args)
769
+ end
770
+ end
771
+
772
+ class HelpEvent < Qt::Base
773
+ def type(*args)
774
+ method_missing(:type, *args)
775
+ end
776
+ end
777
+
778
+ class HideEvent < Qt::Base
779
+ def type(*args)
780
+ method_missing(:type, *args)
781
+ end
782
+ end
783
+
784
+ class HoverEvent < Qt::Base
785
+ def type(*args)
786
+ method_missing(:type, *args)
787
+ end
788
+ end
789
+
790
+ class Http < Qt::Base
791
+ def abort(*args)
792
+ method_missing(:abort, *args)
793
+ end
794
+ end
795
+
796
+ class HttpRequestHeader < Qt::Base
797
+ def method(*args)
798
+ if args.length == 1
799
+ super(*args)
800
+ else
801
+ method_missing(:method, *args)
802
+ end
803
+ end
804
+ end
805
+
806
+ class IconDragEvent < Qt::Base
807
+ def type(*args)
808
+ method_missing(:type, *args)
809
+ end
810
+ end
811
+
812
+ class InputEvent < Qt::Base
813
+ def type(*args)
814
+ method_missing(:type, *args)
815
+ end
816
+ end
817
+
818
+ class InputMethodEvent < Qt::Base
819
+ def type(*args)
820
+ method_missing(:type, *args)
821
+ end
822
+ end
823
+
824
+ class IODevice < Qt::Base
825
+ def open(*args)
826
+ method_missing(:open, *args)
827
+ end
828
+ end
829
+
830
+ class Image < Qt::Base
831
+ def fromImage(image)
832
+ send("operator=".to_sym, image)
833
+ end
834
+
835
+ def format(*args)
836
+ method_missing(:format, *args)
837
+ end
838
+
839
+ def load(*args)
840
+ method_missing(:load, *args)
841
+ end
842
+ end
843
+
844
+ class ImageIOHandler < Qt::Base
845
+ def format(*args)
846
+ method_missing(:format, *args)
847
+ end
848
+
849
+ def name(*args)
850
+ method_missing(:name, *args)
851
+ end
852
+ end
853
+
854
+ class ImageReader < Qt::Base
855
+ def format(*args)
856
+ method_missing(:format, *args)
857
+ end
858
+ end
859
+
860
+ class ImageWriter < Qt::Base
861
+ def format(*args)
862
+ method_missing(:format, *args)
863
+ end
864
+ end
865
+
866
+ class ItemSelection < Qt::Base
867
+ def select(*args)
868
+ method_missing(:select, *args)
869
+ end
870
+
871
+ def split(*args)
872
+ method_missing(:split, *args)
873
+ end
874
+ end
875
+
876
+ class ItemSelectionModel < Qt::Base
877
+ def select(*args)
878
+ method_missing(:select, *args)
879
+ end
880
+ end
881
+
882
+ class KeySequence < Qt::Base
883
+ def initialize(*args)
884
+ if args.length == 1 && args[0].kind_of?(Qt::Enum) && args[0].type == "Qt::Key"
885
+ return super(args[0].to_i)
886
+ end
887
+ return super(*args)
888
+ end
889
+ end
890
+
891
+ class LCDNumber < Qt::Base
892
+ def display(item)
893
+ method_missing(:display, item)
894
+ end
895
+ end
896
+
897
+ class Library < Qt::Base
898
+ def load(*args)
899
+ method_missing(:load, *args)
900
+ end
901
+ end
902
+
903
+ class ListWidgetItem < Qt::Base
904
+ def clone(*args)
905
+ method_missing(:clone, *args)
906
+ end
907
+
908
+ def type(*args)
909
+ method_missing(:type, *args)
910
+ end
911
+
912
+ def inspect
913
+ str = super
914
+ str.sub(/>$/, " text=%s>" % text)
915
+ end
916
+
917
+ def pretty_print(pp)
918
+ str = to_s
919
+ pp.text str.sub(/>$/, " text=%s>" % text)
920
+ end
921
+ end
922
+
923
+ class Locale < Qt::Base
924
+ def name(*args)
925
+ method_missing(:name, *args)
926
+ end
927
+
928
+ def system(*args)
929
+ method_missing(:system, *args)
930
+ end
931
+ end
932
+
933
+ class Menu < Qt::Base
934
+ def exec(*args)
935
+ method_missing(:exec, *args)
936
+ end
937
+ end
938
+
939
+ class MetaClassInfo < Qt::Base
940
+ def name(*args)
941
+ method_missing(:name, *args)
942
+ end
943
+ end
944
+
945
+ class MetaEnum < Qt::Base
946
+ def name(*args)
947
+ method_missing(:name, *args)
948
+ end
949
+
950
+ def keyValues()
951
+ res = []
952
+ for i in 0...keyCount()
953
+ if flag?
954
+ res.push "%s=0x%x" % [key(i), value(i)]
955
+ else
956
+ res.push "%s=%d" % [key(i), value(i)]
957
+ end
958
+ end
959
+ return res
960
+ end
961
+
962
+ def inspect
963
+ str = super
964
+ str.sub(/>$/, " scope=%s, name=%s, keyValues=Array (%d element(s))>" % [scope, name, keyValues.length])
965
+ end
966
+
967
+ def pretty_print(pp)
968
+ str = to_s
969
+ pp.text str.sub(/>$/, " scope=%s, name=%s, keyValues=Array (%d element(s))>" % [scope, name, keyValues.length])
970
+ end
971
+ end
972
+
973
+ class MetaMethod < Qt::Base
974
+ # Oops, name clash with the Signal module so hard code
975
+ # this value rather than get it from the Smoke runtime
976
+ Signal = 1
977
+ end
978
+
979
+ class MetaObject < Qt::Base
980
+ def method(*args)
981
+ if args.length == 1 && args[0].kind_of?(Symbol)
982
+ super(*args)
983
+ else
984
+ method_missing(:method, *args)
985
+ end
986
+ end
987
+
988
+ # Add three methods, 'propertyNames()', 'slotNames()' and 'signalNames()'
989
+ # from Qt3, as they are very useful when debugging
990
+
991
+ def propertyNames(inherits = false)
992
+ res = []
993
+ if inherits
994
+ for p in 0...propertyCount()
995
+ res.push property(p).name
996
+ end
997
+ else
998
+ for p in propertyOffset()...propertyCount()
999
+ res.push property(p).name
1000
+ end
1001
+ end
1002
+ return res
1003
+ end
1004
+
1005
+ def slotNames(inherits = false)
1006
+ res = []
1007
+ if inherits
1008
+ for m in 0...methodCount()
1009
+ if method(m).methodType == Qt::MetaMethod::Slot
1010
+ res.push "%s %s" % [method(m).typeName == "" ? "void" : method(m).typeName,
1011
+ method(m).signature]
1012
+ end
1013
+ end
1014
+ else
1015
+ for m in methodOffset()...methodCount()
1016
+ if method(m).methodType == Qt::MetaMethod::Slot
1017
+ res.push "%s %s" % [method(m).typeName == "" ? "void" : method(m).typeName,
1018
+ method(m).signature]
1019
+ end
1020
+ end
1021
+ end
1022
+ return res
1023
+ end
1024
+
1025
+ def signalNames(inherits = false)
1026
+ res = []
1027
+ if inherits
1028
+ for m in 0...methodCount()
1029
+ if method(m).methodType == Qt::MetaMethod::Signal
1030
+ res.push "%s %s" % [method(m).typeName == "" ? "void" : method(m).typeName,
1031
+ method(m).signature]
1032
+ end
1033
+ end
1034
+ else
1035
+ for m in methodOffset()...methodCount()
1036
+ if method(m).methodType == Qt::MetaMethod::Signal
1037
+ res.push "%s %s" % [method(m).typeName == "" ? "void" : method(m).typeName,
1038
+ method(m).signature]
1039
+ end
1040
+ end
1041
+ end
1042
+ return res
1043
+ end
1044
+
1045
+ def enumerators(inherits = false)
1046
+ res = []
1047
+ if inherits
1048
+ for e in 0...enumeratorCount()
1049
+ res.push enumerator(e)
1050
+ end
1051
+ else
1052
+ for e in enumeratorOffset()...enumeratorCount()
1053
+ res.push enumerator(e)
1054
+ end
1055
+ end
1056
+ return res
1057
+ end
1058
+
1059
+ def inspect
1060
+ str = super
1061
+ str.sub!(/>$/, "")
1062
+ str << " className=%s," % className
1063
+ str << " propertyNames=Array (%d element(s))," % propertyNames.length unless propertyNames.length == 0
1064
+ str << " signalNames=Array (%d element(s))," % signalNames.length unless signalNames.length == 0
1065
+ str << " slotNames=Array (%d element(s))," % slotNames.length unless slotNames.length == 0
1066
+ str << " enumerators=Array (%d element(s))," % enumerators.length unless enumerators.length == 0
1067
+ str << " superClass=%s," % superClass.inspect unless superClass == nil
1068
+ str.chop!
1069
+ str << ">"
1070
+ end
1071
+
1072
+ def pretty_print(pp)
1073
+ str = to_s
1074
+ str.sub!(/>$/, "")
1075
+ str << "\n className=%s," % className
1076
+ str << "\n propertyNames=Array (%d element(s))," % propertyNames.length unless propertyNames.length == 0
1077
+ str << "\n signalNames=Array (%d element(s))," % signalNames.length unless signalNames.length == 0
1078
+ str << "\n slotNames=Array (%d element(s))," % slotNames.length unless slotNames.length == 0
1079
+ str << "\n enumerators=Array (%d element(s))," % enumerators.length unless enumerators.length == 0
1080
+ str << "\n superClass=%s," % superClass.inspect unless superClass == nil
1081
+ str << "\n methodCount=%d," % methodCount
1082
+ str << "\n methodOffset=%d," % methodOffset
1083
+ str << "\n propertyCount=%d," % propertyCount
1084
+ str << "\n propertyOffset=%d," % propertyOffset
1085
+ str << "\n enumeratorCount=%d," % enumeratorCount
1086
+ str << "\n enumeratorOffset=%d," % enumeratorOffset
1087
+ str.chop!
1088
+ str << ">"
1089
+ pp.text str
1090
+ end
1091
+ end
1092
+
1093
+ class MetaProperty < Qt::Base
1094
+ def name(*args)
1095
+ method_missing(:name, *args)
1096
+ end
1097
+
1098
+ def type(*args)
1099
+ method_missing(:type, *args)
1100
+ end
1101
+ end
1102
+
1103
+ class MetaType < Qt::Base
1104
+ def load(*args)
1105
+ method_missing(:load, *args)
1106
+ end
1107
+
1108
+ def type(*args)
1109
+ method_missing(:type, *args)
1110
+ end
1111
+ end
1112
+
1113
+ class MouseEvent < Qt::Base
1114
+ def type(*args)
1115
+ method_missing(:type, *args)
1116
+ end
1117
+ end
1118
+
1119
+ class MoveEvent < Qt::Base
1120
+ def type(*args)
1121
+ method_missing(:type, *args)
1122
+ end
1123
+ end
1124
+
1125
+ class Movie < Qt::Base
1126
+ def format(*args)
1127
+ method_missing(:format, *args)
1128
+ end
1129
+ end
1130
+
1131
+ class NetworkProxy < Qt::Base
1132
+ def type(*args)
1133
+ method_missing(:type, *args)
1134
+ end
1135
+ end
1136
+
1137
+ class Object < Qt::Base
1138
+ end
1139
+
1140
+ class PageSetupDialog < Qt::Base
1141
+ def exec(*args)
1142
+ method_missing(:exec, *args)
1143
+ end
1144
+ end
1145
+
1146
+ class PaintEvent < Qt::Base
1147
+ def type(*args)
1148
+ method_missing(:type, *args)
1149
+ end
1150
+ end
1151
+
1152
+ class Picture < Qt::Base
1153
+ def load(*args)
1154
+ method_missing(:load, *args)
1155
+ end
1156
+ end
1157
+
1158
+ class PictureIO < Qt::Base
1159
+ def format(*args)
1160
+ method_missing(:format, *args)
1161
+ end
1162
+ end
1163
+
1164
+ class Pixmap < Qt::Base
1165
+ def load(*args)
1166
+ method_missing(:load, *args)
1167
+ end
1168
+ end
1169
+
1170
+ class PluginLoader < Qt::Base
1171
+ def load(*args)
1172
+ method_missing(:load, *args)
1173
+ end
1174
+ end
1175
+
1176
+ class Point < Qt::Base
1177
+ def inspect
1178
+ str = super
1179
+ str.sub(/>$/, " x=%d, y=%d>" % [x, y])
1180
+ end
1181
+
1182
+ def pretty_print(pp)
1183
+ str = to_s
1184
+ pp.text str.sub(/>$/, "\n x=%d,\n y=%d>" % [x, y])
1185
+ end
1186
+ end
1187
+
1188
+ class PointF < Qt::Base
1189
+ def inspect
1190
+ str = super
1191
+ str.sub(/>$/, " x=%f, y=%f>" % [x, y])
1192
+ end
1193
+
1194
+ def pretty_print(pp)
1195
+ str = to_s
1196
+ pp.text str.sub(/>$/, "\n x=%f,\n y=%f>" % [x, y])
1197
+ end
1198
+ end
1199
+
1200
+ class PrintDialog < Qt::Base
1201
+ def exec(*args)
1202
+ method_missing(:exec, *args)
1203
+ end
1204
+ end
1205
+
1206
+ class Printer < Qt::Base
1207
+ def abort(*args)
1208
+ method_missing(:abort, *args)
1209
+ end
1210
+ end
1211
+
1212
+ class PushButton < Qt::Base
1213
+ def setShortcut(arg)
1214
+ if arg.kind_of?(String)
1215
+ return super(Qt::KeySequence.new(arg))
1216
+ else
1217
+ return super(arg)
1218
+ end
1219
+ end
1220
+
1221
+ def shortcut=(arg)
1222
+ setShortcut(arg)
1223
+ end
1224
+ end
1225
+
1226
+ class Line < Qt::Base
1227
+ def inspect
1228
+ str = super
1229
+ str.sub(/>$/, " x1=%d, y1=%d, x2=%d, y2=%d>" % [x1, y1, x2, y2])
1230
+ end
1231
+
1232
+ def pretty_print(pp)
1233
+ str = to_s
1234
+ pp.text str.sub(/>$/, "\n x1=%d,\n y1=%d,\n x2=%d,\n y2=%d>" % [x1, y1, x2, y2])
1235
+ end
1236
+ end
1237
+
1238
+ class LineF < Qt::Base
1239
+ def inspect
1240
+ str = super
1241
+ str.sub(/>$/, " x1=%f, y1=%f, x2=%f, y2=%f>" % [x1, y1, x2, y2])
1242
+ end
1243
+
1244
+ def pretty_print(pp)
1245
+ str = to_s
1246
+ pp.text str.sub(/>$/, "\n x1=%f,\n y1=%f,\n x2=%f,\n y2=%f>" % [x1, y1, x2, y2])
1247
+ end
1248
+ end
1249
+
1250
+ class MetaType < Qt::Base
1251
+ def self.type(*args)
1252
+ method_missing(:type, *args)
1253
+ end
1254
+ end
1255
+
1256
+ class ModelIndex < Qt::Base
1257
+ def inspect
1258
+ str = super
1259
+ str.sub(/>$/, " valid?=%s, row=%s, column=%s>" % [valid?, row, column])
1260
+ end
1261
+
1262
+ def pretty_print(pp)
1263
+ str = to_s
1264
+ pp.text str.sub(/>$/, "\n valid?=%s,\n row=%s,\n column=%s>" % [valid?, row, column])
1265
+ end
1266
+ end
1267
+
1268
+ class RadioButton < Qt::Base
1269
+ def setShortcut(arg)
1270
+ if arg.kind_of?(String)
1271
+ return super(Qt::KeySequence.new(arg))
1272
+ else
1273
+ return super(arg)
1274
+ end
1275
+ end
1276
+
1277
+ def shortcut=(arg)
1278
+ setShortcut(arg)
1279
+ end
1280
+ end
1281
+
1282
+ class Rect < Qt::Base
1283
+ def inspect
1284
+ str = super
1285
+ str.sub(/>$/, " left=%d, right=%d, top=%d, bottom=%d>" % [left, right, top, bottom])
1286
+ end
1287
+
1288
+ def pretty_print(pp)
1289
+ str = to_s
1290
+ pp.text str.sub(/>$/, "\n left=%d,\n right=%d,\n top=%d,\n bottom=%d>" % [left, right, top, bottom])
1291
+ end
1292
+ end
1293
+
1294
+ class RectF < Qt::Base
1295
+ def inspect
1296
+ str = super
1297
+ str.sub(/>$/, " left=%f, right=%f, top=%f, bottom=%f>" % [left, right, top, bottom])
1298
+ end
1299
+
1300
+ def pretty_print(pp)
1301
+ str = to_s
1302
+ pp.text str.sub(/>$/, "\n left=%f,\n right=%f,\n top=%f,\n bottom=%f>" % [left, right, top, bottom])
1303
+ end
1304
+ end
1305
+
1306
+ class ResizeEvent < Qt::Base
1307
+ def type(*args)
1308
+ method_missing(:type, *args)
1309
+ end
1310
+ end
1311
+
1312
+ class Shortcut < Qt::Base
1313
+ def id(*args)
1314
+ method_missing(:id, *args)
1315
+ end
1316
+ end
1317
+
1318
+ class ShortcutEvent < Qt::Base
1319
+ def type(*args)
1320
+ method_missing(:type, *args)
1321
+ end
1322
+ end
1323
+
1324
+ class ShowEvent < Qt::Base
1325
+ def type(*args)
1326
+ method_missing(:type, *args)
1327
+ end
1328
+ end
1329
+
1330
+ class Size < Qt::Base
1331
+ def inspect
1332
+ str = super
1333
+ str.sub(/>$/, " width=%d, height=%d>" % [width, height])
1334
+ end
1335
+
1336
+ def pretty_print(pp)
1337
+ str = to_s
1338
+ pp.text str.sub(/>$/, "\n width=%d,\n height=%d>" % [width, height])
1339
+ end
1340
+ end
1341
+
1342
+ class SizeF < Qt::Base
1343
+ def inspect
1344
+ str = super
1345
+ str.sub(/>$/, " width=%f, height=%f>" % [width, height])
1346
+ end
1347
+
1348
+ def pretty_print(pp)
1349
+ str = to_s
1350
+ pp.text str.sub(/>$/, "\n width=%f,\n height=%f>" % [width, height])
1351
+ end
1352
+ end
1353
+
1354
+ class SizePolicy < Qt::Base
1355
+ def inspect
1356
+ str = super
1357
+ str.sub(/>$/, " horData=%d, verData=%d>" % [horData, verData])
1358
+ end
1359
+
1360
+ def pretty_print(pp)
1361
+ str = to_s
1362
+ pp.text str.sub(/>$/, "\n horData=%d,\n verData=%d>" % [horData, verData])
1363
+ end
1364
+ end
1365
+
1366
+ class SocketNotifier < Qt::Base
1367
+ def type(*args)
1368
+ method_missing(:type, *args)
1369
+ end
1370
+ end
1371
+
1372
+ class SqlDatabase < Qt::Base
1373
+ def exec(*args)
1374
+ method_missing(:exec, *args)
1375
+ end
1376
+
1377
+ def open(*args)
1378
+ method_missing(:open, *args)
1379
+ end
1380
+ end
1381
+
1382
+ class SqlError < Qt::Base
1383
+ def type(*args)
1384
+ method_missing(:type, *args)
1385
+ end
1386
+ end
1387
+
1388
+ class SqlField < Qt::Base
1389
+ def name(*args)
1390
+ method_missing(:name, *args)
1391
+ end
1392
+
1393
+ def type(*args)
1394
+ method_missing(:type, *args)
1395
+ end
1396
+ end
1397
+
1398
+ class SqlIndex < Qt::Base
1399
+ def name(*args)
1400
+ method_missing(:name, *args)
1401
+ end
1402
+ end
1403
+
1404
+ class SqlQuery < Qt::Base
1405
+ def exec(*args)
1406
+ method_missing(:exec, *args)
1407
+ end
1408
+ end
1409
+
1410
+ class SqlResult < Qt::Base
1411
+ def exec(*args)
1412
+ method_missing(:exec, *args)
1413
+ end
1414
+ end
1415
+
1416
+ class SqlTableModel < Qt::Base
1417
+ def select(*k)
1418
+ method_missing(:select, *k)
1419
+ end
1420
+ end
1421
+
1422
+ class StandardItem < Qt::Base
1423
+ def type(*args)
1424
+ method_missing(:type, *args)
1425
+ end
1426
+ end
1427
+
1428
+ class StandardItemModel < Qt::Base
1429
+ def type(*args)
1430
+ method_missing(:type, *args)
1431
+ end
1432
+ end
1433
+
1434
+ class StatusTipEvent < Qt::Base
1435
+ def type(*args)
1436
+ method_missing(:type, *args)
1437
+ end
1438
+ end
1439
+
1440
+ class StyleHintReturn < Qt::Base
1441
+ def type(*args)
1442
+ method_missing(:type, *args)
1443
+ end
1444
+ end
1445
+
1446
+ class StyleOption < Qt::Base
1447
+ def type(*args)
1448
+ method_missing(:type, *args)
1449
+ end
1450
+ end
1451
+
1452
+ class SyntaxHighlighter < Qt::Base
1453
+ def format(*args)
1454
+ method_missing(:format, *args)
1455
+ end
1456
+ end
1457
+
1458
+ class TableWidgetItem < Qt::Base
1459
+ def clone(*args)
1460
+ method_missing(:clone, *args)
1461
+ end
1462
+
1463
+ def type(*args)
1464
+ method_missing(:type, *args)
1465
+ end
1466
+
1467
+ def inspect
1468
+ str = super
1469
+ str.sub(/>$/, " text=%s>" % text)
1470
+ end
1471
+
1472
+ def pretty_print(pp)
1473
+ str = to_s
1474
+ pp.text str.sub(/>$/, " text=%s>" % text)
1475
+ end
1476
+ end
1477
+
1478
+ class TemporaryFile < Qt::Base
1479
+ def open(*args)
1480
+ method_missing(:open, *args)
1481
+ end
1482
+ end
1483
+
1484
+ class TextCursor < Qt::Base
1485
+ def select(*k)
1486
+ method_missing(:select, *k)
1487
+ end
1488
+ end
1489
+
1490
+ class TextDocument < Qt::Base
1491
+ def clone(*args)
1492
+ method_missing(:clone, *args)
1493
+ end
1494
+
1495
+ def print(*args)
1496
+ method_missing(:print, *args)
1497
+ end
1498
+ end
1499
+
1500
+ class TextFormat < Qt::Base
1501
+ def type(*args)
1502
+ method_missing(:type, *args)
1503
+ end
1504
+ end
1505
+
1506
+ class TextImageFormat < Qt::Base
1507
+ def name(*args)
1508
+ method_missing(:name, *args)
1509
+ end
1510
+ end
1511
+
1512
+ class TextInlineObject < Qt::Base
1513
+ def format(*args)
1514
+ method_missing(:format, *args)
1515
+ end
1516
+ end
1517
+
1518
+ class TextLength < Qt::Base
1519
+ def type(*args)
1520
+ method_missing(:type, *args)
1521
+ end
1522
+ end
1523
+
1524
+ class TextList < Qt::Base
1525
+ def format(*args)
1526
+ method_missing(:format, *args)
1527
+ end
1528
+ end
1529
+
1530
+ class TextObject < Qt::Base
1531
+ def format(*args)
1532
+ method_missing(:format, *args)
1533
+ end
1534
+ end
1535
+
1536
+ class TextTable < Qt::Base
1537
+ def format(*args)
1538
+ method_missing(:format, *args)
1539
+ end
1540
+ end
1541
+
1542
+ class TextTableCell < Qt::Base
1543
+ def format(*args)
1544
+ method_missing(:format, *args)
1545
+ end
1546
+ end
1547
+
1548
+ class Time < Qt::Base
1549
+ def initialize(*args)
1550
+ if args.size == 1 && args[0].class.name == "Time"
1551
+ return super(args[0].hour, args[0].min, args[0].sec)
1552
+ else
1553
+ return super(*args)
1554
+ end
1555
+ end
1556
+
1557
+ def inspect
1558
+ str = super
1559
+ str.sub(/>$/, " %s>" % toString)
1560
+ end
1561
+
1562
+ def pretty_print(pp)
1563
+ str = to_s
1564
+ pp.text str.sub(/>$/, " %s>" % toString)
1565
+ end
1566
+ end
1567
+
1568
+ class TimerEvent < Qt::Base
1569
+ def type(*args)
1570
+ method_missing(:type, *args)
1571
+ end
1572
+ end
1573
+
1574
+ class ToolButton < Qt::Base
1575
+ def setShortcut(arg)
1576
+ if arg.kind_of?(String)
1577
+ return super(Qt::KeySequence.new(arg))
1578
+ else
1579
+ return super(arg)
1580
+ end
1581
+ end
1582
+
1583
+ def shortcut=(arg)
1584
+ setShortcut(arg)
1585
+ end
1586
+ end
1587
+
1588
+ class Translator < Qt::Base
1589
+ def load(*args)
1590
+ method_missing(:load, *args)
1591
+ end
1592
+ end
1593
+
1594
+ class TreeWidget < Qt::Base
1595
+ include Enumerable
1596
+
1597
+ def each
1598
+ it = Qt::TreeWidgetItemIterator.new(self)
1599
+ while it.current
1600
+ yield it.current
1601
+ it += 1
1602
+ end
1603
+ end
1604
+ end
1605
+
1606
+ class TreeWidgetItem < Qt::Base
1607
+ include Enumerable
1608
+
1609
+ def initialize(*args)
1610
+ # There is not way to distinguish between the copy constructor
1611
+ # QTreeWidgetItem (const QTreeWidgetItem & other)
1612
+ # and
1613
+ # QTreeWidgetItem (QTreeWidgetItem * parent, const QStringList & strings, int type = Type)
1614
+ # when the latter has a single argument. So force the second variant to be called
1615
+ if args.length == 1 && args[0].kind_of?(Qt::TreeWidgetItem)
1616
+ super(args[0], Qt::TreeWidgetItem::Type)
1617
+ else
1618
+ super(*args)
1619
+ end
1620
+ end
1621
+
1622
+ def inspect
1623
+ str = super
1624
+ str.sub!(/>$/, "")
1625
+ str << " parent=%s," % parent unless parent.nil?
1626
+ for i in 0..(columnCount - 1)
1627
+ str << " text%d=%s," % [i, self.text(i)]
1628
+ end
1629
+ str.sub!(/,?$/, ">")
1630
+ end
1631
+
1632
+ def pretty_print(pp)
1633
+ str = to_s
1634
+ str.sub!(/>$/, "")
1635
+ str << " parent=%s," % parent unless parent.nil?
1636
+ for i in 0..(columnCount - 1)
1637
+ str << " text%d=%s," % [i, self.text(i)]
1638
+ end
1639
+ str.sub!(/,?$/, ">")
1640
+ pp.text str
1641
+ end
1642
+
1643
+ def clone(*args)
1644
+ method_missing(:clone, *args)
1645
+ end
1646
+
1647
+ def type(*args)
1648
+ method_missing(:type, *args)
1649
+ end
1650
+
1651
+ def each
1652
+ it = Qt::TreeWidgetItemIterator.new(self)
1653
+ while it.current
1654
+ yield it.current
1655
+ it += 1
1656
+ end
1657
+ end
1658
+ end
1659
+
1660
+ class TreeWidgetItemIterator < Qt::Base
1661
+ def current
1662
+ return send("operator*".to_sym)
1663
+ end
1664
+ end
1665
+
1666
+ class UrlInfo < Qt::Base
1667
+ def name(*args)
1668
+ method_missing(:name, *args)
1669
+ end
1670
+ end
1671
+
1672
+ class Variant < Qt::Base
1673
+ String = 10
1674
+ Date = 14
1675
+ Time = 15
1676
+ DateTime = 16
1677
+
1678
+ def initialize(*args)
1679
+ if args.size == 1 && args[0].nil?
1680
+ return super()
1681
+ elsif args.size == 1 && args[0].class.name == "Date"
1682
+ return super(Qt::Date.new(args[0]))
1683
+ elsif args.size == 1 && args[0].class.name == "DateTime"
1684
+ return super(Qt::DateTime.new( Qt::Date.new(args[0].year, args[0].month, args[0].day),
1685
+ Qt::Time.new(args[0].hour, args[0].min, args[0].sec) ) )
1686
+ elsif args.size == 1 && args[0].class.name == "Time"
1687
+ return super(Qt::Time.new(args[0]))
1688
+ else
1689
+ return super(*args)
1690
+ end
1691
+ end
1692
+
1693
+ def to_a
1694
+ return toStringList()
1695
+ end
1696
+
1697
+ def to_f
1698
+ return toDouble()
1699
+ end
1700
+
1701
+ def to_i
1702
+ return toInt()
1703
+ end
1704
+
1705
+ def to_int
1706
+ return toInt()
1707
+ end
1708
+
1709
+ def value
1710
+ case type()
1711
+ when Qt::Variant::Bitmap
1712
+ when Qt::Variant::Bool
1713
+ return toBool
1714
+ when Qt::Variant::Brush
1715
+ return qVariantValue(Qt::Brush, self)
1716
+ when Qt::Variant::ByteArray
1717
+ return toByteArray
1718
+ when Qt::Variant::Char
1719
+ return qVariantValue(Qt::Char, self)
1720
+ when Qt::Variant::Color
1721
+ return qVariantValue(Qt::Color, self)
1722
+ when Qt::Variant::Cursor
1723
+ return qVariantValue(Qt::Cursor, self)
1724
+ when Qt::Variant::Date
1725
+ return toDate
1726
+ when Qt::Variant::DateTime
1727
+ return toDateTime
1728
+ when Qt::Variant::Double
1729
+ return toDouble
1730
+ when Qt::Variant::Font
1731
+ return qVariantValue(Qt::Font, self)
1732
+ when Qt::Variant::Icon
1733
+ return qVariantValue(Qt::Icon, self)
1734
+ when Qt::Variant::Image
1735
+ return qVariantValue(Qt::Image, self)
1736
+ when Qt::Variant::Int
1737
+ return toInt
1738
+ when Qt::Variant::KeySequence
1739
+ return qVariantValue(Qt::KeySequence, self)
1740
+ when Qt::Variant::Line
1741
+ return toLine
1742
+ when Qt::Variant::LineF
1743
+ return toLineF
1744
+ when Qt::Variant::List
1745
+ return toList
1746
+ when Qt::Variant::Locale
1747
+ return qVariantValue(Qt::Locale, self)
1748
+ when Qt::Variant::LongLong
1749
+ return toLongLong
1750
+ when Qt::Variant::Map
1751
+ return toMap
1752
+ when Qt::Variant::Palette
1753
+ return qVariantValue(Qt::Palette, self)
1754
+ when Qt::Variant::Pen
1755
+ return qVariantValue(Qt::Pen, self)
1756
+ when Qt::Variant::Pixmap
1757
+ return qVariantValue(Qt::Pixmap, self)
1758
+ when Qt::Variant::Point
1759
+ return toPoint
1760
+ when Qt::Variant::PointF
1761
+ return toPointF
1762
+ when Qt::Variant::Polygon
1763
+ return qVariantValue(Qt::Polygon, self)
1764
+ when Qt::Variant::Rect
1765
+ return toRect
1766
+ when Qt::Variant::RectF
1767
+ return toRectF
1768
+ when Qt::Variant::RegExp
1769
+ return toRegExp
1770
+ when Qt::Variant::Region
1771
+ return qVariantValue(Qt::Region, self)
1772
+ when Qt::Variant::Size
1773
+ return toSize
1774
+ when Qt::Variant::SizeF
1775
+ return toSizeF
1776
+ when Qt::Variant::SizePolicy
1777
+ return toSizePolicy
1778
+ when Qt::Variant::String
1779
+ return toString
1780
+ when Qt::Variant::StringList
1781
+ return toStringList
1782
+ when Qt::Variant::TextFormat
1783
+ return qVariantValue(Qt::TextFormat, self)
1784
+ when Qt::Variant::TextLength
1785
+ return qVariantValue(Qt::TextLength, self)
1786
+ when Qt::Variant::Time
1787
+ return toTime
1788
+ when Qt::Variant::UInt
1789
+ return toUInt
1790
+ when Qt::Variant::ULongLong
1791
+ return toULongLong
1792
+ when Qt::Variant::Url
1793
+ return toUrl
1794
+ end
1795
+
1796
+ case typeName()
1797
+ when "QDBusArgument"
1798
+ return qVariantValue(Qt::DBusArgument, self)
1799
+ when "QDBusVariant"
1800
+ return qVariantValue(Qt::Variant, self)
1801
+ end
1802
+ end
1803
+
1804
+ def inspect
1805
+ str = super
1806
+ str.sub(/>$/, " typeName=%s>" % typeName)
1807
+ end
1808
+
1809
+ def pretty_print(pp)
1810
+ str = to_s
1811
+ pp.text str.sub(/>$/, " typeName=%s>" % typeName)
1812
+ end
1813
+
1814
+ def load(*args)
1815
+ method_missing(:load, *args)
1816
+ end
1817
+
1818
+ def type(*args)
1819
+ method_missing(:type, *args)
1820
+ end
1821
+ end
1822
+
1823
+ class DBusVariant < Variant
1824
+ def initialize(value)
1825
+ if value.kind_of? Qt::Variant
1826
+ super(value)
1827
+ else
1828
+ super(Qt::Variant.new(value))
1829
+ end
1830
+ end
1831
+
1832
+ def setVariant(variant)
1833
+ end
1834
+
1835
+ def variant=(variant)
1836
+ setVariant(variant)
1837
+ end
1838
+
1839
+ def variant()
1840
+ return self
1841
+ end
1842
+ end
1843
+
1844
+ class WhatsThisClickedEvent < Qt::Base
1845
+ def type(*args)
1846
+ method_missing(:type, *args)
1847
+ end
1848
+ end
1849
+
1850
+ class Widget < Qt::Base
1851
+ def raise(*args)
1852
+ method_missing(:raise, *args)
1853
+ end
1854
+ end
1855
+
1856
+ class WindowStateChangeEvent < Qt::Base
1857
+ def type(*args)
1858
+ method_missing(:type, *args)
1859
+ end
1860
+ end
1861
+
1862
+ class XmlAttributes < Qt::Base
1863
+ def type(*args)
1864
+ method_missing(:type, *args)
1865
+ end
1866
+ end
1867
+
1868
+ # Provides a mutable numeric class for passing to methods with
1869
+ # C++ 'int*' or 'int&' arg types
1870
+ class Integer
1871
+ attr_accessor :value
1872
+ def initialize(n=0) @value = n end
1873
+
1874
+ def +(n)
1875
+ return Integer.new(@value + n.to_i)
1876
+ end
1877
+ def -(n)
1878
+ return Integer.new(@value - n.to_i)
1879
+ end
1880
+ def *(n)
1881
+ return Integer.new(@value * n.to_i)
1882
+ end
1883
+ def /(n)
1884
+ return Integer.new(@value / n.to_i)
1885
+ end
1886
+ def %(n)
1887
+ return Integer.new(@value % n.to_i)
1888
+ end
1889
+ def **(n)
1890
+ return Integer.new(@value ** n.to_i)
1891
+ end
1892
+
1893
+ def |(n)
1894
+ return Integer.new(@value | n.to_i)
1895
+ end
1896
+ def &(n)
1897
+ return Integer.new(@value & n.to_i)
1898
+ end
1899
+ def ^(n)
1900
+ return Integer.new(@value ^ n.to_i)
1901
+ end
1902
+ def <<(n)
1903
+ return Integer.new(@value << n.to_i)
1904
+ end
1905
+ def >>(n)
1906
+ return Integer.new(@value >> n.to_i)
1907
+ end
1908
+ def >(n)
1909
+ return @value > n.to_i
1910
+ end
1911
+ def >=(n)
1912
+ return @value >= n.to_i
1913
+ end
1914
+ def <(n)
1915
+ return @value < n.to_i
1916
+ end
1917
+ def <=(n)
1918
+ return @value <= n.to_i
1919
+ end
1920
+
1921
+ def <=>(n)
1922
+ if @value < n.to_i
1923
+ return -1
1924
+ elsif @value > n.to_i
1925
+ return 1
1926
+ else
1927
+ return 0
1928
+ end
1929
+ end
1930
+
1931
+ def to_f() return @value.to_f end
1932
+ def to_i() return @value.to_i end
1933
+ def to_s() return @value.to_s end
1934
+
1935
+ def coerce(n)
1936
+ [n, @value]
1937
+ end
1938
+ end
1939
+
1940
+ # If a C++ enum was converted to an ordinary ruby Integer, the
1941
+ # name of the type is lost. The enum type name is needed for overloaded
1942
+ # method resolution when two methods differ only by an enum type.
1943
+ class Enum
1944
+ attr_accessor :type, :value
1945
+ def initialize(n, type)
1946
+ super()
1947
+ @value = n
1948
+ @type = type
1949
+ end
1950
+
1951
+ def +(n)
1952
+ return @value + n.to_i
1953
+ end
1954
+ def -(n)
1955
+ return @value - n.to_i
1956
+ end
1957
+ def *(n)
1958
+ return @value * n.to_i
1959
+ end
1960
+ def /(n)
1961
+ return @value / n.to_i
1962
+ end
1963
+ def %(n)
1964
+ return @value % n.to_i
1965
+ end
1966
+ def **(n)
1967
+ return @value ** n.to_i
1968
+ end
1969
+
1970
+ def |(n)
1971
+ return Enum.new(@value | n.to_i, @type)
1972
+ end
1973
+ def &(n)
1974
+ return Enum.new(@value & n.to_i, @type)
1975
+ end
1976
+ def ^(n)
1977
+ return Enum.new(@value ^ n.to_i, @type)
1978
+ end
1979
+ def ~()
1980
+ return ~ @value
1981
+ end
1982
+ def <(n)
1983
+ return @value < n.to_i
1984
+ end
1985
+ def <=(n)
1986
+ return @value <= n.to_i
1987
+ end
1988
+ def >(n)
1989
+ return @value > n.to_i
1990
+ end
1991
+ def >=(n)
1992
+ return @value >= n.to_i
1993
+ end
1994
+ def <<(n)
1995
+ return Enum.new(@value << n.to_i, @type)
1996
+ end
1997
+ def >>(n)
1998
+ return Enum.new(@value >> n.to_i, @type)
1999
+ end
2000
+
2001
+ def ==(n) return @value == n.to_i end
2002
+ def to_i() return @value end
2003
+
2004
+ def to_f() return @value.to_f end
2005
+ def to_s() return @value.to_s end
2006
+
2007
+ def coerce(n)
2008
+ [n, @value]
2009
+ end
2010
+
2011
+ def inspect
2012
+ to_s
2013
+ end
2014
+
2015
+ def pretty_print(pp)
2016
+ pp.text "#<%s:0x%8.8x @type=%s, @value=%d>" % [self.class.name, object_id, type, value]
2017
+ end
2018
+ end
2019
+
2020
+ # Provides a mutable boolean class for passing to methods with
2021
+ # C++ 'bool*' or 'bool&' arg types
2022
+ class Boolean
2023
+ attr_accessor :value
2024
+ def initialize(b=false) @value = b end
2025
+ def nil?
2026
+ return !@value
2027
+ end
2028
+ end
2029
+
2030
+ class SignalBlockInvocation < Qt::Object
2031
+ def initialize(parent, block, signature)
2032
+ super(parent)
2033
+ if metaObject.indexOfSlot(signature) == -1
2034
+ self.class.slots signature
2035
+ end
2036
+ @block = block
2037
+ end
2038
+
2039
+ def invoke(*args)
2040
+ @block.call(*args)
2041
+ end
2042
+ end
2043
+
2044
+ class BlockInvocation < Qt::Object
2045
+ def initialize(target, block, signature)
2046
+ super(target)
2047
+ if metaObject.indexOfSlot(signature) == -1
2048
+ self.class.slots signature
2049
+ end
2050
+ @target = target
2051
+ @block = block
2052
+ end
2053
+
2054
+ def invoke(*args)
2055
+ @target.instance_exec(*args, &@block)
2056
+ end
2057
+ end
2058
+
2059
+ module Internal
2060
+ @@classes = {}
2061
+ @@cpp_names = {}
2062
+ @@idclass = []
2063
+
2064
+ def Internal.normalize_classname(classname)
2065
+ if classname =~ /^Qext/
2066
+ now = classname.sub(/^Qext(?=[A-Z])/,'Qext::')
2067
+ elsif classname =~ /^Qwt/
2068
+ now = classname.sub(/^Qwt(?=[A-Z])/,'Qwt::')
2069
+ elsif classname =~ /^Q3/
2070
+ now = classname.sub(/^Q3(?=[A-Z])/,'Qt3::')
2071
+ elsif classname =~ /^Q/
2072
+ now = classname.sub(/^Q(?=[A-Z])/,'Qt::')
2073
+ elsif classname =~ /^(KConfigSkeleton|KWin)::/
2074
+ now = classname.sub(/^K?(?=[A-Z])/,'KDE::')
2075
+ elsif classname !~ /::/
2076
+ now = classname.sub(/^K?(?=[A-Z])/,'KDE::')
2077
+ else
2078
+ now = classname
2079
+ end
2080
+ # puts "normalize_classname = was::#{classname}, now::#{now}"
2081
+ now
2082
+ end
2083
+
2084
+ def Internal.init_class(c)
2085
+ classname = Qt::Internal::normalize_classname(c)
2086
+ classId = Qt::Internal.idClass(c)
2087
+ insert_pclassid(classname, classId)
2088
+ @@idclass[classId] = classname
2089
+ @@cpp_names[classname] = c
2090
+ klass = isQObject(classId) ? create_qobject_class(classname) \
2091
+ : create_qt_class(classname)
2092
+ @@classes[classname] = klass unless klass.nil?
2093
+ end
2094
+
2095
+ def Internal.debug_level
2096
+ Qt.debug_level
2097
+ end
2098
+
2099
+ def Internal.checkarg(argtype, typename)
2100
+ puts " #{typename} (#{argtype})" if debug_level >= DebugLevel::High
2101
+ if argtype == 'i'
2102
+ if typename =~ /^int&?$|^signed int&?$|^signed$|^qint32&?$|^quint32&?$/
2103
+ return 2
2104
+ elsif typename =~ /^(?:short|ushort|unsigned short int|uchar|uint|long|ulong|unsigned long int|unsigned|float|double|WId|Q_PID|^quint16&?$|^qint16&?$)$/
2105
+ return 1
2106
+ elsif typename =~ /^(quint|qint|qulong|qlong|qreal)/
2107
+ return 1
2108
+ else
2109
+ t = typename.sub(/^const\s+/, '')
2110
+ t.sub!(/[&*]$/, '')
2111
+ if isEnum(t)
2112
+ return 0
2113
+ end
2114
+ end
2115
+ elsif argtype == 'n'
2116
+ if typename =~ /^double$|^qreal$/
2117
+ return 2
2118
+ elsif typename =~ /^float$/
2119
+ return 1
2120
+ elsif typename =~ /^int&?$/
2121
+ return 0
2122
+ elsif typename =~ /^(?:short|ushort|uint|long|ulong|signed|unsigned|float|double)$/
2123
+ return 0
2124
+ else
2125
+ t = typename.sub(/^const\s+/, '')
2126
+ t.sub!(/[&*]$/, '')
2127
+ if isEnum(t)
2128
+ return 0
2129
+ end
2130
+ end
2131
+ elsif argtype == 'B'
2132
+ if typename =~ /^(?:bool)[*&]?$/
2133
+ return 0
2134
+ end
2135
+ elsif argtype == 's'
2136
+ if typename =~ /^(const )?((QChar)[*&]?)$/
2137
+ return 1
2138
+ elsif typename =~ /^(?:u?char\*|const u?char\*|(?:const )?(Q(C?)String)[*&]?)$/
2139
+ qstring = !$1.nil?
2140
+ c = ("C" == $2)
2141
+ return c ? 2 : (qstring ? 3 : 0)
2142
+ end
2143
+ elsif argtype == 'a'
2144
+ # FIXME: shouldn't be hardcoded. Installed handlers should tell what ruby type they expect.
2145
+ if typename =~ /^(?:
2146
+ const\ QCOORD\*|
2147
+ (?:const\ )?
2148
+ (?:
2149
+ QStringList[\*&]?|
2150
+ QValueList<int>[\*&]?|
2151
+ QRgb\*|
2152
+ char\*\*
2153
+ )
2154
+ )$/x
2155
+ return 0
2156
+ end
2157
+ elsif argtype == 'u'
2158
+ # Give nil matched against string types a higher score than anything else
2159
+ if typename =~ /^(?:u?char\*|const u?char\*|(?:const )?((Q(C?)String))[*&]?)$/
2160
+ return 1
2161
+ # Numerics will give a runtime conversion error, so they fail the match
2162
+ elsif typename =~ /^(?:short|ushort|uint|long|ulong|signed|unsigned|int)$/
2163
+ return -99
2164
+ else
2165
+ return 0
2166
+ end
2167
+ elsif argtype == 'U'
2168
+ if typename =~ /QStringList/
2169
+ return 1
2170
+ else
2171
+ return 0
2172
+ end
2173
+ else
2174
+ t = typename.sub(/^const\s+/, '')
2175
+ t.sub!(/[&*]$/, '')
2176
+ if argtype == t
2177
+ return 1
2178
+ elsif classIsa(argtype, t)
2179
+ return 0
2180
+ elsif isEnum(argtype) and
2181
+ (t =~ /int|qint32|uint|quint32|long|ulong/ or isEnum(t))
2182
+ return 0
2183
+ end
2184
+ end
2185
+ return -99
2186
+ end
2187
+
2188
+ def Internal.find_class(classname)
2189
+ # puts @@classes.keys.sort.join "\n"
2190
+ @@classes[classname]
2191
+ end
2192
+
2193
+ # Runs the initializer as far as allocating the Qt C++ instance.
2194
+ # Then use a throw to jump back to here with the C++ instance
2195
+ # wrapped in a new ruby variable of type T_DATA
2196
+ def Internal.try_initialize(instance, *args)
2197
+ initializer = instance.method(:initialize)
2198
+ catch "newqt" do
2199
+ initializer.call(*args)
2200
+ end
2201
+ end
2202
+
2203
+ # If a block was passed to the constructor, then
2204
+ # run that now. Either run the context of the new instance
2205
+ # if no args were passed to the block. Or otherwise,
2206
+ # run the block in the context of the arg.
2207
+ def Internal.run_initializer_block(instance, block)
2208
+ if block.arity == -1
2209
+ instance.instance_eval(&block)
2210
+ elsif block.arity == 1
2211
+ block.call(instance)
2212
+ else
2213
+ raise ArgumentError, "Wrong number of arguments to block(#{block.arity} for 1)"
2214
+ end
2215
+ end
2216
+
2217
+ def Internal.do_method_missing(package, method, klass, this, *args)
2218
+ if klass.class == Module
2219
+ classname = klass.name
2220
+ else
2221
+ classname = @@cpp_names[klass.name]
2222
+ if classname.nil?
2223
+ if klass != Object and klass != Qt
2224
+ return do_method_missing(package, method, klass.superclass, this, *args)
2225
+ else
2226
+ return nil
2227
+ end
2228
+ end
2229
+ end
2230
+
2231
+ if method == "new"
2232
+ method = classname.dup
2233
+ method.gsub!(/^(QTextLayout|KParts|KIO|KNS|DOM|Kontact|Kate|KTextEditor|KConfigSkeleton::ItemEnum|KConfigSkeleton|KWin)::/,"")
2234
+ end
2235
+ method = "operator" + method.sub("@","") if method !~ /[a-zA-Z]+/
2236
+ # Change foobar= to setFoobar()
2237
+ method = 'set' + method[0,1].upcase + method[1,method.length].sub("=", "") if method =~ /.*[^-+%\/|=]=$/ && method != 'operator='
2238
+
2239
+ methods = []
2240
+ methods << method.dup
2241
+ args.each do |arg|
2242
+ if arg.nil?
2243
+ # For each nil arg encountered, triple the number of munged method
2244
+ # templates, in order to cover all possible types that can match nil
2245
+ temp = []
2246
+ methods.collect! do |meth|
2247
+ temp << meth + '?'
2248
+ temp << meth + '#'
2249
+ meth << '$'
2250
+ end
2251
+ methods.concat(temp)
2252
+ elsif isObject(arg)
2253
+ methods.collect! { |meth| meth << '#' }
2254
+ elsif arg.kind_of? Array or arg.kind_of? Hash
2255
+ methods.collect! { |meth| meth << '?' }
2256
+ else
2257
+ methods.collect! { |meth| meth << '$' }
2258
+ end
2259
+ end
2260
+
2261
+ methodIds = []
2262
+ methods.collect { |meth| methodIds.concat( findMethod(classname, meth) ) }
2263
+
2264
+ if method =~ /_/ && methodIds.length == 0
2265
+ # If the method name contains underscores, convert to camel case
2266
+ # form and try again
2267
+ method.gsub!(/(.)_(.)/) {$1 + $2.upcase}
2268
+ return do_method_missing(package, method, klass, this, *args)
2269
+ end
2270
+
2271
+ if debug_level >= DebugLevel::High
2272
+ puts "classname == #{classname}"
2273
+ puts ":: method == #{method}"
2274
+ puts "-> methodIds == #{methodIds.inspect}"
2275
+ puts "candidate list:"
2276
+ prototypes = dumpCandidates(methodIds).split("\n")
2277
+ line_len = (prototypes.collect { |p| p.length }).max
2278
+ prototypes.zip(methodIds) {
2279
+ |prototype,id| puts "#{prototype.ljust line_len} (#{id})"
2280
+ }
2281
+ end
2282
+
2283
+ chosen = nil
2284
+ if methodIds.length > 0
2285
+ best_match = -1
2286
+ methodIds.each do
2287
+ |id|
2288
+ puts "matching => #{id}" if debug_level >= DebugLevel::High
2289
+ current_match = 0
2290
+ (0...args.length).each do
2291
+ |i|
2292
+ current_match += checkarg( getVALUEtype(args[i]), getTypeNameOfArg(id, i) )
2293
+ end
2294
+
2295
+ # Note that if current_match > best_match, then chosen must be nil
2296
+ if current_match > best_match
2297
+ best_match = current_match
2298
+ chosen = id
2299
+ # Multiple matches are an error; the equality test below _cannot_ be commented out.
2300
+ # If ambiguous matches occur the problem must be fixed be adjusting the relative
2301
+ # ranking of the arg types involved in checkarg().
2302
+ elsif current_match == best_match
2303
+ chosen = nil
2304
+ end
2305
+ puts "match => #{id} score: #{current_match}" if debug_level >= DebugLevel::High
2306
+ end
2307
+
2308
+ puts "Resolved to id: #{chosen}" if !chosen.nil? && debug_level >= DebugLevel::High
2309
+ end
2310
+
2311
+ if debug_level >= DebugLevel::Minimal && chosen.nil? && method !~ /^operator/
2312
+ id = find_pclassid(normalize_classname(klass.name))
2313
+ hash = findAllMethods(id)
2314
+ constructor_names = nil
2315
+ if method == classname
2316
+ puts "No matching constructor found, possibles:\n"
2317
+ constructor_names = hash.keys.grep(/^#{classname}/)
2318
+ else
2319
+ puts "Possible prototypes:"
2320
+ constructor_names = hash.keys
2321
+ end
2322
+ method_ids = hash.values_at(*constructor_names).flatten
2323
+ puts dumpCandidates(method_ids)
2324
+ end
2325
+
2326
+ puts "setCurrentMethod(#{chosen})" if debug_level >= DebugLevel::High
2327
+ setCurrentMethod(chosen) if chosen
2328
+ return nil
2329
+ end
2330
+
2331
+ def Internal.init_all_classes()
2332
+ Qt::Internal::getClassList().each do |c|
2333
+ if c == "Qt"
2334
+ # Don't change Qt to Qt::t, just leave as is
2335
+ @@cpp_names["Qt"] = c
2336
+ elsif c != "QInternal"
2337
+ Qt::Internal::init_class(c)
2338
+ end
2339
+ end
2340
+
2341
+ @@classes['Qt::Integer'] = Qt::Integer
2342
+ @@classes['Qt::Boolean'] = Qt::Boolean
2343
+ @@classes['Qt::Enum'] = Qt::Enum
2344
+ end
2345
+
2346
+ def Internal.get_qinteger(num)
2347
+ return num.value
2348
+ end
2349
+
2350
+ def Internal.set_qinteger(num, val)
2351
+ return num.value = val
2352
+ end
2353
+
2354
+ def Internal.create_qenum(num, type)
2355
+ return Qt::Enum.new(num, type)
2356
+ end
2357
+
2358
+ def Internal.get_qenum_type(e)
2359
+ return e.type
2360
+ end
2361
+
2362
+ def Internal.get_qboolean(b)
2363
+ return b.value
2364
+ end
2365
+
2366
+ def Internal.set_qboolean(b, val)
2367
+ return b.value = val
2368
+ end
2369
+
2370
+ def Internal.getAllParents(class_id, res)
2371
+ getIsa(class_id).each do |s|
2372
+ c = idClass(s)
2373
+ res << c
2374
+ getAllParents(c, res)
2375
+ end
2376
+ end
2377
+
2378
+ def Internal.signalInfo(qobject, signal_name)
2379
+ signals = Meta[qobject.class.name].get_signals
2380
+ signals.each_with_index do |signal, i|
2381
+ if signal.name == signal_name
2382
+ return [signal.reply_type, signal.full_name, i]
2383
+ end
2384
+ end
2385
+ end
2386
+
2387
+ def Internal.getMocArguments(reply_type, member)
2388
+ argStr = member.sub(/.*\(/, '').sub(/\)$/, '')
2389
+ args = argStr.scan(/([^,]*<[^>]+>)|([^,]+)/)
2390
+ args.unshift reply_type
2391
+ mocargs = allocateMocArguments(args.length)
2392
+ args.each_with_index do |arg, i|
2393
+ arg = arg.to_s
2394
+ a = arg.sub(/^const\s+/, '')
2395
+ a = (a =~ /^(bool|int|double|char\*|QString)&?$/) ? $1 : 'ptr'
2396
+ valid = setMocType(mocargs, i, arg, a)
2397
+ end
2398
+ result = []
2399
+ result << args.length << mocargs
2400
+ result
2401
+ end
2402
+
2403
+ #
2404
+ # From the enum MethodFlags in qt-copy/src/tools/moc/generator.cpp
2405
+ #
2406
+ AccessPrivate = 0x00
2407
+ AccessProtected = 0x01
2408
+ AccessPublic = 0x02
2409
+ MethodMethod = 0x00
2410
+ MethodSignal = 0x04
2411
+ MethodSlot = 0x08
2412
+ MethodCompatibility = 0x10
2413
+ MethodCloned = 0x20
2414
+ MethodScriptable = 0x40
2415
+
2416
+ # Keeps a hash of strings against their corresponding offsets
2417
+ # within the qt_meta_stringdata sequence of null terminated
2418
+ # strings. Returns a proc to get an offset given a string.
2419
+ # That proc also adds new strings to the 'data' array, and updates
2420
+ # the corresponding 'pack_str' Array#pack template.
2421
+ def Internal.string_table_handler(data, pack_str)
2422
+ hsh = {}
2423
+ offset = 0
2424
+ return lambda do |str|
2425
+ if !hsh.has_key? str
2426
+ hsh[str] = offset
2427
+ data << str
2428
+ pack_str << "a*x"
2429
+ offset += str.length + 1
2430
+ end
2431
+
2432
+ return hsh[str]
2433
+ end
2434
+ end
2435
+
2436
+ def Internal.makeMetaData(classname, classinfos, dbus, signals, slots)
2437
+ # Each entry in 'stringdata' corresponds to a string in the
2438
+ # qt_meta_stringdata_<classname> structure.
2439
+ # 'pack_string' is used to convert 'stringdata' into the
2440
+ # binary sequence of null terminated strings for the metaObject
2441
+ stringdata = []
2442
+ pack_string = ""
2443
+ string_table = string_table_handler(stringdata, pack_string)
2444
+
2445
+ # This is used to create the array of uints that make up the
2446
+ # qt_meta_data_<classname> structure in the metaObject
2447
+ data = [1, # revision
2448
+ string_table.call(classname), # classname
2449
+ classinfos.length, classinfos.length > 0 ? 10 : 0, # classinfo
2450
+ signals.length + slots.length,
2451
+ 10 + (2*classinfos.length), # methods
2452
+ 0, 0, # properties
2453
+ 0, 0] # enums/sets
2454
+
2455
+ classinfos.each do |entry|
2456
+ data.push string_table.call(entry[0]) # key
2457
+ data.push string_table.call(entry[1]) # value
2458
+ end
2459
+
2460
+ signals.each do |entry|
2461
+ data.push string_table.call(entry.full_name) # signature
2462
+ data.push string_table.call(entry.full_name.delete("^,")) # parameters
2463
+ data.push string_table.call(entry.reply_type) # type, "" means void
2464
+ data.push string_table.call("") # tag
2465
+ if dbus
2466
+ data.push MethodScriptable | MethodSignal | AccessPublic
2467
+ else
2468
+ data.push MethodSignal | AccessProtected # flags, always protected for now
2469
+ end
2470
+ end
2471
+
2472
+ slots.each do |entry|
2473
+ data.push string_table.call(entry.full_name) # signature
2474
+ data.push string_table.call(entry.full_name.delete("^,")) # parameters
2475
+ data.push string_table.call(entry.reply_type) # type, "" means void
2476
+ data.push string_table.call("") # tag
2477
+ if dbus
2478
+ data.push MethodScriptable | MethodSlot | AccessPublic # flags, always public for now
2479
+ else
2480
+ data.push MethodSlot | AccessPublic # flags, always public for now
2481
+ end
2482
+ end
2483
+
2484
+ data.push 0 # eod
2485
+
2486
+ return [stringdata.pack(pack_string), data]
2487
+ end
2488
+
2489
+ def Internal.getMetaObject(klass, qobject)
2490
+ if klass.nil?
2491
+ klass = qobject.class
2492
+ end
2493
+
2494
+ parentMeta = nil
2495
+ if @@cpp_names[klass.superclass.name].nil?
2496
+ parentMeta = getMetaObject(klass.superclass, qobject)
2497
+ end
2498
+
2499
+ meta = Meta[klass.name]
2500
+ if meta.nil?
2501
+ meta = Qt::MetaInfo.new(klass)
2502
+ end
2503
+
2504
+ if meta.metaobject.nil? or meta.changed
2505
+ stringdata, data = makeMetaData( qobject.class.name,
2506
+ meta.classinfos,
2507
+ meta.dbus,
2508
+ meta.signals,
2509
+ meta.slots )
2510
+ meta.metaobject = make_metaObject(qobject, parentMeta, stringdata, data)
2511
+ meta.changed = false
2512
+ end
2513
+
2514
+ meta.metaobject
2515
+ end
2516
+
2517
+ def Internal.connect(src, signal, target, block)
2518
+ args = (signal =~ /\((.*)\)/) ? $1 : ""
2519
+ signature = Qt::MetaObject.normalizedSignature("invoke(%s)" % args).to_s
2520
+ return Qt::Object.connect( src,
2521
+ signal,
2522
+ Qt::BlockInvocation.new(target, block, signature),
2523
+ SLOT(signature) )
2524
+ end
2525
+
2526
+ def Internal.signal_connect(src, signal, block)
2527
+ args = (signal =~ /\((.*)\)/) ? $1 : ""
2528
+ signature = Qt::MetaObject.normalizedSignature("invoke(%s)" % args).to_s
2529
+ return Qt::Object.connect( src,
2530
+ signal,
2531
+ Qt::SignalBlockInvocation.new(src, block, signature),
2532
+ SLOT(signature) )
2533
+ end
2534
+ end # Qt::Internal
2535
+
2536
+ Meta = {}
2537
+
2538
+ # An entry for each signal or slot
2539
+ # Example
2540
+ # int foobar(QString,bool)
2541
+ # :name is 'foobar'
2542
+ # :full_name is 'foobar(QString,bool)'
2543
+ # :arg_types is 'QString,bool'
2544
+ # :reply_type is 'int'
2545
+ QObjectMember = Struct.new :name, :full_name, :arg_types, :reply_type
2546
+
2547
+ class MetaInfo
2548
+ attr_accessor :classinfos, :dbus, :signals, :slots, :metaobject, :mocargs, :changed
2549
+
2550
+ def initialize(klass)
2551
+ Meta[klass.name] = self
2552
+ @klass = klass
2553
+ @metaobject = nil
2554
+ @signals = []
2555
+ @slots = []
2556
+ @classinfos = []
2557
+ @dbus = false
2558
+ @changed = false
2559
+ Internal.addMetaObjectMethods(klass)
2560
+ end
2561
+
2562
+ def add_signals(signal_list)
2563
+ signal_names = []
2564
+ signal_list.each do |signal|
2565
+ if signal.kind_of? Symbol
2566
+ signal = signal.to_s + "()"
2567
+ end
2568
+ signal = Qt::MetaObject.normalizedSignature(signal).to_s
2569
+ if signal =~ /^(([\w,<>:]*)\s+)?([^\s]*)\((.*)\)/
2570
+ @signals.push QObjectMember.new($3, $3 + "(" + $4 + ")", $4, ($2 == 'void' || $2.nil?) ? "" : $2)
2571
+ signal_names << $3
2572
+ else
2573
+ qWarning( "#{@klass.name}: Invalid signal format: '#{signal}'" )
2574
+ end
2575
+ end
2576
+ Internal.addSignalMethods(@klass, signal_names)
2577
+ end
2578
+
2579
+ # Return a list of signals, including inherited ones
2580
+ def get_signals
2581
+ all_signals = []
2582
+ current = @klass
2583
+ while current != Qt::Base
2584
+ meta = Meta[current.name]
2585
+ if !meta.nil?
2586
+ all_signals.concat meta.signals
2587
+ end
2588
+ current = current.superclass
2589
+ end
2590
+ return all_signals
2591
+ end
2592
+
2593
+ def add_slots(slot_list)
2594
+ slot_list.each do |slot|
2595
+ if slot.kind_of? Symbol
2596
+ slot = slot.to_s + "()"
2597
+ end
2598
+ slot = Qt::MetaObject.normalizedSignature(slot).to_s
2599
+ if slot =~ /^(([\w,<>:]*)\s+)?([^\s]*)\((.*)\)/
2600
+ @slots.push QObjectMember.new($3, $3 + "(" + $4 + ")", $4, ($2 == 'void' || $2.nil?) ? "" : $2)
2601
+ else
2602
+ qWarning( "#{@klass.name}: Invalid slot format: '#{slot}'" )
2603
+ end
2604
+ end
2605
+ end
2606
+
2607
+ def add_classinfo(key, value)
2608
+ @classinfos.push [key, value]
2609
+ if key == 'D-Bus Interface'
2610
+ @dbus = true
2611
+ end
2612
+ end
2613
+ end # Qt::MetaInfo
2614
+
2615
+ # These values are from the enum WindowType in qnamespace.h.
2616
+ # Some of the names such as 'Qt::Dialog', clash with QtRuby
2617
+ # class names. So add some constants here to use instead,
2618
+ # renamed with an ending of 'Type'.
2619
+ WidgetType = 0x00000000
2620
+ WindowType = 0x00000001
2621
+ DialogType = 0x00000002 | WindowType
2622
+ SheetType = 0x00000004 | WindowType
2623
+ DrawerType = 0x00000006 | WindowType
2624
+ PopupType = 0x00000008 | WindowType
2625
+ ToolType = 0x0000000a | WindowType
2626
+ ToolTipType = 0x0000000c | WindowType
2627
+ SplashScreenType = 0x0000000e | WindowType
2628
+ DesktopType = 0x00000010 | WindowType
2629
+ SubWindowType = 0x00000012
2630
+
2631
+ end # Qt
2632
+
2633
+ class Object
2634
+ def SIGNAL(signal)
2635
+ if signal.kind_of? Symbol
2636
+ return "2" + signal.to_s + "()"
2637
+ else
2638
+ return "2" + signal
2639
+ end
2640
+ end
2641
+
2642
+ def SLOT(slot)
2643
+ if slot.kind_of? Symbol
2644
+ return "1" + slot.to_s + "()"
2645
+ else
2646
+ return "1" + slot
2647
+ end
2648
+ end
2649
+
2650
+ def emit(signal)
2651
+ return signal
2652
+ end
2653
+
2654
+ def QT_TR_NOOP(x) x end
2655
+ def QT_TRANSLATE_NOOP(scope, x) x end
2656
+
2657
+ # See the discussion here: http://eigenclass.org/hiki.rb?instance_exec
2658
+ # about implementations of the ruby 1.9 method instance_exec(). This
2659
+ # version is the one from Rails. It isn't thread safe, but that doesn't
2660
+ # matter for the intended use in invoking blocks as Qt slots.
2661
+ def instance_exec(*arguments, &block)
2662
+ block.bind(self)[*arguments]
2663
+ end
2664
+ end
2665
+
2666
+ class Proc
2667
+ # Part of the Rails Object#instance_exec implementation
2668
+ def bind(object)
2669
+ block, time = self, Time.now
2670
+ (class << object; self end).class_eval do
2671
+ method_name = "__bind_#{time.to_i}_#{time.usec}"
2672
+ define_method(method_name, &block)
2673
+ method = instance_method(method_name)
2674
+ remove_method(method_name)
2675
+ method
2676
+ end.bind(object)
2677
+ end
2678
+ end
2679
+
2680
+ class Module
2681
+ alias_method :_constants, :constants
2682
+ alias_method :_instance_methods, :instance_methods
2683
+ alias_method :_protected_instance_methods, :protected_instance_methods
2684
+ alias_method :_public_instance_methods, :public_instance_methods
2685
+
2686
+ private :_constants, :_instance_methods
2687
+ private :_protected_instance_methods, :_public_instance_methods
2688
+
2689
+ def constants
2690
+ qt_methods(_constants, 0x10, true)
2691
+ end
2692
+
2693
+ def instance_methods(inc_super=true)
2694
+ qt_methods(_instance_methods(inc_super), 0x0, inc_super)
2695
+ end
2696
+
2697
+ def protected_instance_methods(inc_super=true)
2698
+ qt_methods(_protected_instance_methods(inc_super), 0x80, inc_super)
2699
+ end
2700
+
2701
+ def public_instance_methods(inc_super=true)
2702
+ qt_methods(_public_instance_methods(inc_super), 0x0, inc_super)
2703
+ end
2704
+
2705
+ private
2706
+ def qt_methods(meths, flags, inc_super=true)
2707
+ if !self.kind_of? Class
2708
+ return meths
2709
+ end
2710
+
2711
+ klass = self
2712
+ classid = 0
2713
+ loop do
2714
+ classid = Qt::Internal::find_pclassid(klass.name)
2715
+ break if classid > 0
2716
+
2717
+ klass = klass.superclass
2718
+ if klass.nil?
2719
+ return meths
2720
+ end
2721
+ end
2722
+
2723
+ # These methods are all defined in Qt::Base, even if they aren't supported by a particular
2724
+ # subclass, so remove them to avoid confusion
2725
+ meths -= ["%", "&", "*", "**", "+", "-", "-@", "/", "<", "<<", "<=", ">", ">=", ">>", "|", "~", "^"]
2726
+ ids = []
2727
+ if inc_super
2728
+ Qt::Internal::getAllParents(classid, ids)
2729
+ end
2730
+ ids << classid
2731
+ ids.each { |c| Qt::Internal::findAllMethodNames(meths, c, flags) }
2732
+ return meths.uniq
2733
+ end
2734
+ end