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