Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / EvasKeyEventArgs.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 using System;
18 using System.Runtime.InteropServices;
19
20 namespace ElmSharp
21 {
22     /// <summary>
23     /// The EvasKeyEventArgs is an EvasKey EventArgs
24     /// </summary>
25     public class EvasKeyEventArgs : EventArgs
26     {
27         IntPtr _nativeEventInfo;
28
29         EvasEventFlag _eventFlags;
30
31         /// <summary>
32         /// BackButton name in Platform
33         /// </summary>
34         public const string PlatformBackButtonName = "XF86Back";
35         /// <summary>
36         /// MenuButton name in Platform
37         /// </summary>
38         public const string PlatformMenuButtonName = "XF86Menu";
39         /// <summary>
40         /// HomeButton name in Platform
41         /// </summary>
42         public const string PlatformHomeButtonName = "XF86Home";
43
44         /// <summary>
45         /// Gets the name of Key
46         /// </summary>
47         public string KeyName { get; private set; }
48
49         public EvasEventFlag Flags
50         {
51             get
52             {
53                 IntPtr offset = Marshal.OffsetOf<EvasEventKeyDown>("event_flags");
54                 return (EvasEventFlag)Marshal.ReadIntPtr(_nativeEventInfo, (int)offset);
55             }
56             set
57             {
58                 IntPtr offset = Marshal.OffsetOf<EvasEventKeyDown>("event_flags");
59                 Marshal.WriteIntPtr(_nativeEventInfo, (int)offset, (IntPtr)value);
60             }
61         }
62
63         EvasKeyEventArgs(IntPtr info)
64         {
65             _nativeEventInfo = info;
66             var evt = Marshal.PtrToStructure<EvasEventKeyDown>(info);
67             KeyName = evt.keyname;
68         }
69
70         /// <summary>
71         /// Creates and initializes a new instance of the EvasKeyEventArgs class.
72         /// </summary>
73         /// <param name="data">data info</param>
74         /// <param name="obj"> object </param>
75         /// <param name="info">information </param>
76         /// <returns>EvasKey eventArgs</returns>
77         static public EvasKeyEventArgs Create(IntPtr data, IntPtr obj, IntPtr info)
78         {
79             return new EvasKeyEventArgs(info);
80         }
81
82         /// <summary>
83         /// Event structure for Key Down event callbacks.
84         /// </summary>
85         [StructLayout(LayoutKind.Sequential)]
86         struct EvasEventKeyDown
87         {
88             /// <summary>
89             /// Name string of the key pressed
90             /// </summary>
91             public string keyname;
92             /// <summary>
93             /// Data to be passed to the event
94             /// </summary>
95             public IntPtr data;
96             /// <summary>
97             /// Modifier keys pressed during the event
98             /// </summary>
99             public IntPtr modifiers;
100             /// <summary>
101             /// Locks info
102             /// </summary>
103             public IntPtr locks;
104             /// <summary>
105             /// Logical key: (example, shift+1 == exclamation)
106             /// </summary>
107             public string key;
108             /// <summary>
109             /// UTF8 string if this keystroke has produced a visible string to be ADDED
110             /// </summary>
111             public string str;
112             /// <summary>
113             /// UTF8 string if this keystroke has modified a string in the middle of being composed - this string replaces the previous one
114             /// </summary>
115             public string compose;
116
117             public uint timestamp;
118
119             /// <summary>
120             /// Event_flags
121             /// </summary>
122             public EvasEventFlag event_flags;
123             /// <summary>
124             ///
125             /// </summary>
126             public IntPtr dev;
127             /// <summary>
128             /// Keycode
129             /// </summary>
130             public uint keycode;
131         };
132     }
133
134     /// <summary>
135     /// Flags for Events
136     /// </summary>
137     [Flags]
138     public enum EvasEventFlag
139     {
140         /// <summary>
141         /// No fancy flags set
142         /// </summary>
143         None = 0,
144         /// <summary>
145         ///This event is being delivered but should be put "on hold" until the on hold flag is unset. the event should be used for informational purposes and maybe some indications visually, but not actually perform anything
146         /// </summary>
147         OnHold = 1,
148     }
149
150 }