source: trunk/design/ui/source/wui-widgets.adb

Last change on this file was 5743, checked in by vadim.godunko, 10 months ago

Move dispatchers of 'change' and 'input' events to Abstract_Widget.

  • Property svn:keywords set to Author Date Revision
File size: 7.7 KB
Line 
1------------------------------------------------------------------------------
2--                                                                          --
3--                            Matreshka Project                             --
4--                                                                          --
5--                               Web Framework                              --
6--                                                                          --
7--                        Runtime Library Component                         --
8--                                                                          --
9------------------------------------------------------------------------------
10--                                                                          --
11-- Copyright © 2016-2017, Vadim Godunko <vgodunko@gmail.com>                --
12-- All rights reserved.                                                     --
13--                                                                          --
14-- Redistribution and use in source and binary forms, with or without       --
15-- modification, are permitted provided that the following conditions       --
16-- are met:                                                                 --
17--                                                                          --
18--  * Redistributions of source code must retain the above copyright        --
19--    notice, this list of conditions and the following disclaimer.         --
20--                                                                          --
21--  * Redistributions in binary form must reproduce the above copyright     --
22--    notice, this list of conditions and the following disclaimer in the   --
23--    documentation and/or other materials provided with the distribution.  --
24--                                                                          --
25--  * Neither the name of the Vadim Godunko, IE nor the names of its        --
26--    contributors may be used to endorse or promote products derived from  --
27--    this software without specific prior written permission.              --
28--                                                                          --
29-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS      --
30-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT        --
31-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    --
32-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT     --
33-- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,   --
34-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED --
35-- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR   --
36-- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF   --
37-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING     --
38-- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS       --
39-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.             --
40--                                                                          --
41------------------------------------------------------------------------------
42--  $Revision: 5743 $ $Date: 2017-01-29 09:06:05 +0000 (Sun, 29 Jan 2017) $
43------------------------------------------------------------------------------
44with WebAPI.DOM.Event_Targets;
45with WebAPI.UI_Events.Mouse;
46with WebAPI.UI_Events.Wheel;
47
48package body WUI.Widgets is
49
50   ------------------
51   -- Constructors --
52   ------------------
53
54   package body Constructors is
55
56      ----------------
57      -- Initialize --
58      ----------------
59
60      procedure Initialize
61       (Self    : in out Abstract_Widget'Class;
62        Element : not null WebAPI.HTML.Elements.HTML_Element_Access) is
63      begin
64         Self.Element := Element;
65
66         --  Connect event dispatchers.
67
68         WebAPI.DOM.Event_Targets.Add_Event_Listener
69          (Element, +"change", Self.Change'Access, False);
70         WebAPI.DOM.Event_Targets.Add_Event_Listener
71          (Element, +"click", Self.Click'Access, False);
72         WebAPI.DOM.Event_Targets.Add_Event_Listener
73          (Element, +"input", Self.Input'Access, False);
74         WebAPI.DOM.Event_Targets.Add_Event_Listener
75          (Element, +"mousemove", Self.Mouse_Move'Access, False);
76         WebAPI.DOM.Event_Targets.Add_Event_Listener
77          (Element, +"mousedown", Self.Mouse_Down'Access, False);
78         WebAPI.DOM.Event_Targets.Add_Event_Listener
79          (Element, +"mouseup", Self.Mouse_Up'Access, False);
80         WebAPI.DOM.Event_Targets.Add_Event_Listener
81          (Element, +"wheel", Self.Wheel'Access, False);
82      end Initialize;
83
84   end Constructors;
85
86   ------------------
87   -- Handle_Event --
88   ------------------
89
90   overriding procedure Handle_Event
91    (Self  : not null access Change_Dispatcher;
92     Event : access WebAPI.DOM.Events.Event'Class) is
93   begin
94      Self.Owner.Change_Event;
95   end Handle_Event;
96
97   ------------------
98   -- Handle_Event --
99   ------------------
100
101   overriding procedure Handle_Event
102    (Self  : not null access Input_Dispatcher;
103     Event : access WebAPI.DOM.Events.Event'Class) is
104   begin
105      Self.Owner.Input_Event;
106   end Handle_Event;
107
108   ------------------
109   -- Handle_Event --
110   ------------------
111
112   overriding procedure Handle_Event
113    (Self  : not null access Mouse_Click_Dispatcher;
114     Event : access WebAPI.DOM.Events.Event'Class)
115   is
116      E : WUI.Events.Mouse.Click.Click_Event;
117
118   begin
119      WUI.Events.Mouse.Click.Constructors.Initialize
120       (E,
121        WebAPI.UI_Events.Mouse.Mouse_Event'Class (Event.all)'Unchecked_Access);
122      Self.Owner.Click_Event (E);
123   end Handle_Event;
124
125   ------------------
126   -- Handle_Event --
127   ------------------
128
129   overriding procedure Handle_Event
130    (Self  : not null access Mouse_Move_Dispatcher;
131     Event : access WebAPI.DOM.Events.Event'Class)
132   is
133      E : WUI.Events.Mouse.Move.Mouse_Move_Event;
134
135   begin
136      WUI.Events.Mouse.Move.Constructors.Initialize
137       (E,
138        WebAPI.UI_Events.Mouse.Mouse_Event'Class (Event.all)'Unchecked_Access);
139      Self.Owner.Mouse_Move_Event (E);
140   end Handle_Event;
141
142   ------------------
143   -- Handle_Event --
144   ------------------
145
146   overriding procedure Handle_Event
147    (Self  : not null access Mouse_Down_Dispatcher;
148     Event : access WebAPI.DOM.Events.Event'Class)
149   is
150      E : WUI.Events.Mouse.Button.Mouse_Button_Event;
151
152   begin
153      WUI.Events.Mouse.Button.Constructors.Initialize
154       (E,
155        WebAPI.UI_Events.Mouse.Mouse_Event'Class (Event.all)'Unchecked_Access);
156      Self.Owner.Mouse_Press_Event (E);
157   end Handle_Event;
158
159   ------------------
160   -- Handle_Event --
161   ------------------
162
163   overriding procedure Handle_Event
164    (Self  : not null access Mouse_Up_Dispatcher;
165     Event : access WebAPI.DOM.Events.Event'Class)
166   is
167      E : WUI.Events.Mouse.Button.Mouse_Button_Event;
168
169   begin
170      WUI.Events.Mouse.Button.Constructors.Initialize
171       (E,
172        WebAPI.UI_Events.Mouse.Mouse_Event'Class (Event.all)'Unchecked_Access);
173      Self.Owner.Mouse_Release_Event (E);
174   end Handle_Event;
175
176   ------------------
177   -- Handle_Event --
178   ------------------
179
180   overriding procedure Handle_Event
181    (Self  : not null access Wheel_Dispatcher;
182     Event : access WebAPI.DOM.Events.Event'Class)
183   is
184      E : WUI.Events.Mouse.Wheel.Mouse_Wheel_Event;
185
186   begin
187      WUI.Events.Mouse.Wheel.Constructors.Initialize
188       (E,
189        WebAPI.UI_Events.Wheel.Wheel_Event'Class (Event.all)'Unchecked_Access);
190      Self.Owner.Mouse_Wheel_Event (E);
191   end Handle_Event;
192
193   -----------------
194   -- Set_Visible --
195   -----------------
196
197   not overriding procedure Set_Visible
198    (Self : in out Abstract_Widget;
199     To   : Boolean) is
200   begin
201      Self.Element.Set_Hidden (not To);
202   end Set_Visible;
203
204end WUI.Widgets;
Note: See TracBrowser for help on using the repository browser.