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

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

Rename root package.

  • Property svn:keywords set to Author Date Revision
File size: 8.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: 5682 $ $Date: 2017-01-10 21:55:53 +0000 (Tue, 10 Jan 2017) $
43------------------------------------------------------------------------------
44with League.Calendars;
45
46package body WUI.Widgets.Grid_Views is
47
48   package Renderers is
49
50      type Cell_Visiter is new WUI.Grid_Models.Cell_Visiter with record
51         Value : League.Strings.Universal_String;
52      end record;
53
54      overriding procedure String_Cell
55        (Self  : not null access Cell_Visiter;
56         Value : League.Strings.Universal_String);
57
58      overriding procedure Integer_Cell
59        (Self  : not null access Cell_Visiter;
60         Value : Integer);
61
62      overriding procedure Date_Time_Cell
63        (Self  : not null access Cell_Visiter;
64         Value : League.Calendars.Date_Time);
65
66   end Renderers;
67
68   ------------------
69   -- Constructors --
70   ------------------
71
72   package body Constructors is
73
74      ----------------
75      -- Initialize --
76      ----------------
77
78      procedure Initialize
79        (Self    : in out Grid_View'Class;
80         Parent  : not null access WUI.Widgets.Abstract_Widget'Class)
81      is
82         Document : constant WebAPI.DOM.Documents.Document_Access :=
83           Parent.Element.Get_Owner_Document;
84         Grid     : constant not null WebAPI.DOM.Elements.Element_Access :=
85           Document.Create_Element (+"div");
86         Head     : constant not null WebAPI.DOM.Elements.Element_Access :=
87           Document.Create_Element (+"div");
88         Table_H  : constant not null WebAPI.DOM.Elements.Element_Access :=
89           Document.Create_Element (+"table");
90         Data     : constant not null WebAPI.DOM.Elements.Element_Access :=
91           Document.Create_Element (+"div");
92         Table_D  : constant not null WebAPI.DOM.Elements.Element_Access :=
93           Document.Create_Element (+"table");
94      begin
95         WUI.Widgets.Constructors.Initialize
96           (Self, WebAPI.HTML.Elements.HTML_Element_Access (Grid));
97
98         Self.Document := Document;
99         Self.Header := Table_H;
100         Self.Data := Table_D;
101
102         Grid.Set_Class_Name (+"grid row scroll-x");
103         Head.Set_Class_Name (+"grid-head row");
104         Head.Append_Child (Table_H);
105         Grid.Append_Child (Head);
106         Data.Set_Class_Name (+"grid-data row scroll-y");
107         Data.Append_Child (Table_D);
108         Grid.Append_Child (Data);
109         Parent.Element.Append_Child (Grid);
110      end Initialize;
111
112   end Constructors;
113
114   ---------------
115   -- Renderers --
116   ---------------
117
118   package body Renderers is
119
120      -----------------
121      -- String_Cell --
122      -----------------
123
124      overriding procedure String_Cell
125        (Self  : not null access Cell_Visiter;
126         Value : League.Strings.Universal_String) is
127      begin
128         Self.Value := Value;
129      end String_Cell;
130
131      ------------------
132      -- Integer_Cell --
133      ------------------
134
135      overriding procedure Integer_Cell
136        (Self  : not null access Cell_Visiter;
137         Value : Integer) is
138      begin
139         Self.Value := +Integer'Wide_Wide_Image (Value);
140      end Integer_Cell;
141
142      --------------------
143      -- Date_Time_Cell --
144      --------------------
145
146      overriding procedure Date_Time_Cell
147        (Self  : not null access Cell_Visiter;
148         Value : League.Calendars.Date_Time) is
149      begin
150         Self.Value := +"date rendering is not implemented";
151      end Date_Time_Cell;
152
153   end Renderers;
154
155   ---------------
156   -- Set_Model --
157   ---------------
158
159   not overriding procedure Set_Model
160     (Self   : in out Grid_View;
161      Header : not null WUI.Widgets.Grid_Views.Grid_Header_Access;
162      Model  : not null WUI.Grid_Models.Grid_Model_Access)
163   is
164      Rows     : constant Natural := Model.Row_Count;
165      Columns  : constant Natural := Model.Column_Count;
166      Renderer : aliased Renderers.Cell_Visiter;
167      TR       : WebAPI.DOM.Elements.Element_Access :=
168        Self.Document.Create_Element (+"tr");
169   begin
170      for J in 1 .. Columns loop
171         declare
172            Width    : constant Natural := Header.Width (Column => J);
173            Column_H : constant WebAPI.DOM.Elements.Element_Access :=
174              Self.Document.Create_Element (+"col");
175            Column_D : constant WebAPI.DOM.Elements.Element_Access :=
176              Self.Document.Create_Element (+"col");
177            TH       : constant WebAPI.DOM.Elements.Element_Access :=
178              Self.Document.Create_Element (+"th");
179         begin
180            Column_H.Set_Attribute
181              (+"width", +Natural'Wide_Wide_Image (Width));
182            Column_D.Set_Attribute
183              (+"width", +Natural'Wide_Wide_Image (Width));
184            Self.Header.Append_Child (Column_H);
185            Self.Data.Append_Child (Column_D);
186            TH.Set_Text_Content (Text (Header, J));
187            TR.Append_Child (TH);
188         end;
189      end loop;
190
191      Self.Header.Append_Child (TR);
192
193      for R in 1 .. Rows loop
194         declare
195            Row : constant WUI.Grid_Models.Row_Access := Model.Row (R);
196         begin
197            TR := Self.Document.Create_Element (+"tr");
198
199            for J in 1 .. Columns loop
200               declare
201                  TD : constant WebAPI.DOM.Elements.Element_Access :=
202                    Self.Document.Create_Element (+"td");
203               begin
204                  Model.Visit_Cell (Row, J, Renderer'Unchecked_Access);
205                  TD.Set_Text_Content (Renderer.Value);
206                  TR.Append_Child (TD);
207               end;
208            end loop;
209
210            TR.Set_Attribute (+"tabindex", +"1");
211            Self.Data.Append_Child (TR);
212         end;
213      end loop;
214   end Set_Model;
215
216end WUI.Widgets.Grid_Views;
Note: See TracBrowser for help on using the repository browser.