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_XML_MENUDOCUMENTHANDLER_HXX_ 25 #define __FRAMEWORK_XML_MENUDOCUMENTHANDLER_HXX_ 26 27 //_________________________________________________________________________________________________________________ 28 // interface includes 29 //_________________________________________________________________________________________________________________ 30 31 #ifndef __COM_SUN_STAR_XML_SAX_XDOCUMENTHANDLER_HPP_ 32 #include <com/sun/star/xml/sax/XDocumentHandler.hpp> 33 #endif 34 #include <com/sun/star/container/XIndexContainer.hpp> 35 #include <com/sun/star/lang/XSingleComponentFactory.hpp> 36 #include <com/sun/star/beans/PropertyValue.hpp> 37 #include <com/sun/star/uno/Sequence.h> 38 #include <com/sun/star/uno/XComponentContext.hpp> 39 40 //_________________________________________________________________________________________________________________ 41 // other includes 42 //_________________________________________________________________________________________________________________ 43 #include <threadhelp/threadhelpbase.hxx> 44 #include <rtl/ustring.hxx> 45 #include <cppuhelper/implbase1.hxx> 46 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 47 #include <framework/fwedllapi.h> 48 49 //_________________________________________________________________________________________________________________ 50 // namespace 51 //_________________________________________________________________________________________________________________ 52 53 namespace framework{ 54 55 class FWE_DLLPUBLIC ReadMenuDocumentHandlerBase : public ThreadHelpBase, // Struct for right initialization of mutex member! Must be first of baseclasses. 56 public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XDocumentHandler > 57 { 58 public: 59 ReadMenuDocumentHandlerBase(); 60 virtual ~ReadMenuDocumentHandlerBase(); 61 62 // XDocumentHandler 63 virtual void SAL_CALL startDocument(void) = 0; 64 65 virtual void SAL_CALL endDocument(void) = 0; 66 67 virtual void SAL_CALL startElement( 68 const rtl::OUString& aName, 69 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs) = 0; 70 71 virtual void SAL_CALL endElement(const rtl::OUString& aName) = 0; 72 73 virtual void SAL_CALL characters(const rtl::OUString& aChars) = 0; 74 75 virtual void SAL_CALL ignorableWhitespace(const rtl::OUString& aWhitespaces); 76 77 virtual void SAL_CALL processingInstruction(const rtl::OUString& aTarget, 78 const rtl::OUString& aData); 79 80 virtual void SAL_CALL setDocumentLocator( 81 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > &xLocator); 82 83 protected: 84 ::rtl::OUString getErrorLineString(); 85 86 ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > m_xLocator; 87 ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler> m_xReader; 88 void initPropertyCommon( com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > &rProps, 89 const rtl::OUString &rCommandURL, const rtl::OUString &rHelpId, 90 const rtl::OUString &rLabel, sal_Int16 nItemStyleBits ); 91 private: 92 rtl::OUString m_aType; 93 rtl::OUString m_aLabel; 94 rtl::OUString m_aContainer; 95 rtl::OUString m_aHelpURL; 96 rtl::OUString m_aCommandURL; 97 rtl::OUString m_aStyle; 98 ::com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > m_aItemProp; 99 }; 100 101 102 class FWE_DLLPUBLIC OReadMenuDocumentHandler : public ReadMenuDocumentHandlerBase 103 { 104 public: 105 // #110897# 106 OReadMenuDocumentHandler( 107 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory, 108 const com::sun::star::uno::Reference< com::sun::star::container::XIndexContainer >& rItemContainer ); 109 virtual ~OReadMenuDocumentHandler(); 110 111 // #110897# 112 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& getServiceFactory(); 113 114 // XDocumentHandler 115 virtual void SAL_CALL startDocument(void); 116 117 virtual void SAL_CALL endDocument(void); 118 119 virtual void SAL_CALL startElement( 120 const rtl::OUString& aName, 121 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs); 122 123 virtual void SAL_CALL endElement(const rtl::OUString& aName); 124 125 virtual void SAL_CALL characters(const rtl::OUString& aChars); 126 127 private: 128 int m_nElementDepth; 129 sal_Bool m_bMenuBarMode; 130 com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuBarContainer; 131 com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory; 132 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& mxServiceFactory; 133 }; // OReadMenuDocumentHandler 134 135 136 class FWE_DLLPUBLIC OReadMenuBarHandler : public ReadMenuDocumentHandlerBase 137 { 138 public: 139 // #110897# 140 OReadMenuBarHandler( 141 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory, 142 const com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& rMenuBarContainer, 143 const com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory >& rContainerFactory ); 144 virtual ~OReadMenuBarHandler(); 145 146 // #110897# 147 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& getServiceFactory(); 148 149 // XDocumentHandler 150 virtual void SAL_CALL startDocument(void); 151 152 virtual void SAL_CALL endDocument(void); 153 154 virtual void SAL_CALL startElement( 155 const rtl::OUString& aName, 156 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs); 157 158 virtual void SAL_CALL endElement(const rtl::OUString& aName); 159 160 virtual void SAL_CALL characters(const rtl::OUString& aChars); 161 162 private: 163 int m_nElementDepth; 164 sal_Bool m_bMenuMode; 165 com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuBarContainer; 166 com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory; 167 168 // #110897# 169 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& mxServiceFactory; 170 }; // OReadMenuBarHandler 171 172 173 class FWE_DLLPUBLIC OReadMenuHandler : public ReadMenuDocumentHandlerBase 174 { 175 public: 176 OReadMenuHandler( const com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& rMenuContainer, 177 const com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory >& rContainerFactory ); 178 virtual ~OReadMenuHandler(); 179 180 // XDocumentHandler 181 virtual void SAL_CALL startDocument(void); 182 183 virtual void SAL_CALL endDocument(void); 184 185 virtual void SAL_CALL startElement( 186 const rtl::OUString& aName, 187 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs); 188 189 virtual void SAL_CALL endElement(const rtl::OUString& aName); 190 191 virtual void SAL_CALL characters(const rtl::OUString& aChars); 192 193 private: 194 int m_nElementDepth; 195 sal_Bool m_bMenuPopupMode; 196 com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuContainer; 197 com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory; 198 }; // OReadMenuHandler 199 200 201 class FWE_DLLPUBLIC OReadMenuPopupHandler : public ReadMenuDocumentHandlerBase 202 { 203 public: 204 OReadMenuPopupHandler( const com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& rMenuContainer, 205 const com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory >& rContainerFactory ); 206 virtual ~OReadMenuPopupHandler(); 207 208 // XDocumentHandler 209 virtual void SAL_CALL startDocument(void); 210 211 virtual void SAL_CALL endDocument(void); 212 213 virtual void SAL_CALL startElement( 214 const rtl::OUString& aName, 215 const ::com::sun::star::uno::Reference< 216 ::com::sun::star::xml::sax::XAttributeList > &xAttribs); 217 218 virtual void SAL_CALL endElement(const rtl::OUString& aName); 219 220 virtual void SAL_CALL characters(const rtl::OUString& aChars); 221 222 private: 223 enum NextElementClose { ELEM_CLOSE_NONE, ELEM_CLOSE_MENUITEM, ELEM_CLOSE_MENUSEPARATOR }; 224 225 int m_nElementDepth; 226 sal_Bool m_bMenuMode; 227 com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuContainer; 228 com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory; 229 com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xComponentContext; 230 NextElementClose m_nNextElementExpected; 231 }; // OReadMenuPopupHandler 232 233 234 class FWE_DLLPUBLIC OWriteMenuDocumentHandler 235 { 236 public: 237 OWriteMenuDocumentHandler( 238 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& rMenuBarContainer, 239 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler >& rDocumentHandler ); 240 virtual ~OWriteMenuDocumentHandler(); 241 242 void WriteMenuDocument(); 243 protected: 244 virtual void WriteMenu( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& rSubMenuContainer ); 245 246 virtual void WriteMenuItem( const rtl::OUString& aCommandURL, const rtl::OUString& aLabel, const rtl::OUString& aHelpURL, sal_Int16 nStyle = 0 ); 247 virtual void WriteMenuSeparator(); 248 249 com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > m_xMenuBarContainer; 250 ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > m_xWriteDocumentHandler; 251 ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > m_xEmptyList; 252 ::rtl::OUString m_aAttributeType; 253 }; 254 255 } // namespace framework 256 257 #endif // #ifndef __FRAMEWORK_XML_MENUDOCUMENTHANDLER_HXX_ 258