1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <salinst.hxx>
21 #include <salframe.hxx>
24 #include <vcl/window.hxx>
25 #include <vcl/keycod.hxx>
29 static const sal_uInt16 aImplKeyFuncTab
[(static_cast<int>(KeyFuncType::FRONT
)+1)*4] =
31 0, 0, 0, 0, // KeyFuncType::DONTKNOW
32 KEY_N
| KEY_MOD1
, 0, 0, 0, // KeyFuncType::NEW
33 KEY_O
| KEY_MOD1
, KEY_OPEN
, 0, 0, // KeyFuncType::OPEN
34 KEY_S
| KEY_MOD1
, 0, 0, 0, // KeyFuncType::SAVE
35 KEY_S
| KEY_SHIFT
| KEY_MOD1
, 0, 0, 0, // KeyFuncType::SAVEAS
36 KEY_P
| KEY_MOD1
, 0, 0, 0, // KeyFuncType::PRINT
37 KEY_W
| KEY_MOD1
, KEY_F4
| KEY_MOD1
, 0, 0, // KeyFuncType::CLOSE
38 KEY_Q
| KEY_MOD1
, KEY_F4
| KEY_MOD2
, 0, 0, // KeyFuncType::QUIT
39 KEY_X
| KEY_MOD1
, KEY_DELETE
| KEY_SHIFT
, KEY_CUT
, 0, // KeyFuncType::CUT
40 KEY_C
| KEY_MOD1
, KEY_INSERT
| KEY_MOD1
, KEY_COPY
, 0, // KeyFuncType::COPY
41 KEY_V
| KEY_MOD1
, KEY_INSERT
| KEY_SHIFT
, KEY_PASTE
, 0, // KeyFuncType::PASTE
42 KEY_Z
| KEY_MOD1
, KEY_BACKSPACE
| KEY_MOD2
, KEY_UNDO
, 0, // KeyFuncType::UNDO
43 KEY_Y
| KEY_MOD1
, KEY_UNDO
| KEY_SHIFT
, 0, 0, // KeyFuncType::REDO
44 KEY_DELETE
, 0, 0, 0, // KeyFuncType::DELETE
45 KEY_REPEAT
, 0, 0, 0, // KeyFuncType::REPEAT
46 KEY_F
| KEY_MOD1
, KEY_FIND
, 0, 0, // KeyFuncType::FIND
47 KEY_F
| KEY_SHIFT
| KEY_MOD1
, KEY_SHIFT
| KEY_FIND
, 0, 0, // KeyFuncType::FINDBACKWARD
48 KEY_RETURN
| KEY_MOD2
, 0, 0, 0, // KeyFuncType::PROPERTIES
49 0, 0, 0, 0 // KeyFuncType::FRONT
52 bool ImplGetKeyCode( KeyFuncType eFunc
, sal_uInt16
& rCode1
, sal_uInt16
& rCode2
, sal_uInt16
& rCode3
, sal_uInt16
& rCode4
)
54 size_t nIndex
= static_cast<size_t>(eFunc
);
57 assert(nIndex
+ 3 < SAL_N_ELEMENTS(aImplKeyFuncTab
) && "bad key code index");
58 if (nIndex
+ 3 >= SAL_N_ELEMENTS(aImplKeyFuncTab
))
60 rCode1
= rCode2
= rCode3
= rCode4
= 0;
64 rCode1
= aImplKeyFuncTab
[nIndex
];
65 rCode2
= aImplKeyFuncTab
[nIndex
+1];
66 rCode3
= aImplKeyFuncTab
[nIndex
+2];
67 rCode4
= aImplKeyFuncTab
[nIndex
+3];
71 vcl::KeyCode::KeyCode( KeyFuncType eFunction
)
74 ImplGetKeyCode( eFunction
, nKeyCodeAndModifiers
, nDummy
, nDummy
, nDummy
);
78 OUString
vcl::KeyCode::GetName( vcl::Window
* pWindow
) const
81 pWindow
= ImplGetDefaultWindow();
82 return pWindow
? pWindow
->ImplGetFrame()->GetKeyName( GetFullCode() ) : "";
85 KeyFuncType
vcl::KeyCode::GetFunction() const
87 if ( eFunc
!= KeyFuncType::DONTKNOW
)
90 sal_uInt16 nCompCode
= GetModifier() | GetCode();
93 for ( sal_uInt16 i
= (sal_uInt16
)KeyFuncType::NEW
; i
< (sal_uInt16
)KeyFuncType::FRONT
; i
++ )
99 ImplGetKeyCode( (KeyFuncType
)i
, nKeyCode1
, nKeyCode2
, nKeyCode3
, nKeyCode4
);
100 if ( (nCompCode
== nKeyCode1
) || (nCompCode
== nKeyCode2
) || (nCompCode
== nKeyCode3
) || (nCompCode
== nKeyCode4
) )
101 return (KeyFuncType
)i
;
105 return KeyFuncType::DONTKNOW
;
108 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */