]> git.lyx.org Git - lyx.git/blob - src/frontends/gtk/GLyXKeySym.C
add gtk TOC dialog
[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
13 #include "GLyXKeySym.h"
14 #include "kbmap.h"
15
16 #include <gtkmm.h>
17 #include <gdk/gdkkeysyms.h>
18
19 using std::string;
20
21
22 GLyXKeySym::GLyXKeySym() : keyval_(GDK_VoidSymbol)
23 {
24 }
25
26
27 GLyXKeySym::GLyXKeySym(unsigned int keyval) : keyval_(keyval)
28 {
29 }
30
31
32 void GLyXKeySym::setKeyval(unsigned int keyval)
33 {
34         keyval_ = keyval;
35 }
36
37
38 void GLyXKeySym::init(string const & symbolname)
39 {
40         keyval_ = gdk_keyval_from_name(symbolname.c_str());
41 }
42
43
44 bool GLyXKeySym::isOK() const
45 {
46         return keyval_ != GDK_VoidSymbol;
47 }
48
49
50 bool GLyXKeySym::isModifier() const
51 {
52         return ((keyval_ >= GDK_Shift_L && keyval_ <= GDK_Hyper_R)
53                 || keyval_ == GDK_Mode_switch || keyval_ == 0);
54 }
55
56
57 string GLyXKeySym::getSymbolName() const
58 {
59         const char * name = gdk_keyval_name(keyval_);
60         return name ? name : string();
61 }
62
63
64 char GLyXKeySym::getISOEncoded(string const & /*encoding*/) const
65 {
66         if (keyval_ == GDK_VoidSymbol)
67                 return 0;
68
69         unsigned int c = keyval_;
70
71         switch (c & 0x0000FF00) {
72                 // latin 1 byte 3 = 0
73         case 0x00000000: break;
74                 // latin 2 byte 3 = 1
75         case 0x00000100:
76                 // latin 3 byte 3 = 2
77         case 0x00000200:
78                 // latin 4 byte 3 = 3
79         case 0x00000300:
80                 // cyrillic KOI8 & Co
81         case 0x00000600:
82                 // greek
83         case 0x00000700:
84                 // latin 8 byte 3 = 18 (0x12)
85         case 0x00001200:
86                 // latin 9 byte 3 = 19 (0x13)
87         case 0x00001300:
88                 c &= 0x000000FF;
89                 break;
90         default:
91                 c = 0;
92         }
93         return c;
94 }
95
96
97 string const GLyXKeySym::print(key_modifier::state mod) const
98 {
99         return kb_keymap::printKeySym(*this, mod);
100 }
101
102
103 bool operator==(LyXKeySym const & k1, LyXKeySym const & k2)
104 {
105         return static_cast<GLyXKeySym const &>(k1).getKeyval()
106                 == static_cast<GLyXKeySym const &>(k2).getKeyval();
107 }