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