1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_HELPER_OCOMPONENTENUMERATION_HXX_ 25*b1cdbd2cSJim Jagielski #define __FRAMEWORK_HELPER_OCOMPONENTENUMERATION_HXX_ 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________ 28*b1cdbd2cSJim Jagielski // my own includes 29*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________ 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_OMUTEXMEMBER_HXX_ 32*b1cdbd2cSJim Jagielski #include <threadhelp/threadhelpbase.hxx> 33*b1cdbd2cSJim Jagielski #endif 34*b1cdbd2cSJim Jagielski #include <macros/generic.hxx> 35*b1cdbd2cSJim Jagielski #include <macros/xinterface.hxx> 36*b1cdbd2cSJim Jagielski #include <macros/xtypeprovider.hxx> 37*b1cdbd2cSJim Jagielski #include <macros/debug.hxx> 38*b1cdbd2cSJim Jagielski #include <general.h> 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________ 41*b1cdbd2cSJim Jagielski // interface includes 42*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________ 43*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XEventListener.hpp> 44*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XEnumeration.hpp> 45*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XComponent.hpp> 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________ 48*b1cdbd2cSJim Jagielski // other includes 49*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________ 50*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase2.hxx> 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________ 53*b1cdbd2cSJim Jagielski // namespace 54*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________ 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski namespace framework{ 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________ 59*b1cdbd2cSJim Jagielski // exported const 60*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________ 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________ 63*b1cdbd2cSJim Jagielski // exported definitions 64*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________ 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski /*-************************************************************************************************************//** 67*b1cdbd2cSJim Jagielski @short implement a helper for a oneway enumeration of components 68*b1cdbd2cSJim Jagielski @descr You can step during this list only for one time! Its a snapshot. 69*b1cdbd2cSJim Jagielski Don't forget to release the reference. You are the owner of an instance of this implementation. 70*b1cdbd2cSJim Jagielski You cant use this as a baseclass. Please use it as a dynamical object for return. 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski @implements XInterface 73*b1cdbd2cSJim Jagielski XTypeProvider 74*b1cdbd2cSJim Jagielski XEventListener 75*b1cdbd2cSJim Jagielski XEnumeration 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski @base ThreadHelpBase 78*b1cdbd2cSJim Jagielski OWeakObject 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski @devstatus ready to use 81*b1cdbd2cSJim Jagielski @threadsafe yes 82*b1cdbd2cSJim Jagielski *//*-*************************************************************************************************************/ 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski class OComponentEnumeration : public ThreadHelpBase , 85*b1cdbd2cSJim Jagielski public ::cppu::WeakImplHelper2< ::com::sun::star::container::XEnumeration,::com::sun::star::lang::XEventListener > 86*b1cdbd2cSJim Jagielski { 87*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------- 88*b1cdbd2cSJim Jagielski // public methods 89*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------- 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski public: 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------------- 94*b1cdbd2cSJim Jagielski // constructor / destructor 95*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------------- 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//** 98*b1cdbd2cSJim Jagielski @short constructor to initialize this enumeration 99*b1cdbd2cSJim Jagielski @descr An enumeration is a list with oneway-access! You can get every member only for one time. 100*b1cdbd2cSJim Jagielski This method allow to initialize this oneway list with values. 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski @seealso - 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski @param "seqComponents" is a sequence of interfaces, which are components. 105*b1cdbd2cSJim Jagielski @return - 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielski @onerror Do nothing and reset this object to default with an empty list. 108*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/ 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski OComponentEnumeration( const css::uno::Sequence< css::uno::Reference< css::lang::XComponent > >& seqComponents ); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------------- 113*b1cdbd2cSJim Jagielski // XEventListener 114*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------------- 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//** 117*b1cdbd2cSJim Jagielski @short last chance to release all references and free memory 118*b1cdbd2cSJim Jagielski @descr This method is called, if the enumeration is used completly and has no more elements. 119*b1cdbd2cSJim Jagielski Then we must destroy ouer list and release all references to other objects. 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski @seealso interface XEventListener 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski @param "aEvent" describe the source of this event. 124*b1cdbd2cSJim Jagielski @return - 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski @onerror - 127*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/ 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing( const css::lang::EventObject& aEvent ) throw( css::uno::RuntimeException ); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------------- 132*b1cdbd2cSJim Jagielski // XEnumeration 133*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------------- 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//** 136*b1cdbd2cSJim Jagielski @short check count of accessible elements of enumeration 137*b1cdbd2cSJim Jagielski @descr You can call this method to get information about accessible elements in future. 138*b1cdbd2cSJim Jagielski Elements you have already getted are not accessible! 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski @seealso interface XEnumeration 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski @param - 143*b1cdbd2cSJim Jagielski @return sal_True = if more elements accessible<BR> 144*b1cdbd2cSJim Jagielski sal_False = other way 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski @onerror sal_False<BR> 147*b1cdbd2cSJim Jagielski (List is emtpy and there no accessible elements ...) 148*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/ 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL hasMoreElements() throw( css::uno::RuntimeException ); 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//** 153*b1cdbd2cSJim Jagielski @short give the next element, if some exist 154*b1cdbd2cSJim Jagielski @descr If a call "hasMoreElements()" return true, you can get the next element of list. 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski @seealso interface XEnumeration 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski @param - 159*b1cdbd2cSJim Jagielski @return A Reference to a component, safed in an Any-structure. 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski @onerror If end of enumeration is arrived or there are no elements in list => a NoSuchElementException is thrown. 162*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/ 163*b1cdbd2cSJim Jagielski 164*b1cdbd2cSJim Jagielski virtual css::uno::Any SAL_CALL nextElement() throw( css::container::NoSuchElementException , 165*b1cdbd2cSJim Jagielski css::lang::WrappedTargetException , 166*b1cdbd2cSJim Jagielski css::uno::RuntimeException ); 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------- 169*b1cdbd2cSJim Jagielski // protected methods 170*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------- 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski protected: 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//** 175*b1cdbd2cSJim Jagielski @short standard destructor 176*b1cdbd2cSJim Jagielski @descr This method destruct an instance of this class and clear some member. 177*b1cdbd2cSJim Jagielski We make it protected, because its not supported to use this class as normal instance! 178*b1cdbd2cSJim Jagielski You must create it dynamical in memory and use a pointer. 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski @seealso - 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski @param - 183*b1cdbd2cSJim Jagielski @return - 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski @onerror - 186*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/ 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski virtual ~OComponentEnumeration(); 189*b1cdbd2cSJim Jagielski 190*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//** 191*b1cdbd2cSJim Jagielski @short reset instance to default values 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski @descr There are two ways to delete an instance of this class.<BR> 194*b1cdbd2cSJim Jagielski 1) delete with destructor<BR> 195*b1cdbd2cSJim Jagielski 2) dispose from parent or factory ore ...<BR> 196*b1cdbd2cSJim Jagielski This method do the same for both ways! It free used memory and release references ... 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski @seealso method dispose() 199*b1cdbd2cSJim Jagielski @seealso destructor ~TaskEnumeration() 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski @param - 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski @return - 204*b1cdbd2cSJim Jagielski 205*b1cdbd2cSJim Jagielski @onerror - 206*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/ 207*b1cdbd2cSJim Jagielski 208*b1cdbd2cSJim Jagielski virtual void impl_resetObject(); 209*b1cdbd2cSJim Jagielski 210*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------- 211*b1cdbd2cSJim Jagielski // private methods 212*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------- 213*b1cdbd2cSJim Jagielski 214*b1cdbd2cSJim Jagielski private: 215*b1cdbd2cSJim Jagielski 216*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------- 217*b1cdbd2cSJim Jagielski // debug methods 218*b1cdbd2cSJim Jagielski // (should be private everyway!) 219*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------- 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//** 222*b1cdbd2cSJim Jagielski @short debug-method to check incoming parameter of some other mehods of this class 223*b1cdbd2cSJim Jagielski @descr The following methods are used to check parameters for other methods 224*b1cdbd2cSJim Jagielski of this class. The return value is used directly for an ASSERT(...). 225*b1cdbd2cSJim Jagielski 226*b1cdbd2cSJim Jagielski @seealso ASSERT in implementation! 227*b1cdbd2cSJim Jagielski 228*b1cdbd2cSJim Jagielski @param references to checking variables 229*b1cdbd2cSJim Jagielski @return sal_False on invalid parameter<BR> 230*b1cdbd2cSJim Jagielski sal_True otherway 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielski @onerror - 233*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/ 234*b1cdbd2cSJim Jagielski 235*b1cdbd2cSJim Jagielski #ifdef ENABLE_ASSERTIONS 236*b1cdbd2cSJim Jagielski 237*b1cdbd2cSJim Jagielski private: 238*b1cdbd2cSJim Jagielski 239*b1cdbd2cSJim Jagielski static sal_Bool impldbg_checkParameter_OComponentEnumerationCtor ( const css::uno::Sequence< css::uno::Reference< css::lang::XComponent > >& seqComponents ); 240*b1cdbd2cSJim Jagielski static sal_Bool impldbg_checkParameter_disposing ( const css::lang::EventObject& aEvent ); 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski #endif // #ifdef ENABLE_ASSERTIONS 243*b1cdbd2cSJim Jagielski 244*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------- 245*b1cdbd2cSJim Jagielski // variables 246*b1cdbd2cSJim Jagielski // (should be private everyway!) 247*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------- 248*b1cdbd2cSJim Jagielski 249*b1cdbd2cSJim Jagielski private: 250*b1cdbd2cSJim Jagielski 251*b1cdbd2cSJim Jagielski sal_uInt32 m_nPosition ; /// current position in enumeration 252*b1cdbd2cSJim Jagielski css::uno::Sequence< css::uno::Reference< css::lang::XComponent > > m_seqComponents ; /// list of current components 253*b1cdbd2cSJim Jagielski 254*b1cdbd2cSJim Jagielski }; // class OComponentEnumeration 255*b1cdbd2cSJim Jagielski 256*b1cdbd2cSJim Jagielski } // namespace framework 257*b1cdbd2cSJim Jagielski 258*b1cdbd2cSJim Jagielski #endif // #ifndef __FRAMEWORK_HELPER_OCOMPONENTENUMERATION_HXX_ 259