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

Last change on this file was 5872, checked in by vadim.godunko, 4 weeks ago

Add focus change notification.

  • Property svn:keywords set to Author Date Revision
File size: 9.1 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: 5872 $ $Date: 2018-09-22 09:56:07 +0000 (Sat, 22 Sep 2018) $
43------------------------------------------------------------------------------
44with WebAPI.DOM.Event_Targets;
45with WebAPI.UI_Events.Mouse;
46with WebAPI.UI_Events.Wheel;
47
48with WUI.Applications.Internals;
49
50package body WUI.Widgets is
51
52   ------------------
53   -- Constructors --
54   ------------------
55
56   package body Constructors is
57
58      ----------------
59      -- Initialize --
60      ----------------
61
62      procedure Initialize
63       (Self    : in out Abstract_Widget'Class;
64        Element : not null WebAPI.HTML.Elements.HTML_Element_Access) is
65      begin
66         Self.Element := Element;
67
68         --  Connect event dispatchers.
69
70         WebAPI.DOM.Event_Targets.Add_Event_Listener
71          (Element, +"blur", Self.Blur'Access, False);
72         WebAPI.DOM.Event_Targets.Add_Event_Listener
73          (Element, +"change", Self.Change'Access, False);
74         WebAPI.DOM.Event_Targets.Add_Event_Listener
75          (Element, +"click", Self.Click'Access, False);
76         WebAPI.DOM.Event_Targets.Add_Event_Listener
77          (Element, +"focus", Self.Focus'Access, False);
78         WebAPI.DOM.Event_Targets.Add_Event_Listener
79          (Element, +"input", Self.Input'Access, False);
80         WebAPI.DOM.Event_Targets.Add_Event_Listener
81          (Element, +"mousemove", Self.Mouse_Move'Access, False);
82         WebAPI.DOM.Event_Targets.Add_Event_Listener
83          (Element, +"mousedown", Self.Mouse_Down'Access, False);
84         WebAPI.DOM.Event_Targets.Add_Event_Listener
85          (Element, +"mouseup", Self.Mouse_Up'Access, False);
86         WebAPI.DOM.Event_Targets.Add_Event_Listener
87          (Element, +"wheel", Self.Wheel'Access, False);
88      end Initialize;
89
90   end Constructors;
91
92   procedure Log (Item : League.Strings.Universal_String)
93     with Import     => True,
94          Convention => JavaScript_Function,
95          Link_Name  => "console.log";
96
97   --------------------
98   -- Focus_In_Event --
99   --------------------
100
101   not overriding procedure Focus_In_Event (Self : in out Abstract_Widget) is
102   begin
103      WUI.Applications.Internals.Focus_In (Self'Unchecked_Access);
104   end Focus_In_Event;
105
106   ---------------------
107   -- Focus_Out_Event --
108   ---------------------
109
110   not overriding procedure Focus_Out_Event (Self : in out Abstract_Widget) is
111   begin
112      WUI.Applications.Internals.Focus_Out (Self'Unchecked_Access);
113   end Focus_Out_Event;
114
115   ------------------
116   -- Handle_Event --
117   ------------------
118
119   overriding procedure Handle_Event
120    (Self  : not null access Blur_Dispatcher;
121     Event : access WebAPI.DOM.Events.Event'Class) is
122   begin
123      Self.Owner.Focus_Out_Event;
124   end Handle_Event;
125
126   ------------------
127   -- Handle_Event --
128   ------------------
129
130   overriding procedure Handle_Event
131    (Self  : not null access Change_Dispatcher;
132     Event : access WebAPI.DOM.Events.Event'Class) is
133   begin
134      Self.Owner.Change_Event;
135   end Handle_Event;
136
137   ------------------
138   -- Handle_Event --
139   ------------------
140
141   overriding procedure Handle_Event
142    (Self  : not null access Focus_Dispatcher;
143     Event : access WebAPI.DOM.Events.Event'Class) is
144   begin
145      Self.Owner.Focus_In_Event;
146   end Handle_Event;
147
148   ------------------
149   -- Handle_Event --
150   ------------------
151
152   overriding procedure Handle_Event
153    (Self  : not null access Input_Dispatcher;
154     Event : access WebAPI.DOM.Events.Event'Class) is
155   begin
156      Self.Owner.Input_Event;
157   end Handle_Event;
158
159   ------------------
160   -- Handle_Event --
161   ------------------
162
163   overriding procedure Handle_Event
164    (Self  : not null access Mouse_Click_Dispatcher;
165     Event : access WebAPI.DOM.Events.Event'Class)
166   is
167      E : WUI.Events.Mouse.Click.Click_Event;
168
169   begin
170      WUI.Events.Mouse.Click.Constructors.Initialize
171       (E,
172        WebAPI.UI_Events.Mouse.Mouse_Event'Class (Event.all)'Unchecked_Access);
173      Self.Owner.Click_Event (E);
174   end Handle_Event;
175
176   ------------------
177   -- Handle_Event --
178   ------------------
179
180   overriding procedure Handle_Event
181    (Self  : not null access Mouse_Move_Dispatcher;
182     Event : access WebAPI.DOM.Events.Event'Class)
183   is
184      E : WUI.Events.Mouse.Move.Mouse_Move_Event;
185
186   begin
187      WUI.Events.Mouse.Move.Constructors.Initialize
188       (E,
189        WebAPI.UI_Events.Mouse.Mouse_Event'Class (Event.all)'Unchecked_Access);
190      Self.Owner.Mouse_Move_Event (E);
191   end Handle_Event;
192
193   ------------------
194   -- Handle_Event --
195   ------------------
196
197   overriding procedure Handle_Event
198    (Self  : not null access Mouse_Down_Dispatcher;
199     Event : access WebAPI.DOM.Events.Event'Class)
200   is
201      E : WUI.Events.Mouse.Button.Mouse_Button_Event;
202
203   begin
204      WUI.Events.Mouse.Button.Constructors.Initialize
205       (E,
206        WebAPI.UI_Events.Mouse.Mouse_Event'Class (Event.all)'Unchecked_Access);
207      Self.Owner.Mouse_Press_Event (E);
208   end Handle_Event;
209
210   ------------------
211   -- Handle_Event --
212   ------------------
213
214   overriding procedure Handle_Event
215    (Self  : not null access Mouse_Up_Dispatcher;
216     Event : access WebAPI.DOM.Events.Event'Class)
217   is
218      E : WUI.Events.Mouse.Button.Mouse_Button_Event;
219
220   begin
221      WUI.Events.Mouse.Button.Constructors.Initialize
222       (E,
223        WebAPI.UI_Events.Mouse.Mouse_Event'Class (Event.all)'Unchecked_Access);
224      Self.Owner.Mouse_Release_Event (E);
225   end Handle_Event;
226
227   ------------------
228   -- Handle_Event --
229   ------------------
230
231   overriding procedure Handle_Event
232    (Self  : not null access Wheel_Dispatcher;
233     Event : access WebAPI.DOM.Events.Event'Class)
234   is
235      E : WUI.Events.Mouse.Wheel.Mouse_Wheel_Event;
236
237   begin
238      WUI.Events.Mouse.Wheel.Constructors.Initialize
239       (E,
240        WebAPI.UI_Events.Wheel.Wheel_Event'Class (Event.all)'Unchecked_Access);
241      Self.Owner.Mouse_Wheel_Event (E);
242   end Handle_Event;
243
244   -----------------
245   -- Set_Visible --
246   -----------------
247
248   not overriding procedure Set_Visible
249    (Self : in out Abstract_Widget;
250     To   : Boolean) is
251   begin
252      Self.Element.Set_Hidden (not To);
253   end Set_Visible;
254
255end WUI.Widgets;
Note: See TracBrowser for help on using the repository browser.