/************************************************************** * * 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 FRAMEWORK_TABWINDOW_HXX #define FRAMEWORK_TABWINDOW_HXX #include #include #include #include #include #include #include namespace com { namespace sun { namespace star { namespace awt { class XWindow; class XContainerWindowProvider; class XContainerWindowEventHandler; } namespace beans { struct NamedValue; } } } } namespace framework { class FwkTabControl : public TabControl { public: FwkTabControl( Window* pParent, const ResId& rResId ); void BroadcastEvent( sal_uLong nEvent ); }; class FwkTabPage : public TabPage { private: rtl::OUString m_sPageURL; rtl::OUString m_sEventHdl; css::uno::Reference< css::awt::XWindow > m_xPage; css::uno::Reference< css::awt::XContainerWindowEventHandler > m_xEventHdl; css::uno::Reference< css::awt::XContainerWindowProvider > m_xWinProvider; void CreateDialog(); sal_Bool CallMethod( const rtl::OUString& rMethod ); public: FwkTabPage( Window* pParent, const rtl::OUString& rPageURL, const css::uno::Reference< css::awt::XContainerWindowEventHandler >& rEventHdl, const css::uno::Reference< css::awt::XContainerWindowProvider >& rProvider ); virtual ~FwkTabPage(); virtual void ActivatePage(); virtual void DeactivatePage(); virtual void Resize(); }; struct TabEntry { sal_Int32 m_nIndex; FwkTabPage* m_pPage; ::rtl::OUString m_sPageURL; css::uno::Reference< css::awt::XContainerWindowEventHandler > m_xEventHdl; TabEntry() : m_nIndex( -1 ), m_pPage( NULL ) {} TabEntry( sal_Int32 nIndex, ::rtl::OUString sURL, const css::uno::Reference< css::awt::XContainerWindowEventHandler > & rEventHdl ) : m_nIndex( nIndex ), m_pPage( NULL ), m_sPageURL( sURL ), m_xEventHdl( rEventHdl ) {} ~TabEntry() { delete m_pPage; } }; typedef std::vector< TabEntry* > TabEntryList; class FwkTabWindow : public Window { private: FwkTabControl m_aTabCtrl; TabEntryList m_TabList; css::uno::Reference< css::awt::XContainerWindowProvider > m_xWinProvider; void ClearEntryList(); TabEntry* FindEntry( sal_Int32 nIndex ) const; bool RemoveEntry( sal_Int32 nIndex ); DECL_DLLPRIVATE_LINK( ActivatePageHdl, TabControl * ); DECL_DLLPRIVATE_LINK( DeactivatePageHdl, TabControl * ); DECL_DLLPRIVATE_LINK( CloseHdl, PushButton * ); public: FwkTabWindow( Window* pParent ); ~FwkTabWindow(); void AddEventListener( const Link& rEventListener ); void RemoveEventListener( const Link& rEventListener ); FwkTabPage* AddTabPage( sal_Int32 nIndex, const css::uno::Sequence< css::beans::NamedValue >& rProperties ); void ActivatePage( sal_Int32 nIndex ); void RemovePage( sal_Int32 nIndex ); virtual void Resize(); }; } // namespace framework #endif