text: /**************************************************************
   * 
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License.  You may obtain a copy of the License at
   * 
   *   http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing,
   * software distributed under the License is distributed on an
   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   * KIND, either express or implied.  See the License for the
   * specific language governing permissions and limitations
   * under the License.
   * 
   *************************************************************/
  
  
  #ifndef _SFXOBJFACE_HXX
  #define _SFXOBJFACE_HXX
  
  #include "sal/config.h"
  #include "sfx2/dllapi.h"
  #include "sal/types.h"
  #include <tools/string.hxx>
  #ifndef _RESID_HXX //autogen
  #include <tools/resid.hxx>
  #endif
  
  #include <sfx2/msg.hxx>
  
  struct SfxFormalArgument;
  struct SfxTypeLibImpl;
  struct SfxInterface_Impl;
  class  SfxConfigManager;
  class  SfxConfigItem;
  class  SfxIFConfig_Impl;
  class  SfxObjectUIArr_Impl ;
  class  SfxModule;
  class  SvStream;
  
  class SFX2_DLLPUBLIC SfxInterface
  {
  friend class SfxIFConfig_Impl;
  friend class SfxSlotPool;
  
  	const char* 			pName;			// Sfx-internal name of interface
      const SfxInterface*     pGenoType;      // base interface
      SfxSlot*                pSlots;         // SlotMap
      sal_uInt16                  nCount;         // number of slots in SlotMap
  	SfxInterfaceId			nClassId;		// Id of interface
  	ResId					aNameResId; 	// ResId of external interface name
  	SfxInterface_Impl*		pImpData;
  
  	SfxSlot*                operator[]( sal_uInt16 nPos ) const;
  
  public:
                              SfxInterface( const char *pClass,
  										  const ResId& rResId,
  										  SfxInterfaceId nClassId,
  										  const SfxInterface* pGeno,
  										  SfxSlot &rMessages, sal_uInt16 nMsgCount );
  	virtual                 ~SfxInterface();
  
  	void                    SetSlotMap( SfxSlot& rMessages, sal_uInt16 nMsgCount );
  	inline sal_uInt16           Count() const;
  
  	const SfxSlot*          GetRealSlot( const SfxSlot * ) const;
  	const SfxSlot*          GetRealSlot( sal_uInt16 nSlotId ) const;
  	virtual const SfxSlot*	GetSlot( sal_uInt16 nSlotId ) const;
  	const SfxSlot*			GetSlot( const String& rCommand ) const;
  
  	const char*             GetClassName() const { return pName; }
  	int 					HasName() const { return 0 != aNameResId.GetId(); }
  	String                  GetName() const
  							{ return String(aNameResId); }
  	ResMgr* 				GetResMgr() const
  							{ return aNameResId.GetResMgr(); }
  
  	const SfxInterface* 	GetGenoType() const { return pGenoType; }
  	const SfxInterface*		GetRealInterfaceForSlot( const SfxSlot* ) const;
  
  	void					RegisterObjectBar( sal_uInt16, const ResId&, const String* pST=0 );
  	void					RegisterObjectBar( sal_uInt16, const ResId&, sal_uInt32 nFeature, const String* pST=0 );
  	void					RegisterChildWindow( sal_uInt16, sal_Bool bContext, const String* pST=0 );
  	void					RegisterChildWindow( sal_uInt16, sal_Bool bContext, sal_uInt32 nFeature, const String* pST=0 );
  	void					RegisterStatusBar( const ResId& );
  	const ResId&			GetObjectBarResId( sal_uInt16 nNo ) const;
  	sal_uInt16                  GetObjectBarPos( sal_uInt16 nNo ) const;
  	sal_uInt32              GetObjectBarFeature( sal_uInt16 nNo ) const;
  	sal_uInt16					GetObjectBarCount() const;
  	void                    SetObjectBarPos( sal_uInt16 nPos, sal_uInt16 nId );
  	const String*           GetObjectBarName( sal_uInt16 nNo ) const;
  	sal_Bool					IsObjectBarVisible( sal_uInt16 nNo) const;
  	sal_uInt32				GetChildWindowFeature( sal_uInt16 nNo ) const;
  	sal_uInt32				GetChildWindowId( sal_uInt16 nNo ) const;
  	sal_uInt16					GetChildWindowCount() const;
  	void					RegisterPopupMenu( const ResId& );
  	const ResId&			GetPopupMenuResId() const;
  	const ResId&			GetStatusBarResId() const;
  
      void                    Register( SfxModule* );
  
  //#if 0 // _SOLAR__PRIVATE
      SAL_DLLPRIVATE int      ContainsSlot_Impl( const SfxSlot *pSlot ) const
  							{ return pSlot >= pSlots && pSlot < pSlots + Count(); }
      SAL_DLLPRIVATE ResMgr*  GetResManager_Impl() const
  							{ return aNameResId.GetResMgr(); }
  //#endif
  };
  
  //--------------------------------------------------------------------
  
  // returns the number of functions in this cluster
  
  inline sal_uInt16 SfxInterface::Count() const
  {
  	return nCount;
  }
  
  //--------------------------------------------------------------------
  
  // returns a function by position in the array
  
  inline SfxSlot* SfxInterface::operator[]( sal_uInt16 nPos ) const
  {
  	return nPos < nCount? pSlots+nPos: 0;
  }
  
  //#if 0 // _SOLAR__PRIVATE
  class SfxIFConfig_Impl
  {
  friend class SfxInterface;
  	sal_uInt16					nCount;
  	SfxObjectUIArr_Impl*	pObjectBars;
  
  public:
                      SfxIFConfig_Impl();
  			        ~SfxIFConfig_Impl();
  	sal_Bool    		Store(SvStream&);
      void            RegisterObjectBar( sal_uInt16, const ResId&, sal_uInt32 nFeature, const String* pST=0 );
      sal_uInt16          GetType();
  };
  //#endif
  
  #endif
  