xref: /trunk/main/framework/source/fwe/xml/menuconfiguration.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3) !
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 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_framework.hxx"
30 
31 //_________________________________________________________________________________________________________________
32 //  my own includes
33 //_________________________________________________________________________________________________________________
34 #include <framework/menuconfiguration.hxx>
35 
36 #ifndef __FRAMEWORK_CLASSES_BMKMENU_HXX_
37 #include <framework/bmkmenu.hxx>
38 #endif
39 #include <framework/addonmenu.hxx>
40 #include <xml/menudocumenthandler.hxx>
41 #include <xml/saxnamespacefilter.hxx>
42 #include <services.h>
43 
44 #ifndef _FRAMEWORK_UIELEMENT_ROOTITEMCONTAINER_HXX_
45 #include <uielement/rootitemcontainer.hxx>
46 #endif
47 
48 //_________________________________________________________________________________________________________________
49 //  interface includes
50 //_________________________________________________________________________________________________________________
51 #include <com/sun/star/xml/sax/XParser.hpp>
52 #include <com/sun/star/io/XActiveDataSource.hpp>
53 #include <com/sun/star/frame/XFrame.hpp>
54 
55 //_________________________________________________________________________________________________________________
56 //  namespace
57 //_________________________________________________________________________________________________________________
58 
59 using namespace ::com::sun::star::uno;
60 using namespace ::com::sun::star::lang;
61 using namespace ::com::sun::star::beans;
62 using namespace ::com::sun::star::xml::sax;
63 using namespace ::com::sun::star::container;
64 using namespace ::com::sun::star::io;
65 
66 namespace framework
67 {
68 
69 sal_Bool MenuConfiguration::IsPickListItemId( sal_uInt16 nId )
70 {
71     return (( START_ITEMID_PICKLIST <= nId ) && ( nId <= END_ITEMID_PICKLIST ));
72 }
73 
74 sal_Bool MenuConfiguration::IsWindowListItemId( sal_uInt16 nId )
75 {
76     return (( START_ITEMID_WINDOWLIST <= nId ) && ( nId <= END_ITEMID_WINDOWLIST ));
77 }
78 
79 
80 MenuConfiguration::MenuConfiguration(
81     const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rServiceManager )
82 :   m_rxServiceManager( rServiceManager )
83 {
84 }
85 
86 
87 MenuConfiguration::~MenuConfiguration()
88 {
89 }
90 
91 
92 Reference< XIndexAccess > MenuConfiguration::CreateMenuBarConfigurationFromXML(
93     Reference< XInputStream >& rInputStream )
94 throw ( WrappedTargetException )
95 {
96     Reference< XParser > xParser( m_rxServiceManager->createInstance(SERVICENAME_SAXPARSER),UNO_QUERY);
97 
98     // connect stream to input stream to the parser
99     InputSource aInputSource;
100 
101     aInputSource.aInputStream = rInputStream;
102 
103 
104     // create menu bar
105     Reference< XIndexContainer > xItemContainer( static_cast< cppu::OWeakObject *>( new RootItemContainer()), UNO_QUERY );
106 
107     // create namespace filter and set menudocument handler inside to support xml namespaces
108 
109     // #110897# Reference< XDocumentHandler > xDocHandler( new OReadMenuDocumentHandler( xItemContainer ));
110     Reference< XDocumentHandler > xDocHandler( new OReadMenuDocumentHandler( m_rxServiceManager, xItemContainer ));
111 
112     Reference< XDocumentHandler > xFilter( new SaxNamespaceFilter( xDocHandler ));
113 
114     // connect parser and filter
115     xParser->setDocumentHandler( xFilter );
116 
117     try
118     {
119         xParser->parseStream( aInputSource );
120         return Reference< XIndexAccess >( xItemContainer, UNO_QUERY );
121     }
122     catch ( RuntimeException& e )
123     {
124         throw WrappedTargetException( e.Message, Reference< XInterface >(), Any() );
125     }
126     catch( SAXException& e )
127     {
128         SAXException aWrappedSAXException;
129 
130         if ( !( e.WrappedException >>= aWrappedSAXException ))
131             throw WrappedTargetException( e.Message, Reference< XInterface >(), Any() );
132         else
133             throw WrappedTargetException( aWrappedSAXException.Message, Reference< XInterface >(), Any() );
134     }
135     catch( ::com::sun::star::io::IOException& e )
136     {
137         throw WrappedTargetException( e.Message, Reference< XInterface >(), Any() );
138     }
139 }
140 
141 PopupMenu* MenuConfiguration::CreateBookmarkMenu(
142     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame,
143     const ::rtl::OUString& aURL )
144 throw ( ::com::sun::star::lang::WrappedTargetException )
145 {
146     if ( aURL == BOOKMARK_NEWMENU )
147         return new BmkMenu( rFrame, BmkMenu::BMK_NEWMENU );
148     else if ( aURL == BOOKMARK_WIZARDMENU )
149         return new BmkMenu( rFrame, BmkMenu::BMK_WIZARDMENU );
150     else
151         return NULL;
152 }
153 
154 void MenuConfiguration::StoreMenuBarConfigurationToXML(
155     Reference< XIndexAccess >& rMenuBarConfiguration,
156     Reference< XOutputStream >& rOutputStream )
157 throw ( WrappedTargetException )
158 {
159     Reference< XDocumentHandler > xWriter;
160 
161     xWriter = Reference< XDocumentHandler >( m_rxServiceManager->createInstance(
162             SERVICENAME_SAXWRITER), UNO_QUERY) ;
163 
164     Reference< XActiveDataSource> xDataSource( xWriter , UNO_QUERY );
165     xDataSource->setOutputStream( rOutputStream );
166 
167     try
168     {
169         OWriteMenuDocumentHandler aWriteMenuDocumentHandler( rMenuBarConfiguration, xWriter );
170         aWriteMenuDocumentHandler.WriteMenuDocument();
171     }
172     catch ( RuntimeException& e )
173     {
174         throw WrappedTargetException( e.Message, Reference< XInterface >(), Any() );
175     }
176     catch ( SAXException& e )
177     {
178         throw WrappedTargetException( e.Message, Reference< XInterface >(), Any() );
179     }
180     catch ( ::com::sun::star::io::IOException& e )
181     {
182         throw WrappedTargetException( e.Message, Reference< XInterface >(), Any() );
183     }
184 }
185 
186 }
187 
188