From 4c804833cbad22230dbd42ce7d3f58d94970385a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EB=82=A8=ED=98=84?= Date: Tue, 27 Oct 2020 10:27:47 +0900 Subject: [PATCH] Update gtk.js --- lib/gtk.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/lib/gtk.js b/lib/gtk.js index 8e0d330..66d3a64 100644 --- a/lib/gtk.js +++ b/lib/gtk.js @@ -16,11 +16,57 @@ var GTKWidgets = {}; var GTKWidget = function() { this.widgetType = "GTKWidget"; this.widgetID = GTKCreateWidget(this); - this.onEventTriggered = function() {}; + + this.eventListener = GTKEventListener(this); + this.addEventListener = function(ev, fn) { + if (typeof(fn) == "function") { + this['on' + ev] = fn; + } else { + throw new TypeError("EventListener must be a function"); + } + }; GTKWidgets[this.widgetID] = this; }; +// definedEvents +var definedEvents = { + "Window" [ + "onload" + ], + "Table": [ + "onload" + ], + "Button": [ + "onload", + "onclick" + ], + "Entry": [ + "onload", + "onkeyup" + ] + "RadioBox": [ + "onload", + "onclick" + ], + "TextBox" [ + "onload" + ] +}; + +// GTKEventListener +var GTKEventListener = function(widget) { + if (widget.widgetType in definedEvents) { + var widgetEvents = definedEvents[widget.widgetType]; + for (var i = 0; i < widgetEvents.length; i++) { + var eventName = widgetEvents[i]; + if (eventName in widget && typeof(widget[eventName]) == "function") { + widget[eventName](); + } + } + } +}; + // GTKCreateElement var GTKCreateWidget = function(widget) { var widgetID, commands = []; @@ -269,7 +315,7 @@ var GTKWait = function(callback) { ]); if (even in GTKWidgets) { - GTKWidgets[even].onEventTriggered(); + GTKWidgets[even].eventListener(); } if (typeof(callback) == "function") {