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 __FRAMEWORK_UIELEMENT_RECENTFILESMENUCONTROLLER_HXX_
25 #define __FRAMEWORK_UIELEMENT_RECENTFILESMENUCONTROLLER_HXX_
26 
27 #include <svtools/popupmenucontrollerbase.hxx>
28 #include <macros/xserviceinfo.hxx>
29 
30 namespace framework
31 {
32     struct LoadRecentFile
33     {
34         ::com::sun::star::util::URL                                                 aTargetURL;
35         ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >   aArgSeq;
36         ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >      xDispatch;
37     };
38 
39 	class RecentFilesMenuController :  public svt::PopupMenuControllerBase
40     {
41 		using svt::PopupMenuControllerBase::disposing;
42 
43 		public:
44 		    RecentFilesMenuController( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceManager );
45 		    virtual ~RecentFilesMenuController();
46 
47             // XServiceInfo
48 		    DECLARE_XSERVICEINFO
49 
50 		    // XStatusListener
51 		    virtual void SAL_CALL statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw ( ::com::sun::star::uno::RuntimeException );
52 
53             // XMenuListener
54             virtual void SAL_CALL itemSelected( const ::com::sun::star::awt::MenuEvent& rEvent ) throw (::com::sun::star::uno::RuntimeException);
55             virtual void SAL_CALL itemActivated( const ::com::sun::star::awt::MenuEvent& rEvent ) throw (::com::sun::star::uno::RuntimeException);
56 
57             // XDispatchProvider
58             virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL queryDispatch( const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& sTarget, sal_Int32 nFlags ) throw( ::com::sun::star::uno::RuntimeException );
59 
60             // XDispatch
61 		    virtual void SAL_CALL dispatch(	const ::com::sun::star::util::URL& aURL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& seqProperties ) throw( ::com::sun::star::uno::RuntimeException );
62 
63             // XEventListener
64 		    virtual void SAL_CALL disposing( const com::sun::star::lang::EventObject& Source ) throw ( ::com::sun::star::uno::RuntimeException );
65 
66             DECL_STATIC_LINK( RecentFilesMenuController, ExecuteHdl_Impl, LoadRecentFile* );
67 
68         private:
69             virtual void impl_setPopupMenu();
70             struct RecentFile
71             {
72                 rtl::OUString aURL;
73                 rtl::OUString aFilter;
74                 rtl::OUString aTitle;
75                 rtl::OUString aPassword;
76             };
77 
78             void fillPopupMenu( com::sun::star::uno::Reference< com::sun::star::awt::XPopupMenu >& rPopupMenu );
79             void executeEntry( sal_Int32 nIndex );
80 
81             std::vector< RecentFile > m_aRecentFilesItems;
82             sal_Bool                  m_bDisabled : 1;
83     };
84 }
85 
86 #endif // __FRAMEWORK_UIELEMENT_RECENTFILESMENUCONTROLLER_HXX_
87