1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef __FRAMEWORK_UIELEMENT_NEWMENUCONTROLLER_HXX_
29 #define __FRAMEWORK_UIELEMENT_NEWMENUCONTROLLER_HXX_
30 
31 //_________________________________________________________________________________________________________________
32 //	my own includes
33 //_________________________________________________________________________________________________________________
34 
35 #include <macros/xserviceinfo.hxx>
36 #include <stdtypes.h>
37 
38 //_________________________________________________________________________________________________________________
39 //	interface includes
40 //_________________________________________________________________________________________________________________
41 #include <com/sun/star/lang/XServiceInfo.hpp>
42 #include <com/sun/star/lang/XTypeProvider.hpp>
43 #include <com/sun/star/lang/XInitialization.hpp>
44 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
45 #include <com/sun/star/frame/XFrame.hpp>
46 #include <com/sun/star/frame/XDispatchProvider.hpp>
47 #include <com/sun/star/frame/XDispatch.hpp>
48 #include <com/sun/star/frame/XStatusListener.hpp>
49 #include <com/sun/star/frame/XPopupMenuController.hpp>
50 #include <com/sun/star/beans/XPropertySet.hpp>
51 #include <com/sun/star/ui/XAcceleratorConfiguration.hpp>
52 
53 //_________________________________________________________________________________________________________________
54 //	includes of other projects
55 //_________________________________________________________________________________________________________________
56 #include <svtools/popupmenucontrollerbase.hxx>
57 #include <toolkit/awt/vclxmenu.hxx>
58 #include <cppuhelper/weak.hxx>
59 #include <rtl/ustring.hxx>
60 #include <vcl/accel.hxx>
61 #ifndef _VCL_MENU_HXX_
62 #include <vcl/menu.hxx>
63 #endif
64 #include <hash_map>
65 
66 namespace framework
67 {
68     struct NewDocument
69     {
70         ::com::sun::star::util::URL                                                 aTargetURL;
71         ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >   aArgSeq;
72         ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >      xDispatch;
73     };
74 
75 	class NewMenuController :  public svt::PopupMenuControllerBase
76     {
77 		using svt::PopupMenuControllerBase::disposing;
78 
79 		public:
80 		    NewMenuController( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceManager );
81 		    virtual ~NewMenuController();
82 
83             // XServiceInfo
84 		    DECLARE_XSERVICEINFO
85 
86             // XInitialization
87             virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
88 
89 		    // XStatusListener
90 		    virtual void SAL_CALL statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw ( ::com::sun::star::uno::RuntimeException );
91 
92             // XMenuListener
93             virtual void SAL_CALL select( const ::com::sun::star::awt::MenuEvent& rEvent ) throw (::com::sun::star::uno::RuntimeException);
94             virtual void SAL_CALL activate( const ::com::sun::star::awt::MenuEvent& rEvent ) throw (::com::sun::star::uno::RuntimeException);
95 
96 		    // XEventListener
97 		    virtual void SAL_CALL disposing( const com::sun::star::lang::EventObject& Source ) throw ( ::com::sun::star::uno::RuntimeException );
98 
99             DECL_STATIC_LINK( NewMenuController, ExecuteHdl_Impl, NewDocument* );
100 
101         private:
102             virtual void impl_setPopupMenu();
103             struct AddInfo
104             {
105                 rtl::OUString aTargetFrame;
106                 rtl::OUString aImageId;
107             };
108 
109             typedef ::std::hash_map< int, AddInfo > AddInfoForId;
110 
111             void fillPopupMenu( com::sun::star::uno::Reference< com::sun::star::awt::XPopupMenu >& rPopupMenu );
112             void retrieveShortcutsFromConfiguration( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::XAcceleratorConfiguration >& rAccelCfg,
113                                                      const ::com::sun::star::uno::Sequence< rtl::OUString >& rCommands,
114                                                      std::vector< KeyCode >& aMenuShortCuts );
115             void setAccelerators( PopupMenu* pPopupMenu );
116             void determineAndSetNewDocAccel( PopupMenu* pPopupMenu, const KeyCode& rKeyCode );
117             void setMenuImages( PopupMenu* pPopupMenu, sal_Bool bSetImages, sal_Bool bHiContrast );
118 
119         private:
120             // members
121             sal_Bool            m_bShowImages : 1,
122                                 m_bHiContrast : 1,
123                                 m_bNewMenu    : 1,
124                                 m_bModuleIdentified : 1,
125                                 m_bAcceleratorCfg : 1;
126             AddInfoForId        m_aAddInfoForItem;
127             rtl::OUString       m_aTargetFrame;
128             rtl::OUString       m_aModuleIdentifier;
129             rtl::OUString       m_aEmptyDocURL;
130             ::com::sun::star::uno::Reference< ::com::sun::star::ui::XAcceleratorConfiguration > m_xDocAcceleratorManager;
131             ::com::sun::star::uno::Reference< ::com::sun::star::ui::XAcceleratorConfiguration > m_xModuleAcceleratorManager;
132             ::com::sun::star::uno::Reference< ::com::sun::star::ui::XAcceleratorConfiguration > m_xGlobalAcceleratorManager;
133     };
134 }
135 
136 #endif // __FRAMEWORK_UIELEMENT_NEWMENUCONTROLLER_HXX_
137