Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quellcode-Bibliothek acccfg.cxx   Sprache: C

 
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */


// include own files

#include <acccfg.hxx>
#include <cfgutil.hxx>
#include <dialmgr.hxx>

#include <sfx2/filedlghelper.hxx>
#include <sfx2/minfitem.hxx>
#include <sfx2/sfxresid.hxx>

#include <sal/macros.h>
#include <vcl/event.hxx>

#include <strings.hrc>
#include <sfx2/strings.hrc>
#include <svx/svxids.hrc>

// include interface declarations
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/embed/StorageFactory.hpp>
#include <com/sun/star/embed/XTransactedObject.hpp>
#include <com/sun/star/embed/ElementModes.hpp>
#include <com/sun/star/form/XReset.hpp>
#include <com/sun/star/frame/Desktop.hpp>
#include <com/sun/star/frame/XController.hpp>
#include <com/sun/star/frame/XModel.hpp>
#include <com/sun/star/frame/ModuleManager.hpp>
#include <com/sun/star/frame/theUICommandDescription.hpp>
#include <com/sun/star/ui/GlobalAcceleratorConfiguration.hpp>
#include <com/sun/star/ui/theModuleUIConfigurationManagerSupplier.hpp>
#include <com/sun/star/ui/UIConfigurationManager.hpp>
#include <com/sun/star/ui/XUIConfigurationManager.hpp>
#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>

// include search util
#include <com/sun/star/util/SearchFlags.hpp>
#include <com/sun/star/util/SearchAlgorithms2.hpp>
#include <unotools/textsearch.hxx>

// include other projects
#include <comphelper/processfactory.hxx>
#include <svtools/acceleratorexecute.hxx>
#include <vcl/svapp.hxx>
#include <comphelper/sequenceashashmap.hxx>
#include <config_features.h>

#include <com/sun/star/frame/LayoutManager.hpp>

// namespaces

using namespace css;

constexpr OUString FOLDERNAME_UICONFIG = u"Configurations2"_ustr;

constexpr OUString MEDIATYPE_PROPNAME = u"MediaType"_ustr;

const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
                                     KEY_F2,
                                     KEY_F3,
                                     KEY_F4,
                                     KEY_F5,
                                     KEY_F6,
                                     KEY_F7,
                                     KEY_F8,
                                     KEY_F9,
                                     KEY_F10,
                                     KEY_F11,
                                     KEY_F12,
                                     KEY_F13,
                                     KEY_F14,
                                     KEY_F15,
                                     KEY_F16,

                                     KEY_DOWN,
                                     KEY_UP,
                                     KEY_LEFT,
                                     KEY_RIGHT,
                                     KEY_HOME,
                                     KEY_END,
                                     KEY_PAGEUP,
                                     KEY_PAGEDOWN,
                                     KEY_RETURN,
                                     KEY_ESCAPE,
                                     KEY_BACKSPACE,
                                     KEY_INSERT,
                                     KEY_DELETE,

                                     KEY_OPEN,
                                     KEY_CUT,
                                     KEY_COPY,
                                     KEY_PASTE,
                                     KEY_UNDO,
                                     KEY_REPEAT,
                                     KEY_FIND,
                                     KEY_PROPERTIES,
                                     KEY_FRONT,
                                     KEY_CONTEXTMENU,
                                     KEY_MENU,
                                     KEY_HELP,

                                     KEY_SHIFT | KEY_F1,
                                     KEY_SHIFT | KEY_F2,
                                     KEY_SHIFT | KEY_F3,
                                     KEY_SHIFT | KEY_F4,
                                     KEY_SHIFT | KEY_F5,
                                     KEY_SHIFT | KEY_F6,
                                     KEY_SHIFT | KEY_F7,
                                     KEY_SHIFT | KEY_F8,
                                     KEY_SHIFT | KEY_F9,
                                     KEY_SHIFT | KEY_F10,
                                     KEY_SHIFT | KEY_F11,
                                     KEY_SHIFT | KEY_F12,
                                     KEY_SHIFT | KEY_F13,
                                     KEY_SHIFT | KEY_F14,
                                     KEY_SHIFT | KEY_F15,
                                     KEY_SHIFT | KEY_F16,

                                     KEY_SHIFT | KEY_DOWN,
                                     KEY_SHIFT | KEY_UP,
                                     KEY_SHIFT | KEY_LEFT,
                                     KEY_SHIFT | KEY_RIGHT,
                                     KEY_SHIFT | KEY_HOME,
                                     KEY_SHIFT | KEY_END,
                                     KEY_SHIFT | KEY_PAGEUP,
                                     KEY_SHIFT | KEY_PAGEDOWN,
                                     KEY_SHIFT | KEY_RETURN,
                                     KEY_SHIFT | KEY_SPACE,
                                     KEY_SHIFT | KEY_ESCAPE,
                                     KEY_SHIFT | KEY_BACKSPACE,
                                     KEY_SHIFT | KEY_INSERT,
                                     KEY_SHIFT | KEY_DELETE,
                                     KEY_SHIFT | KEY_EQUAL,

                                     KEY_MOD1 | KEY_0,
                                     KEY_MOD1 | KEY_1,
                                     KEY_MOD1 | KEY_2,
                                     KEY_MOD1 | KEY_3,
                                     KEY_MOD1 | KEY_4,
                                     KEY_MOD1 | KEY_5,
                                     KEY_MOD1 | KEY_6,
                                     KEY_MOD1 | KEY_7,
                                     KEY_MOD1 | KEY_8,
                                     KEY_MOD1 | KEY_9,
                                     KEY_MOD1 | KEY_A,
                                     KEY_MOD1 | KEY_B,
                                     KEY_MOD1 | KEY_C,
                                     KEY_MOD1 | KEY_D,
                                     KEY_MOD1 | KEY_E,
                                     KEY_MOD1 | KEY_F,
                                     KEY_MOD1 | KEY_G,
                                     KEY_MOD1 | KEY_H,
                                     KEY_MOD1 | KEY_I,
                                     KEY_MOD1 | KEY_J,
                                     KEY_MOD1 | KEY_K,
                                     KEY_MOD1 | KEY_L,
                                     KEY_MOD1 | KEY_M,
                                     KEY_MOD1 | KEY_N,
                                     KEY_MOD1 | KEY_O,
                                     KEY_MOD1 | KEY_P,
                                     KEY_MOD1 | KEY_Q,
                                     KEY_MOD1 | KEY_R,
                                     KEY_MOD1 | KEY_S,
                                     KEY_MOD1 | KEY_T,
                                     KEY_MOD1 | KEY_U,
                                     KEY_MOD1 | KEY_V,
                                     KEY_MOD1 | KEY_W,
                                     KEY_MOD1 | KEY_X,
                                     KEY_MOD1 | KEY_Y,
                                     KEY_MOD1 | KEY_Z,
                                     KEY_MOD1 | KEY_NUMBERSIGN,
                                     KEY_MOD1 | KEY_COLON,
                                     KEY_MOD1 | KEY_SEMICOLON,
                                     KEY_MOD1 | KEY_QUOTELEFT,
                                     KEY_MOD1 | KEY_QUOTERIGHT,
                                     KEY_MOD1 | KEY_BRACKETLEFT,
                                     KEY_MOD1 | KEY_BRACKETRIGHT,
                                     KEY_MOD1 | KEY_RIGHTCURLYBRACKET,
                                     KEY_MOD1 | KEY_POINT,
                                     KEY_MOD1 | KEY_COMMA,
                                     KEY_MOD1 | KEY_TILDE,
                                     KEY_MOD1 | KEY_TAB,

                                     KEY_MOD1 | KEY_F1,
                                     KEY_MOD1 | KEY_F2,
                                     KEY_MOD1 | KEY_F3,
                                     KEY_MOD1 | KEY_F4,
                                     KEY_MOD1 | KEY_F5,
                                     KEY_MOD1 | KEY_F6,
                                     KEY_MOD1 | KEY_F7,
                                     KEY_MOD1 | KEY_F8,
                                     KEY_MOD1 | KEY_F9,
                                     KEY_MOD1 | KEY_F10,
                                     KEY_MOD1 | KEY_F11,
                                     KEY_MOD1 | KEY_F12,
                                     KEY_MOD1 | KEY_F13,
                                     KEY_MOD1 | KEY_F14,
                                     KEY_MOD1 | KEY_F15,
                                     KEY_MOD1 | KEY_F16,

                                     KEY_MOD1 | KEY_DOWN,
                                     KEY_MOD1 | KEY_UP,
                                     KEY_MOD1 | KEY_LEFT,
                                     KEY_MOD1 | KEY_RIGHT,
                                     KEY_MOD1 | KEY_HOME,
                                     KEY_MOD1 | KEY_END,
                                     KEY_MOD1 | KEY_PAGEUP,
                                     KEY_MOD1 | KEY_PAGEDOWN,
                                     KEY_MOD1 | KEY_RETURN,
                                     KEY_MOD1 | KEY_SPACE,
                                     KEY_MOD1 | KEY_BACKSPACE,
                                     KEY_MOD1 | KEY_INSERT,
                                     KEY_MOD1 | KEY_DELETE,

                                     KEY_MOD1 | KEY_ADD,
                                     KEY_MOD1 | KEY_SUBTRACT,
                                     KEY_MOD1 | KEY_MULTIPLY,
                                     KEY_MOD1 | KEY_DIVIDE,
                                     KEY_MOD1 | KEY_EQUAL,

                                     KEY_SHIFT | KEY_MOD1 | KEY_0,
                                     KEY_SHIFT | KEY_MOD1 | KEY_1,
                                     KEY_SHIFT | KEY_MOD1 | KEY_2,
                                     KEY_SHIFT | KEY_MOD1 | KEY_3,
                                     KEY_SHIFT | KEY_MOD1 | KEY_4,
                                     KEY_SHIFT | KEY_MOD1 | KEY_5,
                                     KEY_SHIFT | KEY_MOD1 | KEY_6,
                                     KEY_SHIFT | KEY_MOD1 | KEY_7,
                                     KEY_SHIFT | KEY_MOD1 | KEY_8,
                                     KEY_SHIFT | KEY_MOD1 | KEY_9,
                                     KEY_SHIFT | KEY_MOD1 | KEY_A,
                                     KEY_SHIFT | KEY_MOD1 | KEY_B,
                                     KEY_SHIFT | KEY_MOD1 | KEY_C,
                                     KEY_SHIFT | KEY_MOD1 | KEY_D,
                                     KEY_SHIFT | KEY_MOD1 | KEY_E,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F,
                                     KEY_SHIFT | KEY_MOD1 | KEY_G,
                                     KEY_SHIFT | KEY_MOD1 | KEY_H,
                                     KEY_SHIFT | KEY_MOD1 | KEY_I,
                                     KEY_SHIFT | KEY_MOD1 | KEY_J,
                                     KEY_SHIFT | KEY_MOD1 | KEY_K,
                                     KEY_SHIFT | KEY_MOD1 | KEY_L,
                                     KEY_SHIFT | KEY_MOD1 | KEY_M,
                                     KEY_SHIFT | KEY_MOD1 | KEY_N,
                                     KEY_SHIFT | KEY_MOD1 | KEY_O,
                                     KEY_SHIFT | KEY_MOD1 | KEY_P,
                                     KEY_SHIFT | KEY_MOD1 | KEY_Q,
                                     KEY_SHIFT | KEY_MOD1 | KEY_R,
                                     KEY_SHIFT | KEY_MOD1 | KEY_S,
                                     KEY_SHIFT | KEY_MOD1 | KEY_T,
                                     KEY_SHIFT | KEY_MOD1 | KEY_U,
                                     KEY_SHIFT | KEY_MOD1 | KEY_V,
                                     KEY_SHIFT | KEY_MOD1 | KEY_W,
                                     KEY_SHIFT | KEY_MOD1 | KEY_X,
                                     KEY_SHIFT | KEY_MOD1 | KEY_Y,
                                     KEY_SHIFT | KEY_MOD1 | KEY_Z,
                                     KEY_SHIFT | KEY_MOD1 | KEY_NUMBERSIGN,
                                     KEY_SHIFT | KEY_MOD1 | KEY_COLON,
                                     KEY_SHIFT | KEY_MOD1 | KEY_SEMICOLON,
                                     KEY_SHIFT | KEY_MOD1 | KEY_QUOTELEFT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_QUOTERIGHT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_BRACKETLEFT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_BRACKETRIGHT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_RIGHTCURLYBRACKET,
                                     KEY_SHIFT | KEY_MOD1 | KEY_POINT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_COMMA,
                                     KEY_SHIFT | KEY_MOD1 | KEY_TILDE,
                                     KEY_SHIFT | KEY_MOD1 | KEY_TAB,
                                     KEY_SHIFT | KEY_MOD1 | KEY_DIVIDE,
                                     KEY_SHIFT | KEY_MOD1 | KEY_ADD,
                                     KEY_SHIFT | KEY_MOD1 | KEY_SUBTRACT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MULTIPLY,
                                     KEY_SHIFT | KEY_MOD1 | KEY_LESS,
                                     KEY_SHIFT | KEY_MOD1 | KEY_GREATER,
                                     KEY_SHIFT | KEY_MOD1 | KEY_OPEN,

                                     KEY_SHIFT | KEY_MOD1 | KEY_F1,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F2,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F3,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F4,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F5,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F6,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F7,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F8,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F9,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F10,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F11,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F12,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F13,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F14,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F15,
                                     KEY_SHIFT | KEY_MOD1 | KEY_F16,

                                     KEY_SHIFT | KEY_MOD1 | KEY_DOWN,
                                     KEY_SHIFT | KEY_MOD1 | KEY_UP,
                                     KEY_SHIFT | KEY_MOD1 | KEY_LEFT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_RIGHT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_HOME,
                                     KEY_SHIFT | KEY_MOD1 | KEY_END,
                                     KEY_SHIFT | KEY_MOD1 | KEY_PAGEUP,
                                     KEY_SHIFT | KEY_MOD1 | KEY_PAGEDOWN,
                                     KEY_SHIFT | KEY_MOD1 | KEY_RETURN,
                                     KEY_SHIFT | KEY_MOD1 | KEY_ESCAPE,
                                     KEY_SHIFT | KEY_MOD1 | KEY_SPACE,
                                     KEY_SHIFT | KEY_MOD1 | KEY_BACKSPACE,
                                     KEY_SHIFT | KEY_MOD1 | KEY_INSERT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_DELETE,
                                     KEY_SHIFT | KEY_MOD1 | KEY_EQUAL,

                                     KEY_MOD2 | KEY_0,
                                     KEY_MOD2 | KEY_1,
                                     KEY_MOD2 | KEY_2,
                                     KEY_MOD2 | KEY_3,
                                     KEY_MOD2 | KEY_4,
                                     KEY_MOD2 | KEY_5,
                                     KEY_MOD2 | KEY_6,
                                     KEY_MOD2 | KEY_7,
                                     KEY_MOD2 | KEY_8,
                                     KEY_MOD2 | KEY_9,
                                     KEY_MOD2 | KEY_A,
                                     KEY_MOD2 | KEY_B,
                                     KEY_MOD2 | KEY_C,
                                     KEY_MOD2 | KEY_D,
                                     KEY_MOD2 | KEY_E,
                                     KEY_MOD2 | KEY_F,
                                     KEY_MOD2 | KEY_G,
                                     KEY_MOD2 | KEY_H,
                                     KEY_MOD2 | KEY_I,
                                     KEY_MOD2 | KEY_J,
                                     KEY_MOD2 | KEY_K,
                                     KEY_MOD2 | KEY_L,
                                     KEY_MOD2 | KEY_M,
                                     KEY_MOD2 | KEY_N,
                                     KEY_MOD2 | KEY_O,
                                     KEY_MOD2 | KEY_P,
                                     KEY_MOD2 | KEY_Q,
                                     KEY_MOD2 | KEY_R,
                                     KEY_MOD2 | KEY_S,
                                     KEY_MOD2 | KEY_T,
                                     KEY_MOD2 | KEY_U,
                                     KEY_MOD2 | KEY_V,
                                     KEY_MOD2 | KEY_W,
                                     KEY_MOD2 | KEY_X,
                                     KEY_MOD2 | KEY_Y,
                                     KEY_MOD2 | KEY_Z,
                                     KEY_MOD2 | KEY_NUMBERSIGN,
                                     KEY_MOD2 | KEY_COLON,
                                     KEY_MOD2 | KEY_SEMICOLON,
                                     KEY_MOD2 | KEY_QUOTELEFT,
                                     KEY_MOD2 | KEY_QUOTERIGHT,
                                     KEY_MOD2 | KEY_BRACKETLEFT,
                                     KEY_MOD2 | KEY_BRACKETRIGHT,
                                     KEY_MOD2 | KEY_RIGHTCURLYBRACKET,
                                     KEY_MOD2 | KEY_POINT,
                                     KEY_MOD2 | KEY_COMMA,
                                     KEY_MOD2 | KEY_TILDE,

                                     KEY_MOD2 | KEY_F1,
                                     KEY_MOD2 | KEY_F2,
                                     KEY_MOD2 | KEY_F3,
                                     KEY_MOD2 | KEY_F4,
                                     KEY_MOD2 | KEY_F5,
                                     KEY_MOD2 | KEY_F6,
                                     KEY_MOD2 | KEY_F7,
                                     KEY_MOD2 | KEY_F8,
                                     KEY_MOD2 | KEY_F9,
                                     KEY_MOD2 | KEY_F10,
                                     KEY_MOD2 | KEY_F11,
                                     KEY_MOD2 | KEY_F12,
                                     KEY_MOD2 | KEY_F13,
                                     KEY_MOD2 | KEY_F14,
                                     KEY_MOD2 | KEY_F15,
                                     KEY_MOD2 | KEY_F16,

                                     KEY_MOD2 | KEY_DOWN,
                                     KEY_MOD2 | KEY_UP,
                                     KEY_MOD2 | KEY_LEFT,
                                     KEY_MOD2 | KEY_RIGHT,
                                     KEY_MOD2 | KEY_HOME,
                                     KEY_MOD2 | KEY_END,
                                     KEY_MOD2 | KEY_PAGEUP,
                                     KEY_MOD2 | KEY_PAGEDOWN,
                                     KEY_MOD2 | KEY_RETURN,
                                     KEY_MOD2 | KEY_SPACE,
                                     KEY_MOD2 | KEY_BACKSPACE,
                                     KEY_MOD2 | KEY_INSERT,
                                     KEY_MOD2 | KEY_DELETE,
                                     KEY_MOD2 | KEY_EQUAL,

                                     KEY_SHIFT | KEY_MOD2 | KEY_0,
                                     KEY_SHIFT | KEY_MOD2 | KEY_1,
                                     KEY_SHIFT | KEY_MOD2 | KEY_2,
                                     KEY_SHIFT | KEY_MOD2 | KEY_3,
                                     KEY_SHIFT | KEY_MOD2 | KEY_4,
                                     KEY_SHIFT | KEY_MOD2 | KEY_5,
                                     KEY_SHIFT | KEY_MOD2 | KEY_6,
                                     KEY_SHIFT | KEY_MOD2 | KEY_7,
                                     KEY_SHIFT | KEY_MOD2 | KEY_8,
                                     KEY_SHIFT | KEY_MOD2 | KEY_9,
                                     KEY_SHIFT | KEY_MOD2 | KEY_A,
                                     KEY_SHIFT | KEY_MOD2 | KEY_B,
                                     KEY_SHIFT | KEY_MOD2 | KEY_C,
                                     KEY_SHIFT | KEY_MOD2 | KEY_D,
                                     KEY_SHIFT | KEY_MOD2 | KEY_E,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F,
                                     KEY_SHIFT | KEY_MOD2 | KEY_G,
                                     KEY_SHIFT | KEY_MOD2 | KEY_H,
                                     KEY_SHIFT | KEY_MOD2 | KEY_I,
                                     KEY_SHIFT | KEY_MOD2 | KEY_J,
                                     KEY_SHIFT | KEY_MOD2 | KEY_K,
                                     KEY_SHIFT | KEY_MOD2 | KEY_L,
                                     KEY_SHIFT | KEY_MOD2 | KEY_M,
                                     KEY_SHIFT | KEY_MOD2 | KEY_N,
                                     KEY_SHIFT | KEY_MOD2 | KEY_O,
                                     KEY_SHIFT | KEY_MOD2 | KEY_P,
                                     KEY_SHIFT | KEY_MOD2 | KEY_Q,
                                     KEY_SHIFT | KEY_MOD2 | KEY_R,
                                     KEY_SHIFT | KEY_MOD2 | KEY_S,
                                     KEY_SHIFT | KEY_MOD2 | KEY_T,
                                     KEY_SHIFT | KEY_MOD2 | KEY_U,
                                     KEY_SHIFT | KEY_MOD2 | KEY_V,
                                     KEY_SHIFT | KEY_MOD2 | KEY_W,
                                     KEY_SHIFT | KEY_MOD2 | KEY_X,
                                     KEY_SHIFT | KEY_MOD2 | KEY_Y,
                                     KEY_SHIFT | KEY_MOD2 | KEY_Z,
                                     KEY_SHIFT | KEY_MOD2 | KEY_NUMBERSIGN,
                                     KEY_SHIFT | KEY_MOD2 | KEY_COLON,
                                     KEY_SHIFT | KEY_MOD2 | KEY_SEMICOLON,
                                     KEY_SHIFT | KEY_MOD2 | KEY_QUOTELEFT,
                                     KEY_SHIFT | KEY_MOD2 | KEY_QUOTERIGHT,
                                     KEY_SHIFT | KEY_MOD2 | KEY_BRACKETLEFT,
                                     KEY_SHIFT | KEY_MOD2 | KEY_BRACKETRIGHT,
                                     KEY_SHIFT | KEY_MOD2 | KEY_RIGHTCURLYBRACKET,
                                     KEY_SHIFT | KEY_MOD2 | KEY_POINT,
                                     KEY_SHIFT | KEY_MOD2 | KEY_COMMA,
                                     KEY_SHIFT | KEY_MOD2 | KEY_TILDE,

                                     KEY_SHIFT | KEY_MOD2 | KEY_F1,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F2,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F3,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F4,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F5,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F6,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F7,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F8,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F9,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F10,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F11,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F12,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F13,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F14,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F15,
                                     KEY_SHIFT | KEY_MOD2 | KEY_F16,

                                     KEY_SHIFT | KEY_MOD2 | KEY_DOWN,
                                     KEY_SHIFT | KEY_MOD2 | KEY_UP,
                                     KEY_SHIFT | KEY_MOD2 | KEY_LEFT,
                                     KEY_SHIFT | KEY_MOD2 | KEY_RIGHT,
                                     KEY_SHIFT | KEY_MOD2 | KEY_HOME,
                                     KEY_SHIFT | KEY_MOD2 | KEY_END,
                                     KEY_SHIFT | KEY_MOD2 | KEY_PAGEUP,
                                     KEY_SHIFT | KEY_MOD2 | KEY_PAGEDOWN,
                                     KEY_SHIFT | KEY_MOD2 | KEY_RETURN,
                                     KEY_SHIFT | KEY_MOD2 | KEY_ESCAPE,
                                     KEY_SHIFT | KEY_MOD2 | KEY_SPACE,
                                     KEY_SHIFT | KEY_MOD2 | KEY_BACKSPACE,
                                     KEY_SHIFT | KEY_MOD2 | KEY_INSERT,
                                     KEY_SHIFT | KEY_MOD2 | KEY_DELETE,
                                     KEY_SHIFT | KEY_MOD2 | KEY_EQUAL,

                                     KEY_MOD1 | KEY_MOD2 | KEY_0,
                                     KEY_MOD1 | KEY_MOD2 | KEY_1,
                                     KEY_MOD1 | KEY_MOD2 | KEY_2,
                                     KEY_MOD1 | KEY_MOD2 | KEY_3,
                                     KEY_MOD1 | KEY_MOD2 | KEY_4,
                                     KEY_MOD1 | KEY_MOD2 | KEY_5,
                                     KEY_MOD1 | KEY_MOD2 | KEY_6,
                                     KEY_MOD1 | KEY_MOD2 | KEY_7,
                                     KEY_MOD1 | KEY_MOD2 | KEY_8,
                                     KEY_MOD1 | KEY_MOD2 | KEY_9,
                                     KEY_MOD1 | KEY_MOD2 | KEY_A,
                                     KEY_MOD1 | KEY_MOD2 | KEY_B,
                                     KEY_MOD1 | KEY_MOD2 | KEY_C,
                                     KEY_MOD1 | KEY_MOD2 | KEY_D,
                                     KEY_MOD1 | KEY_MOD2 | KEY_E,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F,
                                     KEY_MOD1 | KEY_MOD2 | KEY_G,
                                     KEY_MOD1 | KEY_MOD2 | KEY_H,
                                     KEY_MOD1 | KEY_MOD2 | KEY_I,
                                     KEY_MOD1 | KEY_MOD2 | KEY_J,
                                     KEY_MOD1 | KEY_MOD2 | KEY_K,
                                     KEY_MOD1 | KEY_MOD2 | KEY_L,
                                     KEY_MOD1 | KEY_MOD2 | KEY_M,
                                     KEY_MOD1 | KEY_MOD2 | KEY_N,
                                     KEY_MOD1 | KEY_MOD2 | KEY_O,
                                     KEY_MOD1 | KEY_MOD2 | KEY_P,
                                     KEY_MOD1 | KEY_MOD2 | KEY_Q,
                                     KEY_MOD1 | KEY_MOD2 | KEY_R,
                                     KEY_MOD1 | KEY_MOD2 | KEY_S,
                                     KEY_MOD1 | KEY_MOD2 | KEY_T,
                                     KEY_MOD1 | KEY_MOD2 | KEY_U,
                                     KEY_MOD1 | KEY_MOD2 | KEY_V,
                                     KEY_MOD1 | KEY_MOD2 | KEY_W,
                                     KEY_MOD1 | KEY_MOD2 | KEY_X,
                                     KEY_MOD1 | KEY_MOD2 | KEY_Y,
                                     KEY_MOD1 | KEY_MOD2 | KEY_Z,
                                     KEY_MOD1 | KEY_MOD2 | KEY_NUMBERSIGN,
                                     KEY_MOD1 | KEY_MOD2 | KEY_COLON,
                                     KEY_MOD1 | KEY_MOD2 | KEY_SEMICOLON,
                                     KEY_MOD1 | KEY_MOD2 | KEY_QUOTELEFT,
                                     KEY_MOD1 | KEY_MOD2 | KEY_QUOTERIGHT,
                                     KEY_MOD1 | KEY_MOD2 | KEY_BRACKETLEFT,
                                     KEY_MOD1 | KEY_MOD2 | KEY_BRACKETRIGHT,
                                     KEY_MOD1 | KEY_MOD2 | KEY_RIGHTCURLYBRACKET,
                                     KEY_MOD1 | KEY_MOD2 | KEY_POINT,
                                     KEY_MOD1 | KEY_MOD2 | KEY_COMMA,
                                     KEY_MOD1 | KEY_MOD2 | KEY_TILDE,
                                     KEY_MOD1 | KEY_MOD2 | KEY_EQUAL,

                                     KEY_MOD1 | KEY_MOD2 | KEY_F1,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F2,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F3,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F4,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F5,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F6,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F7,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F8,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F9,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F10,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F11,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F12,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F13,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F14,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F15,
                                     KEY_MOD1 | KEY_MOD2 | KEY_F16,

                                     KEY_MOD1 | KEY_MOD2 | KEY_DOWN,
                                     KEY_MOD1 | KEY_MOD2 | KEY_UP,
                                     KEY_MOD1 | KEY_MOD2 | KEY_LEFT,
                                     KEY_MOD1 | KEY_MOD2 | KEY_RIGHT,
                                     KEY_MOD1 | KEY_MOD2 | KEY_HOME,
                                     KEY_MOD1 | KEY_MOD2 | KEY_END,
                                     KEY_MOD1 | KEY_MOD2 | KEY_PAGEUP,
                                     KEY_MOD1 | KEY_MOD2 | KEY_PAGEDOWN,
                                     KEY_MOD1 | KEY_MOD2 | KEY_RETURN,
                                     KEY_MOD1 | KEY_MOD2 | KEY_SPACE,
                                     KEY_MOD1 | KEY_MOD2 | KEY_BACKSPACE,
                                     KEY_MOD1 | KEY_MOD2 | KEY_INSERT,
                                     KEY_MOD1 | KEY_MOD2 | KEY_DELETE,

                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_0,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_1,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_2,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_3,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_4,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_5,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_6,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_7,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_8,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_9,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_A,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_B,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_C,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_D,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_E,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_G,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_H,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_I,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_J,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_K,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_L,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_M,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_N,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_O,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_P,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_Q,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_R,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_S,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_T,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_U,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_V,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_W,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_X,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_Y,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_Z,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_NUMBERSIGN,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_COLON,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_SEMICOLON,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_QUOTELEFT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_QUOTERIGHT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_BRACKETLEFT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_BRACKETRIGHT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_RIGHTCURLYBRACKET,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_POINT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_COMMA,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_TILDE,

                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F1,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F2,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F3,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F4,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F5,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F6,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F7,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F8,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F9,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F10,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F11,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F12,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F13,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F14,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F15,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_F16,

                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_DOWN,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_UP,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_LEFT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_RIGHT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_HOME,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_END,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_PAGEUP,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_PAGEDOWN,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_RETURN,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_SPACE,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_BACKSPACE,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_INSERT,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_DELETE,
                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_EQUAL

#ifdef __APPLE__
                                     ,
                                     KEY_MOD3 | KEY_0,
                                     KEY_MOD3 | KEY_1,
                                     KEY_MOD3 | KEY_2,
                                     KEY_MOD3 | KEY_3,
                                     KEY_MOD3 | KEY_4,
                                     KEY_MOD3 | KEY_5,
                                     KEY_MOD3 | KEY_6,
                                     KEY_MOD3 | KEY_7,
                                     KEY_MOD3 | KEY_8,
                                     KEY_MOD3 | KEY_9,
                                     KEY_MOD3 | KEY_A,
                                     KEY_MOD3 | KEY_B,
                                     KEY_MOD3 | KEY_C,
                                     KEY_MOD3 | KEY_D,
                                     KEY_MOD3 | KEY_E,
                                     KEY_MOD3 | KEY_F,
                                     KEY_MOD3 | KEY_G,
                                     KEY_MOD3 | KEY_H,
                                     KEY_MOD3 | KEY_I,
                                     KEY_MOD3 | KEY_J,
                                     KEY_MOD3 | KEY_K,
                                     KEY_MOD3 | KEY_L,
                                     KEY_MOD3 | KEY_M,
                                     KEY_MOD3 | KEY_N,
                                     KEY_MOD3 | KEY_O,
                                     KEY_MOD3 | KEY_P,
                                     KEY_MOD3 | KEY_Q,
                                     KEY_MOD3 | KEY_R,
                                     KEY_MOD3 | KEY_S,
                                     KEY_MOD3 | KEY_T,
                                     KEY_MOD3 | KEY_U,
                                     KEY_MOD3 | KEY_V,
                                     KEY_MOD3 | KEY_W,
                                     KEY_MOD3 | KEY_X,
                                     KEY_MOD3 | KEY_Y,
                                     KEY_MOD3 | KEY_Z,
                                     KEY_MOD2 | KEY_NUMBERSIGN,
                                     KEY_MOD3 | KEY_COLON,
                                     KEY_MOD3 | KEY_SEMICOLON,
                                     KEY_MOD3 | KEY_QUOTELEFT,
                                     KEY_MOD3 | KEY_QUOTERIGHT,
                                     KEY_MOD3 | KEY_BRACKETLEFT,
                                     KEY_MOD3 | KEY_BRACKETRIGHT,
                                     KEY_MOD3 | KEY_RIGHTCURLYBRACKET,
                                     KEY_MOD3 | KEY_POINT,
                                     KEY_MOD3 | KEY_COMMA,
                                     KEY_MOD3 | KEY_TILDE,
                                     KEY_MOD3 | KEY_TAB,

                                     KEY_MOD3 | KEY_F1,
                                     KEY_MOD3 | KEY_F2,
                                     KEY_MOD3 | KEY_F3,
                                     KEY_MOD3 | KEY_F4,
                                     KEY_MOD3 | KEY_F5,
                                     KEY_MOD3 | KEY_F6,
                                     KEY_MOD3 | KEY_F7,
                                     KEY_MOD3 | KEY_F8,
                                     KEY_MOD3 | KEY_F9,
                                     KEY_MOD3 | KEY_F10,
                                     KEY_MOD3 | KEY_F11,
                                     KEY_MOD3 | KEY_F12,
                                     KEY_MOD3 | KEY_F13,
                                     KEY_MOD3 | KEY_F14,
                                     KEY_MOD3 | KEY_F15,
                                     KEY_MOD3 | KEY_F16,

                                     KEY_MOD3 | KEY_DOWN,
                                     KEY_MOD3 | KEY_UP,
                                     KEY_MOD3 | KEY_LEFT,
                                     KEY_MOD3 | KEY_RIGHT,
                                     KEY_MOD3 | KEY_HOME,
                                     KEY_MOD3 | KEY_END,
                                     KEY_MOD3 | KEY_PAGEUP,
                                     KEY_MOD3 | KEY_PAGEDOWN,
                                     KEY_MOD3 | KEY_RETURN,
                                     KEY_MOD3 | KEY_SPACE,
                                     KEY_MOD3 | KEY_BACKSPACE,
                                     KEY_MOD3 | KEY_INSERT,
                                     KEY_MOD3 | KEY_DELETE,

                                     KEY_MOD3 | KEY_ADD,
                                     KEY_MOD3 | KEY_SUBTRACT,
                                     KEY_MOD3 | KEY_MULTIPLY,
                                     KEY_MOD3 | KEY_DIVIDE,
                                     KEY_MOD3 | KEY_EQUAL,

                                     KEY_SHIFT | KEY_MOD3 | KEY_0,
                                     KEY_SHIFT | KEY_MOD3 | KEY_1,
                                     KEY_SHIFT | KEY_MOD3 | KEY_2,
                                     KEY_SHIFT | KEY_MOD3 | KEY_3,
                                     KEY_SHIFT | KEY_MOD3 | KEY_4,
                                     KEY_SHIFT | KEY_MOD3 | KEY_5,
                                     KEY_SHIFT | KEY_MOD3 | KEY_6,
                                     KEY_SHIFT | KEY_MOD3 | KEY_7,
                                     KEY_SHIFT | KEY_MOD3 | KEY_8,
                                     KEY_SHIFT | KEY_MOD3 | KEY_9,
                                     KEY_SHIFT | KEY_MOD3 | KEY_A,
                                     KEY_SHIFT | KEY_MOD3 | KEY_B,
                                     KEY_SHIFT | KEY_MOD3 | KEY_C,
                                     KEY_SHIFT | KEY_MOD3 | KEY_D,
                                     KEY_SHIFT | KEY_MOD3 | KEY_E,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F,
                                     KEY_SHIFT | KEY_MOD3 | KEY_G,
                                     KEY_SHIFT | KEY_MOD3 | KEY_H,
                                     KEY_SHIFT | KEY_MOD3 | KEY_I,
                                     KEY_SHIFT | KEY_MOD3 | KEY_J,
                                     KEY_SHIFT | KEY_MOD3 | KEY_K,
                                     KEY_SHIFT | KEY_MOD3 | KEY_L,
                                     KEY_SHIFT | KEY_MOD3 | KEY_M,
                                     KEY_SHIFT | KEY_MOD3 | KEY_N,
                                     KEY_SHIFT | KEY_MOD3 | KEY_O,
                                     KEY_SHIFT | KEY_MOD3 | KEY_P,
                                     KEY_SHIFT | KEY_MOD3 | KEY_Q,
                                     KEY_SHIFT | KEY_MOD3 | KEY_R,
                                     KEY_SHIFT | KEY_MOD3 | KEY_S,
                                     KEY_SHIFT | KEY_MOD3 | KEY_T,
                                     KEY_SHIFT | KEY_MOD3 | KEY_U,
                                     KEY_SHIFT | KEY_MOD3 | KEY_V,
                                     KEY_SHIFT | KEY_MOD3 | KEY_W,
                                     KEY_SHIFT | KEY_MOD3 | KEY_X,
                                     KEY_SHIFT | KEY_MOD3 | KEY_Y,
                                     KEY_SHIFT | KEY_MOD3 | KEY_Z,
                                     KEY_SHIFT | KEY_MOD3 | KEY_NUMBERSIGN,
                                     KEY_SHIFT | KEY_MOD3 | KEY_COLON,
                                     KEY_SHIFT | KEY_MOD3 | KEY_SEMICOLON,
                                     KEY_SHIFT | KEY_MOD3 | KEY_QUOTELEFT,
                                     KEY_SHIFT | KEY_MOD3 | KEY_QUOTERIGHT,
                                     KEY_SHIFT | KEY_MOD3 | KEY_BRACKETLEFT,
                                     KEY_SHIFT | KEY_MOD3 | KEY_BRACKETRIGHT,
                                     KEY_SHIFT | KEY_MOD3 | KEY_RIGHTCURLYBRACKET,
                                     KEY_SHIFT | KEY_MOD3 | KEY_POINT,
                                     KEY_SHIFT | KEY_MOD3 | KEY_COMMA,
                                     KEY_SHIFT | KEY_MOD3 | KEY_TILDE,
                                     KEY_SHIFT | KEY_MOD3 | KEY_TAB,

                                     KEY_SHIFT | KEY_MOD3 | KEY_F1,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F2,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F3,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F4,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F5,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F6,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F7,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F8,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F9,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F10,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F11,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F12,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F13,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F14,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F15,
                                     KEY_SHIFT | KEY_MOD3 | KEY_F16,

                                     KEY_SHIFT | KEY_MOD3 | KEY_DOWN,
                                     KEY_SHIFT | KEY_MOD3 | KEY_UP,
                                     KEY_SHIFT | KEY_MOD3 | KEY_LEFT,
                                     KEY_SHIFT | KEY_MOD3 | KEY_RIGHT,
                                     KEY_SHIFT | KEY_MOD3 | KEY_HOME,
                                     KEY_SHIFT | KEY_MOD3 | KEY_END,
                                     KEY_SHIFT | KEY_MOD3 | KEY_PAGEUP,
                                     KEY_SHIFT | KEY_MOD3 | KEY_PAGEDOWN,
                                     KEY_SHIFT | KEY_MOD3 | KEY_RETURN,
                                     KEY_SHIFT | KEY_MOD3 | KEY_ESCAPE,
                                     KEY_SHIFT | KEY_MOD3 | KEY_SPACE,
                                     KEY_SHIFT | KEY_MOD3 | KEY_BACKSPACE,
                                     KEY_SHIFT | KEY_MOD3 | KEY_INSERT,
                                     KEY_SHIFT | KEY_MOD3 | KEY_DELETE,
                                     KEY_SHIFT | KEY_MOD3 | KEY_EQUAL
#endif
};

const sal_uInt16 KEYCODE_ARRAY_SIZE = std::size(KEYCODE_ARRAY);

/** select the entry, which match the current key input ... excepting
    keys, which are used for the dialog itself.
  */

IMPL_LINK(SfxAcceleratorConfigPage, KeyInputHdl, const KeyEvent&, rKey, bool)
{
    vcl::KeyCode aCode1 = rKey.GetKeyCode();
    sal_uInt16 nCode1 = aCode1.GetCode();
    sal_uInt16 nMod1 = aCode1.GetModifier();

    // is it related to our list box ?
    if ((nCode1 == KEY_DOWN) || (nCode1 == KEY_UP) || (nCode1 == KEY_LEFT) || (nCode1 == KEY_RIGHT)
        || (nCode1 == KEY_PAGEUP) || (nCode1 == KEY_PAGEDOWN))
        // no - handle it as normal dialog input
        return false;

    for (int i = 0, nCount = m_xEntriesBox->n_children(); i < nCount; ++i)
    {
        TAccInfo* pUserData = weld::fromId<TAccInfo*>(m_xEntriesBox->get_id(i));
        if (pUserData)
        {
            sal_uInt16 nCode2 = pUserData->m_aKey.GetCode();
            sal_uInt16 nMod2 = pUserData->m_aKey.GetModifier();

            if (nCode1 == nCode2 && nMod1 == nMod2)
            {
                m_xEntriesBox->select(i);
                m_xEntriesBox->scroll_to_row(i);
                return true;
            }
        }
    }

    // no - handle it as normal dialog input
    return false;
}

SfxAcceleratorConfigPage::SfxAcceleratorConfigPage(weld::Container* pPage,
                                                   weld::DialogController* pController,
                                                   const SfxItemSet& aSet)
    : SfxTabPage(pPage, pController, u"cui/ui/accelconfigpage.ui"_ustr, u"AccelConfigPage"_ustr,
                 &aSet)
#if HAVE_FEATURE_SCRIPTING
    , m_pMacroInfoItem()
#endif
    , aLoadAccelConfigStr(CuiResId(RID_CUISTR_LOADACCELCONFIG))
    , aSaveAccelConfigStr(CuiResId(RID_CUISTR_SAVEACCELCONFIG))
    , aFilterAllStr(SfxResId(STR_SFX_FILTERNAME_ALL))
    , aFilterCfgStr(CuiResId(RID_CUISTR_FILTERNAME_CFG))
    , m_bStylesInfoInitialized(false)
    , m_aUpdateDataTimer("SfxAcceleratorConfigPage UpdateDataTimer")
    , m_xEntriesBox(m_xBuilder->weld_tree_view(u"shortcuts"_ustr))
    , m_xOfficeButton(m_xBuilder->weld_radio_button(u"office"_ustr))
    , m_xModuleButton(m_xBuilder->weld_radio_button(u"module"_ustr))
    , m_xChangeButton(m_xBuilder->weld_button(u"change"_ustr))
    , m_xRemoveButton(m_xBuilder->weld_button(u"delete"_ustr))
    , m_xGroupLBox(new CuiConfigGroupListBox(m_xBuilder->weld_tree_view(u"category"_ustr)))
    , m_xFunctionBox(new CuiConfigFunctionListBox(m_xBuilder->weld_tree_view(u"function"_ustr)))
    , m_xKeyBox(m_xBuilder->weld_tree_view(u"keys"_ustr))
    , m_xSearchEdit(m_xBuilder->weld_entry(u"searchEntry"_ustr))
    , m_xLoadButton(m_xBuilder->weld_button(u"load"_ustr))
    , m_xSaveButton(m_xBuilder->weld_button(u"save"_ustr))
    , m_xResetButton(m_xBuilder->weld_button(u"reset"_ustr))
{
    Size aSize(m_xEntriesBox->get_approximate_digit_width() * 40,
               m_xEntriesBox->get_height_rows(10));
    m_xEntriesBox->set_size_request(aSize.Width(), aSize.Height());
    aSize = Size(m_xEntriesBox->get_approximate_digit_width() * 19,
                 m_xEntriesBox->get_height_rows(9));
    m_xGroupLBox->set_size_request(aSize.Width(), aSize.Height());
    aSize = Size(m_xEntriesBox->get_approximate_digit_width() * 21,
                 m_xEntriesBox->get_height_rows(9));
    m_xFunctionBox->set_size_request(aSize.Width(), aSize.Height());
    aSize = Size(m_xEntriesBox->get_approximate_digit_width() * 20,
                 m_xEntriesBox->get_height_rows(9));
    m_xKeyBox->set_size_request(aSize.Width(), aSize.Height());

    // install handler functions
    m_xChangeButton->connect_clicked(LINK(this, SfxAcceleratorConfigPage, ChangeHdl));
    m_xRemoveButton->connect_clicked(LINK(this, SfxAcceleratorConfigPage, RemoveHdl));
    m_xEntriesBox->connect_selection_changed(LINK(this, SfxAcceleratorConfigPage, SelectHdl));
    m_xEntriesBox->connect_key_press(LINK(this, SfxAcceleratorConfigPage, KeyInputHdl));
    m_xGroupLBox->connect_changed(LINK(this, SfxAcceleratorConfigPage, SelectHdl));
    m_xFunctionBox->connect_changed(LINK(this, SfxAcceleratorConfigPage, SelectHdl));
    m_xKeyBox->connect_selection_changed(LINK(this, SfxAcceleratorConfigPage, SelectHdl));
    m_xLoadButton->connect_clicked(LINK(this, SfxAcceleratorConfigPage, Load));
    m_xSaveButton->connect_clicked(LINK(this, SfxAcceleratorConfigPage, Save));
    m_xResetButton->connect_clicked(LINK(this, SfxAcceleratorConfigPage, Default));
    m_xOfficeButton->connect_toggled(LINK(this, SfxAcceleratorConfigPage, RadioHdl));
    m_xSearchEdit->connect_changed(LINK(this, SfxAcceleratorConfigPage, SearchUpdateHdl));
    m_xSearchEdit->connect_focus_out(LINK(this, SfxAcceleratorConfigPage, FocusOut_Impl));

    // detect max keyname width
    int nMaxWidth = 0;
    for (unsigned short i : KEYCODE_ARRAY)
    {
        int nTmp = m_xEntriesBox->get_pixel_size(vcl::KeyCode(i).GetName()).Width();
        if (nTmp > nMaxWidth)
            nMaxWidth = nTmp;
    }
    // recalc second tab
    auto nNewTab = nMaxWidth + 5; // additional space

    // initialize Entriesbox
    std::vector<int> aWidths{ nNewTab };
    m_xEntriesBox->set_column_fixed_widths(aWidths);

    //Initialize search util
    m_options.AlgorithmType2 = util::SearchAlgorithms2::ABSOLUTE;
    m_options.transliterateFlags |= TransliterationFlags::IGNORE_CASE;
    m_options.searchFlag
        |= (util::SearchFlags::REG_NOT_BEGINOFLINE | util::SearchFlags::REG_NOT_ENDOFLINE);
    // initialize GroupBox
    m_xGroupLBox->SetFunctionListBox(m_xFunctionBox.get());

    // initialize KeyBox
    m_xKeyBox->make_sorted();

    m_aUpdateDataTimer.SetInvokeHandler(LINK(this, SfxAcceleratorConfigPage, ImplUpdateDataHdl));
    m_aUpdateDataTimer.SetTimeout(EDIT_UPDATEDATA_TIMEOUT);
}

SfxAcceleratorConfigPage::~SfxAcceleratorConfigPage()
{
    // free memory - remove all dynamic user data
    for (int i = 0, nCount = m_xEntriesBox->n_children(); i < nCount; ++i)
    {
        TAccInfo* pUserData = weld::fromId<TAccInfo*>(m_xEntriesBox->get_id(i));
        delete pUserData;
    }
}

void SfxAcceleratorConfigPage::InitAccCfg()
{
    // already initialized ?
    if (m_xContext.is())
        return// yes -> do nothing

    try
    {
        // no - initialize this instance
        m_xContext = comphelper::getProcessComponentContext();

        m_xUICmdDescription = frame::theUICommandDescription::get(m_xContext);

        // get the current active frame, which should be our "parent"
        // for this session
        m_xFrame = GetFrame();
        if (!m_xFrame.is())
        {
            uno::Reference<frame::XDesktop2> xDesktop = frame::Desktop::create(m_xContext);
            m_xFrame = xDesktop->getActiveFrame();
        }

        // identify module
        uno::Reference<frame::XModuleManager2> xModuleManager
            = frame::ModuleManager::create(m_xContext);
        m_sModuleLongName = xModuleManager->identify(m_xFrame);
        comphelper::SequenceAsHashMap lModuleProps(xModuleManager->getByName(m_sModuleLongName));
        m_sModuleUIName
            = lModuleProps.getUnpackedValueOrDefault(u"ooSetupFactoryUIName"_ustr, OUString());

        // get global accelerator configuration
        m_xGlobal = css::ui::GlobalAcceleratorConfiguration::create(m_xContext);

        // get module accelerator configuration

        uno::Reference<ui::XModuleUIConfigurationManagerSupplier> xModuleCfgSupplier(
            ui::theModuleUIConfigurationManagerSupplier::get(m_xContext));
        uno::Reference<ui::XUIConfigurationManager> xUICfgManager
            = xModuleCfgSupplier->getUIConfigurationManager(m_sModuleLongName);
        m_xModule = xUICfgManager->getShortCutManager();
    }
    catch (const uno::RuntimeException&)
    {
        throw;
    }
    catch (const uno::Exception&)
    {
        m_xContext.clear();
    }
}

void SfxAcceleratorConfigPage::Init(const uno::Reference<ui::XAcceleratorConfiguration>& xAccMgr)
{
    if (!xAccMgr.is())
        return;

    if (!m_bStylesInfoInitialized)
    {
        uno::Reference<frame::XController> xController;
        uno::Reference<frame::XModel> xModel;
        if (m_xFrame.is())
            xController = m_xFrame->getController();
        if (xController.is())
            xModel = xController->getModel();

        m_aStylesInfo.init(m_sModuleLongName, xModel);
        m_xGroupLBox->SetStylesInfo(&m_aStylesInfo);
        m_bStylesInfoInitialized = true;
    }

    // Insert all editable accelerators into list box. It is possible
    // that some accelerators are not mapped on the current system/keyboard
    // but we don't want to lose these mappings.
    for (sal_Int32 i1 = 0; i1 < KEYCODE_ARRAY_SIZE; ++i1)
    {
        vcl::KeyCode aKey = KEYCODE_ARRAY[i1];
        OUString sKey = aKey.GetName();
        if (sKey.isEmpty())
            continue;
        TAccInfo* pEntry = new TAccInfo(i1, 0 /*nListPos*/, aKey);
        m_xEntriesBox->append(weld::toId(pEntry), sKey);
        int nPos = m_xEntriesBox->n_children() - 1;
        m_xEntriesBox->set_text(nPos, OUString(), 1);
        m_xEntriesBox->set_sensitive(nPos, true);
    }

    // Assign all commands to its shortcuts - reading the accelerator config.
    uno::Sequence<awt::KeyEvent> lKeys = xAccMgr->getAllKeyEvents();
    sal_Int32 c2 = lKeys.getLength();
    sal_Int32 i2 = 0;

    for (i2 = 0; i2 < c2; ++i2)
    {
        const awt::KeyEvent& aAWTKey = lKeys[i2];
        OUString sCommand = xAccMgr->getCommandByKeyEvent(aAWTKey);
        OUString sLabel = GetLabel4Command(sCommand);
        vcl::KeyCode aKeyCode = svt::AcceleratorExecute::st_AWTKey2VCLKey(aAWTKey);
        sal_Int32 nPos = MapKeyCodeToPos(aKeyCode);

        if (nPos == -1)
            continue;

        m_xEntriesBox->set_text(nPos, sLabel, 1);

        TAccInfo* pEntry = weld::fromId<TAccInfo*>(m_xEntriesBox->get_id(nPos));
        pEntry->m_bIsConfigurable = true;

        pEntry->m_sCommand = sCommand;
    }

    // Map the VCL hardcoded key codes and mark them as not changeable
    size_t c3 = Application::GetReservedKeyCodeCount();
    size_t i3 = 0;
    for (i3 = 0; i3 < c3; ++i3)
    {
        const vcl::KeyCode* pKeyCode = Application::GetReservedKeyCode(i3);
        sal_Int32 nPos = MapKeyCodeToPos(*pKeyCode);

        if (nPos == -1)
            continue;

        // Hardcoded function mapped so no ID possible and mark entry as not changeable
        TAccInfo* pEntry = weld::fromId<TAccInfo*>(m_xEntriesBox->get_id(nPos));
        pEntry->m_bIsConfigurable = false;

        m_xEntriesBox->set_sensitive(nPos, false);
    }
}

void SfxAcceleratorConfigPage::Apply(const uno::Reference<ui::XAcceleratorConfiguration>& xAccMgr)
{
    if (!xAccMgr.is())
        return;

    // Go through the list from the bottom to the top ...
    // because logical accelerator must be preferred instead of
    // physical ones!
    for (int i = 0, nCount = m_xEntriesBox->n_children(); i < nCount; ++i)
    {
        TAccInfo* pUserData = weld::fromId<TAccInfo*>(m_xEntriesBox->get_id(i));
        OUString sCommand;
        awt::KeyEvent aAWTKey;

        if (pUserData)
        {
            sCommand = pUserData->m_sCommand;
            aAWTKey = svt::AcceleratorExecute::st_VCLKey2AWTKey(pUserData->m_aKey);
        }

        try
        {
            if (!sCommand.isEmpty())
                xAccMgr->setKeyEvent(aAWTKey, sCommand);
            else
                xAccMgr->removeKeyEvent(aAWTKey);
        }
        catch (const uno::RuntimeException&)
        {
            throw;
        }
        catch (const uno::Exception&)
        {
        }
    }
}

void SfxAcceleratorConfigPage::ResetConfig() { m_xEntriesBox->clear(); }

IMPL_LINK_NOARG(SfxAcceleratorConfigPage, ImplUpdateDataHdl, Timer*, void)
{
    SelectHdl(m_xGroupLBox->get_widget());
}

IMPL_LINK_NOARG(SfxAcceleratorConfigPage, SearchUpdateHdl, weld::Entry&, void)
{
    m_aUpdateDataTimer.Start();
}

IMPL_LINK_NOARG(SfxAcceleratorConfigPage, FocusOut_Impl, weld::Widget&, void)
{
    if (m_aUpdateDataTimer.IsActive())
    {
        m_aUpdateDataTimer.Stop();
        m_aUpdateDataTimer.Invoke();
    }
}

IMPL_LINK_NOARG(SfxAcceleratorConfigPage, Load, weld::Button&, void)
{
    // ask for filename, where we should load the new config data from
    StartFileDialog(StartFileDialogType::Open, aLoadAccelConfigStr);
}

IMPL_LINK_NOARG(SfxAcceleratorConfigPage, Save, weld::Button&, void)
{
    StartFileDialog(StartFileDialogType::SaveAs, aSaveAccelConfigStr);
}

IMPL_LINK_NOARG(SfxAcceleratorConfigPage, Default, weld::Button&, void)
{
    uno::Reference<form::XReset> xReset(m_xAct, uno::UNO_QUERY);
    if (xReset.is())
        xReset->reset();

    m_xEntriesBox->freeze();
    ResetConfig();
    Init(m_xAct);
    m_xEntriesBox->thaw();
    m_xEntriesBox->select(0);
    SelectHdl(*m_xEntriesBox);
}

IMPL_LINK_NOARG(SfxAcceleratorConfigPage, ChangeHdl, weld::Button&, void)
{
    int nPos = m_xEntriesBox->get_selected_index();
    if (nPos == -1)
        return;

    TAccInfo* pEntry = weld::fromId<TAccInfo*>(m_xEntriesBox->get_id(nPos));
    OUString sNewCommand = m_xFunctionBox->GetCurCommand();
    OUString sLabel = m_xFunctionBox->GetCurLabel();
    if (sLabel.isEmpty())
        sLabel = GetLabel4Command(sNewCommand);

    pEntry->m_sCommand = sNewCommand;
    m_xEntriesBox->set_text(nPos, sLabel, 1);

    SelectHdl(m_xFunctionBox->get_widget());
}

IMPL_LINK_NOARG(SfxAcceleratorConfigPage, RemoveHdl, weld::Button&, void)
{
    // get selected entry
    int nPos = m_xEntriesBox->get_selected_index();
    if (nPos == -1)
        return;

    TAccInfo* pEntry = weld::fromId<TAccInfo*>(m_xEntriesBox->get_id(nPos));

    // remove function name from selected entry
    m_xEntriesBox->set_text(nPos, OUString(), 1);
    pEntry->m_sCommand.clear();

    SelectHdl(m_xFunctionBox->get_widget());
}

IMPL_LINK(SfxAcceleratorConfigPage, SelectHdl, weld::TreeView&, rListBox, void)
{
    if (&rListBox == m_xEntriesBox.get())
    {
        TAccInfo* pEntry = weld::fromId<TAccInfo*>(m_xEntriesBox->get_selected_id());

        OUString sPossibleNewCommand = m_xFunctionBox->GetCurCommand();

        m_xRemoveButton->set_sensitive(false);
        m_xChangeButton->set_sensitive(false);

        if (pEntry && pEntry->m_bIsConfigurable)
        {
            if (pEntry->isConfigured())
                m_xRemoveButton->set_sensitive(true);
            m_xChangeButton->set_sensitive(pEntry->m_sCommand != sPossibleNewCommand);
        }
    }
    else if (&rListBox == &m_xGroupLBox->get_widget())
    {
        m_xGroupLBox->GroupSelected();

        // Pause redraw (Do not redraw at each removal)
        m_xFunctionBox->freeze();
        // Apply the search filter to the functions list
        OUString aSearchTerm(m_xSearchEdit->get_text());
        int nMatchFound = applySearchFilter(aSearchTerm);
        // Resume redraw
        m_xFunctionBox->thaw();
        if (nMatchFound != -1)
        {
            m_xFunctionBox->select(nMatchFound);
            SelectHdl(m_xFunctionBox->get_widget());
        }
        else
        {
            m_xKeyBox->clear();
            m_xChangeButton->set_sensitive(false);
        }
    }
    else if (&rListBox == &m_xFunctionBox->get_widget())
    {
        m_xRemoveButton->set_sensitive(false);
        m_xChangeButton->set_sensitive(false);

        // #i36994 First selected can return null!
        TAccInfo* pEntry = weld::fromId<TAccInfo*>(m_xEntriesBox->get_selected_id());
        if (pEntry)
        {
            OUString sPossibleNewCommand = m_xFunctionBox->GetCurCommand();

            if (pEntry->m_bIsConfigurable)
            {
                if (pEntry->isConfigured())
                    m_xRemoveButton->set_sensitive(true);
                m_xChangeButton->set_sensitive(pEntry->m_sCommand != sPossibleNewCommand
                                               && !sPossibleNewCommand.isEmpty());
            }

            // update key box
            m_xKeyBox->clear();
            if (!sPossibleNewCommand.isEmpty())
            {
                for (int i = 0, nCount = m_xEntriesBox->n_children(); i < nCount; ++i)
                {
                    TAccInfo* pUserData = weld::fromId<TAccInfo*>(m_xEntriesBox->get_id(i));
                    if (pUserData && pUserData->m_sCommand == sPossibleNewCommand)
                    {
                        m_xKeyBox->append(weld::toId(pUserData), pUserData->m_aKey.GetName());
                    }
                }
            }
        }
    }
    else
    {
        // goto selected "key" entry of the key box
        int nP2 = -1;
        TAccInfo* pU2 = weld::fromId<TAccInfo*>(m_xKeyBox->get_selected_id());
        if (pU2)
            nP2 = MapKeyCodeToPos(pU2->m_aKey);
        if (nP2 != -1)
        {
            m_xEntriesBox->select(nP2);
            m_xEntriesBox->scroll_to_row(nP2);
            SelectHdl(*m_xEntriesBox);
        }
    }
}

--> --------------------

--> maximum size reached

--> --------------------

Messung V0.5
C=96 H=94 G=94

¤ Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.0.25Bemerkung:  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge