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