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_HELPER_OCOMPONENTACCESS_HXX_ 29 #define __FRAMEWORK_HELPER_OCOMPONENTACCESS_HXX_ 30 31 //_________________________________________________________________________________________________________________ 32 // my own includes 33 //_________________________________________________________________________________________________________________ 34 35 #include <threadhelp/threadhelpbase.hxx> 36 #include <macros/generic.hxx> 37 #include <macros/xinterface.hxx> 38 #include <macros/xtypeprovider.hxx> 39 #include <macros/debug.hxx> 40 #include <general.h> 41 42 //_________________________________________________________________________________________________________________ 43 // interface includes 44 //_________________________________________________________________________________________________________________ 45 #include <com/sun/star/frame/XFramesSupplier.hpp> 46 #include <com/sun/star/container/XEnumerationAccess.hpp> 47 #include <com/sun/star/container/XElementAccess.hpp> 48 #include <com/sun/star/container/XEnumeration.hpp> 49 #include <com/sun/star/frame/XDesktop.hpp> 50 #include <com/sun/star/lang/XComponent.hpp> 51 52 //_________________________________________________________________________________________________________________ 53 // other includes 54 //_________________________________________________________________________________________________________________ 55 #include <cppuhelper/implbase1.hxx> 56 #include <cppuhelper/weakref.hxx> 57 58 //_________________________________________________________________________________________________________________ 59 // namespace 60 //_________________________________________________________________________________________________________________ 61 62 namespace framework{ 63 64 //_________________________________________________________________________________________________________________ 65 // exported const 66 //_________________________________________________________________________________________________________________ 67 68 //_________________________________________________________________________________________________________________ 69 // exported definitions 70 //_________________________________________________________________________________________________________________ 71 72 /*-************************************************************************************************************//** 73 @short implement XEnumerationAccess interface as helper to create many oneway enumeration of components 74 @descr We share mutex and framecontainer with ouer owner and have full access to his child tasks. 75 (Ouer owner can be the Desktop only!) We create oneway enumerations on demand. These "lists" 76 can be used for one time only. Step during the list from first to last element. 77 (The type of created enumerations is OComponentEnumeration.) 78 79 @implements XInterface 80 XTypeProvider 81 XEnumerationAccess 82 XElementAccess 83 84 @base ThreadHelpBase 85 OWeakObject 86 87 @devstatus ready to use 88 *//*-*************************************************************************************************************/ 89 90 class OComponentAccess : private ThreadHelpBase , // Must be the first of baseclasses - Is neccessary for right initialization of objects! 91 public ::cppu::WeakImplHelper1< ::com::sun::star::container::XEnumerationAccess > 92 { 93 //------------------------------------------------------------------------------------------------------------- 94 // public methods 95 //------------------------------------------------------------------------------------------------------------- 96 97 public: 98 99 //--------------------------------------------------------------------------------------------------------- 100 // constructor / destructor 101 //--------------------------------------------------------------------------------------------------------- 102 103 /*-****************************************************************************************************//** 104 @short constructor to initialize this instance 105 @descr A desktop will create an enumeration-access-object. An enumeration is a oneway-list and a 106 snapshot of the components of current tasks under the desktop. 107 But we need a instance to create more then one enumerations at different times! 108 109 @seealso class Desktop 110 @seealso class OComponentEnumeration 111 112 @param "xOwner" is a reference to ouer owner and must be the desktop! 113 @return - 114 115 @onerror Do nothing and reset this object to default with an empty list. 116 *//*-*****************************************************************************************************/ 117 118 OComponentAccess( const css::uno::Reference< css::frame::XDesktop >& xOwner ); 119 120 //--------------------------------------------------------------------------------------------------------- 121 // XEnumerationAccess 122 //--------------------------------------------------------------------------------------------------------- 123 124 /*-****************************************************************************************************//** 125 @short create a new enumeration of components 126 @descr You can call this method to get a new snapshot from all components of all tasks of the desktop as an enumeration. 127 128 @seealso interface XEnumerationAccess 129 @seealso interface XEnumeration 130 @seealso class Desktop 131 132 @param - 133 @return If the desktop and some components exist => a valid reference to an enumeration<BR> 134 An NULL-reference, other way. 135 136 @onerror - 137 *//*-*****************************************************************************************************/ 138 139 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() throw( css::uno::RuntimeException ); 140 141 //--------------------------------------------------------------------------------------------------------- 142 // XElementAccess 143 //--------------------------------------------------------------------------------------------------------- 144 145 /*-****************************************************************************************************//** 146 @short get the type of elements in enumeration 147 @descr - 148 149 @seealso interface XElementAccess 150 @seealso class OComponentEnumeration 151 152 @param - 153 @return The uno-type XComponent. 154 155 @onerror - 156 *//*-*****************************************************************************************************/ 157 158 virtual css::uno::Type SAL_CALL getElementType() throw( css::uno::RuntimeException ); 159 160 /*-****************************************************************************************************//** 161 @short get state of componentlist of enumeration. 162 @descr - 163 164 @seealso interface XElementAccess 165 166 @param - 167 @return sal_True ,if more then 0 elements exist. 168 @return sal_False ,otherwise. 169 170 @onerror - 171 *//*-*****************************************************************************************************/ 172 173 virtual sal_Bool SAL_CALL hasElements() throw( css::uno::RuntimeException ); 174 175 //------------------------------------------------------------------------------------------------------------- 176 // protected methods 177 //------------------------------------------------------------------------------------------------------------- 178 179 protected: 180 181 /*-****************************************************************************************************//** 182 @short standard destructor 183 @descr This method destruct an instance of this class and clear some member. 184 Don't use an instance of this class as normal member. Use it dynamicly with a pointer. 185 We hold a weakreference to ouer owner and not to ouer superclass! 186 Thats the reason for a protected dtor. 187 188 @seealso class Desktop 189 190 @param - 191 @return - 192 193 @onerror - 194 *//*-*****************************************************************************************************/ 195 196 virtual ~OComponentAccess(); 197 198 //------------------------------------------------------------------------------------------------------------- 199 // private methods 200 //------------------------------------------------------------------------------------------------------------- 201 202 private: 203 204 /*-****************************************************************************************************//** 205 @short recursive method (!) to collect all components of all frames from the subtree of given node 206 @descr This is neccessary to create the enumeration. 207 208 @seealso method createEnumeration 209 210 @param "xNode" , root of subtree and start point of search 211 @param "seqComponents", result list of search. We cant use a return value, we search recursive 212 and must collect all informations. 213 @return - 214 215 @onerror - 216 *//*-*****************************************************************************************************/ 217 218 void impl_collectAllChildComponents( const css::uno::Reference< css::frame::XFramesSupplier >& xNode , 219 css::uno::Sequence< css::uno::Reference< css::lang::XComponent > >& seqComponents ); 220 221 /*-****************************************************************************************************//** 222 @short get the component of a frame 223 @descr The component of a frame can be the window, the controller or the model. 224 225 @seealso method createEnumeration 226 227 @param "xFrame", frame which contains the component 228 @return A reference to the component of given frame. 229 230 @onerror A null reference is returned. 231 *//*-*****************************************************************************************************/ 232 233 css::uno::Reference< css::lang::XComponent > impl_getFrameComponent( const css::uno::Reference< css::frame::XFrame >& xFrame ) const; 234 235 //------------------------------------------------------------------------------------------------------------- 236 // debug methods 237 // (should be private everyway!) 238 //------------------------------------------------------------------------------------------------------------- 239 240 /*-****************************************************************************************************//** 241 @short debug-method to check incoming parameter of some other mehods of this class 242 @descr The following methods are used to check parameters for other methods 243 of this class. The return value is used directly for an ASSERT(...). 244 245 @seealso ASSERTs in implementation! 246 247 @param references to checking variables 248 @return sal_False ,on invalid parameter. 249 @return sal_True ,otherwise 250 251 @onerror - 252 *//*-*****************************************************************************************************/ 253 254 #ifdef ENABLE_ASSERTIONS 255 256 private: 257 258 static sal_Bool impldbg_checkParameter_OComponentAccessCtor( const css::uno::Reference< css::frame::XDesktop >& xOwner ); 259 260 #endif // #ifdef ENABLE_ASSERTIONS 261 262 //------------------------------------------------------------------------------------------------------------- 263 // variables 264 // (should be private everyway!) 265 //------------------------------------------------------------------------------------------------------------- 266 267 private: 268 269 css::uno::WeakReference< css::frame::XDesktop > m_xOwner ; /// weak reference to the desktop object! 270 271 }; // class OComponentAccess 272 273 } // namespace framework 274 275 #endif // #ifndef __FRAMEWORK_HELPER_OCOMPONENTACCESS_HXX_ 276