| /************************************************************** |
| * |
| * 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. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_extensions.hxx" |
| #include <osl/mutex.hxx> |
| #include <tools/urlobj.hxx> |
| #include <toolkit/helper/vclunohelper.hxx> |
| #include <comphelper/processfactory.hxx> |
| #include <com/sun/star/awt/PosSize.hpp> |
| #include <com/sun/star/frame/XDispatch.hpp> |
| #include <com/sun/star/util/XURLTransformer.hpp> |
| |
| #include "bibliography.hrc" |
| #include <vcl/lstbox.hxx> |
| #include <vcl/edit.hxx> |
| #include <tools/debug.hxx> |
| #include "bibbeam.hxx" |
| #include "toolbar.hrc" |
| #include "bibresid.hxx" |
| #include "datman.hxx" |
| #ifndef BIBTOOLS_HXX |
| #include "bibtools.hxx" |
| #endif |
| |
| using namespace rtl; |
| using namespace ::com::sun::star; |
| using namespace ::com::sun::star::beans; |
| using namespace ::com::sun::star::uno; |
| |
| #define C2U(cChar) OUString::createFromAscii(cChar) |
| |
| #define PROPERTY_FRAME 1 |
| #define ID_TOOLBAR 1 |
| #define ID_GRIDWIN 2 |
| |
| //......................................................................... |
| namespace bib |
| { |
| //......................................................................... |
| |
| using namespace ::com::sun::star::uno; |
| |
| void HandleTaskPaneList( Window* pWindow, sal_Bool bAddToList ) |
| { |
| Window* pParent = pWindow->GetParent(); |
| |
| DBG_ASSERT( pParent, "-GetTaskPaneList(): everybody here should have a parent!" ); |
| |
| SystemWindow* pSysWin = pParent->GetSystemWindow(); |
| if( pSysWin ) |
| { |
| TaskPaneList* pTaskPaneList = pSysWin->GetTaskPaneList(); |
| if( pTaskPaneList ) |
| { |
| if( bAddToList ) |
| pTaskPaneList->AddWindow( pWindow ); |
| else |
| pTaskPaneList->RemoveWindow( pWindow ); |
| } |
| } |
| } |
| |
| //===================================================================== |
| //= BibGridwin |
| //===================================================================== |
| class BibGridwin |
| :public Window //DockingWindow |
| { |
| private: |
| Reference< awt::XWindow > m_xGridWin; |
| Reference< awt::XControlModel > m_xGridModel; |
| Reference< awt::XControl > m_xControl; |
| Reference< awt::XControlContainer > m_xControlContainer; |
| // #100312# --------- |
| Reference< frame::XDispatchProviderInterception> m_xDispatchProviderInterception; |
| |
| protected: |
| |
| virtual void Resize(); |
| |
| public: |
| |
| BibGridwin(Window* pParent, WinBits nStyle = WB_3DLOOK ); |
| ~BibGridwin(); |
| |
| void createGridWin(const Reference< awt::XControlModel > & xDbForm); |
| void disposeGridWin(); |
| |
| const Reference< awt::XControlContainer >& getControlContainer() const { return m_xControlContainer; } |
| // #100312# --------- |
| const Reference< frame::XDispatchProviderInterception>& getDispatchProviderInterception() const { return m_xDispatchProviderInterception; } |
| |
| virtual void GetFocus(); |
| }; |
| |
| //--------------------------------------------------------------------- |
| BibGridwin::BibGridwin( Window* _pParent, WinBits _nStyle ) : Window( _pParent, _nStyle ) |
| { |
| m_xControlContainer = VCLUnoHelper::CreateControlContainer(this); |
| |
| AddToTaskPaneList( this ); |
| } |
| |
| //--------------------------------------------------------------------- |
| BibGridwin::~BibGridwin() |
| { |
| RemoveFromTaskPaneList( this ); |
| |
| disposeGridWin(); |
| } |
| |
| //--------------------------------------------------------------------- |
| void BibGridwin::Resize() |
| { |
| if(m_xGridWin.is()) |
| { |
| ::Size aSize = GetOutputSizePixel(); |
| m_xGridWin->setPosSize(0, 0, aSize.Width(),aSize.Height(), awt::PosSize::SIZE); |
| } |
| } |
| |
| //--------------------------------------------------------------------- |
| void BibGridwin::createGridWin(const uno::Reference< awt::XControlModel > & xGModel) |
| { |
| m_xGridModel = xGModel; |
| |
| if( m_xControlContainer.is()) |
| { |
| uno::Reference< lang::XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory(); |
| |
| if ( m_xGridModel.is() && xMgr.is()) |
| { |
| uno::Reference< XPropertySet > xPropSet( m_xGridModel, UNO_QUERY ); |
| |
| if ( xPropSet.is() && m_xGridModel.is() ) |
| { |
| uno::Any aAny = xPropSet->getPropertyValue( C2U("DefaultControl") ); |
| rtl::OUString aControlName; |
| aAny >>= aControlName; |
| |
| m_xControl = Reference< awt::XControl > (xMgr->createInstance( aControlName ), UNO_QUERY ); |
| DBG_ASSERT( m_xControl.is(), "no GridControl created" ); |
| if ( m_xControl.is() ) |
| m_xControl->setModel( m_xGridModel ); |
| } |
| |
| if ( m_xControl.is() ) |
| { |
| // Peer als Child zu dem FrameWindow |
| m_xControlContainer->addControl(C2U("GridControl"), m_xControl); |
| m_xGridWin=uno::Reference< awt::XWindow > (m_xControl, UNO_QUERY ); |
| // #100312# ----- |
| m_xDispatchProviderInterception=uno::Reference< frame::XDispatchProviderInterception > (m_xControl, UNO_QUERY ); |
| m_xGridWin->setVisible( sal_True ); |
| m_xControl->setDesignMode( sal_True ); |
| // initially switch on the desing mode - switch it off _after_ loading the form |
| // 17.10.2001 - 93107 - frank.schoenheit@sun.com |
| |
| ::Size aSize = GetOutputSizePixel(); |
| m_xGridWin->setPosSize(0, 0, aSize.Width(),aSize.Height(), awt::PosSize::POSSIZE); |
| } |
| } |
| } |
| } |
| |
| //--------------------------------------------------------------------- |
| void BibGridwin::disposeGridWin() |
| { |
| if ( m_xControl.is() ) |
| { |
| Reference< awt::XControl > xDel( m_xControl ); |
| m_xControl = NULL; |
| m_xGridWin = NULL; |
| |
| m_xControlContainer->removeControl( xDel ); |
| xDel->dispose(); |
| } |
| } |
| |
| //--------------------------------------------------------------------- |
| void BibGridwin::GetFocus() |
| { |
| if(m_xGridWin.is()) |
| m_xGridWin->setFocus(); |
| } |
| |
| //--------------------------------------------------------------------- |
| BibBeamer::BibBeamer( Window* _pParent, BibDataManager* _pDM, WinBits _nStyle ) |
| :BibSplitWindow( _pParent, _nStyle | WB_NOSPLITDRAW ) |
| ,pDatMan( _pDM ) |
| ,pToolBar( NULL ) |
| ,pGridWin( NULL ) |
| { |
| createToolBar(); |
| createGridWin(); |
| if ( pDatMan ) |
| pDatMan->SetToolbar(pToolBar); |
| pGridWin->Show(); |
| |
| if ( pDatMan ) |
| connectForm( pDatMan ); |
| } |
| |
| //--------------------------------------------------------------------- |
| BibBeamer::~BibBeamer() |
| { |
| if ( isFormConnected() ) |
| disconnectForm(); |
| |
| if ( m_xToolBarRef.is() ) |
| m_xToolBarRef->dispose(); |
| |
| if ( pToolBar ) |
| { |
| if ( pDatMan ) |
| pDatMan->SetToolbar(0); |
| |
| DELETEZ( pToolBar ); |
| } |
| |
| if( pGridWin ) |
| { |
| BibGridwin* pDel = pGridWin; |
| pGridWin = NULL; |
| pDel->disposeGridWin(); |
| delete pDel; |
| } |
| |
| } |
| |
| //--------------------------------------------------------------------- |
| void BibBeamer::createToolBar() |
| { |
| pToolBar= new BibToolBar(this, LINK( this, BibBeamer, RecalcLayout_Impl )); |
| ::Size aSize=pToolBar->GetSizePixel(); |
| InsertItem(ID_TOOLBAR, pToolBar, aSize.Height(), 0, 0, SWIB_FIXED ); |
| if ( m_xController.is() ) |
| pToolBar->SetXController( m_xController ); |
| } |
| |
| //--------------------------------------------------------------------- |
| void BibBeamer::createGridWin() |
| { |
| pGridWin = new BibGridwin(this,0); |
| |
| InsertItem(ID_GRIDWIN, pGridWin, 40, 1, 0, SWIB_RELATIVESIZE ); |
| |
| pGridWin->createGridWin( pDatMan->updateGridModel() ); |
| } |
| |
| //--------------------------------------------------------------------- |
| Reference< awt::XControlContainer > BibBeamer::getControlContainer() |
| { |
| Reference< awt::XControlContainer > xReturn; |
| if ( pGridWin ) |
| xReturn = pGridWin->getControlContainer(); |
| return xReturn; |
| } |
| |
| // #100312# ----------------------------------------------------------- |
| Reference< frame::XDispatchProviderInterception > BibBeamer::getDispatchProviderInterception() |
| { |
| Reference< frame::XDispatchProviderInterception > xReturn; |
| if ( pGridWin ) |
| xReturn = pGridWin->getDispatchProviderInterception(); |
| return xReturn; |
| } |
| |
| //--------------------------------------------------------------------- |
| void BibBeamer::SetXController(const uno::Reference< frame::XController > & xCtr) |
| { |
| m_xController = xCtr; |
| |
| if ( pToolBar ) |
| pToolBar->SetXController( m_xController ); |
| |
| } |
| |
| //--------------------------------------------------------------------- |
| void BibBeamer::GetFocus() |
| { |
| if( pGridWin ) |
| pGridWin->GrabFocus(); |
| } |
| |
| //--------------------------------------------------------------------- |
| IMPL_LINK( BibBeamer, RecalcLayout_Impl, void*, /*pVoid*/ ) |
| { |
| long nHeight = pToolBar->GetSizePixel().Height(); |
| SetItemSize( ID_TOOLBAR, nHeight ); |
| return 0L; |
| } |
| |
| //......................................................................... |
| } // namespace bib |
| //......................................................................... |