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 <sal/config.h>
23 #include <salframe.hxx>
26 #include <vcl/window.hxx>
27 #include <vcl/keycod.hxx>
29 const sal_uInt16 aImplKeyFuncTab
[(static_cast<int>(KeyFuncType::DELETE
)+1)*4] =
31 0, 0, 0, 0, // KeyFuncType::DONTKNOW
32 KEY_X
| KEY_MOD1
, KEY_DELETE
| KEY_SHIFT
, KEY_CUT
, 0, // KeyFuncType::CUT
33 KEY_C
| KEY_MOD1
, KEY_INSERT
| KEY_MOD1
, KEY_COPY
, 0, // KeyFuncType::COPY
34 KEY_V
| KEY_MOD1
, KEY_INSERT
| KEY_SHIFT
, KEY_PASTE
, 0, // KeyFuncType::PASTE
35 KEY_Z
| KEY_MOD1
, KEY_BACKSPACE
| KEY_MOD2
, KEY_UNDO
, 0, // KeyFuncType::UNDO
36 KEY_Y
| KEY_MOD1
, KEY_UNDO
| KEY_SHIFT
, 0, 0, // KeyFuncType::REDO
37 KEY_DELETE
, 0, 0, 0 // KeyFuncType::DELETE
40 bool ImplGetKeyCode( KeyFuncType eFunc
, sal_uInt16
& rCode1
, sal_uInt16
& rCode2
, sal_uInt16
& rCode3
, sal_uInt16
& rCode4
)
42 size_t nIndex
= static_cast<size_t>(eFunc
);
45 assert(nIndex
+ 3 < SAL_N_ELEMENTS(aImplKeyFuncTab
) && "bad key code index");
46 if (nIndex
+ 3 >= SAL_N_ELEMENTS(aImplKeyFuncTab
))
48 rCode1
= rCode2
= rCode3
= rCode4
= 0;
52 rCode1
= aImplKeyFuncTab
[nIndex
];
53 rCode2
= aImplKeyFuncTab
[nIndex
+1];
54 rCode3
= aImplKeyFuncTab
[nIndex
+2];
55 rCode4
= aImplKeyFuncTab
[nIndex
+3];
59 vcl::KeyCode::KeyCode( KeyFuncType eFunction
)
62 ImplGetKeyCode( eFunction
, nKeyCodeAndModifiers
, nDummy
, nDummy
, nDummy
);
66 OUString
vcl::KeyCode::GetName( vcl::Window
* pWindow
) const
69 pWindow
= ImplGetDefaultWindow();
70 return pWindow
? pWindow
->ImplGetFrame()->GetKeyName( GetFullCode() ) : "";
73 KeyFuncType
vcl::KeyCode::GetFunction() const
75 if ( eFunc
!= KeyFuncType::DONTKNOW
)
78 sal_uInt16 nCompCode
= GetModifier() | GetCode();
81 for ( sal_uInt16 i
= sal_uInt16(KeyFuncType::CUT
); i
<= sal_uInt16(KeyFuncType::DELETE
); i
++ )
87 ImplGetKeyCode( static_cast<KeyFuncType
>(i
), nKeyCode1
, nKeyCode2
, nKeyCode3
, nKeyCode4
);
88 if ( (nCompCode
== nKeyCode1
) || (nCompCode
== nKeyCode2
) || (nCompCode
== nKeyCode3
) || (nCompCode
== nKeyCode4
) )
89 return static_cast<KeyFuncType
>(i
);
93 return KeyFuncType::DONTKNOW
;
96 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */