add more spacing
[personal-kdebase.git] / workspace / plasma / scriptengines / ruby / applet.rb
blobef2b608a88d800b3cb8d40847dbe55eebdf5b325
1 =begin
2  *   Copyright 2008 by Richard Dale <richard.j.dale@gmail.com>
3  *
4  *   This program is free software; you can redistribute it and/or modify
5  *   it under the terms of the GNU Library General Public License as
6  *   published by the Free Software Foundation; either version 2, or
7  *   (at your option) any later version.
8  *
9  *   This program is distributed in the hope that it will be useful,
10  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *   GNU General Public License for more details
13  *
14  *   You should have received a copy of the GNU Library General Public
15  *   License along with this program; if not, write to the
16  *   Free Software Foundation, Inc.,
17  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18 =end
20 require 'plasma_applet'
22 module PlasmaScripting
23   class Applet < Qt::Object
24   slots  "setImmutability(Plasma::ImmutabilityType)",
25             :destroy,
26             :showConfigurationInterface,
27             :raise,
28             :lower,
29             :flushPendingConstraintsEvents,
30             :init
32     signals :releaseVisualFocus,
33             :geometryChanged,
34             :configNeedsSaving,
35             :activate
37     attr_accessor :applet_script
39     def initialize(parent, args = nil)
40       super(parent)
41       @applet_script = parent
42       connect(@applet_script.applet, SIGNAL(:releaseVisualFocus), self, SIGNAL(:releaseVisualFocus))
43       connect(@applet_script.applet, SIGNAL(:geometryChanged), self, SIGNAL(:geometryChanged))
44       connect(@applet_script.applet, SIGNAL(:configNeedsSaving), self, SIGNAL(:configNeedsSaving))
45       connect(@applet_script.applet, SIGNAL(:activate), self, SIGNAL(:activate))
46     end
48     # If a method is called on a PlasmaScripting::Applet instance is found to be missing
49     # then try calling the method on the underlying Plasma::Applet in the ScriptEngine.
50     def method_missing(method, *args)
51       begin
52         super(method, *args)
53       rescue
54         applet_script.applet.method_missing(method, *args)
55       end
56     end
58     def self.const_missing(name)
59       begin
60         super(name)
61       rescue
62         Plasma::Applet.const_missing(name)
63       end
64     end
66     def paintInterface(painter, option, contentsRect)
67     end
69     def size
70       @applet_script.size
71     end
73     def shape
74       @applet_script.shape
75     end
77     def constraintsEvent(constraints)
78     end
80     def contextualActions
81       return []
82     end
84     def createConfigurationInterface(dialog)
85     end
87     def showConfigurationInterface
88         dialogId = "#{@applet_script.applet.id}settings#{@applet_script.applet.name}"
89         windowTitle = KDE::i18nc("@title:window", "%s Settings" % @applet_script.applet.name)
90         @nullManager = KDE::ConfigSkeleton.new(nil)
91         @dialog = KDE::ConfigDialog.new(nil, dialogId, @nullManager)
92         @dialog.faceType = KDE::PageDialog::Auto
93         @dialog.windowTitle = windowTitle
94         @dialog.setAttribute(Qt::WA_DeleteOnClose, true)
95         createConfigurationInterface(@dialog)
96         # TODO: would be nice to not show dialog if there are no pages added?
97         # Don't connect to the deleteLater() slot in Ruby as it causes crashes
98         # connect(@dialog, SIGNAL(:finished), @nullManager, SLOT(:deleteLater))
99         # TODO: Apply button does not correctly work for now, so do not show it
100         @dialog.showButton(KDE::Dialog::Apply, false)
101         @dialog.show
102     end
104     def dataEngine(engine)
105       @applet_script.dataEngine(engine)
106     end
108     def package
109       @applet_script.package
110     end
112     def setImmutability(immutabilityType)
113       @applet_script.applet.setImmutability(immutabilityType)
114     end
116     def immutability=(immutabilityType)
117       setImmutability(immutabilityType)
118     end
120     def destroy
121       @applet_script.applet.destroy
122     end
124     def raise
125       @applet_script.applet.raise
126     end
128     def lower
129       @applet_script.applet.lower
130     end
132     def flushPendingConstraintsEvents
133       @applet_script.applet.flushPendingConstraintsEvents
134     end
135   end
138 module PlasmaScriptengineRuby
139   class Applet < Plasma::AppletScript
140     def initialize(parent, args)
141       super(parent)
142     end
144     def camelize(str)
145       str.gsub(/(^|[_-])(.)/) { $2.upcase }
146     end
148     def init
149       oldSize = applet.size
151       puts "RubyAppletScript::Applet#init mainScript: #{mainScript}"
152       program = Qt::FileInfo.new(mainScript)
153       $: << program.path
154       load Qt::File.encodeName(program.filePath).to_s
155       moduleName = camelize(Qt::Dir.new(package.path).dirName)
156       className = camelize(program.baseName)
157       puts "RubyAppletScript::Applet#init instantiating: #{moduleName}::#{className}"
158       klass = Object.const_get(moduleName.to_sym).const_get(className.to_sym)
159       @applet_script = klass.new(self)
160       @applet_script.init
161       if oldSize.height > 10 && oldSize.width > 10
162         applet.resize(oldSize)
163       end
165       set_up_event_handlers
166       return true
167     end
169     def paintInterface(painter, option, contentsRect)
170       @applet_script.paintInterface(painter, option, contentsRect)
171     end
173     def constraintsEvent(constraints)
174       @applet_script.constraintsEvent(constraints)
175     end
177     def contextualActions
178       @applet_script.contextualActions
179     end
181     def showConfigurationInterface
182       @applet_script.showConfigurationInterface
183     end
185     protected
187     def eventFilter(obj, event)
188       handler = @event_handlers[event.type.to_i]
189       if handler
190         @applet_script.send(handler, event)
191         return true
192       else
193         return false
194       end
195     end
197     private
199     def set_up_event_handlers
200       @event_handlers = {}
202       if @applet_script.respond_to?(:mousePressEvent)
203         @event_handlers[Qt::Event::GraphicsSceneMousePress.to_i] = :mousePressEvent
204       end
206       if @applet_script.respond_to?(:contextMenuEvent)
207         @event_handlers[Qt::Event::GraphicsSceneContextMenu.to_i] = :contextMenuEvent
208       end
210       if @applet_script.respond_to?(:dragEnterEvent)
211         @event_handlers[Qt::Event::GraphicsSceneDragEnter.to_i] = :dragEnterEvent
212       end
214       if @applet_script.respond_to?(:dragLeaveEvent)
215         @event_handlers[Qt::Event::GraphicsSceneDragLeave.to_i] = :dragLeaveEvent
216       end
218       if @applet_script.respond_to?(:dragMoveEvent)
219         @event_handlers[Qt::Event::GraphicsSceneDragMove.to_i] = :dragMoveEvent
220       end
222       if @applet_script.respond_to?(:dropEvent)
223         @event_handlers[Qt::Event::GraphicsSceneDrop.to_i] = :dropEvent
224       end
226       if @applet_script.respond_to?(:focusInEvent)
227         @event_handlers[Qt::Event::FocusIn.to_i] = :focusInEvent
228       end
230       if @applet_script.respond_to?(:focusOutEvent)
231         @event_handlers[Qt::Event::FocusOut.to_i] = :focusOutEvent
232       end
234       if @applet_script.respond_to?(:hoverEnterEvent)
235         @event_handlers[Qt::Event::GraphicsSceneHoverEnter.to_i] = :hoverEnterEvent
236       end
238       if @applet_script.respond_to?(:hoverLeaveEvent)
239         @event_handlers[Qt::Event::GraphicsSceneHoverLeave.to_i] = :hoverLeaveEvent
240       end
242       if @applet_script.respond_to?(:hoverMoveEvent)
243         @event_handlers[Qt::Event::GraphicsSceneHoverMove.to_i] = :hoverMoveEvent
244       end
246       if @applet_script.respond_to?(:inputMethodEvent)
247         @event_handlers[Qt::Event::InputMethod.to_i] = :inputMethodEvent
248       end
250       if @applet_script.respond_to?(:keyPressEvent)
251         @event_handlers[Qt::Event::KeyPress.to_i] = :keyPressEvent
252       end
254       if @applet_script.respond_to?(:keyReleaseEvent)
255         @event_handlers[Qt::Event::KeyRelease.to_i] = :keyReleaseEvent
256       end
258       if @applet_script.respond_to?(:mouseDoubleClickEvent)
259         @event_handlers[Qt::Event::GraphicsSceneMouseDoubleClick.to_i] = :mouseDoubleClickEvent
260       end
262       if @applet_script.respond_to?(:mouseMoveEvent)
263         @event_handlers[Qt::Event::GraphicsSceneMouseMove.to_i] = :mouseMoveEvent
264       end
266       if @applet_script.respond_to?(:mousePressEvent)
267         @event_handlers[Qt::Event::GraphicsSceneMousePress.to_i] = :mousePressEvent
268       end
270       if @applet_script.respond_to?(:mouseReleaseEvent)
271         @event_handlers[Qt::Event::GraphicsSceneMouseRelease.to_i] = :mouseReleaseEvent
272       end
274       if @applet_script.respond_to?(:wheelEvent)
275         @event_handlers[Qt::Event::GraphicsSceneWheel.to_i] = :wheelEvent
276       end
278       if !@event_handlers.empty?
279         applet.installEventFilter(self)
280       end
281     end
283   end
286 module Plasma
287   #
288   # Because a PlasmaScript::Applet is not actually a Plasma::Applet we
289   # need to 'cheat' in the api, to pretend that it is. So the constructors
290   # in the Plasma widget classes will substitute any PlasmaScript::Applet
291   # argument passed for the real Plasma::Applet in the ScriptEngine
292   #
294   class BusyWidget < Qt::Base
295     def initialize(parent = nil)
296       if parent.kind_of?(PlasmaScripting::Applet)
297         super(parent.applet_script.applet)
298       else
299         super
300       end
301     end
302   end
304   class CheckBox < Qt::Base
305     def initialize(parent = nil)
306       if parent.kind_of?(PlasmaScripting::Applet)
307         super(parent.applet_script.applet)
308       else
309         super
310       end
311     end
312   end
314   class ComboBox < Qt::Base
315     def initialize(parent = nil)
316       if parent.kind_of?(PlasmaScripting::Applet)
317         super(parent.applet_script.applet)
318       else
319         super
320       end
321     end
322   end
324   class Extender < Qt::Base
325     def initialize(parent = nil)
326       if parent.kind_of?(PlasmaScripting::Applet)
327         super(parent.applet_script.applet)
328       else
329         super
330       end
331     end
332   end
334   class FlashingLabel < Qt::Base
335     def initialize(parent = nil)
336       if parent.kind_of?(PlasmaScripting::Applet)
337         super(parent.applet_script.applet)
338       else
339         super
340       end
341     end
342   end
344   class Frame < Qt::Base
345     def initialize(parent = nil)
346       if parent.kind_of?(PlasmaScripting::Applet)
347         super(parent.applet_script.applet)
348       else
349         super
350       end
351     end
352   end
354   class GroupBox < Qt::Base
355     def initialize(parent = nil)
356       if parent.kind_of?(PlasmaScripting::Applet)
357         super(parent.applet_script.applet)
358       else
359         super
360       end
361     end
362   end
364   class IconWidget < Qt::Base
365     def initialize(*args)
366       sargs = []
367       for i in 0...args.length do
368         if args[i].kind_of?(PlasmaScripting::Applet)
369           sargs << args[i].applet_script.applet
370         else
371           sargs << args[i]
372         end
373       end
374       super(*sargs)
375     end
376   end
378   class Label < Qt::Base
379     def initialize(parent = nil)
380       if parent.kind_of?(PlasmaScripting::Applet)
381         super(parent.applet_script.applet)
382       else
383         super
384       end
385     end
386   end
388   class LineEdit < Qt::Base
389     def initialize(parent = nil)
390       if parent.kind_of?(PlasmaScripting::Applet)
391         super(parent.applet_script.applet)
392       else
393         super
394       end
395     end
396   end
398   class Meter < Qt::Base
399     def initialize(parent = nil)
400       if parent.kind_of?(PlasmaScripting::Applet)
401         super(parent.applet_script.applet)
402       else
403         super
404       end
405     end
406   end
408   class PushButton < Qt::Base
409     def initialize(parent = nil)
410       if parent.kind_of?(PlasmaScripting::Applet)
411         super(parent.applet_script.applet)
412       else
413         super
414       end
415     end
416   end
418   class RadioButton < Qt::Base
419     def initialize(parent = nil)
420       if parent.kind_of?(PlasmaScripting::Applet)
421         super(parent.applet_script.applet)
422       else
423         super
424       end
425     end
426   end
428   class ScrollBar < Qt::Base
429     def initialize(orientation, parent = nil)
430       if parent.kind_of?(PlasmaScripting::Applet)
431         super(orientation, parent.applet_script.applet)
432       else
433         super
434       end
435     end
436   end
438   class SignalPlotter < Qt::Base
439     def initialize(parent = nil)
440       if parent.kind_of?(PlasmaScripting::Applet)
441         super(parent.applet_script.applet)
442       else
443         super
444       end
445     end
446   end
448   class Slider < Qt::Base
449     def initialize(parent = nil)
450       if parent.kind_of?(PlasmaScripting::Applet)
451         super(parent.applet_script.applet)
452       else
453         super
454       end
455     end
456   end
458   class SvgWidget < Qt::Base
459     def initialize(*args)
460       if args.length > 0 && args[0].kind_of?(PlasmaScripting::Applet)
461         args[0] = args[0].applet_script.applet
462         super(*args)
463       elsif args.length > 2 && args[2].kind_of?(PlasmaScripting::Applet)
464         args[2] = args[2].applet_script.applet
465         super(*args)
466       else
467         super
468       end
469     end
470   end
472   class TabBar < Qt::Base
473     def initialize(parent = nil)
474       if parent.kind_of?(PlasmaScripting::Applet)
475         super(parent.applet_script.applet)
476       else
477         super
478       end
479     end
480   end
482   class TextEdit < Qt::Base
483     def initialize(parent = nil)
484       if parent.kind_of?(PlasmaScripting::Applet)
485         super(parent.applet_script.applet)
486       else
487         super
488       end
489     end
490   end
492   class TreeView < Qt::Base
493     def initialize(parent = nil)
494       if parent.kind_of?(PlasmaScripting::Applet)
495         super(parent.applet_script.applet)
496       else
497         super
498       end
499     end
500   end
502   class WebView < Qt::Base
503     def initialize(parent = nil)
504       if parent.kind_of?(PlasmaScripting::Applet)
505         super(parent.applet_script.applet)
506       else
507         super
508       end
509     end
510   end
514 module Qt
515   class GraphicsProxyWidget < Qt::Base
516     def initialize(parent = nil, wFlags = nil)
517       if parent.kind_of?(PlasmaScripting::Applet)
518         super(parent.applet_script.applet, wFlags)
519       else
520         super
521       end
522     end
524     def parentItem=(item)
525       setParentItem(item)
526     end
528     def setParentItem(item)
529       if item.kind_of?(PlasmaScripting::Applet)
530         super(item.applet_script.applet)
531       else
532         super
533       end
534     end
536     def type(*args)
537       method_missing(:type, *args)
538     end
539   end
541   class QAbstractGraphicsShapeItem < Qt::Base
542     def initialize(parent = nil, wFlags = nil)
543       if parent.kind_of?(PlasmaScripting::Applet)
544         super(parent.applet_script.applet, wFlags)
545       else
546         super
547       end
548     end
550     def parentItem=(item)
551       setParentItem(item)
552     end
554     def setParentItem(item)
555       if item.kind_of?(PlasmaScripting::Applet)
556         super(item.applet_script.applet)
557       else
558         super
559       end
560     end
562     def type(*args)
563       method_missing(:type, *args)
564     end
565   end
567   class GraphicsEllipseItem < Qt::Base
568     def initialize(parent = nil, wFlags = nil)
569       if parent.kind_of?(PlasmaScripting::Applet)
570         super(parent.applet_script.applet, wFlags)
571       else
572         super
573       end
574     end
576     def parentItem=(item)
577       setParentItem(item)
578     end
580     def setParentItem(item)
581       if item.kind_of?(PlasmaScripting::Applet)
582         super(item.applet_script.applet)
583       else
584         super
585       end
586     end
588     def type(*args)
589       method_missing(:type, *args)
590     end
591   end
593   class GraphicsItemGroup < Qt::Base
594     def initialize(parent = nil, wFlags = nil)
595       if parent.kind_of?(PlasmaScripting::Applet)
596         super(parent.applet_script.applet, wFlags)
597       else
598         super
599       end
600     end
602     def parentItem=(item)
603       setParentItem(item)
604     end
606     def setParentItem(item)
607       if item.kind_of?(PlasmaScripting::Applet)
608         super(item.applet_script.applet)
609       else
610         super
611       end
612     end
614     def type(*args)
615       method_missing(:type, *args)
616     end
617   end
619   class GraphicsLineItem < Qt::Base
620     def initialize(parent = nil, wFlags = nil)
621       if parent.kind_of?(PlasmaScripting::Applet)
622         super(parent.applet_script.applet, wFlags)
623       else
624         super
625       end
626     end
628     def parentItem=(item)
629       setParentItem(item)
630     end
632     def setParentItem(item)
633       if item.kind_of?(PlasmaScripting::Applet)
634         super(item.applet_script.applet)
635       else
636         super
637       end
638     end
640     def type(*args)
641       method_missing(:type, *args)
642     end
643   end
645   class GraphicsPathItem < Qt::Base
646     def initialize(parent = nil, wFlags = nil)
647       if parent.kind_of?(PlasmaScripting::Applet)
648         super(parent.applet_script.applet, wFlags)
649       else
650         super
651       end
652     end
654     def parentItem=(item)
655       setParentItem(item)
656     end
658     def setParentItem(item)
659       if item.kind_of?(PlasmaScripting::Applet)
660         super(item.applet_script.applet)
661       else
662         super
663       end
664     end
666     def type(*args)
667       method_missing(:type, *args)
668     end
669   end
671   class GraphicsPixmapItem < Qt::Base
672     def initialize(parent = nil, wFlags = nil)
673       if parent.kind_of?(PlasmaScripting::Applet)
674         super(parent.applet_script.applet, wFlags)
675       else
676         super
677       end
678     end
680     def parentItem=(item)
681       setParentItem(item)
682     end
684     def setParentItem(item)
685       if item.kind_of?(PlasmaScripting::Applet)
686         super(item.applet_script.applet)
687       else
688         super
689       end
690     end
692     def type(*args)
693       method_missing(:type, *args)
694     end
695   end
697   class GraphicsPolygonItem < Qt::Base
698     def initialize(parent = nil, wFlags = nil)
699       if parent.kind_of?(PlasmaScripting::Applet)
700         super(parent.applet_script.applet, wFlags)
701       else
702         super
703       end
704     end
706     def parentItem=(item)
707       setParentItem(item)
708     end
710     def setParentItem(item)
711       if item.kind_of?(PlasmaScripting::Applet)
712         super(item.applet_script.applet)
713       else
714         super
715       end
716     end
718     def type(*args)
719       method_missing(:type, *args)
720     end
721   end
723   class GraphicsRectItem < Qt::Base
724     def initialize(parent = nil, wFlags = nil)
725       if parent.kind_of?(PlasmaScripting::Applet)
726         super(parent.applet_script.applet, wFlags)
727       else
728         super
729       end
730     end
732     def parentItem=(item)
733       setParentItem(item)
734     end
736     def setParentItem(item)
737       if item.kind_of?(PlasmaScripting::Applet)
738         super(item.applet_script.applet)
739       else
740         super
741       end
742     end
744     def type(*args)
745       method_missing(:type, *args)
746     end
747   end
749   class GraphicsSimpleTextItem < Qt::Base
750     def initialize(parent = nil, wFlags = nil)
751       if parent.kind_of?(PlasmaScripting::Applet)
752         super(parent.applet_script.applet, wFlags)
753       else
754         super
755       end
756     end
758     def parentItem=(item)
759       setParentItem(item)
760     end
762     def setParentItem(item)
763       if item.kind_of?(PlasmaScripting::Applet)
764         super(item.applet_script.applet)
765       else
766         super
767       end
768     end
770     def type(*args)
771       method_missing(:type, *args)
772     end
773   end
775   class GraphicsSvgItem < Qt::Base
776     def initialize(parent = nil, wFlags = nil)
777       if parent.kind_of?(PlasmaScripting::Applet)
778         super(parent.applet_script.applet, wFlags)
779       else
780         super
781       end
782     end
784     def parentItem=(item)
785       setParentItem(item)
786     end
788     def setParentItem(item)
789       if item.kind_of?(PlasmaScripting::Applet)
790         super(item.applet_script.applet)
791       else
792         super
793       end
794     end
796     def type(*args)
797       method_missing(:type, *args)
798     end
799   end
801   class GraphicsTextItem < Qt::Base
802     def initialize(parent = nil, wFlags = nil)
803       if parent.kind_of?(PlasmaScripting::Applet)
804         super(parent.applet_script.applet, wFlags)
805       else
806         super
807       end
808     end
810     def parentItem=(item)
811       setParentItem(item)
812     end
814     def setParentItem(item)
815       if item.kind_of?(PlasmaScripting::Applet)
816         super(item.applet_script.applet)
817       else
818         super
819       end
820     end
822     def type(*args)
823       method_missing(:type, *args)
824     end
825   end
827   class GraphicsWidget < Qt::Base
828     def initialize(parent = nil, wFlags = nil)
829       if parent.kind_of?(PlasmaScripting::Applet)
830         super(parent.applet_script.applet, wFlags)
831       else
832         super
833       end
834     end
836     def parentItem=(item)
837       setParentItem(item)
838     end
840     def setParentItem(item)
841       if item.kind_of?(PlasmaScripting::Applet)
842         super(item.applet_script.applet)
843       else
844         super
845       end
846     end
848     def type(*args)
849       method_missing(:type, *args)
850     end
851   end
853   class GraphicsGridLayout < Qt::Base
854     def initialize(parent = nil)
855       if parent.kind_of?(PlasmaScripting::Applet)
856         super(parent.applet_script.applet)
857       else
858         super
859       end
860     end
862     def addItem(*args)
863       sargs = []
864       for i in 0...args.length do
865         if args[i].kind_of?(PlasmaScripting::Applet)
866           sargs << args[i].applet_script.applet
867         else
868           sargs << args[i]
869         end
870       end
871       super(*sargs)
872     end
874     def alignment(item)
875       if item.kind_of?(PlasmaScripting::Applet)
876         super(item.applet_script.applet)
877       else
878         super
879       end
880     end
882     def setAlignment(item, alignment)
883       if item.kind_of?(PlasmaScripting::Applet)
884         super(item.applet_script.applet, alignment)
885       else
886         super
887       end
888     end
889   end
891   class GraphicsLinearLayout < Qt::Base
892     def initialize(*args)
893       sargs = []
894       for i in 0...args.length do
895         if args[i].kind_of?(PlasmaScripting::Applet)
896           sargs << args[i].applet_script.applet
897         else
898           sargs << args[i]
899         end
900       end
901       super(*sargs)
902     end
904     def addItem(*args)
905       sargs = []
906       for i in 0...args.length do
907         if args[i].kind_of?(PlasmaScripting::Applet)
908           sargs << args[i].applet_script.applet
909         else
910           sargs << args[i]
911         end
912       end
913       super(*sargs)
914     end
916     def alignment(item)
917       if item.kind_of?(PlasmaScripting::Applet)
918         super(item.applet_script.applet)
919       else
920         super
921       end
922     end
924     def insertItem(index, item)
925       if item.kind_of?(PlasmaScripting::Applet)
926         super(index, item.applet_script.applet)
927       else
928         super
929       end
930     end
932     def setAlignment(item, alignment)
933       if item.kind_of?(PlasmaScripting::Applet)
934         super(item.applet_script.applet, alignment)
935       else
936         super
937       end
938     end
940     def setStretchFactor(item, stretch)
941       if item.kind_of?(PlasmaScripting::Applet)
942         super(item.applet_script.applet, stretch)
943       else
944         super
945       end
946     end
948     def stretchFactor(item)
949       if item.kind_of?(PlasmaScripting::Applet)
950         super(item.applet_script.applet)
951       else
952         super
953       end
954     end
955   end
958 # kate: space-indent on; indent-width 2; replace-tabs on; mixed-indent off;