xref: /aoo4110/main/cui/source/inc/acccfg.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _ACCCFG_HXX
25*b1cdbd2cSJim Jagielski #define _ACCCFG_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski // #include *****************************************************************
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexContainer.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameAccess.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XModuleManager.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/XUIConfigurationManager.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/XAcceleratorConfiguration.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XFrame.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XStorable.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/XComponentContext.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XSingleComponentFactory.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/script/browse/XBrowseNode.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameAccess.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XFrame.hpp>
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski #include <algorithm>
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski #include <vcl/fixed.hxx>
46*b1cdbd2cSJim Jagielski #include <vcl/button.hxx>
47*b1cdbd2cSJim Jagielski #include <vcl/dialog.hxx>
48*b1cdbd2cSJim Jagielski #include <vcl/lstbox.hxx>
49*b1cdbd2cSJim Jagielski #include <vcl/group.hxx>
50*b1cdbd2cSJim Jagielski #include <svtools/svtabbx.hxx>
51*b1cdbd2cSJim Jagielski #include <svtools/svtreebx.hxx>
52*b1cdbd2cSJim Jagielski #include <sfx2/tabdlg.hxx>
53*b1cdbd2cSJim Jagielski #include <sfx2/basedlgs.hxx>
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski #define _SVSTDARR_STRINGSDTOR
56*b1cdbd2cSJim Jagielski #include <svl/svstdarr.hxx>
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski #include <sfx2/minarray.hxx>
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski #include "cfgutil.hxx"
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski // class SfxAcceleratorConfigListBox *************************************************
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski #define css ::com::sun::star
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski class SfxMacroInfoItem;
67*b1cdbd2cSJim Jagielski class SfxConfigGroupListBox_Impl;
68*b1cdbd2cSJim Jagielski class SfxConfigFunctionListBox_Impl;
69*b1cdbd2cSJim Jagielski class SfxAcceleratorConfigPage;
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski class SfxAccCfgTabListBox_Impl : public SvTabListBox
72*b1cdbd2cSJim Jagielski {
73*b1cdbd2cSJim Jagielski 	SfxAcceleratorConfigPage*	m_pAccelConfigPage;
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski 	void 						KeyInput( const KeyEvent &rKEvt );
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski protected:
78*b1cdbd2cSJim Jagielski 	virtual void				InitEntry( SvLBoxEntry*, const XubString&, const Image&, const Image&, SvLBoxButtonKind eButtonKind );
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski public:
SfxAccCfgTabListBox_Impl(SfxAcceleratorConfigPage * pAccelConfigPage,Window * pParent,const ResId & rResId)81*b1cdbd2cSJim Jagielski 								SfxAccCfgTabListBox_Impl(
82*b1cdbd2cSJim Jagielski 										SfxAcceleratorConfigPage* pAccelConfigPage,
83*b1cdbd2cSJim Jagielski 										Window *pParent,
84*b1cdbd2cSJim Jagielski 										const ResId &rResId ) :
85*b1cdbd2cSJim Jagielski 									 SvTabListBox( pParent, rResId ),
86*b1cdbd2cSJim Jagielski 									m_pAccelConfigPage( pAccelConfigPage )
87*b1cdbd2cSJim Jagielski 								{}
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski 	void 						ReplaceEntry( sal_uInt16 nPos, const String &rStr );
90*b1cdbd2cSJim Jagielski };
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski // class SfxAcceleratorConfigPage ----------------------------------------
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski struct TAccInfo
95*b1cdbd2cSJim Jagielski {
96*b1cdbd2cSJim Jagielski     public:
97*b1cdbd2cSJim Jagielski 
TAccInfoTAccInfo98*b1cdbd2cSJim Jagielski         TAccInfo(      sal_Int32 nKeyPos ,
99*b1cdbd2cSJim Jagielski                        sal_Int32 nListPos,
100*b1cdbd2cSJim Jagielski                  const KeyCode&  aKey    )
101*b1cdbd2cSJim Jagielski             : m_nKeyPos        (nKeyPos  )
102*b1cdbd2cSJim Jagielski             , m_nListPos       (nListPos )
103*b1cdbd2cSJim Jagielski             , m_bIsConfigurable(sal_True )
104*b1cdbd2cSJim Jagielski             , m_sCommand       (         )
105*b1cdbd2cSJim Jagielski             , m_aKey           (aKey     )
106*b1cdbd2cSJim Jagielski             // its important to set sal_True as default -
107*b1cdbd2cSJim Jagielski             // because only fix entries will be disabled later ...
108*b1cdbd2cSJim Jagielski         {}
109*b1cdbd2cSJim Jagielski 
isConfiguredTAccInfo110*b1cdbd2cSJim Jagielski         sal_Bool isConfigured() const
111*b1cdbd2cSJim Jagielski         {
112*b1cdbd2cSJim Jagielski             return (m_nKeyPos>-1 && m_nListPos>-1 && m_sCommand.getLength());
113*b1cdbd2cSJim Jagielski         }
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski         sal_Int32 m_nKeyPos;
116*b1cdbd2cSJim Jagielski         sal_Int32 m_nListPos;
117*b1cdbd2cSJim Jagielski         sal_Bool m_bIsConfigurable;
118*b1cdbd2cSJim Jagielski         ::rtl::OUString m_sCommand;
119*b1cdbd2cSJim Jagielski         KeyCode m_aKey;
120*b1cdbd2cSJim Jagielski };
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski namespace sfx2
123*b1cdbd2cSJim Jagielski {
124*b1cdbd2cSJim Jagielski     class FileDialogHelper;
125*b1cdbd2cSJim Jagielski }
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski class SfxAcceleratorConfigPage : public SfxTabPage
128*b1cdbd2cSJim Jagielski {
129*b1cdbd2cSJim Jagielski 	friend class SfxAccCfgTabListBox_Impl;
130*b1cdbd2cSJim Jagielski private:
131*b1cdbd2cSJim Jagielski 	const SfxMacroInfoItem*			m_pMacroInfoItem;
132*b1cdbd2cSJim Jagielski 	const SfxStringItem*			m_pStringItem;
133*b1cdbd2cSJim Jagielski 	const SfxStringItem*			m_pFontItem;
134*b1cdbd2cSJim Jagielski     sfx2::FileDialogHelper*         m_pFileDlg;
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski 	SfxAccCfgTabListBox_Impl		aEntriesBox;
137*b1cdbd2cSJim Jagielski     FixedLine                       aKeyboardGroup;
138*b1cdbd2cSJim Jagielski  	RadioButton						aOfficeButton;
139*b1cdbd2cSJim Jagielski 	RadioButton						aModuleButton;
140*b1cdbd2cSJim Jagielski 	PushButton         				aChangeButton;
141*b1cdbd2cSJim Jagielski 	PushButton         				aRemoveButton;
142*b1cdbd2cSJim Jagielski 	FixedText          				aGroupText;
143*b1cdbd2cSJim Jagielski     SfxConfigGroupListBox_Impl*     pGroupLBox;
144*b1cdbd2cSJim Jagielski 	FixedText          				aFunctionText;
145*b1cdbd2cSJim Jagielski 	SfxConfigFunctionListBox_Impl*	pFunctionBox;
146*b1cdbd2cSJim Jagielski 	FixedText          				aKeyText;
147*b1cdbd2cSJim Jagielski 	SvTreeListBox     				aKeyBox;
148*b1cdbd2cSJim Jagielski     FixedLine                       aFunctionsGroup;
149*b1cdbd2cSJim Jagielski 	PushButton						aLoadButton;
150*b1cdbd2cSJim Jagielski 	PushButton						aSaveButton;
151*b1cdbd2cSJim Jagielski 	PushButton		   				aResetButton;
152*b1cdbd2cSJim Jagielski 	String				aLoadAccelConfigStr;
153*b1cdbd2cSJim Jagielski 	String				aSaveAccelConfigStr;
154*b1cdbd2cSJim Jagielski 	String				aFilterAllStr;
155*b1cdbd2cSJim Jagielski 	String				aFilterCfgStr;
156*b1cdbd2cSJim Jagielski     SfxStylesInfo_Impl              m_aStylesInfo;
157*b1cdbd2cSJim Jagielski     sal_Bool                        m_bStylesInfoInitialized;
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski     css::uno::Reference< css::lang::XMultiServiceFactory >     m_xSMGR;
160*b1cdbd2cSJim Jagielski     css::uno::Reference< css::ui::XAcceleratorConfiguration > m_xGlobal;
161*b1cdbd2cSJim Jagielski     css::uno::Reference< css::ui::XAcceleratorConfiguration > m_xModule;
162*b1cdbd2cSJim Jagielski     css::uno::Reference< css::ui::XAcceleratorConfiguration > m_xAct;
163*b1cdbd2cSJim Jagielski     css::uno::Reference< css::container::XNameAccess > m_xUICmdDescription;
164*b1cdbd2cSJim Jagielski     css::uno::Reference< css::frame::XFrame > m_xFrame;
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski     ::rtl::OUString m_sModuleLongName;
167*b1cdbd2cSJim Jagielski     ::rtl::OUString m_sModuleShortName;
168*b1cdbd2cSJim Jagielski     ::rtl::OUString m_sModuleUIName;
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski 	DECL_LINK( 					ChangeHdl, Button * );
171*b1cdbd2cSJim Jagielski 	DECL_LINK( 					RemoveHdl, Button * );
172*b1cdbd2cSJim Jagielski 	DECL_LINK( 					SelectHdl, Control * );
173*b1cdbd2cSJim Jagielski 	DECL_LINK( 					Save, Button * );
174*b1cdbd2cSJim Jagielski 	DECL_LINK( 					Load, Button * );
175*b1cdbd2cSJim Jagielski 	DECL_LINK( 					Default, PushButton * );
176*b1cdbd2cSJim Jagielski 	DECL_LINK(					RadioHdl, RadioButton* );
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski     DECL_LINK(                  LoadHdl, sfx2::FileDialogHelper* );
179*b1cdbd2cSJim Jagielski     DECL_LINK(                  SaveHdl, sfx2::FileDialogHelper* );
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski     String                      GetLabel4Command(const String& sCommand);
182*b1cdbd2cSJim Jagielski     void                        InitAccCfg();
183*b1cdbd2cSJim Jagielski 	sal_uInt16  					MapKeyCodeToPos( const KeyCode &rCode ) const;
184*b1cdbd2cSJim Jagielski     css::uno::Reference< css::frame::XModel > SearchForAlreadyLoadedDoc(const String& sName);
185*b1cdbd2cSJim Jagielski     void                        StartFileDialog( WinBits nBits, const String& rTitle );
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski 	void 						Init(const css::uno::Reference< css::ui::XAcceleratorConfiguration >& pAccMgr);
188*b1cdbd2cSJim Jagielski 	void 						ResetConfig();
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski 	void						CreateCustomItems( SvLBoxEntry* pEntry, const String& aCol1, const String& aCol2 );
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski public:
193*b1cdbd2cSJim Jagielski 								SfxAcceleratorConfigPage( Window *pParent, const SfxItemSet& rItemSet );
194*b1cdbd2cSJim Jagielski 	virtual 					~SfxAcceleratorConfigPage();
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski 	virtual sal_Bool				FillItemSet( SfxItemSet& );
197*b1cdbd2cSJim Jagielski 	virtual void				Reset( const SfxItemSet& );
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski     void                        Apply(const css::uno::Reference< css::ui::XAcceleratorConfiguration >& pAccMgr);
200*b1cdbd2cSJim Jagielski 	static SfxTabPage*			Create( Window* pParent, const SfxItemSet& rAttrSet );
201*b1cdbd2cSJim Jagielski };
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski class SfxAcceleratorConfigListBox : public ListBox
205*b1cdbd2cSJim Jagielski {
206*b1cdbd2cSJim Jagielski 	void KeyInput( const KeyEvent &rKEvt );
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski public:
209*b1cdbd2cSJim Jagielski 
SfxAcceleratorConfigListBox(Window * pParent,ResId & rResId)210*b1cdbd2cSJim Jagielski 	SfxAcceleratorConfigListBox( Window *pParent, ResId &rResId ) :
211*b1cdbd2cSJim Jagielski 		ListBox( pParent, rResId ) {}
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 	void ReplaceEntry( sal_uInt16 nPos, const String &rStr );
214*b1cdbd2cSJim Jagielski 	void ExpandEntry ( sal_uInt16 nPos, const String &rStr );
215*b1cdbd2cSJim Jagielski };
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski class SvxShortcutAssignDlg : public SfxSingleTabDialog
218*b1cdbd2cSJim Jagielski {
219*b1cdbd2cSJim Jagielski public:
220*b1cdbd2cSJim Jagielski     SvxShortcutAssignDlg(
221*b1cdbd2cSJim Jagielski         Window* pParent,
222*b1cdbd2cSJim Jagielski         const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxDocumentFrame,
223*b1cdbd2cSJim Jagielski         const SfxItemSet& rSet );
224*b1cdbd2cSJim Jagielski 	virtual	~SvxShortcutAssignDlg();
225*b1cdbd2cSJim Jagielski };
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski 
229*b1cdbd2cSJim Jagielski #undef css
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski #endif
232*b1cdbd2cSJim Jagielski 
233