source: trunk/design/ui/source/wui-widgets-spin_boxes-generic_floats.ads

Last change on this file was 5733, checked in by vadim.godunko, 8 months ago

Add control over invalid values.

  • Property svn:keywords set to Author Date Revision
File size: 5.6 KB
Line 
1------------------------------------------------------------------------------
2--                                                                          --
3--                            Matreshka Project                             --
4--                                                                          --
5--                               Web Framework                              --
6--                                                                          --
7--                        Runtime Library Component                         --
8--                                                                          --
9------------------------------------------------------------------------------
10--                                                                          --
11-- Copyright © 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: 5733 $ $Date: 2017-01-28 11:53:14 +0000 (Sat, 28 Jan 2017) $
43------------------------------------------------------------------------------
44with League.Strings;
45
46with Core.Connectables.Slots_0.Slots_1.Generic_Emitters;
47
48generic
49   type Data_Type is digits <>;
50
51   with package Float_Slots is
52     new Core.Connectables.Slots_0.Slots_1 (Data_Type);
53
54   with package Float_Emitters is new Float_Slots.Generic_Emitters;
55
56package WUI.Widgets.Spin_Boxes.Generic_Floats is
57
58   type Float_Spin_Box is
59     new WUI.Widgets.Spin_Boxes.Abstract_Spin_Box with private;
60
61   type Float_Spin_Box_Access is access all Float_Spin_Box'Class
62     with Storage_Size => 0;
63
64   not overriding function Value (Self : Float_Spin_Box) return Data_Type;
65
66   not overriding procedure Set_Value
67    (Self : in out Float_Spin_Box;
68     To   : Data_Type);
69   --  Available as slot.
70
71   -------------
72   -- Signals --
73   -------------
74
75   not overriding function Value_Changed_Signal
76    (Self : in out Float_Spin_Box)
77       return not null access Float_Slots.Signal'Class;
78
79   -----------
80   -- Slots --
81   -----------
82
83   function Set_Value_Slot
84    (Self : in out Float_Spin_Box'Class) return Float_Slots.Slot'Class;
85
86   package Constructors is
87
88      procedure Initialize
89       (Self    : in out Float_Spin_Box'Class;
90        Element :
91          not null WebAPI.HTML.Input_Elements.HTML_Input_Element_Access);
92
93      function Create
94       (Element :
95          not null WebAPI.HTML.Input_Elements.HTML_Input_Element_Access)
96            return not null Float_Spin_Box_Access;
97
98      function Create
99       (Id : League.Strings.Universal_String)
100          return not null Float_Spin_Box_Access;
101
102   end Constructors;
103
104private
105
106   type Float_Spin_Box is
107     new WUI.Widgets.Spin_Boxes.Abstract_Spin_Box with
108   record
109      Last_Value    : Data_Type;
110      --  Last valid value.
111      Value_Changed : aliased
112        Float_Emitters.Emitter (Float_Spin_Box'Unchecked_Access);
113   end record;
114
115   overriding procedure Step_Down (Self : in out Float_Spin_Box);
116
117   overriding procedure Step_Up (Self : in out Float_Spin_Box);
118
119   overriding procedure Input_Event (Self : in out Float_Spin_Box);
120
121   overriding procedure Change_Event (Self : in out Float_Spin_Box);
122
123   -----------
124   -- Slots --
125   -----------
126
127   package Set_Value_Slots is
128     new Float_Slots.Generic_Slots (Float_Spin_Box, Set_Value);
129
130   function Set_Value_Slot
131    (Self : in out Float_Spin_Box'Class) return Float_Slots.Slot'Class
132       renames Set_Value_Slots.To_Slot;
133
134end WUI.Widgets.Spin_Boxes.Generic_Floats;
Note: See TracBrowser for help on using the repository browser.