1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_cui.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir //----------------------------------------------- 32*cdf0e10cSrcweir // include own files 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir #include "acccfg.hxx" 35*cdf0e10cSrcweir #include "cfgutil.hxx" 36*cdf0e10cSrcweir #include <dialmgr.hxx> 37*cdf0e10cSrcweir 38*cdf0e10cSrcweir #include <sfx2/msg.hxx> 39*cdf0e10cSrcweir #include <sfx2/app.hxx> 40*cdf0e10cSrcweir #include <sfx2/filedlghelper.hxx> 41*cdf0e10cSrcweir #include <sfx2/minfitem.hxx> 42*cdf0e10cSrcweir #include <sfx2/sfxresid.hxx> 43*cdf0e10cSrcweir #include <svl/stritem.hxx> 44*cdf0e10cSrcweir 45*cdf0e10cSrcweir #include "cuires.hrc" 46*cdf0e10cSrcweir #include "acccfg.hrc" 47*cdf0e10cSrcweir 48*cdf0e10cSrcweir #include <svx/svxids.hrc> // SID_CHARMAP, SID_ATTR_SPECIALCHAR 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir //----------------------------------------------- 51*cdf0e10cSrcweir // include interface declarations 52*cdf0e10cSrcweir #include <com/sun/star/frame/XFramesSupplier.hpp> 53*cdf0e10cSrcweir #include <com/sun/star/frame/XFrame.hpp> 54*cdf0e10cSrcweir #include <com/sun/star/frame/XController.hpp> 55*cdf0e10cSrcweir #include <com/sun/star/frame/XModel.hpp> 56*cdf0e10cSrcweir #include <com/sun/star/form/XReset.hpp> 57*cdf0e10cSrcweir #include <com/sun/star/frame/XModuleManager.hpp> 58*cdf0e10cSrcweir #include <com/sun/star/ui/XModuleUIConfigurationManagerSupplier.hpp> 59*cdf0e10cSrcweir #include <com/sun/star/frame/XModuleManager.hpp> 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UI_XUICONFIGURATIONMANAGERSUPLLIER_HPP_ 62*cdf0e10cSrcweir #include <com/sun/star/ui/XUIConfigurationManagerSupplier.hpp> 63*cdf0e10cSrcweir #endif 64*cdf0e10cSrcweir #include <com/sun/star/ui/XUIConfigurationManager.hpp> 65*cdf0e10cSrcweir #include <com/sun/star/awt/KeyModifier.hpp> 66*cdf0e10cSrcweir #include <com/sun/star/embed/XTransactedObject.hpp> 67*cdf0e10cSrcweir #include <com/sun/star/embed/ElementModes.hpp> 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/TemplateDescription.hpp> 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir //----------------------------------------------- 72*cdf0e10cSrcweir // include other projects 73*cdf0e10cSrcweir #include <unotools/processfactory.hxx> 74*cdf0e10cSrcweir #include <svtools/acceleratorexecute.hxx> 75*cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 76*cdf0e10cSrcweir #include <svtools/svlbitm.hxx> 77*cdf0e10cSrcweir #include <vcl/svapp.hxx> 78*cdf0e10cSrcweir #include <vcl/help.hxx> 79*cdf0e10cSrcweir #include <rtl/ustrbuf.hxx> 80*cdf0e10cSrcweir #include <comphelper/sequenceashashmap.hxx> 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir //----------------------------------------------- 83*cdf0e10cSrcweir // namespaces 84*cdf0e10cSrcweir 85*cdf0e10cSrcweir #ifdef css 86*cdf0e10cSrcweir #error "ambigous praeprozessor directive for css ..." 87*cdf0e10cSrcweir #else 88*cdf0e10cSrcweir namespace css = ::com::sun::star; 89*cdf0e10cSrcweir #endif 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir using namespace com::sun::star; 92*cdf0e10cSrcweir 93*cdf0e10cSrcweir //----------------------------------------------- 94*cdf0e10cSrcweir // definitions 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir //----------------------------------------------- 97*cdf0e10cSrcweir static ::rtl::OUString SERVICE_STORAGEFACTORY = ::rtl::OUString::createFromAscii("com.sun.star.embed.StorageFactory" ); 98*cdf0e10cSrcweir static ::rtl::OUString SERVICE_UICONFIGMGR = ::rtl::OUString::createFromAscii("com.sun.star.ui.UIConfigurationManager" ); 99*cdf0e10cSrcweir static ::rtl::OUString SERVICE_DESKTOP = ::rtl::OUString::createFromAscii("com.sun.star.frame.Desktop" ); 100*cdf0e10cSrcweir static ::rtl::OUString SERVICE_MODULEMANAGER = ::rtl::OUString::createFromAscii("com.sun.star.frame.ModuleManager" ); 101*cdf0e10cSrcweir static ::rtl::OUString SERVICE_GLOBALACCCFG = ::rtl::OUString::createFromAscii("com.sun.star.ui.GlobalAcceleratorConfiguration" ); 102*cdf0e10cSrcweir static ::rtl::OUString SERVICE_MODULEUICONFIGSUPPLIER = ::rtl::OUString::createFromAscii("com.sun.star.ui.ModuleUIConfigurationManagerSupplier"); 103*cdf0e10cSrcweir static ::rtl::OUString SERVICE_UICMDDESCRIPTION = ::rtl::OUString::createFromAscii("com.sun.star.frame.UICommandDescription" ); 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir static ::rtl::OUString MODULEPROP_SHORTNAME = ::rtl::OUString::createFromAscii("ooSetupFactoryShortName" ); 106*cdf0e10cSrcweir static ::rtl::OUString MODULEPROP_UINAME = ::rtl::OUString::createFromAscii("ooSetupFactoryUIName" ); 107*cdf0e10cSrcweir static ::rtl::OUString CMDPROP_UINAME = ::rtl::OUString::createFromAscii("Name" ); 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir static ::rtl::OUString FOLDERNAME_UICONFIG = ::rtl::OUString::createFromAscii("Configurations2" ); 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir static ::rtl::OUString MEDIATYPE_PROPNAME = ::rtl::OUString::createFromAscii("MediaType" ); 112*cdf0e10cSrcweir static ::rtl::OUString MEDIATYPE_UICONFIG = ::rtl::OUString::createFromAscii("application/vnd.sun.xml.ui.configuration" ); 113*cdf0e10cSrcweir 114*cdf0e10cSrcweir //----------------------------------------------- 115*cdf0e10cSrcweir static sal_uInt16 __FAR_DATA KEYCODE_ARRAY[] = 116*cdf0e10cSrcweir { 117*cdf0e10cSrcweir KEY_F1 , 118*cdf0e10cSrcweir KEY_F2 , 119*cdf0e10cSrcweir KEY_F3 , 120*cdf0e10cSrcweir KEY_F4 , 121*cdf0e10cSrcweir KEY_F5 , 122*cdf0e10cSrcweir KEY_F6 , 123*cdf0e10cSrcweir KEY_F7 , 124*cdf0e10cSrcweir KEY_F8 , 125*cdf0e10cSrcweir KEY_F9 , 126*cdf0e10cSrcweir KEY_F10 , 127*cdf0e10cSrcweir KEY_F11 , 128*cdf0e10cSrcweir KEY_F12 , 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir KEY_DOWN , 131*cdf0e10cSrcweir KEY_UP , 132*cdf0e10cSrcweir KEY_LEFT , 133*cdf0e10cSrcweir KEY_RIGHT , 134*cdf0e10cSrcweir KEY_HOME , 135*cdf0e10cSrcweir KEY_END , 136*cdf0e10cSrcweir KEY_PAGEUP , 137*cdf0e10cSrcweir KEY_PAGEDOWN , 138*cdf0e10cSrcweir KEY_RETURN , 139*cdf0e10cSrcweir KEY_ESCAPE , 140*cdf0e10cSrcweir KEY_BACKSPACE, 141*cdf0e10cSrcweir KEY_INSERT , 142*cdf0e10cSrcweir KEY_DELETE , 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir KEY_OPEN , 145*cdf0e10cSrcweir KEY_CUT , 146*cdf0e10cSrcweir KEY_COPY , 147*cdf0e10cSrcweir KEY_PASTE , 148*cdf0e10cSrcweir KEY_UNDO , 149*cdf0e10cSrcweir KEY_REPEAT , 150*cdf0e10cSrcweir KEY_FIND , 151*cdf0e10cSrcweir KEY_PROPERTIES , 152*cdf0e10cSrcweir KEY_FRONT , 153*cdf0e10cSrcweir KEY_CONTEXTMENU , 154*cdf0e10cSrcweir KEY_MENU , 155*cdf0e10cSrcweir KEY_HELP , 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir KEY_F1 | KEY_SHIFT, 158*cdf0e10cSrcweir KEY_F2 | KEY_SHIFT, 159*cdf0e10cSrcweir KEY_F3 | KEY_SHIFT, 160*cdf0e10cSrcweir KEY_F4 | KEY_SHIFT, 161*cdf0e10cSrcweir KEY_F5 | KEY_SHIFT, 162*cdf0e10cSrcweir KEY_F6 | KEY_SHIFT, 163*cdf0e10cSrcweir KEY_F7 | KEY_SHIFT, 164*cdf0e10cSrcweir KEY_F8 | KEY_SHIFT, 165*cdf0e10cSrcweir KEY_F9 | KEY_SHIFT, 166*cdf0e10cSrcweir KEY_F10 | KEY_SHIFT, 167*cdf0e10cSrcweir KEY_F11 | KEY_SHIFT, 168*cdf0e10cSrcweir KEY_F12 | KEY_SHIFT, 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir KEY_DOWN | KEY_SHIFT, 171*cdf0e10cSrcweir KEY_UP | KEY_SHIFT, 172*cdf0e10cSrcweir KEY_LEFT | KEY_SHIFT, 173*cdf0e10cSrcweir KEY_RIGHT | KEY_SHIFT, 174*cdf0e10cSrcweir KEY_HOME | KEY_SHIFT, 175*cdf0e10cSrcweir KEY_END | KEY_SHIFT, 176*cdf0e10cSrcweir KEY_PAGEUP | KEY_SHIFT, 177*cdf0e10cSrcweir KEY_PAGEDOWN | KEY_SHIFT, 178*cdf0e10cSrcweir KEY_RETURN | KEY_SHIFT, 179*cdf0e10cSrcweir KEY_SPACE | KEY_SHIFT, 180*cdf0e10cSrcweir KEY_ESCAPE | KEY_SHIFT, 181*cdf0e10cSrcweir KEY_BACKSPACE | KEY_SHIFT, 182*cdf0e10cSrcweir KEY_INSERT | KEY_SHIFT, 183*cdf0e10cSrcweir KEY_DELETE | KEY_SHIFT, 184*cdf0e10cSrcweir 185*cdf0e10cSrcweir KEY_0 | KEY_MOD1 , 186*cdf0e10cSrcweir KEY_1 | KEY_MOD1 , 187*cdf0e10cSrcweir KEY_2 | KEY_MOD1 , 188*cdf0e10cSrcweir KEY_3 | KEY_MOD1 , 189*cdf0e10cSrcweir KEY_4 | KEY_MOD1 , 190*cdf0e10cSrcweir KEY_5 | KEY_MOD1 , 191*cdf0e10cSrcweir KEY_6 | KEY_MOD1 , 192*cdf0e10cSrcweir KEY_7 | KEY_MOD1 , 193*cdf0e10cSrcweir KEY_8 | KEY_MOD1 , 194*cdf0e10cSrcweir KEY_9 | KEY_MOD1 , 195*cdf0e10cSrcweir KEY_A | KEY_MOD1 , 196*cdf0e10cSrcweir KEY_B | KEY_MOD1 , 197*cdf0e10cSrcweir KEY_C | KEY_MOD1 , 198*cdf0e10cSrcweir KEY_D | KEY_MOD1 , 199*cdf0e10cSrcweir KEY_E | KEY_MOD1 , 200*cdf0e10cSrcweir KEY_F | KEY_MOD1 , 201*cdf0e10cSrcweir KEY_G | KEY_MOD1 , 202*cdf0e10cSrcweir KEY_H | KEY_MOD1 , 203*cdf0e10cSrcweir KEY_I | KEY_MOD1 , 204*cdf0e10cSrcweir KEY_J | KEY_MOD1 , 205*cdf0e10cSrcweir KEY_K | KEY_MOD1 , 206*cdf0e10cSrcweir KEY_L | KEY_MOD1 , 207*cdf0e10cSrcweir KEY_M | KEY_MOD1 , 208*cdf0e10cSrcweir KEY_N | KEY_MOD1 , 209*cdf0e10cSrcweir KEY_O | KEY_MOD1 , 210*cdf0e10cSrcweir KEY_P | KEY_MOD1 , 211*cdf0e10cSrcweir KEY_Q | KEY_MOD1 , 212*cdf0e10cSrcweir KEY_R | KEY_MOD1 , 213*cdf0e10cSrcweir KEY_S | KEY_MOD1 , 214*cdf0e10cSrcweir KEY_T | KEY_MOD1 , 215*cdf0e10cSrcweir KEY_U | KEY_MOD1 , 216*cdf0e10cSrcweir KEY_V | KEY_MOD1 , 217*cdf0e10cSrcweir KEY_W | KEY_MOD1 , 218*cdf0e10cSrcweir KEY_X | KEY_MOD1 , 219*cdf0e10cSrcweir KEY_Y | KEY_MOD1 , 220*cdf0e10cSrcweir KEY_Z | KEY_MOD1 , 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir KEY_F1 | KEY_MOD1 , 223*cdf0e10cSrcweir KEY_F2 | KEY_MOD1 , 224*cdf0e10cSrcweir KEY_F3 | KEY_MOD1 , 225*cdf0e10cSrcweir KEY_F4 | KEY_MOD1 , 226*cdf0e10cSrcweir KEY_F5 | KEY_MOD1 , 227*cdf0e10cSrcweir KEY_F6 | KEY_MOD1 , 228*cdf0e10cSrcweir KEY_F7 | KEY_MOD1 , 229*cdf0e10cSrcweir KEY_F8 | KEY_MOD1 , 230*cdf0e10cSrcweir KEY_F9 | KEY_MOD1 , 231*cdf0e10cSrcweir KEY_F10 | KEY_MOD1 , 232*cdf0e10cSrcweir KEY_F11 | KEY_MOD1 , 233*cdf0e10cSrcweir KEY_F12 | KEY_MOD1 , 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir KEY_DOWN | KEY_MOD1 , 236*cdf0e10cSrcweir KEY_UP | KEY_MOD1 , 237*cdf0e10cSrcweir KEY_LEFT | KEY_MOD1 , 238*cdf0e10cSrcweir KEY_RIGHT | KEY_MOD1 , 239*cdf0e10cSrcweir KEY_HOME | KEY_MOD1 , 240*cdf0e10cSrcweir KEY_END | KEY_MOD1 , 241*cdf0e10cSrcweir KEY_PAGEUP | KEY_MOD1 , 242*cdf0e10cSrcweir KEY_PAGEDOWN | KEY_MOD1 , 243*cdf0e10cSrcweir KEY_RETURN | KEY_MOD1 , 244*cdf0e10cSrcweir KEY_SPACE | KEY_MOD1 , 245*cdf0e10cSrcweir KEY_BACKSPACE | KEY_MOD1 , 246*cdf0e10cSrcweir KEY_INSERT | KEY_MOD1 , 247*cdf0e10cSrcweir KEY_DELETE | KEY_MOD1 , 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir KEY_ADD | KEY_MOD1 , 250*cdf0e10cSrcweir KEY_SUBTRACT | KEY_MOD1 , 251*cdf0e10cSrcweir KEY_MULTIPLY | KEY_MOD1 , 252*cdf0e10cSrcweir KEY_DIVIDE | KEY_MOD1 , 253*cdf0e10cSrcweir 254*cdf0e10cSrcweir KEY_0 | KEY_SHIFT | KEY_MOD1, 255*cdf0e10cSrcweir KEY_1 | KEY_SHIFT | KEY_MOD1, 256*cdf0e10cSrcweir KEY_2 | KEY_SHIFT | KEY_MOD1, 257*cdf0e10cSrcweir KEY_3 | KEY_SHIFT | KEY_MOD1, 258*cdf0e10cSrcweir KEY_4 | KEY_SHIFT | KEY_MOD1, 259*cdf0e10cSrcweir KEY_5 | KEY_SHIFT | KEY_MOD1, 260*cdf0e10cSrcweir KEY_6 | KEY_SHIFT | KEY_MOD1, 261*cdf0e10cSrcweir KEY_7 | KEY_SHIFT | KEY_MOD1, 262*cdf0e10cSrcweir KEY_8 | KEY_SHIFT | KEY_MOD1, 263*cdf0e10cSrcweir KEY_9 | KEY_SHIFT | KEY_MOD1, 264*cdf0e10cSrcweir KEY_A | KEY_SHIFT | KEY_MOD1, 265*cdf0e10cSrcweir KEY_B | KEY_SHIFT | KEY_MOD1, 266*cdf0e10cSrcweir KEY_C | KEY_SHIFT | KEY_MOD1, 267*cdf0e10cSrcweir KEY_D | KEY_SHIFT | KEY_MOD1, 268*cdf0e10cSrcweir KEY_E | KEY_SHIFT | KEY_MOD1, 269*cdf0e10cSrcweir KEY_F | KEY_SHIFT | KEY_MOD1, 270*cdf0e10cSrcweir KEY_G | KEY_SHIFT | KEY_MOD1, 271*cdf0e10cSrcweir KEY_H | KEY_SHIFT | KEY_MOD1, 272*cdf0e10cSrcweir KEY_I | KEY_SHIFT | KEY_MOD1, 273*cdf0e10cSrcweir KEY_J | KEY_SHIFT | KEY_MOD1, 274*cdf0e10cSrcweir KEY_K | KEY_SHIFT | KEY_MOD1, 275*cdf0e10cSrcweir KEY_L | KEY_SHIFT | KEY_MOD1, 276*cdf0e10cSrcweir KEY_M | KEY_SHIFT | KEY_MOD1, 277*cdf0e10cSrcweir KEY_N | KEY_SHIFT | KEY_MOD1, 278*cdf0e10cSrcweir KEY_O | KEY_SHIFT | KEY_MOD1, 279*cdf0e10cSrcweir KEY_P | KEY_SHIFT | KEY_MOD1, 280*cdf0e10cSrcweir KEY_Q | KEY_SHIFT | KEY_MOD1, 281*cdf0e10cSrcweir KEY_R | KEY_SHIFT | KEY_MOD1, 282*cdf0e10cSrcweir KEY_S | KEY_SHIFT | KEY_MOD1, 283*cdf0e10cSrcweir KEY_T | KEY_SHIFT | KEY_MOD1, 284*cdf0e10cSrcweir KEY_U | KEY_SHIFT | KEY_MOD1, 285*cdf0e10cSrcweir KEY_V | KEY_SHIFT | KEY_MOD1, 286*cdf0e10cSrcweir KEY_W | KEY_SHIFT | KEY_MOD1, 287*cdf0e10cSrcweir KEY_X | KEY_SHIFT | KEY_MOD1, 288*cdf0e10cSrcweir KEY_Y | KEY_SHIFT | KEY_MOD1, 289*cdf0e10cSrcweir KEY_Z | KEY_SHIFT | KEY_MOD1, 290*cdf0e10cSrcweir 291*cdf0e10cSrcweir KEY_F1 | KEY_SHIFT | KEY_MOD1, 292*cdf0e10cSrcweir KEY_F2 | KEY_SHIFT | KEY_MOD1, 293*cdf0e10cSrcweir KEY_F3 | KEY_SHIFT | KEY_MOD1, 294*cdf0e10cSrcweir KEY_F4 | KEY_SHIFT | KEY_MOD1, 295*cdf0e10cSrcweir KEY_F5 | KEY_SHIFT | KEY_MOD1, 296*cdf0e10cSrcweir KEY_F6 | KEY_SHIFT | KEY_MOD1, 297*cdf0e10cSrcweir KEY_F7 | KEY_SHIFT | KEY_MOD1, 298*cdf0e10cSrcweir KEY_F8 | KEY_SHIFT | KEY_MOD1, 299*cdf0e10cSrcweir KEY_F9 | KEY_SHIFT | KEY_MOD1, 300*cdf0e10cSrcweir KEY_F10 | KEY_SHIFT | KEY_MOD1, 301*cdf0e10cSrcweir KEY_F11 | KEY_SHIFT | KEY_MOD1, 302*cdf0e10cSrcweir KEY_F12 | KEY_SHIFT | KEY_MOD1, 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir KEY_DOWN | KEY_SHIFT | KEY_MOD1, 305*cdf0e10cSrcweir KEY_UP | KEY_SHIFT | KEY_MOD1, 306*cdf0e10cSrcweir KEY_LEFT | KEY_SHIFT | KEY_MOD1, 307*cdf0e10cSrcweir KEY_RIGHT | KEY_SHIFT | KEY_MOD1, 308*cdf0e10cSrcweir KEY_HOME | KEY_SHIFT | KEY_MOD1, 309*cdf0e10cSrcweir KEY_END | KEY_SHIFT | KEY_MOD1, 310*cdf0e10cSrcweir KEY_PAGEUP | KEY_SHIFT | KEY_MOD1, 311*cdf0e10cSrcweir KEY_PAGEDOWN | KEY_SHIFT | KEY_MOD1, 312*cdf0e10cSrcweir KEY_RETURN | KEY_SHIFT | KEY_MOD1, 313*cdf0e10cSrcweir KEY_SPACE | KEY_SHIFT | KEY_MOD1, 314*cdf0e10cSrcweir KEY_BACKSPACE | KEY_SHIFT | KEY_MOD1, 315*cdf0e10cSrcweir KEY_INSERT | KEY_SHIFT | KEY_MOD1, 316*cdf0e10cSrcweir KEY_DELETE | KEY_SHIFT | KEY_MOD1, 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir KEY_0 | KEY_MOD2 , 319*cdf0e10cSrcweir KEY_1 | KEY_MOD2 , 320*cdf0e10cSrcweir KEY_2 | KEY_MOD2 , 321*cdf0e10cSrcweir KEY_3 | KEY_MOD2 , 322*cdf0e10cSrcweir KEY_4 | KEY_MOD2 , 323*cdf0e10cSrcweir KEY_5 | KEY_MOD2 , 324*cdf0e10cSrcweir KEY_6 | KEY_MOD2 , 325*cdf0e10cSrcweir KEY_7 | KEY_MOD2 , 326*cdf0e10cSrcweir KEY_8 | KEY_MOD2 , 327*cdf0e10cSrcweir KEY_9 | KEY_MOD2 , 328*cdf0e10cSrcweir KEY_A | KEY_MOD2 , 329*cdf0e10cSrcweir KEY_B | KEY_MOD2 , 330*cdf0e10cSrcweir KEY_C | KEY_MOD2 , 331*cdf0e10cSrcweir KEY_D | KEY_MOD2 , 332*cdf0e10cSrcweir KEY_E | KEY_MOD2 , 333*cdf0e10cSrcweir KEY_F | KEY_MOD2 , 334*cdf0e10cSrcweir KEY_G | KEY_MOD2 , 335*cdf0e10cSrcweir KEY_H | KEY_MOD2 , 336*cdf0e10cSrcweir KEY_I | KEY_MOD2 , 337*cdf0e10cSrcweir KEY_J | KEY_MOD2 , 338*cdf0e10cSrcweir KEY_K | KEY_MOD2 , 339*cdf0e10cSrcweir KEY_L | KEY_MOD2 , 340*cdf0e10cSrcweir KEY_M | KEY_MOD2 , 341*cdf0e10cSrcweir KEY_N | KEY_MOD2 , 342*cdf0e10cSrcweir KEY_O | KEY_MOD2 , 343*cdf0e10cSrcweir KEY_P | KEY_MOD2 , 344*cdf0e10cSrcweir KEY_Q | KEY_MOD2 , 345*cdf0e10cSrcweir KEY_R | KEY_MOD2 , 346*cdf0e10cSrcweir KEY_S | KEY_MOD2 , 347*cdf0e10cSrcweir KEY_T | KEY_MOD2 , 348*cdf0e10cSrcweir KEY_U | KEY_MOD2 , 349*cdf0e10cSrcweir KEY_V | KEY_MOD2 , 350*cdf0e10cSrcweir KEY_W | KEY_MOD2 , 351*cdf0e10cSrcweir KEY_X | KEY_MOD2 , 352*cdf0e10cSrcweir KEY_Y | KEY_MOD2 , 353*cdf0e10cSrcweir KEY_Z | KEY_MOD2 , 354*cdf0e10cSrcweir 355*cdf0e10cSrcweir KEY_F1 | KEY_MOD2 , 356*cdf0e10cSrcweir KEY_F2 | KEY_MOD2 , 357*cdf0e10cSrcweir KEY_F3 | KEY_MOD2 , 358*cdf0e10cSrcweir KEY_F4 | KEY_MOD2 , 359*cdf0e10cSrcweir KEY_F5 | KEY_MOD2 , 360*cdf0e10cSrcweir KEY_F6 | KEY_MOD2 , 361*cdf0e10cSrcweir KEY_F7 | KEY_MOD2 , 362*cdf0e10cSrcweir KEY_F8 | KEY_MOD2 , 363*cdf0e10cSrcweir KEY_F9 | KEY_MOD2 , 364*cdf0e10cSrcweir KEY_F10 | KEY_MOD2 , 365*cdf0e10cSrcweir KEY_F11 | KEY_MOD2 , 366*cdf0e10cSrcweir KEY_F12 | KEY_MOD2 , 367*cdf0e10cSrcweir 368*cdf0e10cSrcweir KEY_DOWN | KEY_MOD2 , 369*cdf0e10cSrcweir KEY_UP | KEY_MOD2 , 370*cdf0e10cSrcweir KEY_LEFT | KEY_MOD2 , 371*cdf0e10cSrcweir KEY_RIGHT | KEY_MOD2 , 372*cdf0e10cSrcweir KEY_HOME | KEY_MOD2 , 373*cdf0e10cSrcweir KEY_END | KEY_MOD2 , 374*cdf0e10cSrcweir KEY_PAGEUP | KEY_MOD2 , 375*cdf0e10cSrcweir KEY_PAGEDOWN | KEY_MOD2 , 376*cdf0e10cSrcweir KEY_RETURN | KEY_MOD2 , 377*cdf0e10cSrcweir KEY_SPACE | KEY_MOD2 , 378*cdf0e10cSrcweir KEY_BACKSPACE | KEY_MOD2 , 379*cdf0e10cSrcweir KEY_INSERT | KEY_MOD2 , 380*cdf0e10cSrcweir KEY_DELETE | KEY_MOD2 , 381*cdf0e10cSrcweir 382*cdf0e10cSrcweir KEY_0 | KEY_SHIFT | KEY_MOD2, 383*cdf0e10cSrcweir KEY_1 | KEY_SHIFT | KEY_MOD2, 384*cdf0e10cSrcweir KEY_2 | KEY_SHIFT | KEY_MOD2, 385*cdf0e10cSrcweir KEY_3 | KEY_SHIFT | KEY_MOD2, 386*cdf0e10cSrcweir KEY_4 | KEY_SHIFT | KEY_MOD2, 387*cdf0e10cSrcweir KEY_5 | KEY_SHIFT | KEY_MOD2, 388*cdf0e10cSrcweir KEY_6 | KEY_SHIFT | KEY_MOD2, 389*cdf0e10cSrcweir KEY_7 | KEY_SHIFT | KEY_MOD2, 390*cdf0e10cSrcweir KEY_8 | KEY_SHIFT | KEY_MOD2, 391*cdf0e10cSrcweir KEY_9 | KEY_SHIFT | KEY_MOD2, 392*cdf0e10cSrcweir KEY_A | KEY_SHIFT | KEY_MOD2, 393*cdf0e10cSrcweir KEY_B | KEY_SHIFT | KEY_MOD2, 394*cdf0e10cSrcweir KEY_C | KEY_SHIFT | KEY_MOD2, 395*cdf0e10cSrcweir KEY_D | KEY_SHIFT | KEY_MOD2, 396*cdf0e10cSrcweir KEY_E | KEY_SHIFT | KEY_MOD2, 397*cdf0e10cSrcweir KEY_F | KEY_SHIFT | KEY_MOD2, 398*cdf0e10cSrcweir KEY_G | KEY_SHIFT | KEY_MOD2, 399*cdf0e10cSrcweir KEY_H | KEY_SHIFT | KEY_MOD2, 400*cdf0e10cSrcweir KEY_I | KEY_SHIFT | KEY_MOD2, 401*cdf0e10cSrcweir KEY_J | KEY_SHIFT | KEY_MOD2, 402*cdf0e10cSrcweir KEY_K | KEY_SHIFT | KEY_MOD2, 403*cdf0e10cSrcweir KEY_L | KEY_SHIFT | KEY_MOD2, 404*cdf0e10cSrcweir KEY_M | KEY_SHIFT | KEY_MOD2, 405*cdf0e10cSrcweir KEY_N | KEY_SHIFT | KEY_MOD2, 406*cdf0e10cSrcweir KEY_O | KEY_SHIFT | KEY_MOD2, 407*cdf0e10cSrcweir KEY_P | KEY_SHIFT | KEY_MOD2, 408*cdf0e10cSrcweir KEY_Q | KEY_SHIFT | KEY_MOD2, 409*cdf0e10cSrcweir KEY_R | KEY_SHIFT | KEY_MOD2, 410*cdf0e10cSrcweir KEY_S | KEY_SHIFT | KEY_MOD2, 411*cdf0e10cSrcweir KEY_T | KEY_SHIFT | KEY_MOD2, 412*cdf0e10cSrcweir KEY_U | KEY_SHIFT | KEY_MOD2, 413*cdf0e10cSrcweir KEY_V | KEY_SHIFT | KEY_MOD2, 414*cdf0e10cSrcweir KEY_W | KEY_SHIFT | KEY_MOD2, 415*cdf0e10cSrcweir KEY_X | KEY_SHIFT | KEY_MOD2, 416*cdf0e10cSrcweir KEY_Y | KEY_SHIFT | KEY_MOD2, 417*cdf0e10cSrcweir KEY_Z | KEY_SHIFT | KEY_MOD2, 418*cdf0e10cSrcweir 419*cdf0e10cSrcweir KEY_F1 | KEY_SHIFT | KEY_MOD2, 420*cdf0e10cSrcweir KEY_F2 | KEY_SHIFT | KEY_MOD2, 421*cdf0e10cSrcweir KEY_F3 | KEY_SHIFT | KEY_MOD2, 422*cdf0e10cSrcweir KEY_F4 | KEY_SHIFT | KEY_MOD2, 423*cdf0e10cSrcweir KEY_F5 | KEY_SHIFT | KEY_MOD2, 424*cdf0e10cSrcweir KEY_F6 | KEY_SHIFT | KEY_MOD2, 425*cdf0e10cSrcweir KEY_F7 | KEY_SHIFT | KEY_MOD2, 426*cdf0e10cSrcweir KEY_F8 | KEY_SHIFT | KEY_MOD2, 427*cdf0e10cSrcweir KEY_F9 | KEY_SHIFT | KEY_MOD2, 428*cdf0e10cSrcweir KEY_F10 | KEY_SHIFT | KEY_MOD2, 429*cdf0e10cSrcweir KEY_F11 | KEY_SHIFT | KEY_MOD2, 430*cdf0e10cSrcweir KEY_F12 | KEY_SHIFT | KEY_MOD2, 431*cdf0e10cSrcweir 432*cdf0e10cSrcweir KEY_DOWN | KEY_SHIFT | KEY_MOD2, 433*cdf0e10cSrcweir KEY_UP | KEY_SHIFT | KEY_MOD2, 434*cdf0e10cSrcweir KEY_LEFT | KEY_SHIFT | KEY_MOD2, 435*cdf0e10cSrcweir KEY_RIGHT | KEY_SHIFT | KEY_MOD2, 436*cdf0e10cSrcweir KEY_HOME | KEY_SHIFT | KEY_MOD2, 437*cdf0e10cSrcweir KEY_END | KEY_SHIFT | KEY_MOD2, 438*cdf0e10cSrcweir KEY_PAGEUP | KEY_SHIFT | KEY_MOD2, 439*cdf0e10cSrcweir KEY_PAGEDOWN | KEY_SHIFT | KEY_MOD2, 440*cdf0e10cSrcweir KEY_RETURN | KEY_SHIFT | KEY_MOD2, 441*cdf0e10cSrcweir KEY_SPACE | KEY_SHIFT | KEY_MOD2, 442*cdf0e10cSrcweir KEY_BACKSPACE | KEY_SHIFT | KEY_MOD2, 443*cdf0e10cSrcweir KEY_INSERT | KEY_SHIFT | KEY_MOD2, 444*cdf0e10cSrcweir KEY_DELETE | KEY_SHIFT | KEY_MOD2, 445*cdf0e10cSrcweir 446*cdf0e10cSrcweir KEY_0 | KEY_MOD1 | KEY_MOD2 , 447*cdf0e10cSrcweir KEY_1 | KEY_MOD1 | KEY_MOD2 , 448*cdf0e10cSrcweir KEY_2 | KEY_MOD1 | KEY_MOD2 , 449*cdf0e10cSrcweir KEY_3 | KEY_MOD1 | KEY_MOD2 , 450*cdf0e10cSrcweir KEY_4 | KEY_MOD1 | KEY_MOD2 , 451*cdf0e10cSrcweir KEY_5 | KEY_MOD1 | KEY_MOD2 , 452*cdf0e10cSrcweir KEY_6 | KEY_MOD1 | KEY_MOD2 , 453*cdf0e10cSrcweir KEY_7 | KEY_MOD1 | KEY_MOD2 , 454*cdf0e10cSrcweir KEY_8 | KEY_MOD1 | KEY_MOD2 , 455*cdf0e10cSrcweir KEY_9 | KEY_MOD1 | KEY_MOD2 , 456*cdf0e10cSrcweir KEY_A | KEY_MOD1 | KEY_MOD2 , 457*cdf0e10cSrcweir KEY_B | KEY_MOD1 | KEY_MOD2 , 458*cdf0e10cSrcweir KEY_C | KEY_MOD1 | KEY_MOD2 , 459*cdf0e10cSrcweir KEY_D | KEY_MOD1 | KEY_MOD2 , 460*cdf0e10cSrcweir KEY_E | KEY_MOD1 | KEY_MOD2 , 461*cdf0e10cSrcweir KEY_F | KEY_MOD1 | KEY_MOD2 , 462*cdf0e10cSrcweir KEY_G | KEY_MOD1 | KEY_MOD2 , 463*cdf0e10cSrcweir KEY_H | KEY_MOD1 | KEY_MOD2 , 464*cdf0e10cSrcweir KEY_I | KEY_MOD1 | KEY_MOD2 , 465*cdf0e10cSrcweir KEY_J | KEY_MOD1 | KEY_MOD2 , 466*cdf0e10cSrcweir KEY_K | KEY_MOD1 | KEY_MOD2 , 467*cdf0e10cSrcweir KEY_L | KEY_MOD1 | KEY_MOD2 , 468*cdf0e10cSrcweir KEY_M | KEY_MOD1 | KEY_MOD2 , 469*cdf0e10cSrcweir KEY_N | KEY_MOD1 | KEY_MOD2 , 470*cdf0e10cSrcweir KEY_O | KEY_MOD1 | KEY_MOD2 , 471*cdf0e10cSrcweir KEY_P | KEY_MOD1 | KEY_MOD2 , 472*cdf0e10cSrcweir KEY_Q | KEY_MOD1 | KEY_MOD2 , 473*cdf0e10cSrcweir KEY_R | KEY_MOD1 | KEY_MOD2 , 474*cdf0e10cSrcweir KEY_S | KEY_MOD1 | KEY_MOD2 , 475*cdf0e10cSrcweir KEY_T | KEY_MOD1 | KEY_MOD2 , 476*cdf0e10cSrcweir KEY_U | KEY_MOD1 | KEY_MOD2 , 477*cdf0e10cSrcweir KEY_V | KEY_MOD1 | KEY_MOD2 , 478*cdf0e10cSrcweir KEY_W | KEY_MOD1 | KEY_MOD2 , 479*cdf0e10cSrcweir KEY_X | KEY_MOD1 | KEY_MOD2 , 480*cdf0e10cSrcweir KEY_Y | KEY_MOD1 | KEY_MOD2 , 481*cdf0e10cSrcweir KEY_Z | KEY_MOD1 | KEY_MOD2 , 482*cdf0e10cSrcweir 483*cdf0e10cSrcweir KEY_F1 | KEY_MOD1 | KEY_MOD2 , 484*cdf0e10cSrcweir KEY_F2 | KEY_MOD1 | KEY_MOD2 , 485*cdf0e10cSrcweir KEY_F3 | KEY_MOD1 | KEY_MOD2 , 486*cdf0e10cSrcweir KEY_F4 | KEY_MOD1 | KEY_MOD2 , 487*cdf0e10cSrcweir KEY_F5 | KEY_MOD1 | KEY_MOD2 , 488*cdf0e10cSrcweir KEY_F6 | KEY_MOD1 | KEY_MOD2 , 489*cdf0e10cSrcweir KEY_F7 | KEY_MOD1 | KEY_MOD2 , 490*cdf0e10cSrcweir KEY_F8 | KEY_MOD1 | KEY_MOD2 , 491*cdf0e10cSrcweir KEY_F9 | KEY_MOD1 | KEY_MOD2 , 492*cdf0e10cSrcweir KEY_F10 | KEY_MOD1 | KEY_MOD2 , 493*cdf0e10cSrcweir KEY_F11 | KEY_MOD1 | KEY_MOD2 , 494*cdf0e10cSrcweir KEY_F12 | KEY_MOD1 | KEY_MOD2 , 495*cdf0e10cSrcweir 496*cdf0e10cSrcweir KEY_DOWN | KEY_MOD1 | KEY_MOD2 , 497*cdf0e10cSrcweir KEY_UP | KEY_MOD1 | KEY_MOD2 , 498*cdf0e10cSrcweir KEY_LEFT | KEY_MOD1 | KEY_MOD2 , 499*cdf0e10cSrcweir KEY_RIGHT | KEY_MOD1 | KEY_MOD2 , 500*cdf0e10cSrcweir KEY_HOME | KEY_MOD1 | KEY_MOD2 , 501*cdf0e10cSrcweir KEY_END | KEY_MOD1 | KEY_MOD2 , 502*cdf0e10cSrcweir KEY_PAGEUP | KEY_MOD1 | KEY_MOD2 , 503*cdf0e10cSrcweir KEY_PAGEDOWN | KEY_MOD1 | KEY_MOD2 , 504*cdf0e10cSrcweir KEY_RETURN | KEY_MOD1 | KEY_MOD2 , 505*cdf0e10cSrcweir KEY_SPACE | KEY_MOD1 | KEY_MOD2 , 506*cdf0e10cSrcweir KEY_BACKSPACE | KEY_MOD1 | KEY_MOD2 , 507*cdf0e10cSrcweir KEY_INSERT | KEY_MOD1 | KEY_MOD2 , 508*cdf0e10cSrcweir KEY_DELETE | KEY_MOD1 | KEY_MOD2 , 509*cdf0e10cSrcweir 510*cdf0e10cSrcweir KEY_0 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 511*cdf0e10cSrcweir KEY_1 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 512*cdf0e10cSrcweir KEY_2 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 513*cdf0e10cSrcweir KEY_3 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 514*cdf0e10cSrcweir KEY_4 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 515*cdf0e10cSrcweir KEY_5 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 516*cdf0e10cSrcweir KEY_6 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 517*cdf0e10cSrcweir KEY_7 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 518*cdf0e10cSrcweir KEY_8 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 519*cdf0e10cSrcweir KEY_9 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 520*cdf0e10cSrcweir KEY_A | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 521*cdf0e10cSrcweir KEY_B | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 522*cdf0e10cSrcweir KEY_C | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 523*cdf0e10cSrcweir KEY_D | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 524*cdf0e10cSrcweir KEY_E | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 525*cdf0e10cSrcweir KEY_F | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 526*cdf0e10cSrcweir KEY_G | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 527*cdf0e10cSrcweir KEY_H | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 528*cdf0e10cSrcweir KEY_I | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 529*cdf0e10cSrcweir KEY_J | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 530*cdf0e10cSrcweir KEY_K | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 531*cdf0e10cSrcweir KEY_L | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 532*cdf0e10cSrcweir KEY_M | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 533*cdf0e10cSrcweir KEY_N | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 534*cdf0e10cSrcweir KEY_O | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 535*cdf0e10cSrcweir KEY_P | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 536*cdf0e10cSrcweir KEY_Q | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 537*cdf0e10cSrcweir KEY_R | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 538*cdf0e10cSrcweir KEY_S | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 539*cdf0e10cSrcweir KEY_T | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 540*cdf0e10cSrcweir KEY_U | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 541*cdf0e10cSrcweir KEY_V | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 542*cdf0e10cSrcweir KEY_W | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 543*cdf0e10cSrcweir KEY_X | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 544*cdf0e10cSrcweir KEY_Y | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 545*cdf0e10cSrcweir KEY_Z | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 546*cdf0e10cSrcweir 547*cdf0e10cSrcweir KEY_F1 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 548*cdf0e10cSrcweir KEY_F2 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 549*cdf0e10cSrcweir KEY_F3 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 550*cdf0e10cSrcweir KEY_F4 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 551*cdf0e10cSrcweir KEY_F5 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 552*cdf0e10cSrcweir KEY_F6 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 553*cdf0e10cSrcweir KEY_F7 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 554*cdf0e10cSrcweir KEY_F8 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 555*cdf0e10cSrcweir KEY_F9 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 556*cdf0e10cSrcweir KEY_F10 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 557*cdf0e10cSrcweir KEY_F11 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 558*cdf0e10cSrcweir KEY_F12 | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 559*cdf0e10cSrcweir 560*cdf0e10cSrcweir KEY_DOWN | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 561*cdf0e10cSrcweir KEY_UP | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 562*cdf0e10cSrcweir KEY_LEFT | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 563*cdf0e10cSrcweir KEY_RIGHT | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 564*cdf0e10cSrcweir KEY_HOME | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 565*cdf0e10cSrcweir KEY_END | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 566*cdf0e10cSrcweir KEY_PAGEUP | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 567*cdf0e10cSrcweir KEY_PAGEDOWN | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 568*cdf0e10cSrcweir KEY_RETURN | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 569*cdf0e10cSrcweir KEY_SPACE | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 570*cdf0e10cSrcweir KEY_BACKSPACE | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 571*cdf0e10cSrcweir KEY_INSERT | KEY_SHIFT | KEY_MOD1 | KEY_MOD2, 572*cdf0e10cSrcweir KEY_DELETE | KEY_SHIFT | KEY_MOD1 | KEY_MOD2 573*cdf0e10cSrcweir }; 574*cdf0e10cSrcweir 575*cdf0e10cSrcweir static sal_uInt16 KEYCODE_ARRAY_SIZE = (sizeof(KEYCODE_ARRAY) / sizeof(KEYCODE_ARRAY[0])); 576*cdf0e10cSrcweir 577*cdf0e10cSrcweir //----------------------------------------------- 578*cdf0e10cSrcweir // seems to be needed to layout the list box, which shows all 579*cdf0e10cSrcweir // assignable shortcuts 580*cdf0e10cSrcweir static long AccCfgTabs[] = 581*cdf0e10cSrcweir { 582*cdf0e10cSrcweir 2, // Number of Tabs 583*cdf0e10cSrcweir 0, 584*cdf0e10cSrcweir 120 // Function 585*cdf0e10cSrcweir }; 586*cdf0e10cSrcweir 587*cdf0e10cSrcweir //----------------------------------------------- 588*cdf0e10cSrcweir class SfxAccCfgLBoxString_Impl : public SvLBoxString 589*cdf0e10cSrcweir { 590*cdf0e10cSrcweir public: 591*cdf0e10cSrcweir SfxAccCfgLBoxString_Impl( SvLBoxEntry* pEntry, 592*cdf0e10cSrcweir sal_uInt16 nFlags, 593*cdf0e10cSrcweir const String& sText ); 594*cdf0e10cSrcweir 595*cdf0e10cSrcweir virtual ~SfxAccCfgLBoxString_Impl(); 596*cdf0e10cSrcweir 597*cdf0e10cSrcweir virtual void Paint(const Point& aPos , 598*cdf0e10cSrcweir SvLBox& rDevice, 599*cdf0e10cSrcweir sal_uInt16 nFlags , 600*cdf0e10cSrcweir SvLBoxEntry* pEntry ); 601*cdf0e10cSrcweir }; 602*cdf0e10cSrcweir 603*cdf0e10cSrcweir //----------------------------------------------- 604*cdf0e10cSrcweir SfxAccCfgLBoxString_Impl::SfxAccCfgLBoxString_Impl( SvLBoxEntry* pEntry, 605*cdf0e10cSrcweir sal_uInt16 nFlags, 606*cdf0e10cSrcweir const String& sText ) 607*cdf0e10cSrcweir : SvLBoxString(pEntry, nFlags, sText) 608*cdf0e10cSrcweir { 609*cdf0e10cSrcweir } 610*cdf0e10cSrcweir 611*cdf0e10cSrcweir //----------------------------------------------- 612*cdf0e10cSrcweir SfxAccCfgLBoxString_Impl::~SfxAccCfgLBoxString_Impl() 613*cdf0e10cSrcweir { 614*cdf0e10cSrcweir } 615*cdf0e10cSrcweir 616*cdf0e10cSrcweir //----------------------------------------------- 617*cdf0e10cSrcweir void SfxAccCfgLBoxString_Impl::Paint(const Point& aPos , 618*cdf0e10cSrcweir SvLBox& rDevice, 619*cdf0e10cSrcweir sal_uInt16 /*nFlags*/, 620*cdf0e10cSrcweir SvLBoxEntry* pEntry ) 621*cdf0e10cSrcweir { 622*cdf0e10cSrcweir /*/ ??? realy needed !!! 623*cdf0e10cSrcweir Font aOldFont(rDevice.GetFont()); 624*cdf0e10cSrcweir Font aNewFont(aOldFont ); 625*cdf0e10cSrcweir rDevice.SetFont( aFont ); 626*cdf0e10cSrcweir */ 627*cdf0e10cSrcweir 628*cdf0e10cSrcweir if (!pEntry) 629*cdf0e10cSrcweir return; 630*cdf0e10cSrcweir 631*cdf0e10cSrcweir TAccInfo* pUserData = (TAccInfo*)pEntry->GetUserData(); 632*cdf0e10cSrcweir if (!pUserData) 633*cdf0e10cSrcweir return; 634*cdf0e10cSrcweir 635*cdf0e10cSrcweir if (pUserData->m_bIsConfigurable) 636*cdf0e10cSrcweir rDevice.DrawText(aPos, GetText()); 637*cdf0e10cSrcweir else 638*cdf0e10cSrcweir rDevice.DrawCtrlText(aPos, GetText(), 0, STRING_LEN, TEXT_DRAW_DISABLE); 639*cdf0e10cSrcweir 640*cdf0e10cSrcweir //rDev.SetFont( aOldFont ); 641*cdf0e10cSrcweir } 642*cdf0e10cSrcweir 643*cdf0e10cSrcweir //----------------------------------------------- 644*cdf0e10cSrcweir void SfxAccCfgTabListBox_Impl::InitEntry( SvLBoxEntry* pEntry , 645*cdf0e10cSrcweir const XubString& sText , 646*cdf0e10cSrcweir const Image& aImage1, 647*cdf0e10cSrcweir const Image& aImage2, 648*cdf0e10cSrcweir SvLBoxButtonKind eButtonKind) 649*cdf0e10cSrcweir { 650*cdf0e10cSrcweir SvTabListBox::InitEntry(pEntry, sText, aImage1, aImage2, eButtonKind); 651*cdf0e10cSrcweir } 652*cdf0e10cSrcweir 653*cdf0e10cSrcweir //----------------------------------------------- 654*cdf0e10cSrcweir /** select the entry, which match the current key input ... excepting 655*cdf0e10cSrcweir keys, which are used for the dialog itself. 656*cdf0e10cSrcweir */ 657*cdf0e10cSrcweir void SfxAccCfgTabListBox_Impl::KeyInput(const KeyEvent& aKey) 658*cdf0e10cSrcweir { 659*cdf0e10cSrcweir KeyCode aCode1 = aKey.GetKeyCode(); 660*cdf0e10cSrcweir sal_uInt16 nCode1 = aCode1.GetCode(); 661*cdf0e10cSrcweir sal_uInt16 nMod1 = aCode1.GetModifier(); 662*cdf0e10cSrcweir 663*cdf0e10cSrcweir // is it related to our list box ? 664*cdf0e10cSrcweir if ( 665*cdf0e10cSrcweir (nCode1 != KEY_DOWN ) && 666*cdf0e10cSrcweir (nCode1 != KEY_UP ) && 667*cdf0e10cSrcweir (nCode1 != KEY_LEFT ) && 668*cdf0e10cSrcweir (nCode1 != KEY_RIGHT ) && 669*cdf0e10cSrcweir (nCode1 != KEY_PAGEUP ) && 670*cdf0e10cSrcweir (nCode1 != KEY_PAGEDOWN) 671*cdf0e10cSrcweir ) 672*cdf0e10cSrcweir { 673*cdf0e10cSrcweir SvLBoxEntry* pEntry = First(); 674*cdf0e10cSrcweir while (pEntry) 675*cdf0e10cSrcweir { 676*cdf0e10cSrcweir TAccInfo* pUserData = (TAccInfo*)pEntry->GetUserData(); 677*cdf0e10cSrcweir if (pUserData) 678*cdf0e10cSrcweir { 679*cdf0e10cSrcweir sal_uInt16 nCode2 = pUserData->m_aKey.GetCode(); 680*cdf0e10cSrcweir sal_uInt16 nMod2 = pUserData->m_aKey.GetModifier(); 681*cdf0e10cSrcweir if ( 682*cdf0e10cSrcweir (nCode1 == nCode2) && 683*cdf0e10cSrcweir (nMod1 == nMod2 ) 684*cdf0e10cSrcweir ) 685*cdf0e10cSrcweir { 686*cdf0e10cSrcweir Select (pEntry); 687*cdf0e10cSrcweir MakeVisible(pEntry); 688*cdf0e10cSrcweir return; 689*cdf0e10cSrcweir } 690*cdf0e10cSrcweir } 691*cdf0e10cSrcweir pEntry = Next(pEntry); 692*cdf0e10cSrcweir } 693*cdf0e10cSrcweir } 694*cdf0e10cSrcweir 695*cdf0e10cSrcweir // no - handle it as normal dialog input 696*cdf0e10cSrcweir SvTabListBox::KeyInput(aKey); 697*cdf0e10cSrcweir } 698*cdf0e10cSrcweir 699*cdf0e10cSrcweir //----------------------------------------------- 700*cdf0e10cSrcweir SfxAcceleratorConfigPage::SfxAcceleratorConfigPage( Window* pParent, const SfxItemSet& aSet ) 701*cdf0e10cSrcweir : SfxTabPage (pParent, CUI_RES(RID_SVXPAGE_KEYBOARD), aSet) 702*cdf0e10cSrcweir , m_pMacroInfoItem () 703*cdf0e10cSrcweir , m_pStringItem () 704*cdf0e10cSrcweir , m_pFontItem () 705*cdf0e10cSrcweir , m_pFileDlg (NULL) 706*cdf0e10cSrcweir , aEntriesBox (this , this, CUI_RES(BOX_ACC_ENTRIES )) 707*cdf0e10cSrcweir , aKeyboardGroup (this , CUI_RES(GRP_ACC_KEYBOARD )) 708*cdf0e10cSrcweir , aOfficeButton (this , CUI_RES(RB_OFFICE )) 709*cdf0e10cSrcweir , aModuleButton (this , CUI_RES(RB_MODULE )) 710*cdf0e10cSrcweir , aChangeButton (this , CUI_RES(BTN_ACC_CHANGE )) 711*cdf0e10cSrcweir , aRemoveButton (this , CUI_RES(BTN_ACC_REMOVE )) 712*cdf0e10cSrcweir , aGroupText (this , CUI_RES(TXT_ACC_GROUP )) 713*cdf0e10cSrcweir , pGroupLBox(new SfxConfigGroupListBox_Impl( this, CUI_RES(BOX_ACC_GROUP), SFX_SLOT_ACCELCONFIG )) 714*cdf0e10cSrcweir , aFunctionText (this , CUI_RES(TXT_ACC_FUNCTION )) 715*cdf0e10cSrcweir , pFunctionBox(new SfxConfigFunctionListBox_Impl( this, CUI_RES( BOX_ACC_FUNCTION ))) 716*cdf0e10cSrcweir , aKeyText (this , CUI_RES(TXT_ACC_KEY )) 717*cdf0e10cSrcweir , aKeyBox (this , CUI_RES(BOX_ACC_KEY )) 718*cdf0e10cSrcweir , aFunctionsGroup (this , CUI_RES(GRP_ACC_FUNCTIONS )) 719*cdf0e10cSrcweir , aLoadButton (this , CUI_RES(BTN_LOAD )) 720*cdf0e10cSrcweir , aSaveButton (this , CUI_RES(BTN_SAVE )) 721*cdf0e10cSrcweir , aResetButton (this , CUI_RES(BTN_RESET )) 722*cdf0e10cSrcweir , aLoadAccelConfigStr ( CUI_RES( STR_LOADACCELCONFIG ) ) 723*cdf0e10cSrcweir , aSaveAccelConfigStr ( CUI_RES( STR_SAVEACCELCONFIG ) ) 724*cdf0e10cSrcweir , aFilterCfgStr ( CUI_RES( STR_FILTERNAME_CFG ) ) 725*cdf0e10cSrcweir , m_bStylesInfoInitialized(sal_False) 726*cdf0e10cSrcweir , m_xGlobal () 727*cdf0e10cSrcweir , m_xModule () 728*cdf0e10cSrcweir , m_xAct () 729*cdf0e10cSrcweir { 730*cdf0e10cSrcweir FreeResource(); 731*cdf0e10cSrcweir 732*cdf0e10cSrcweir aFilterAllStr = String( SfxResId( STR_SFX_FILTERNAME_ALL ) ); 733*cdf0e10cSrcweir 734*cdf0e10cSrcweir // install handler functions 735*cdf0e10cSrcweir aChangeButton.SetClickHdl( LINK( this, SfxAcceleratorConfigPage, ChangeHdl )); 736*cdf0e10cSrcweir aRemoveButton.SetClickHdl( LINK( this, SfxAcceleratorConfigPage, RemoveHdl )); 737*cdf0e10cSrcweir aEntriesBox.SetSelectHdl ( LINK( this, SfxAcceleratorConfigPage, SelectHdl )); 738*cdf0e10cSrcweir pGroupLBox->SetSelectHdl ( LINK( this, SfxAcceleratorConfigPage, SelectHdl )); 739*cdf0e10cSrcweir pFunctionBox->SetSelectHdl( LINK( this, SfxAcceleratorConfigPage, SelectHdl )); 740*cdf0e10cSrcweir aKeyBox.SetSelectHdl ( LINK( this, SfxAcceleratorConfigPage, SelectHdl )); 741*cdf0e10cSrcweir aLoadButton.SetClickHdl ( LINK( this, SfxAcceleratorConfigPage, Load )); 742*cdf0e10cSrcweir aSaveButton.SetClickHdl ( LINK( this, SfxAcceleratorConfigPage, Save )); 743*cdf0e10cSrcweir aResetButton.SetClickHdl ( LINK( this, SfxAcceleratorConfigPage, Default )); 744*cdf0e10cSrcweir aOfficeButton.SetClickHdl( LINK( this, SfxAcceleratorConfigPage, RadioHdl )); 745*cdf0e10cSrcweir aModuleButton.SetClickHdl( LINK( this, SfxAcceleratorConfigPage, RadioHdl )); 746*cdf0e10cSrcweir 747*cdf0e10cSrcweir // initialize Entriesbox 748*cdf0e10cSrcweir aEntriesBox.SetStyle(aEntriesBox.GetStyle()|WB_HSCROLL|WB_CLIPCHILDREN); 749*cdf0e10cSrcweir aEntriesBox.SetSelectionMode(SINGLE_SELECTION); 750*cdf0e10cSrcweir aEntriesBox.SetTabs(&AccCfgTabs[0], MAP_APPFONT); 751*cdf0e10cSrcweir aEntriesBox.Resize(); // OS: Hack for right selection 752*cdf0e10cSrcweir aEntriesBox.SetSpaceBetweenEntries(0); 753*cdf0e10cSrcweir aEntriesBox.SetDragDropMode(0); 754*cdf0e10cSrcweir 755*cdf0e10cSrcweir // detect max keyname width 756*cdf0e10cSrcweir long nMaxWidth = 0; 757*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < KEYCODE_ARRAY_SIZE; ++i ) 758*cdf0e10cSrcweir { 759*cdf0e10cSrcweir long nTmp = GetTextWidth( KeyCode( KEYCODE_ARRAY[i] ).GetName() ); 760*cdf0e10cSrcweir if ( nTmp > nMaxWidth ) 761*cdf0e10cSrcweir nMaxWidth = nTmp; 762*cdf0e10cSrcweir } 763*cdf0e10cSrcweir // recalc second tab 764*cdf0e10cSrcweir long nNewTab = PixelToLogic( Size( nMaxWidth, 0 ), MAP_APPFONT ).Width(); 765*cdf0e10cSrcweir nNewTab = nNewTab + 5; // additional space 766*cdf0e10cSrcweir aEntriesBox.SetTab( 1, nNewTab ); 767*cdf0e10cSrcweir 768*cdf0e10cSrcweir // initialize GroupBox 769*cdf0e10cSrcweir pGroupLBox->SetFunctionListBox(pFunctionBox); 770*cdf0e10cSrcweir 771*cdf0e10cSrcweir // initialize KeyBox 772*cdf0e10cSrcweir aKeyBox.SetStyle(aKeyBox.GetStyle()|WB_CLIPCHILDREN|WB_HSCROLL|WB_SORT); 773*cdf0e10cSrcweir } 774*cdf0e10cSrcweir 775*cdf0e10cSrcweir //----------------------------------------------- 776*cdf0e10cSrcweir SfxAcceleratorConfigPage::~SfxAcceleratorConfigPage() 777*cdf0e10cSrcweir { 778*cdf0e10cSrcweir // free memory - remove all dynamic user data 779*cdf0e10cSrcweir SvLBoxEntry* pEntry = aEntriesBox.First(); 780*cdf0e10cSrcweir while (pEntry) 781*cdf0e10cSrcweir { 782*cdf0e10cSrcweir TAccInfo* pUserData = (TAccInfo*)pEntry->GetUserData(); 783*cdf0e10cSrcweir if (pUserData) 784*cdf0e10cSrcweir delete pUserData; 785*cdf0e10cSrcweir pEntry = aEntriesBox.Next(pEntry); 786*cdf0e10cSrcweir } 787*cdf0e10cSrcweir 788*cdf0e10cSrcweir pEntry = aKeyBox.First(); 789*cdf0e10cSrcweir while (pEntry) 790*cdf0e10cSrcweir { 791*cdf0e10cSrcweir TAccInfo* pUserData = (TAccInfo*)pEntry->GetUserData(); 792*cdf0e10cSrcweir if (pUserData) 793*cdf0e10cSrcweir delete pUserData; 794*cdf0e10cSrcweir pEntry = aKeyBox.Next(pEntry); 795*cdf0e10cSrcweir } 796*cdf0e10cSrcweir 797*cdf0e10cSrcweir aEntriesBox.Clear(); 798*cdf0e10cSrcweir aKeyBox.Clear(); 799*cdf0e10cSrcweir 800*cdf0e10cSrcweir delete m_pFileDlg; 801*cdf0e10cSrcweir delete pGroupLBox; 802*cdf0e10cSrcweir delete pFunctionBox; 803*cdf0e10cSrcweir } 804*cdf0e10cSrcweir 805*cdf0e10cSrcweir //----------------------------------------------- 806*cdf0e10cSrcweir void SfxAcceleratorConfigPage::InitAccCfg() 807*cdf0e10cSrcweir { 808*cdf0e10cSrcweir // already initialized ? 809*cdf0e10cSrcweir if (m_xSMGR.is()) 810*cdf0e10cSrcweir return; // yes -> do nothing 811*cdf0e10cSrcweir 812*cdf0e10cSrcweir try 813*cdf0e10cSrcweir { 814*cdf0e10cSrcweir // no - initialize this instance 815*cdf0e10cSrcweir m_xSMGR = ::utl::getProcessServiceFactory(); 816*cdf0e10cSrcweir 817*cdf0e10cSrcweir m_xUICmdDescription = css::uno::Reference< css::container::XNameAccess >(m_xSMGR->createInstance(SERVICE_UICMDDESCRIPTION), css::uno::UNO_QUERY_THROW); 818*cdf0e10cSrcweir 819*cdf0e10cSrcweir // get the current active frame, which should be our "parent" 820*cdf0e10cSrcweir // for this session 821*cdf0e10cSrcweir m_xFrame = GetFrame(); 822*cdf0e10cSrcweir if ( !m_xFrame.is() ) 823*cdf0e10cSrcweir { 824*cdf0e10cSrcweir css::uno::Reference< css::frame::XFramesSupplier > xDesktop(m_xSMGR->createInstance(SERVICE_DESKTOP), css::uno::UNO_QUERY_THROW); 825*cdf0e10cSrcweir m_xFrame = xDesktop->getActiveFrame(); 826*cdf0e10cSrcweir } 827*cdf0e10cSrcweir 828*cdf0e10cSrcweir // identify module 829*cdf0e10cSrcweir css::uno::Reference< css::frame::XModuleManager > xModuleManager (m_xSMGR->createInstance(SERVICE_MODULEMANAGER), css::uno::UNO_QUERY_THROW); 830*cdf0e10cSrcweir css::uno::Reference< css::container::XNameAccess > xModuleManagerCont(xModuleManager , css::uno::UNO_QUERY_THROW); 831*cdf0e10cSrcweir m_sModuleLongName = xModuleManager->identify(m_xFrame); 832*cdf0e10cSrcweir ::comphelper::SequenceAsHashMap lModuleProps(xModuleManagerCont->getByName(m_sModuleLongName)); 833*cdf0e10cSrcweir m_sModuleShortName = lModuleProps.getUnpackedValueOrDefault(MODULEPROP_SHORTNAME, ::rtl::OUString()); 834*cdf0e10cSrcweir m_sModuleUIName = lModuleProps.getUnpackedValueOrDefault(MODULEPROP_UINAME , ::rtl::OUString()); 835*cdf0e10cSrcweir 836*cdf0e10cSrcweir // get global accelerator configuration 837*cdf0e10cSrcweir m_xGlobal = css::uno::Reference< css::ui::XAcceleratorConfiguration >(m_xSMGR->createInstance(SERVICE_GLOBALACCCFG), css::uno::UNO_QUERY_THROW); 838*cdf0e10cSrcweir 839*cdf0e10cSrcweir // get module accelerator configuration 840*cdf0e10cSrcweir css::uno::Reference< css::ui::XModuleUIConfigurationManagerSupplier > xModuleCfgSupplier(m_xSMGR->createInstance(SERVICE_MODULEUICONFIGSUPPLIER), css::uno::UNO_QUERY_THROW); 841*cdf0e10cSrcweir css::uno::Reference< css::ui::XUIConfigurationManager > xUICfgManager = xModuleCfgSupplier->getUIConfigurationManager(m_sModuleLongName); 842*cdf0e10cSrcweir m_xModule = css::uno::Reference< css::ui::XAcceleratorConfiguration >(xUICfgManager->getShortCutManager(), css::uno::UNO_QUERY_THROW); 843*cdf0e10cSrcweir } 844*cdf0e10cSrcweir catch(const css::uno::RuntimeException& exRun) 845*cdf0e10cSrcweir { throw exRun; } 846*cdf0e10cSrcweir catch(const css::uno::Exception&) 847*cdf0e10cSrcweir { m_xSMGR.clear(); } 848*cdf0e10cSrcweir } 849*cdf0e10cSrcweir 850*cdf0e10cSrcweir //----------------------------------------------- 851*cdf0e10cSrcweir /** Initialize text columns with own class to enable custom painting 852*cdf0e10cSrcweir This is needed as we have to paint disabled entries by ourself. No support for that in the 853*cdf0e10cSrcweir original SvTabListBox! 854*cdf0e10cSrcweir */ 855*cdf0e10cSrcweir void SfxAcceleratorConfigPage::CreateCustomItems( SvLBoxEntry* pEntry, 856*cdf0e10cSrcweir const String& sCol1 , 857*cdf0e10cSrcweir const String& sCol2 ) 858*cdf0e10cSrcweir { 859*cdf0e10cSrcweir SfxAccCfgLBoxString_Impl* pStringItem = new SfxAccCfgLBoxString_Impl(pEntry, 0, sCol1); 860*cdf0e10cSrcweir pEntry->ReplaceItem(pStringItem, 1); 861*cdf0e10cSrcweir 862*cdf0e10cSrcweir pStringItem = new SfxAccCfgLBoxString_Impl(pEntry, 0, sCol2); 863*cdf0e10cSrcweir pEntry->ReplaceItem(pStringItem, 2); 864*cdf0e10cSrcweir } 865*cdf0e10cSrcweir 866*cdf0e10cSrcweir //----------------------------------------------- 867*cdf0e10cSrcweir void SfxAcceleratorConfigPage::Init(const css::uno::Reference< css::ui::XAcceleratorConfiguration >& xAccMgr) 868*cdf0e10cSrcweir { 869*cdf0e10cSrcweir if (!xAccMgr.is()) 870*cdf0e10cSrcweir return; 871*cdf0e10cSrcweir 872*cdf0e10cSrcweir if (!m_bStylesInfoInitialized) 873*cdf0e10cSrcweir { 874*cdf0e10cSrcweir css::uno::Reference< css::frame::XController > xController; 875*cdf0e10cSrcweir css::uno::Reference< css::frame::XModel > xModel; 876*cdf0e10cSrcweir if (m_xFrame.is()) 877*cdf0e10cSrcweir xController = m_xFrame->getController(); 878*cdf0e10cSrcweir if (xController.is()) 879*cdf0e10cSrcweir xModel = xController->getModel(); 880*cdf0e10cSrcweir 881*cdf0e10cSrcweir m_aStylesInfo.setModel(xModel); 882*cdf0e10cSrcweir pFunctionBox->SetStylesInfo(&m_aStylesInfo); 883*cdf0e10cSrcweir pGroupLBox->SetStylesInfo(&m_aStylesInfo); 884*cdf0e10cSrcweir m_bStylesInfoInitialized = sal_True; 885*cdf0e10cSrcweir } 886*cdf0e10cSrcweir 887*cdf0e10cSrcweir // Insert all editable accelerators into list box. It is possible 888*cdf0e10cSrcweir // that some accelerators are not mapped on the current system/keyboard 889*cdf0e10cSrcweir // but we don't want to lose these mappings. 890*cdf0e10cSrcweir sal_uInt16 c1 = KEYCODE_ARRAY_SIZE; 891*cdf0e10cSrcweir sal_uInt16 i1 = 0; 892*cdf0e10cSrcweir sal_uInt16 nListPos = 0; 893*cdf0e10cSrcweir for (i1=0; i1<c1; ++i1) 894*cdf0e10cSrcweir { 895*cdf0e10cSrcweir KeyCode aKey = KEYCODE_ARRAY[i1]; 896*cdf0e10cSrcweir String sKey = aKey.GetName(); 897*cdf0e10cSrcweir if (!sKey.Len()) 898*cdf0e10cSrcweir continue; 899*cdf0e10cSrcweir TAccInfo* pEntry = new TAccInfo(i1, nListPos, aKey); 900*cdf0e10cSrcweir SvLBoxEntry* pLBEntry = aEntriesBox.InsertEntryToColumn(sKey, 0L, LIST_APPEND, 0xFFFF); 901*cdf0e10cSrcweir pLBEntry->SetUserData(pEntry); 902*cdf0e10cSrcweir } 903*cdf0e10cSrcweir 904*cdf0e10cSrcweir // Assign all commands to its shortcuts - reading the accelerator config. 905*cdf0e10cSrcweir css::uno::Sequence< css::awt::KeyEvent > lKeys = xAccMgr->getAllKeyEvents(); 906*cdf0e10cSrcweir sal_Int32 c2 = lKeys.getLength(); 907*cdf0e10cSrcweir sal_Int32 i2 = 0; 908*cdf0e10cSrcweir sal_uInt16 nCol = aEntriesBox.TabCount()-1; 909*cdf0e10cSrcweir 910*cdf0e10cSrcweir for (i2=0; i2<c2; ++i2) 911*cdf0e10cSrcweir { 912*cdf0e10cSrcweir const css::awt::KeyEvent& aAWTKey = lKeys[i2]; 913*cdf0e10cSrcweir ::rtl::OUString sCommand = xAccMgr->getCommandByKeyEvent(aAWTKey); 914*cdf0e10cSrcweir String sLabel = GetLabel4Command(sCommand); 915*cdf0e10cSrcweir KeyCode aKeyCode = ::svt::AcceleratorExecute::st_AWTKey2VCLKey(aAWTKey); 916*cdf0e10cSrcweir sal_uInt16 nPos = MapKeyCodeToPos(aKeyCode); 917*cdf0e10cSrcweir 918*cdf0e10cSrcweir if (nPos == LISTBOX_ENTRY_NOTFOUND) 919*cdf0e10cSrcweir continue; 920*cdf0e10cSrcweir 921*cdf0e10cSrcweir aEntriesBox.SetEntryText(sLabel, nPos, nCol); 922*cdf0e10cSrcweir 923*cdf0e10cSrcweir SvLBoxEntry* pLBEntry = aEntriesBox.GetEntry(0, nPos); 924*cdf0e10cSrcweir TAccInfo* pEntry = (TAccInfo*)pLBEntry->GetUserData(); 925*cdf0e10cSrcweir 926*cdf0e10cSrcweir pEntry->m_bIsConfigurable = sal_True; 927*cdf0e10cSrcweir pEntry->m_sCommand = sCommand; 928*cdf0e10cSrcweir CreateCustomItems(pLBEntry, aEntriesBox.GetEntryText(pLBEntry, 0), sLabel); 929*cdf0e10cSrcweir } 930*cdf0e10cSrcweir 931*cdf0e10cSrcweir // Map the VCL hardcoded key codes and mark them as not changeable 932*cdf0e10cSrcweir sal_uLong c3 = Application::GetReservedKeyCodeCount(); 933*cdf0e10cSrcweir sal_uLong i3 = 0; 934*cdf0e10cSrcweir for (i3=0; i3<c3; ++i3) 935*cdf0e10cSrcweir { 936*cdf0e10cSrcweir const KeyCode* pKeyCode = Application::GetReservedKeyCode(i3); 937*cdf0e10cSrcweir sal_uInt16 nPos = MapKeyCodeToPos(*pKeyCode); 938*cdf0e10cSrcweir 939*cdf0e10cSrcweir if (nPos == LISTBOX_ENTRY_NOTFOUND) 940*cdf0e10cSrcweir continue; 941*cdf0e10cSrcweir 942*cdf0e10cSrcweir // Hardcoded function mapped so no ID possible and mark entry as not changeable 943*cdf0e10cSrcweir SvLBoxEntry* pLBEntry = aEntriesBox.GetEntry(0, nPos); 944*cdf0e10cSrcweir TAccInfo* pEntry = (TAccInfo*)pLBEntry->GetUserData(); 945*cdf0e10cSrcweir 946*cdf0e10cSrcweir pEntry->m_bIsConfigurable = sal_False; 947*cdf0e10cSrcweir CreateCustomItems(pLBEntry, aEntriesBox.GetEntryText(pLBEntry, 0), String()); 948*cdf0e10cSrcweir } 949*cdf0e10cSrcweir } 950*cdf0e10cSrcweir 951*cdf0e10cSrcweir //----------------------------------------------- 952*cdf0e10cSrcweir void SfxAcceleratorConfigPage::Apply(const css::uno::Reference< css::ui::XAcceleratorConfiguration >& xAccMgr) 953*cdf0e10cSrcweir { 954*cdf0e10cSrcweir if (!xAccMgr.is()) 955*cdf0e10cSrcweir return; 956*cdf0e10cSrcweir 957*cdf0e10cSrcweir // Go through the list from the bottom to the top ... 958*cdf0e10cSrcweir // because logical accelerator must be preferred instead of 959*cdf0e10cSrcweir // physical ones! 960*cdf0e10cSrcweir SvLBoxEntry* pEntry = aEntriesBox.First(); 961*cdf0e10cSrcweir while (pEntry) 962*cdf0e10cSrcweir { 963*cdf0e10cSrcweir TAccInfo* pUserData = (TAccInfo*)pEntry->GetUserData(); 964*cdf0e10cSrcweir ::rtl::OUString sCommand ; 965*cdf0e10cSrcweir css::awt::KeyEvent aAWTKey ; 966*cdf0e10cSrcweir 967*cdf0e10cSrcweir if (pUserData) 968*cdf0e10cSrcweir { 969*cdf0e10cSrcweir sCommand = pUserData->m_sCommand; 970*cdf0e10cSrcweir aAWTKey = ::svt::AcceleratorExecute::st_VCLKey2AWTKey(pUserData->m_aKey); 971*cdf0e10cSrcweir } 972*cdf0e10cSrcweir 973*cdf0e10cSrcweir try 974*cdf0e10cSrcweir { 975*cdf0e10cSrcweir if (sCommand.getLength()) 976*cdf0e10cSrcweir xAccMgr->setKeyEvent(aAWTKey, sCommand); 977*cdf0e10cSrcweir else 978*cdf0e10cSrcweir xAccMgr->removeKeyEvent(aAWTKey); 979*cdf0e10cSrcweir } 980*cdf0e10cSrcweir catch(const css::uno::RuntimeException& exRun) 981*cdf0e10cSrcweir { throw exRun; } 982*cdf0e10cSrcweir catch(const css::uno::Exception&) 983*cdf0e10cSrcweir {} 984*cdf0e10cSrcweir 985*cdf0e10cSrcweir pEntry = aEntriesBox.Next(pEntry); 986*cdf0e10cSrcweir } 987*cdf0e10cSrcweir } 988*cdf0e10cSrcweir 989*cdf0e10cSrcweir //----------------------------------------------- 990*cdf0e10cSrcweir void SfxAcceleratorConfigPage::ResetConfig() 991*cdf0e10cSrcweir { 992*cdf0e10cSrcweir aEntriesBox.Clear(); 993*cdf0e10cSrcweir } 994*cdf0e10cSrcweir 995*cdf0e10cSrcweir //----------------------------------------------- 996*cdf0e10cSrcweir IMPL_LINK( SfxAcceleratorConfigPage, Load, Button*, EMPTYARG ) 997*cdf0e10cSrcweir { 998*cdf0e10cSrcweir // ask for filename, where we should load the new config data from 999*cdf0e10cSrcweir StartFileDialog( WB_OPEN | WB_STDMODAL | WB_3DLOOK, aLoadAccelConfigStr ); 1000*cdf0e10cSrcweir return 0; 1001*cdf0e10cSrcweir } 1002*cdf0e10cSrcweir 1003*cdf0e10cSrcweir //----------------------------------------------- 1004*cdf0e10cSrcweir IMPL_LINK( SfxAcceleratorConfigPage, Save, Button*, EMPTYARG ) 1005*cdf0e10cSrcweir { 1006*cdf0e10cSrcweir StartFileDialog( WB_SAVEAS | WB_STDMODAL | WB_3DLOOK, aLoadAccelConfigStr ); 1007*cdf0e10cSrcweir return 0; 1008*cdf0e10cSrcweir } 1009*cdf0e10cSrcweir 1010*cdf0e10cSrcweir //----------------------------------------------- 1011*cdf0e10cSrcweir IMPL_LINK(SfxAcceleratorConfigPage, Default, PushButton*, EMPTYARG) 1012*cdf0e10cSrcweir { 1013*cdf0e10cSrcweir css::uno::Reference< css::form::XReset > xReset(m_xAct, css::uno::UNO_QUERY); 1014*cdf0e10cSrcweir if (xReset.is()) 1015*cdf0e10cSrcweir xReset->reset(); 1016*cdf0e10cSrcweir 1017*cdf0e10cSrcweir aEntriesBox.SetUpdateMode(sal_False); 1018*cdf0e10cSrcweir ResetConfig(); 1019*cdf0e10cSrcweir Init(m_xAct); 1020*cdf0e10cSrcweir aEntriesBox.SetUpdateMode(sal_True); 1021*cdf0e10cSrcweir aEntriesBox.Invalidate(); 1022*cdf0e10cSrcweir aEntriesBox.Select(aEntriesBox.GetEntry(0, 0)); 1023*cdf0e10cSrcweir 1024*cdf0e10cSrcweir return 0; 1025*cdf0e10cSrcweir } 1026*cdf0e10cSrcweir 1027*cdf0e10cSrcweir //----------------------------------------------- 1028*cdf0e10cSrcweir IMPL_LINK( SfxAcceleratorConfigPage, ChangeHdl, Button*, EMPTYARG ) 1029*cdf0e10cSrcweir { 1030*cdf0e10cSrcweir sal_uInt16 nPos = (sal_uInt16) aEntriesBox.GetModel()->GetRelPos( aEntriesBox.FirstSelected() ); 1031*cdf0e10cSrcweir TAccInfo* pEntry = (TAccInfo*)aEntriesBox.GetEntry(0, nPos)->GetUserData(); 1032*cdf0e10cSrcweir String sNewCommand = pFunctionBox->GetCurCommand(); 1033*cdf0e10cSrcweir String sLabel = pFunctionBox->GetCurLabel(); 1034*cdf0e10cSrcweir if (!sLabel.Len()) 1035*cdf0e10cSrcweir sLabel = GetLabel4Command(sNewCommand); 1036*cdf0e10cSrcweir 1037*cdf0e10cSrcweir pEntry->m_sCommand = sNewCommand; 1038*cdf0e10cSrcweir sal_uInt16 nCol = aEntriesBox.TabCount() - 1; 1039*cdf0e10cSrcweir aEntriesBox.SetEntryText(sLabel, nPos, nCol); 1040*cdf0e10cSrcweir 1041*cdf0e10cSrcweir ((Link &) pFunctionBox->GetSelectHdl()).Call( pFunctionBox ); 1042*cdf0e10cSrcweir return 0; 1043*cdf0e10cSrcweir } 1044*cdf0e10cSrcweir 1045*cdf0e10cSrcweir //----------------------------------------------- 1046*cdf0e10cSrcweir IMPL_LINK( SfxAcceleratorConfigPage, RemoveHdl, Button *, EMPTYARG ) 1047*cdf0e10cSrcweir { 1048*cdf0e10cSrcweir // get selected entry 1049*cdf0e10cSrcweir sal_uInt16 nPos = (sal_uInt16) aEntriesBox.GetModel()->GetRelPos( aEntriesBox.FirstSelected() ); 1050*cdf0e10cSrcweir TAccInfo* pEntry = (TAccInfo*)aEntriesBox.GetEntry(0, nPos)->GetUserData(); 1051*cdf0e10cSrcweir 1052*cdf0e10cSrcweir // remove function name from selected entry 1053*cdf0e10cSrcweir sal_uInt16 nCol = aEntriesBox.TabCount() - 1; 1054*cdf0e10cSrcweir aEntriesBox.SetEntryText( String(), nPos, nCol ); 1055*cdf0e10cSrcweir pEntry->m_sCommand = ::rtl::OUString(); 1056*cdf0e10cSrcweir 1057*cdf0e10cSrcweir ((Link &) pFunctionBox->GetSelectHdl()).Call( pFunctionBox ); 1058*cdf0e10cSrcweir return 0; 1059*cdf0e10cSrcweir } 1060*cdf0e10cSrcweir 1061*cdf0e10cSrcweir //----------------------------------------------- 1062*cdf0e10cSrcweir IMPL_LINK( SfxAcceleratorConfigPage, SelectHdl, Control*, pListBox ) 1063*cdf0e10cSrcweir { 1064*cdf0e10cSrcweir // disable help 1065*cdf0e10cSrcweir Help::ShowBalloon( this, Point(), String() ); 1066*cdf0e10cSrcweir if ( pListBox == &aEntriesBox ) 1067*cdf0e10cSrcweir { 1068*cdf0e10cSrcweir sal_uInt16 nPos = (sal_uInt16) aEntriesBox.GetModel()->GetRelPos( aEntriesBox.FirstSelected() ); 1069*cdf0e10cSrcweir TAccInfo* pEntry = (TAccInfo*)aEntriesBox.GetEntry(0, nPos)->GetUserData(); 1070*cdf0e10cSrcweir ::rtl::OUString sPossibleNewCommand = pFunctionBox->GetCurCommand(); 1071*cdf0e10cSrcweir 1072*cdf0e10cSrcweir aRemoveButton.Enable( sal_False ); 1073*cdf0e10cSrcweir aChangeButton.Enable( sal_False ); 1074*cdf0e10cSrcweir 1075*cdf0e10cSrcweir if (pEntry->m_bIsConfigurable) 1076*cdf0e10cSrcweir { 1077*cdf0e10cSrcweir if (pEntry->isConfigured()) 1078*cdf0e10cSrcweir aRemoveButton.Enable( sal_True ); 1079*cdf0e10cSrcweir aChangeButton.Enable( pEntry->m_sCommand != sPossibleNewCommand ); 1080*cdf0e10cSrcweir } 1081*cdf0e10cSrcweir } 1082*cdf0e10cSrcweir else if ( pListBox == pGroupLBox ) 1083*cdf0e10cSrcweir { 1084*cdf0e10cSrcweir pGroupLBox->GroupSelected(); 1085*cdf0e10cSrcweir if ( !pFunctionBox->FirstSelected() ) 1086*cdf0e10cSrcweir aChangeButton.Enable( sal_False ); 1087*cdf0e10cSrcweir } 1088*cdf0e10cSrcweir else if ( pListBox == pFunctionBox ) 1089*cdf0e10cSrcweir { 1090*cdf0e10cSrcweir aRemoveButton.Enable( sal_False ); 1091*cdf0e10cSrcweir aChangeButton.Enable( sal_False ); 1092*cdf0e10cSrcweir 1093*cdf0e10cSrcweir // #i36994 First selected can return zero! 1094*cdf0e10cSrcweir SvLBoxEntry* pLBEntry = aEntriesBox.FirstSelected(); 1095*cdf0e10cSrcweir if ( pLBEntry != 0 ) 1096*cdf0e10cSrcweir { 1097*cdf0e10cSrcweir sal_uInt16 nPos = (sal_uInt16) aEntriesBox.GetModel()->GetRelPos( pLBEntry ); 1098*cdf0e10cSrcweir TAccInfo* pEntry = (TAccInfo*)aEntriesBox.GetEntry(0, nPos)->GetUserData(); 1099*cdf0e10cSrcweir ::rtl::OUString sPossibleNewCommand = pFunctionBox->GetCurCommand(); 1100*cdf0e10cSrcweir 1101*cdf0e10cSrcweir if (pEntry->m_bIsConfigurable) 1102*cdf0e10cSrcweir { 1103*cdf0e10cSrcweir if (pEntry->isConfigured()) 1104*cdf0e10cSrcweir aRemoveButton.Enable( sal_True ); 1105*cdf0e10cSrcweir aChangeButton.Enable( pEntry->m_sCommand != sPossibleNewCommand ); 1106*cdf0e10cSrcweir } 1107*cdf0e10cSrcweir 1108*cdf0e10cSrcweir // update key box 1109*cdf0e10cSrcweir aKeyBox.Clear(); 1110*cdf0e10cSrcweir SvLBoxEntry* pIt = aEntriesBox.First(); 1111*cdf0e10cSrcweir while ( pIt ) 1112*cdf0e10cSrcweir { 1113*cdf0e10cSrcweir TAccInfo* pUserData = (TAccInfo*)pIt->GetUserData(); 1114*cdf0e10cSrcweir if ( pUserData && pUserData->m_sCommand == sPossibleNewCommand ) 1115*cdf0e10cSrcweir { 1116*cdf0e10cSrcweir TAccInfo* pU1 = new TAccInfo(-1, -1, pUserData->m_aKey); 1117*cdf0e10cSrcweir SvLBoxEntry* pE1 = aKeyBox.InsertEntry( pUserData->m_aKey.GetName(), 0L, sal_True, LIST_APPEND ); 1118*cdf0e10cSrcweir pE1->SetUserData(pU1); 1119*cdf0e10cSrcweir pE1->EnableChildsOnDemand( sal_False ); 1120*cdf0e10cSrcweir } 1121*cdf0e10cSrcweir pIt = aEntriesBox.Next(pIt); 1122*cdf0e10cSrcweir } 1123*cdf0e10cSrcweir } 1124*cdf0e10cSrcweir } 1125*cdf0e10cSrcweir else 1126*cdf0e10cSrcweir { 1127*cdf0e10cSrcweir // goto selected "key" entry of the key box 1128*cdf0e10cSrcweir SvLBoxEntry* pE2 = 0; 1129*cdf0e10cSrcweir TAccInfo* pU2 = 0; 1130*cdf0e10cSrcweir sal_uInt16 nP2 = LISTBOX_ENTRY_NOTFOUND; 1131*cdf0e10cSrcweir SvLBoxEntry* pE3 = 0; 1132*cdf0e10cSrcweir 1133*cdf0e10cSrcweir pE2 = aKeyBox.FirstSelected(); 1134*cdf0e10cSrcweir if (pE2) 1135*cdf0e10cSrcweir pU2 = (TAccInfo*)pE2->GetUserData(); 1136*cdf0e10cSrcweir if (pU2) 1137*cdf0e10cSrcweir nP2 = MapKeyCodeToPos(pU2->m_aKey); 1138*cdf0e10cSrcweir if (nP2 != LISTBOX_ENTRY_NOTFOUND) 1139*cdf0e10cSrcweir pE3 = aEntriesBox.GetEntry( 0, nP2 ); 1140*cdf0e10cSrcweir if (pE3) 1141*cdf0e10cSrcweir { 1142*cdf0e10cSrcweir aEntriesBox.Select( pE3 ); 1143*cdf0e10cSrcweir aEntriesBox.MakeVisible( pE3 ); 1144*cdf0e10cSrcweir } 1145*cdf0e10cSrcweir } 1146*cdf0e10cSrcweir 1147*cdf0e10cSrcweir return 0; 1148*cdf0e10cSrcweir } 1149*cdf0e10cSrcweir 1150*cdf0e10cSrcweir //----------------------------------------------- 1151*cdf0e10cSrcweir IMPL_LINK( SfxAcceleratorConfigPage, RadioHdl, RadioButton *, EMPTYARG ) 1152*cdf0e10cSrcweir { 1153*cdf0e10cSrcweir css::uno::Reference< css::ui::XAcceleratorConfiguration > xOld = m_xAct; 1154*cdf0e10cSrcweir 1155*cdf0e10cSrcweir if (aOfficeButton.IsChecked()) 1156*cdf0e10cSrcweir m_xAct = m_xGlobal; 1157*cdf0e10cSrcweir else if (aModuleButton.IsChecked()) 1158*cdf0e10cSrcweir m_xAct = m_xModule; 1159*cdf0e10cSrcweir 1160*cdf0e10cSrcweir // nothing changed? => do nothing! 1161*cdf0e10cSrcweir if ( m_xAct.is() && ( xOld == m_xAct ) ) 1162*cdf0e10cSrcweir return 0; 1163*cdf0e10cSrcweir 1164*cdf0e10cSrcweir aEntriesBox.SetUpdateMode( sal_False ); 1165*cdf0e10cSrcweir ResetConfig(); 1166*cdf0e10cSrcweir Init(m_xAct); 1167*cdf0e10cSrcweir aEntriesBox.SetUpdateMode( sal_True ); 1168*cdf0e10cSrcweir aEntriesBox.Invalidate(); 1169*cdf0e10cSrcweir 1170*cdf0e10cSrcweir pGroupLBox->Init(m_xSMGR, m_xFrame, m_sModuleLongName); 1171*cdf0e10cSrcweir 1172*cdf0e10cSrcweir // pb: #133213# do not select NULL entries 1173*cdf0e10cSrcweir SvLBoxEntry* pEntry = aEntriesBox.GetEntry( 0, 0 ); 1174*cdf0e10cSrcweir if ( pEntry ) 1175*cdf0e10cSrcweir aEntriesBox.Select( pEntry ); 1176*cdf0e10cSrcweir pEntry = pGroupLBox->GetEntry( 0, 0 ); 1177*cdf0e10cSrcweir if ( pEntry ) 1178*cdf0e10cSrcweir pGroupLBox->Select( pEntry ); 1179*cdf0e10cSrcweir 1180*cdf0e10cSrcweir ((Link &) pFunctionBox->GetSelectHdl()).Call( pFunctionBox ); 1181*cdf0e10cSrcweir return 1L; 1182*cdf0e10cSrcweir } 1183*cdf0e10cSrcweir 1184*cdf0e10cSrcweir //----------------------------------------------- 1185*cdf0e10cSrcweir IMPL_LINK( SfxAcceleratorConfigPage, LoadHdl, sfx2::FileDialogHelper*, EMPTYARG ) 1186*cdf0e10cSrcweir { 1187*cdf0e10cSrcweir DBG_ASSERT( m_pFileDlg, "SfxInternetPage::DialogClosedHdl(): no file dialog" ); 1188*cdf0e10cSrcweir 1189*cdf0e10cSrcweir ::rtl::OUString sCfgName; 1190*cdf0e10cSrcweir if ( ERRCODE_NONE == m_pFileDlg->GetError() ) 1191*cdf0e10cSrcweir sCfgName = m_pFileDlg->GetPath(); 1192*cdf0e10cSrcweir 1193*cdf0e10cSrcweir if ( !sCfgName.getLength() ) 1194*cdf0e10cSrcweir return 0; 1195*cdf0e10cSrcweir 1196*cdf0e10cSrcweir GetTabDialog()->EnterWait(); 1197*cdf0e10cSrcweir 1198*cdf0e10cSrcweir css::uno::Reference< css::frame::XModel > xDoc ; 1199*cdf0e10cSrcweir css::uno::Reference< css::ui::XUIConfigurationManager > xCfgMgr ; 1200*cdf0e10cSrcweir css::uno::Reference< css::embed::XStorage > xRootStorage; // we must hold the root storage alive, if xCfgMgr is used! 1201*cdf0e10cSrcweir 1202*cdf0e10cSrcweir try 1203*cdf0e10cSrcweir { 1204*cdf0e10cSrcweir // first check if URL points to a document already loaded 1205*cdf0e10cSrcweir xDoc = SearchForAlreadyLoadedDoc(sCfgName); 1206*cdf0e10cSrcweir if (xDoc.is()) 1207*cdf0e10cSrcweir { 1208*cdf0e10cSrcweir // Get ui config manager. There should always be one at the model. 1209*cdf0e10cSrcweir css::uno::Reference< css::ui::XUIConfigurationManagerSupplier > xCfgSupplier(xDoc, css::uno::UNO_QUERY_THROW); 1210*cdf0e10cSrcweir xCfgMgr = xCfgSupplier->getUIConfigurationManager(); 1211*cdf0e10cSrcweir } 1212*cdf0e10cSrcweir else 1213*cdf0e10cSrcweir { 1214*cdf0e10cSrcweir // URL doesn't point to a loaded document, try to access it as a single storage 1215*cdf0e10cSrcweir // dont forget to release the storage afterwards! 1216*cdf0e10cSrcweir css::uno::Reference< css::lang::XSingleServiceFactory > xStorageFactory(m_xSMGR->createInstance(SERVICE_STORAGEFACTORY), css::uno::UNO_QUERY_THROW); 1217*cdf0e10cSrcweir css::uno::Sequence< css::uno::Any > lArgs(2); 1218*cdf0e10cSrcweir lArgs[0] <<= sCfgName; 1219*cdf0e10cSrcweir lArgs[1] <<= css::embed::ElementModes::READ; 1220*cdf0e10cSrcweir 1221*cdf0e10cSrcweir xRootStorage = css::uno::Reference< css::embed::XStorage >(xStorageFactory->createInstanceWithArguments(lArgs), css::uno::UNO_QUERY_THROW); 1222*cdf0e10cSrcweir css::uno::Reference< css::embed::XStorage > xUIConfig = xRootStorage->openStorageElement(FOLDERNAME_UICONFIG, css::embed::ElementModes::READ); 1223*cdf0e10cSrcweir if (xUIConfig.is()) 1224*cdf0e10cSrcweir { 1225*cdf0e10cSrcweir xCfgMgr = css::uno::Reference< css::ui::XUIConfigurationManager >(m_xSMGR->createInstance(SERVICE_UICONFIGMGR), css::uno::UNO_QUERY_THROW); 1226*cdf0e10cSrcweir css::uno::Reference< css::ui::XUIConfigurationStorage > xCfgMgrStore(xCfgMgr, css::uno::UNO_QUERY_THROW); 1227*cdf0e10cSrcweir xCfgMgrStore->setStorage(xUIConfig); 1228*cdf0e10cSrcweir } 1229*cdf0e10cSrcweir } 1230*cdf0e10cSrcweir 1231*cdf0e10cSrcweir if (xCfgMgr.is()) 1232*cdf0e10cSrcweir { 1233*cdf0e10cSrcweir // open the configuration and update our UI 1234*cdf0e10cSrcweir css::uno::Reference< css::ui::XAcceleratorConfiguration > xTempAccMgr(xCfgMgr->getShortCutManager(), css::uno::UNO_QUERY_THROW); 1235*cdf0e10cSrcweir 1236*cdf0e10cSrcweir aEntriesBox.SetUpdateMode(sal_False); 1237*cdf0e10cSrcweir ResetConfig(); 1238*cdf0e10cSrcweir Init(xTempAccMgr); 1239*cdf0e10cSrcweir aEntriesBox.SetUpdateMode(sal_True); 1240*cdf0e10cSrcweir aEntriesBox.Invalidate(); 1241*cdf0e10cSrcweir aEntriesBox.Select(aEntriesBox.GetEntry(0, 0)); 1242*cdf0e10cSrcweir 1243*cdf0e10cSrcweir } 1244*cdf0e10cSrcweir 1245*cdf0e10cSrcweir // dont forget to close the new opened storage! 1246*cdf0e10cSrcweir // We are the owner of it. 1247*cdf0e10cSrcweir if (xRootStorage.is()) 1248*cdf0e10cSrcweir { 1249*cdf0e10cSrcweir css::uno::Reference< css::lang::XComponent > xComponent; 1250*cdf0e10cSrcweir xComponent = css::uno::Reference< css::lang::XComponent >(xCfgMgr, css::uno::UNO_QUERY); 1251*cdf0e10cSrcweir if (xComponent.is()) 1252*cdf0e10cSrcweir xComponent->dispose(); 1253*cdf0e10cSrcweir xComponent = css::uno::Reference< css::lang::XComponent >(xRootStorage, css::uno::UNO_QUERY); 1254*cdf0e10cSrcweir if (xComponent.is()) 1255*cdf0e10cSrcweir xComponent->dispose(); 1256*cdf0e10cSrcweir } 1257*cdf0e10cSrcweir } 1258*cdf0e10cSrcweir catch(const css::uno::RuntimeException& exRun) 1259*cdf0e10cSrcweir { throw exRun; } 1260*cdf0e10cSrcweir catch(const css::uno::Exception&) 1261*cdf0e10cSrcweir {} 1262*cdf0e10cSrcweir 1263*cdf0e10cSrcweir GetTabDialog()->LeaveWait(); 1264*cdf0e10cSrcweir 1265*cdf0e10cSrcweir return 0; 1266*cdf0e10cSrcweir } 1267*cdf0e10cSrcweir 1268*cdf0e10cSrcweir //----------------------------------------------- 1269*cdf0e10cSrcweir IMPL_LINK( SfxAcceleratorConfigPage, SaveHdl, sfx2::FileDialogHelper*, EMPTYARG ) 1270*cdf0e10cSrcweir { 1271*cdf0e10cSrcweir DBG_ASSERT( m_pFileDlg, "SfxInternetPage::DialogClosedHdl(): no file dialog" ); 1272*cdf0e10cSrcweir 1273*cdf0e10cSrcweir ::rtl::OUString sCfgName; 1274*cdf0e10cSrcweir if ( ERRCODE_NONE == m_pFileDlg->GetError() ) 1275*cdf0e10cSrcweir sCfgName = m_pFileDlg->GetPath(); 1276*cdf0e10cSrcweir 1277*cdf0e10cSrcweir if ( !sCfgName.getLength() ) 1278*cdf0e10cSrcweir return 0; 1279*cdf0e10cSrcweir 1280*cdf0e10cSrcweir GetTabDialog()->EnterWait(); 1281*cdf0e10cSrcweir 1282*cdf0e10cSrcweir css::uno::Reference< css::frame::XModel > xDoc ; 1283*cdf0e10cSrcweir css::uno::Reference< css::ui::XUIConfigurationManager > xCfgMgr ; 1284*cdf0e10cSrcweir css::uno::Reference< css::embed::XStorage > xRootStorage; 1285*cdf0e10cSrcweir 1286*cdf0e10cSrcweir try 1287*cdf0e10cSrcweir { 1288*cdf0e10cSrcweir // first check if URL points to a document already loaded 1289*cdf0e10cSrcweir xDoc = SearchForAlreadyLoadedDoc(sCfgName); 1290*cdf0e10cSrcweir if (xDoc.is()) 1291*cdf0e10cSrcweir { 1292*cdf0e10cSrcweir // get config manager, force creation if there was none before 1293*cdf0e10cSrcweir css::uno::Reference< css::ui::XUIConfigurationManagerSupplier > xCfgSupplier(xDoc, css::uno::UNO_QUERY_THROW); 1294*cdf0e10cSrcweir xCfgMgr = xCfgSupplier->getUIConfigurationManager(); 1295*cdf0e10cSrcweir } 1296*cdf0e10cSrcweir else 1297*cdf0e10cSrcweir { 1298*cdf0e10cSrcweir // URL doesn't point to a loaded document, try to access it as a single storage 1299*cdf0e10cSrcweir css::uno::Reference< css::lang::XSingleServiceFactory > xStorageFactory(m_xSMGR->createInstance(SERVICE_STORAGEFACTORY), css::uno::UNO_QUERY_THROW); 1300*cdf0e10cSrcweir css::uno::Sequence< css::uno::Any > lArgs(2); 1301*cdf0e10cSrcweir lArgs[0] <<= sCfgName; 1302*cdf0e10cSrcweir lArgs[1] <<= css::embed::ElementModes::WRITE; 1303*cdf0e10cSrcweir 1304*cdf0e10cSrcweir xRootStorage = css::uno::Reference< css::embed::XStorage >( 1305*cdf0e10cSrcweir xStorageFactory->createInstanceWithArguments(lArgs), 1306*cdf0e10cSrcweir css::uno::UNO_QUERY_THROW); 1307*cdf0e10cSrcweir 1308*cdf0e10cSrcweir css::uno::Reference< css::embed::XStorage > xUIConfig( 1309*cdf0e10cSrcweir xRootStorage->openStorageElement(FOLDERNAME_UICONFIG, css::embed::ElementModes::WRITE), 1310*cdf0e10cSrcweir css::uno::UNO_QUERY_THROW); 1311*cdf0e10cSrcweir css::uno::Reference< css::beans::XPropertySet > xUIConfigProps( 1312*cdf0e10cSrcweir xUIConfig, 1313*cdf0e10cSrcweir css::uno::UNO_QUERY_THROW); 1314*cdf0e10cSrcweir 1315*cdf0e10cSrcweir // set the correct media type if the storage was new created 1316*cdf0e10cSrcweir ::rtl::OUString sMediaType; 1317*cdf0e10cSrcweir xUIConfigProps->getPropertyValue(MEDIATYPE_PROPNAME) >>= sMediaType; 1318*cdf0e10cSrcweir if (!sMediaType.getLength()) 1319*cdf0e10cSrcweir xUIConfigProps->setPropertyValue(MEDIATYPE_PROPNAME, css::uno::makeAny(MEDIATYPE_UICONFIG)); 1320*cdf0e10cSrcweir 1321*cdf0e10cSrcweir xCfgMgr = css::uno::Reference< css::ui::XUIConfigurationManager >(m_xSMGR->createInstance(SERVICE_UICONFIGMGR), css::uno::UNO_QUERY_THROW); 1322*cdf0e10cSrcweir css::uno::Reference< css::ui::XUIConfigurationStorage > xUICfgStore(xCfgMgr, css::uno::UNO_QUERY_THROW); 1323*cdf0e10cSrcweir xUICfgStore->setStorage(xUIConfig); 1324*cdf0e10cSrcweir } 1325*cdf0e10cSrcweir 1326*cdf0e10cSrcweir if (xCfgMgr.is()) 1327*cdf0e10cSrcweir { 1328*cdf0e10cSrcweir // get the target configuration access and update with all shortcuts 1329*cdf0e10cSrcweir // which are set currently at the UI ! 1330*cdf0e10cSrcweir // Dont copy the m_xAct content to it ... because m_xAct will be updated 1331*cdf0e10cSrcweir // from the UI on pressing the button "OK" only. And inbetween it's not up to date ! 1332*cdf0e10cSrcweir css::uno::Reference< css::ui::XAcceleratorConfiguration > xTargetAccMgr(xCfgMgr->getShortCutManager(), css::uno::UNO_QUERY_THROW); 1333*cdf0e10cSrcweir Apply(xTargetAccMgr); 1334*cdf0e10cSrcweir 1335*cdf0e10cSrcweir // commit (order is important!) 1336*cdf0e10cSrcweir css::uno::Reference< css::ui::XUIConfigurationPersistence > xCommit1(xTargetAccMgr, css::uno::UNO_QUERY_THROW); 1337*cdf0e10cSrcweir css::uno::Reference< css::ui::XUIConfigurationPersistence > xCommit2(xCfgMgr , css::uno::UNO_QUERY_THROW); 1338*cdf0e10cSrcweir xCommit1->store(); 1339*cdf0e10cSrcweir xCommit2->store(); 1340*cdf0e10cSrcweir 1341*cdf0e10cSrcweir if (xRootStorage.is()) 1342*cdf0e10cSrcweir { 1343*cdf0e10cSrcweir // Commit root storage 1344*cdf0e10cSrcweir css::uno::Reference< css::embed::XTransactedObject > xCommit3(xRootStorage, css::uno::UNO_QUERY_THROW); 1345*cdf0e10cSrcweir xCommit3->commit(); 1346*cdf0e10cSrcweir } 1347*cdf0e10cSrcweir } 1348*cdf0e10cSrcweir 1349*cdf0e10cSrcweir if (xRootStorage.is()) 1350*cdf0e10cSrcweir { 1351*cdf0e10cSrcweir css::uno::Reference< css::lang::XComponent > xComponent; 1352*cdf0e10cSrcweir xComponent = css::uno::Reference< css::lang::XComponent >(xCfgMgr, css::uno::UNO_QUERY); 1353*cdf0e10cSrcweir if (xComponent.is()) 1354*cdf0e10cSrcweir xComponent->dispose(); 1355*cdf0e10cSrcweir xComponent = css::uno::Reference< css::lang::XComponent >(xRootStorage, css::uno::UNO_QUERY); 1356*cdf0e10cSrcweir if (xComponent.is()) 1357*cdf0e10cSrcweir xComponent->dispose(); 1358*cdf0e10cSrcweir } 1359*cdf0e10cSrcweir } 1360*cdf0e10cSrcweir catch(const css::uno::RuntimeException& exRun) 1361*cdf0e10cSrcweir { throw exRun; } 1362*cdf0e10cSrcweir catch(const css::uno::Exception&) 1363*cdf0e10cSrcweir {} 1364*cdf0e10cSrcweir 1365*cdf0e10cSrcweir GetTabDialog()->LeaveWait(); 1366*cdf0e10cSrcweir 1367*cdf0e10cSrcweir return 0; 1368*cdf0e10cSrcweir } 1369*cdf0e10cSrcweir 1370*cdf0e10cSrcweir //----------------------------------------------- 1371*cdf0e10cSrcweir void SfxAcceleratorConfigPage::StartFileDialog( WinBits nBits, const String& rTitle ) 1372*cdf0e10cSrcweir { 1373*cdf0e10cSrcweir bool bSave = ( ( nBits & WB_SAVEAS ) == WB_SAVEAS ); 1374*cdf0e10cSrcweir short nDialogType = bSave ? css::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE 1375*cdf0e10cSrcweir : css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE; 1376*cdf0e10cSrcweir if ( m_pFileDlg ) 1377*cdf0e10cSrcweir delete m_pFileDlg; 1378*cdf0e10cSrcweir m_pFileDlg = new sfx2::FileDialogHelper( nDialogType, 0 ); 1379*cdf0e10cSrcweir 1380*cdf0e10cSrcweir m_pFileDlg->SetTitle( rTitle ); 1381*cdf0e10cSrcweir m_pFileDlg->AddFilter( aFilterAllStr, DEFINE_CONST_UNICODE( FILEDIALOG_FILTER_ALL ) ); 1382*cdf0e10cSrcweir m_pFileDlg->AddFilter( aFilterCfgStr, DEFINE_CONST_UNICODE( "*.cfg" ) ); 1383*cdf0e10cSrcweir 1384*cdf0e10cSrcweir Link aDlgClosedLink = bSave ? LINK( this, SfxAcceleratorConfigPage, SaveHdl ) 1385*cdf0e10cSrcweir : LINK( this, SfxAcceleratorConfigPage, LoadHdl ); 1386*cdf0e10cSrcweir m_pFileDlg->StartExecuteModal( aDlgClosedLink ); 1387*cdf0e10cSrcweir } 1388*cdf0e10cSrcweir 1389*cdf0e10cSrcweir //----------------------------------------------- 1390*cdf0e10cSrcweir sal_Bool SfxAcceleratorConfigPage::FillItemSet( SfxItemSet& ) 1391*cdf0e10cSrcweir { 1392*cdf0e10cSrcweir Apply(m_xAct); 1393*cdf0e10cSrcweir try 1394*cdf0e10cSrcweir { 1395*cdf0e10cSrcweir m_xAct->store(); 1396*cdf0e10cSrcweir } 1397*cdf0e10cSrcweir catch(const css::uno::RuntimeException& exRun) 1398*cdf0e10cSrcweir { throw exRun; } 1399*cdf0e10cSrcweir catch(const css::uno::Exception&) 1400*cdf0e10cSrcweir { return sal_False; } 1401*cdf0e10cSrcweir 1402*cdf0e10cSrcweir return sal_True; 1403*cdf0e10cSrcweir } 1404*cdf0e10cSrcweir 1405*cdf0e10cSrcweir //----------------------------------------------- 1406*cdf0e10cSrcweir void SfxAcceleratorConfigPage::Reset( const SfxItemSet& rSet ) 1407*cdf0e10cSrcweir { 1408*cdf0e10cSrcweir // open accelerator configs 1409*cdf0e10cSrcweir // Note: It initialize some other members too, which are needed here ... 1410*cdf0e10cSrcweir // e.g. m_sModuleUIName! 1411*cdf0e10cSrcweir InitAccCfg(); 1412*cdf0e10cSrcweir 1413*cdf0e10cSrcweir // change te description of the radio button, which switch to the module 1414*cdf0e10cSrcweir // dependend accelerator configuration 1415*cdf0e10cSrcweir String sButtonText = aModuleButton.GetText(); 1416*cdf0e10cSrcweir sButtonText.SearchAndReplace(String::CreateFromAscii("$(MODULE)"), m_sModuleUIName); 1417*cdf0e10cSrcweir aModuleButton.SetText(sButtonText); 1418*cdf0e10cSrcweir 1419*cdf0e10cSrcweir if (m_xModule.is()) 1420*cdf0e10cSrcweir aModuleButton.Check(); 1421*cdf0e10cSrcweir else 1422*cdf0e10cSrcweir { 1423*cdf0e10cSrcweir aModuleButton.Hide(); 1424*cdf0e10cSrcweir aOfficeButton.Check(); 1425*cdf0e10cSrcweir } 1426*cdf0e10cSrcweir 1427*cdf0e10cSrcweir RadioHdl(0); 1428*cdf0e10cSrcweir 1429*cdf0e10cSrcweir const SfxPoolItem* pMacroItem=0; 1430*cdf0e10cSrcweir if( SFX_ITEM_SET == rSet.GetItemState( SID_MACROINFO, sal_True, &pMacroItem ) ) 1431*cdf0e10cSrcweir { 1432*cdf0e10cSrcweir m_pMacroInfoItem = PTR_CAST( SfxMacroInfoItem, pMacroItem ); 1433*cdf0e10cSrcweir pGroupLBox->SelectMacro( m_pMacroInfoItem ); 1434*cdf0e10cSrcweir } 1435*cdf0e10cSrcweir else 1436*cdf0e10cSrcweir { 1437*cdf0e10cSrcweir const SfxPoolItem* pStringItem=0; 1438*cdf0e10cSrcweir if( SFX_ITEM_SET == rSet.GetItemState( SID_CHARMAP, sal_True, &pStringItem ) ) 1439*cdf0e10cSrcweir m_pStringItem = PTR_CAST( SfxStringItem, pStringItem ); 1440*cdf0e10cSrcweir 1441*cdf0e10cSrcweir const SfxPoolItem* pFontItem=0; 1442*cdf0e10cSrcweir if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_SPECIALCHAR, sal_True, &pFontItem ) ) 1443*cdf0e10cSrcweir m_pFontItem = PTR_CAST( SfxStringItem, pFontItem ); 1444*cdf0e10cSrcweir } 1445*cdf0e10cSrcweir } 1446*cdf0e10cSrcweir 1447*cdf0e10cSrcweir //----------------------------------------------- 1448*cdf0e10cSrcweir sal_uInt16 SfxAcceleratorConfigPage::MapKeyCodeToPos(const KeyCode& aKey) const 1449*cdf0e10cSrcweir { 1450*cdf0e10cSrcweir sal_uInt16 nCode1 = aKey.GetCode()+aKey.GetModifier(); 1451*cdf0e10cSrcweir SvLBoxEntry* pEntry = aEntriesBox.First(); 1452*cdf0e10cSrcweir sal_uInt16 i = 0; 1453*cdf0e10cSrcweir 1454*cdf0e10cSrcweir while (pEntry) 1455*cdf0e10cSrcweir { 1456*cdf0e10cSrcweir TAccInfo* pUserData = (TAccInfo*)pEntry->GetUserData(); 1457*cdf0e10cSrcweir if (pUserData) 1458*cdf0e10cSrcweir { 1459*cdf0e10cSrcweir sal_uInt16 nCode2 = pUserData->m_aKey.GetCode()+pUserData->m_aKey.GetModifier(); 1460*cdf0e10cSrcweir if (nCode1 == nCode2) 1461*cdf0e10cSrcweir return i; 1462*cdf0e10cSrcweir } 1463*cdf0e10cSrcweir pEntry = aEntriesBox.Next(pEntry); 1464*cdf0e10cSrcweir ++i; 1465*cdf0e10cSrcweir } 1466*cdf0e10cSrcweir 1467*cdf0e10cSrcweir return LISTBOX_ENTRY_NOTFOUND; 1468*cdf0e10cSrcweir } 1469*cdf0e10cSrcweir 1470*cdf0e10cSrcweir //----------------------------------------------- 1471*cdf0e10cSrcweir String SfxAcceleratorConfigPage::GetLabel4Command(const String& sCommand) 1472*cdf0e10cSrcweir { 1473*cdf0e10cSrcweir try 1474*cdf0e10cSrcweir { 1475*cdf0e10cSrcweir // check global command configuration first 1476*cdf0e10cSrcweir css::uno::Reference< css::container::XNameAccess > xModuleConf; 1477*cdf0e10cSrcweir m_xUICmdDescription->getByName(m_sModuleLongName) >>= xModuleConf; 1478*cdf0e10cSrcweir if (xModuleConf.is()) 1479*cdf0e10cSrcweir { 1480*cdf0e10cSrcweir ::comphelper::SequenceAsHashMap lProps(xModuleConf->getByName(sCommand)); 1481*cdf0e10cSrcweir String sLabel = String(lProps.getUnpackedValueOrDefault(CMDPROP_UINAME, ::rtl::OUString())); 1482*cdf0e10cSrcweir if (sLabel.Len()) 1483*cdf0e10cSrcweir return sLabel; 1484*cdf0e10cSrcweir } 1485*cdf0e10cSrcweir } 1486*cdf0e10cSrcweir catch(const css::uno::RuntimeException& exRun) 1487*cdf0e10cSrcweir { throw exRun; } 1488*cdf0e10cSrcweir catch(const css::uno::Exception&) 1489*cdf0e10cSrcweir {} 1490*cdf0e10cSrcweir 1491*cdf0e10cSrcweir // may be it's a style URL .. they must be handled special 1492*cdf0e10cSrcweir SfxStyleInfo_Impl aStyle; 1493*cdf0e10cSrcweir aStyle.sCommand = sCommand; 1494*cdf0e10cSrcweir if (m_aStylesInfo.parseStyleCommand(aStyle)) 1495*cdf0e10cSrcweir { 1496*cdf0e10cSrcweir m_aStylesInfo.getLabel4Style(aStyle); 1497*cdf0e10cSrcweir return aStyle.sLabel; 1498*cdf0e10cSrcweir } 1499*cdf0e10cSrcweir else 1500*cdf0e10cSrcweir { 1501*cdf0e10cSrcweir String aRet( String::CreateFromAscii("Symbols: ") ); 1502*cdf0e10cSrcweir xub_StrLen nPos = sCommand.SearchAscii(".uno:InsertSymbol?Symbols:string="); 1503*cdf0e10cSrcweir if ( nPos == 0 ) 1504*cdf0e10cSrcweir { 1505*cdf0e10cSrcweir aRet += String( sCommand, 34, sCommand.Len()-34 ); 1506*cdf0e10cSrcweir return aRet; 1507*cdf0e10cSrcweir } 1508*cdf0e10cSrcweir } 1509*cdf0e10cSrcweir 1510*cdf0e10cSrcweir return sCommand; 1511*cdf0e10cSrcweir } 1512*cdf0e10cSrcweir 1513*cdf0e10cSrcweir SfxTabPage* SfxAcceleratorConfigPage::Create( Window* pParent, const SfxItemSet& rAttrSet ) 1514*cdf0e10cSrcweir { 1515*cdf0e10cSrcweir return new SfxAcceleratorConfigPage( pParent, rAttrSet ); 1516*cdf0e10cSrcweir } 1517*cdf0e10cSrcweir 1518*cdf0e10cSrcweir //----------------------------------------------- 1519*cdf0e10cSrcweir css::uno::Reference< css::frame::XModel > SfxAcceleratorConfigPage::SearchForAlreadyLoadedDoc(const String& /*sName*/) 1520*cdf0e10cSrcweir { 1521*cdf0e10cSrcweir return css::uno::Reference< css::frame::XModel >(); 1522*cdf0e10cSrcweir } 1523*cdf0e10cSrcweir 1524*cdf0e10cSrcweir SvxShortcutAssignDlg::SvxShortcutAssignDlg( Window* pParent, const uno::Reference< frame::XFrame >& rxDocumentFrame, const SfxItemSet& rSet ) 1525*cdf0e10cSrcweir : SfxSingleTabDialog( pParent, rSet, 0 ) 1526*cdf0e10cSrcweir { 1527*cdf0e10cSrcweir SfxTabPage* pPage = SfxAcceleratorConfigPage::Create( this, rSet ); 1528*cdf0e10cSrcweir pPage->SetFrame( rxDocumentFrame ); 1529*cdf0e10cSrcweir SetTabPage( pPage ); 1530*cdf0e10cSrcweir 1531*cdf0e10cSrcweir } 1532*cdf0e10cSrcweir 1533*cdf0e10cSrcweir SvxShortcutAssignDlg::~SvxShortcutAssignDlg() 1534*cdf0e10cSrcweir { 1535*cdf0e10cSrcweir } 1536*cdf0e10cSrcweir 1537*cdf0e10cSrcweir 1538*cdf0e10cSrcweir // .uno:InsertSymbol?Symbols:string=bla 1539