]> git.lyx.org Git - lyx.git/blob - src/frontends/gtk/GLyXKeySym.C
Minipage is no more (long live the box inset)
[lyx.git] / src / frontends / gtk / GLyXKeySym.C
1 /**
2  * \file GLyXKeySym.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Huang Ying
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12 #include <gtkmm.h>
13
14 #include <gdk/gdkkeysyms.h>
15 #include "GLyXKeySym.h"
16
17 using std::string;
18
19
20 GLyXKeySym::GLyXKeySym() : keyval_(GDK_VoidSymbol)
21 {
22 }
23
24
25 GLyXKeySym::GLyXKeySym(unsigned int keyval) : keyval_(keyval)
26 {
27 }
28
29
30 void GLyXKeySym::setKeyval(unsigned int keyval)
31 {
32         keyval_ = keyval;
33 }
34
35
36 void GLyXKeySym::init(string const & symbolname)
37 {
38         keyval_ = gdk_keyval_from_name(symbolname.c_str());
39 }
40
41
42 bool GLyXKeySym::isOK() const
43 {
44         return keyval_ != GDK_VoidSymbol;
45 }
46
47
48 bool GLyXKeySym::isModifier() const
49 {
50         return ((keyval_ >= GDK_Shift_L && keyval_ <= GDK_Hyper_R)
51                 || keyval_ == GDK_Mode_switch || keyval_ == 0);
52 }
53
54
55 string GLyXKeySym::getSymbolName() const
56 {
57         const char * name = gdk_keyval_name(keyval_);
58         return name ? name : string();
59 }
60
61
62 char GLyXKeySym::getISOEncoded(string const & /*encoding*/) const
63 {
64         if (keyval_ == GDK_VoidSymbol)
65                 return 0;
66
67         unsigned int c = keyval_;
68
69         switch (c & 0x0000FF00) {
70                 // latin 1 byte 3 = 0
71         case 0x00000000: break;
72                 // latin 2 byte 3 = 1
73         case 0x00000100:
74                 // latin 3 byte 3 = 2
75         case 0x00000200:
76                 // latin 4 byte 3 = 3
77         case 0x00000300:
78                 // cyrillic KOI8 & Co
79         case 0x00000600:
80                 // greek
81         case 0x00000700:
82                 // latin 8 byte 3 = 18 (0x12)
83         case 0x00001200:
84                 // latin 9 byte 3 = 19 (0x13)
85         case 0x00001300:
86                 c &= 0x000000FF;
87                 break;
88         default:
89                 c = 0;
90         }
91         return c;
92 }
93
94
95 bool operator==(LyXKeySym const & k1, LyXKeySym const & k2)
96 {
97         return static_cast<GLyXKeySym const &>(k1).getKeyval()
98                 == static_cast<GLyXKeySym const &>(k2).getKeyval();
99 }