xref: /AOO41X/main/cui/source/customize/acccfg.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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