| /************************************************************** |
| * |
| * 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. |
| * |
| *************************************************************/ |
| |
| |
| #include "precompiled_reportdesign.hxx" |
| #include "propbrw.hxx" |
| #include "RptObject.hxx" |
| #include "ReportController.hxx" |
| #include <cppuhelper/component_context.hxx> |
| #ifndef _REPORT_DLGRESID_HRC |
| #include <RptResId.hrc> |
| #endif |
| #ifndef _RPTUI_SLOTID_HRC_ |
| #include "rptui_slotid.hrc" |
| #endif |
| #include <tools/debug.hxx> |
| #include <com/sun/star/awt/XLayoutConstrains.hpp> |
| #include <com/sun/star/inspection/ObjectInspector.hpp> |
| #include <com/sun/star/inspection/DefaultHelpProvider.hpp> |
| #ifndef _SVX_SVXIDS_HRC |
| #include <svx/svxids.hrc> |
| #endif |
| #include <vcl/stdtext.hxx> |
| #include <svx/svdview.hxx> |
| #include <svx/svdogrp.hxx> |
| #include <svx/svdpage.hxx> |
| #include <svx/svditer.hxx> |
| |
| #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_ |
| #include <toolkit/unohlp.hxx> |
| #endif |
| #include <comphelper/property.hxx> |
| #include <comphelper/namecontainer.hxx> |
| #include <comphelper/composedprops.hxx> |
| #include <comphelper/stl_types.hxx> |
| #include <comphelper/types.hxx> |
| #include <comphelper/sequence.hxx> |
| #include <com/sun/star/beans/PropertyValue.hpp> |
| #include <com/sun/star/awt/PosSize.hpp> |
| #include <com/sun/star/lang/XServiceInfo.hpp> |
| #include <com/sun/star/report/inspection/DefaultComponentInspectorModel.hpp> |
| #include <comphelper/processfactory.hxx> |
| #include "SectionView.hxx" |
| #include "ReportSection.hxx" |
| #ifndef REPORTDESIGN_SHARED_UISTRINGS_HRC |
| #include "uistrings.hrc" |
| #endif |
| #include "DesignView.hxx" |
| #include "ViewsWindow.hxx" |
| #include "UITools.hxx" |
| #include <unotools/confignode.hxx> |
| |
| namespace rptui |
| { |
| #define STD_WIN_SIZE_X 300 |
| #define STD_WIN_SIZE_Y 350 |
| |
| using namespace ::com::sun::star; |
| using namespace uno; |
| using namespace lang; |
| using namespace frame; |
| using namespace beans; |
| using namespace container; |
| using namespace ::comphelper; |
| |
| //---------------------------------------------------------------------------- |
| //----------------------------------------------------------------------- |
| namespace |
| { |
| static bool lcl_shouldEnableHelpSection( const Reference< XMultiServiceFactory >& _rxFactory ) |
| { |
| const ::rtl::OUString sConfigName( RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Office.ReportDesign/PropertyBrowser/" ) ); |
| const ::rtl::OUString sPropertyName( RTL_CONSTASCII_USTRINGPARAM( "DirectHelp" ) ); |
| |
| ::utl::OConfigurationTreeRoot aConfiguration( |
| ::utl::OConfigurationTreeRoot::createWithServiceFactory( _rxFactory, sConfigName ) ); |
| |
| bool bEnabled = false; |
| OSL_VERIFY( aConfiguration.getNodeValue( sPropertyName ) >>= bEnabled ); |
| return bEnabled; |
| } |
| } |
| //----------------------------------------------------------------------- |
| //============================================================================ |
| // PropBrw |
| //============================================================================ |
| |
| DBG_NAME( rpt_PropBrw ) |
| |
| //---------------------------------------------------------------------------- |
| |
| PropBrw::PropBrw(const Reference< XMultiServiceFactory >& _xORB,Window* pParent,ODesignView* _pDesignView) |
| :DockingWindow(pParent,WinBits(WB_STDMODELESS|WB_SIZEABLE|WB_3DLOOK|WB_ROLLABLE)) |
| ,m_xORB(_xORB) |
| ,m_pDesignView(_pDesignView) |
| ,m_pView( NULL ) |
| ,m_bInitialStateChange(sal_True) |
| { |
| DBG_CTOR( rpt_PropBrw,NULL); |
| |
| Size aPropWinSize(STD_WIN_SIZE_X,STD_WIN_SIZE_Y); |
| SetOutputSizePixel(aPropWinSize); |
| |
| try |
| { |
| // create a frame wrapper for myself |
| m_xMeAsFrame = Reference< XFrame >(m_xORB->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Frame"))), UNO_QUERY); |
| if (m_xMeAsFrame.is()) |
| { |
| m_xMeAsFrame->initialize( VCLUnoHelper::GetInterface ( this ) ); |
| m_xMeAsFrame->setName(::rtl::OUString::createFromAscii("report property browser")); // change name! |
| } |
| } |
| catch (Exception&) |
| { |
| DBG_ERROR("PropBrw::PropBrw: could not create/initialize my frame!"); |
| m_xMeAsFrame.clear(); |
| } |
| |
| if (m_xMeAsFrame.is()) |
| { |
| Reference< XComponentContext > xOwnContext; |
| try |
| { |
| // our own component context |
| Reference< XPropertySet > xFactoryProperties( m_xORB, UNO_QUERY_THROW ); |
| xOwnContext.set( |
| xFactoryProperties->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) ) ), |
| UNO_QUERY_THROW ); |
| |
| /*uno::Reference< XComponent> xModel = new OContextHelper(m_xORB,uno::Reference< XComponent>(m_pDesignView->getController().getModel(),uno::UNO_QUERY) ); |
| uno::Reference< XComponent> xDialogParentWindow = new OContextHelper(m_xORB,uno::Reference< XComponent>(VCLUnoHelper::GetInterface ( this ),uno::UNO_QUERY) ); |
| uno::Reference< XComponent> xConnection = new OContextHelper(m_xORB,uno::Reference< XComponent>(m_pDesignView->getController().getConnection(),uno::UNO_QUERY) );*/ |
| // a ComponentContext for the |
| ::cppu::ContextEntry_Init aHandlerContextInfo[] = |
| { |
| ::cppu::ContextEntry_Init( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ContextDocument" ) ), makeAny( m_pDesignView->getController().getModel() )), |
| ::cppu::ContextEntry_Init( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DialogParentWindow" ) ), makeAny( VCLUnoHelper::GetInterface ( this ) )), |
| ::cppu::ContextEntry_Init( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ActiveConnection" ) ), makeAny( m_pDesignView->getController().getConnection() ) ), |
| }; |
| m_xInspectorContext.set( |
| ::cppu::createComponentContext( aHandlerContextInfo, sizeof( aHandlerContextInfo ) / sizeof( aHandlerContextInfo[0] ), |
| xOwnContext ) ); |
| // create a property browser controller |
| bool bEnableHelpSection = lcl_shouldEnableHelpSection( m_xORB ); |
| Reference< inspection::XObjectInspectorModel> xInspectorModel( bEnableHelpSection |
| ? report::inspection::DefaultComponentInspectorModel::createWithHelpSection( m_xInspectorContext, 3, 8 ) |
| : report::inspection::DefaultComponentInspectorModel::createDefault( m_xInspectorContext ) ); |
| |
| m_xBrowserController = inspection::ObjectInspector::createWithModel(m_xInspectorContext, xInspectorModel); |
| if ( !m_xBrowserController.is() ) |
| { |
| const ::rtl::OUString sServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.inspection.ObjectInspector" ) ); |
| ShowServiceNotAvailableError(pParent, sServiceName, sal_True); |
| } |
| else |
| { |
| m_xBrowserController->attachFrame(m_xMeAsFrame); |
| m_xBrowserComponentWindow = m_xMeAsFrame->getComponentWindow(); |
| OSL_ENSURE(m_xBrowserComponentWindow.is(), "PropBrw::PropBrw: attached the controller, but have no component window!"); |
| if ( bEnableHelpSection ) |
| { |
| uno::Reference< inspection::XObjectInspector > xInspector( m_xBrowserController, uno::UNO_QUERY_THROW ); |
| uno::Reference< inspection::XObjectInspectorUI > xInspectorUI( xInspector->getInspectorUI() ); |
| uno::Reference< uno::XInterface > xDefaultHelpProvider( inspection::DefaultHelpProvider::create( m_xInspectorContext, xInspectorUI ) ); |
| } |
| } |
| xFactoryProperties->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) ) ,makeAny(xOwnContext)); |
| } |
| catch (Exception&) |
| { |
| DBG_ERROR("PropBrw::PropBrw: could not create/initialize the browser controller!"); |
| try |
| { |
| ::comphelper::disposeComponent(m_xBrowserController); |
| ::comphelper::disposeComponent(m_xBrowserComponentWindow); |
| Reference< XPropertySet > xFactoryProperties( m_xORB, UNO_QUERY_THROW ); |
| if ( xOwnContext.is() ) |
| xFactoryProperties->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) ) ,makeAny(xOwnContext)); |
| } |
| catch(Exception&) { } |
| m_xBrowserController.clear(); |
| m_xBrowserComponentWindow.clear(); |
| } |
| } |
| |
| if (m_xBrowserComponentWindow.is()) |
| { |
| |
| m_xBrowserComponentWindow->setPosSize(0, 0, aPropWinSize.Width(), aPropWinSize.Height(), |
| awt::PosSize::WIDTH | awt::PosSize::HEIGHT | awt::PosSize::X | awt::PosSize::Y); |
| Resize(); |
| m_xBrowserComponentWindow->setVisible(sal_True); |
| } |
| ::rptui::notifySystemWindow(pParent,this,::comphelper::mem_fun(&TaskPaneList::AddWindow)); |
| } |
| |
| //---------------------------------------------------------------------------- |
| |
| PropBrw::~PropBrw() |
| { |
| if (m_xBrowserController.is()) |
| implDetachController(); |
| |
| try |
| { |
| uno::Reference<container::XNameContainer> xName(m_xInspectorContext,uno::UNO_QUERY); |
| if ( xName.is() ) |
| { |
| const ::rtl::OUString pProps[] = { ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ContextDocument" ) ) |
| , ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DialogParentWindow" ) ) |
| , ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ActiveConnection" ) )}; |
| for (size_t i = 0; i < sizeof(pProps)/sizeof(pProps[0]); ++i) |
| xName->removeByName(pProps[i]); |
| } |
| } |
| catch(Exception&) |
| {} |
| |
| ::rptui::notifySystemWindow(this,this,::comphelper::mem_fun(&TaskPaneList::RemoveWindow)); |
| |
| DBG_DTOR( rpt_PropBrw,NULL); |
| } |
| // ----------------------------------------------------------------------------- |
| void PropBrw::setCurrentPage(const ::rtl::OUString& _sLastActivePage) |
| { |
| m_sLastActivePage = _sLastActivePage; |
| } |
| //---------------------------------------------------------------------------- |
| |
| void PropBrw::implDetachController() |
| { |
| m_sLastActivePage = getCurrentPage(); |
| implSetNewObject( ); |
| |
| if ( m_xMeAsFrame.is() ) |
| m_xMeAsFrame->setComponent( NULL, NULL ); |
| |
| if ( m_xBrowserController.is() ) |
| m_xBrowserController->attachFrame( NULL ); |
| |
| m_xMeAsFrame.clear(); |
| m_xBrowserController.clear(); |
| m_xBrowserComponentWindow.clear(); |
| } |
| //----------------------------------------------------------------------- |
| ::rtl::OUString PropBrw::getCurrentPage() const |
| { |
| ::rtl::OUString sCurrentPage; |
| try |
| { |
| if ( m_xBrowserController.is() ) |
| { |
| OSL_VERIFY( m_xBrowserController->getViewData() >>= sCurrentPage ); |
| } |
| |
| if ( !sCurrentPage.getLength() ) |
| sCurrentPage = m_sLastActivePage; |
| } |
| catch( const Exception& ) |
| { |
| OSL_ENSURE( sal_False, "PropBrw::getCurrentPage: caught an exception while retrieving the current page!" ); |
| } |
| return sCurrentPage; |
| } |
| //---------------------------------------------------------------------------- |
| |
| sal_Bool PropBrw::Close() |
| { |
| m_xLastSection.clear(); |
| // suspend the controller (it is allowed to veto) |
| if ( m_xMeAsFrame.is() ) |
| { |
| try |
| { |
| Reference< XController > xController( m_xMeAsFrame->getController() ); |
| if ( xController.is() && !xController->suspend( sal_True ) ) |
| return sal_False; |
| } |
| catch( const Exception& ) |
| { |
| OSL_ENSURE( sal_False, "FmPropBrw::Close: caught an exception while asking the controller!" ); |
| } |
| } |
| implDetachController(); |
| |
| if( IsRollUp() ) |
| RollDown(); |
| |
| m_pDesignView->getController().executeUnChecked(SID_PROPERTYBROWSER_LAST_PAGE,uno::Sequence< beans::PropertyValue>()); |
| |
| return sal_True; |
| } |
| |
| //---------------------------------------------------------------------------- |
| |
| uno::Sequence< Reference<uno::XInterface> > PropBrw::CreateCompPropSet(const SdrMarkList& _rMarkList) |
| { |
| sal_uInt32 nMarkCount = _rMarkList.GetMarkCount(); |
| ::std::vector< uno::Reference< uno::XInterface> > aSets; |
| aSets.reserve(nMarkCount); |
| |
| for(sal_uInt32 i=0;i<nMarkCount;++i) |
| { |
| SdrObject* pCurrent = _rMarkList.GetMark(i)->GetMarkedSdrObj(); |
| |
| ::std::auto_ptr<SdrObjListIter> pGroupIterator; |
| if (pCurrent->IsGroupObject()) |
| { |
| pGroupIterator.reset(new SdrObjListIter(*pCurrent->GetSubList())); |
| pCurrent = pGroupIterator->IsMore() ? pGroupIterator->Next() : NULL; |
| } |
| |
| while (pCurrent) |
| { |
| OObjectBase* pObj = dynamic_cast<OObjectBase*>(pCurrent); |
| if ( pObj ) |
| aSets.push_back(CreateComponentPair(pObj)); |
| |
| // next element |
| pCurrent = pGroupIterator.get() && pGroupIterator->IsMore() ? pGroupIterator->Next() : NULL; |
| } |
| } |
| Reference<uno::XInterface> *pSets = aSets.empty() ? NULL : &aSets[0]; |
| return uno::Sequence< Reference<uno::XInterface> >(pSets, aSets.size()); |
| } |
| //---------------------------------------------------------------------------- |
| void PropBrw::implSetNewObject( const uno::Sequence< Reference<uno::XInterface> >& _aObjects ) |
| { |
| if ( m_xBrowserController.is() ) |
| { |
| try |
| { |
| m_xBrowserController->inspect(uno::Sequence< Reference<uno::XInterface> >()); |
| m_xBrowserController->inspect(_aObjects); |
| } |
| catch( const Exception& ) |
| { |
| OSL_ENSURE( sal_False, "FmPropBrw::StateChanged: caught an exception while setting the initial page!" ); |
| } |
| |
| //Resize(); |
| } |
| SetText( GetHeadlineName(_aObjects) ); |
| } |
| |
| //---------------------------------------------------------------------------- |
| |
| ::rtl::OUString PropBrw::GetHeadlineName( const uno::Sequence< Reference<uno::XInterface> >& _aObjects ) |
| { |
| ::rtl::OUString aName; |
| if ( !_aObjects.getLength() ) |
| { |
| aName = String(ModuleRes(RID_STR_BRWTITLE_NO_PROPERTIES)); |
| } |
| else if ( _aObjects.getLength() == 1 ) // single selection |
| { |
| sal_uInt16 nResId = 0; |
| aName = String(ModuleRes(RID_STR_BRWTITLE_PROPERTIES)); |
| |
| uno::Reference< container::XNameContainer > xNameCont(_aObjects[0],uno::UNO_QUERY); |
| Reference< lang::XServiceInfo > xServiceInfo( xNameCont->getByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ReportComponent"))), UNO_QUERY ); |
| if ( xServiceInfo.is() ) |
| { |
| if ( xServiceInfo->supportsService( SERVICE_FIXEDTEXT ) ) |
| { |
| nResId = RID_STR_PROPTITLE_FIXEDTEXT; |
| } |
| else if ( xServiceInfo->supportsService( SERVICE_IMAGECONTROL ) ) |
| { |
| nResId = RID_STR_PROPTITLE_IMAGECONTROL; |
| } |
| else if ( xServiceInfo->supportsService( SERVICE_FORMATTEDFIELD ) ) |
| { |
| nResId = RID_STR_PROPTITLE_FORMATTED; |
| } |
| else if ( xServiceInfo->supportsService( SERVICE_SHAPE ) ) |
| { |
| nResId = RID_STR_PROPTITLE_SHAPE; |
| } |
| else if ( xServiceInfo->supportsService( SERVICE_REPORTDEFINITION ) ) |
| { |
| nResId = RID_STR_PROPTITLE_REPORT; |
| } |
| else if ( xServiceInfo->supportsService( SERVICE_SECTION ) ) |
| { |
| nResId = RID_STR_PROPTITLE_SECTION; |
| } |
| else if ( xServiceInfo->supportsService( SERVICE_FUNCTION ) ) |
| { |
| nResId = RID_STR_PROPTITLE_FUNCTION; |
| } |
| else if ( xServiceInfo->supportsService( SERVICE_GROUP ) ) |
| { |
| nResId = RID_STR_PROPTITLE_GROUP; |
| } |
| else if ( xServiceInfo->supportsService( SERVICE_FIXEDLINE ) ) |
| { |
| nResId = RID_STR_PROPTITLE_FIXEDLINE; |
| } |
| else |
| { |
| OSL_ENSURE(0,"Unknown service name!"); |
| nResId = RID_STR_CLASS_FORMATTEDFIELD; |
| } |
| |
| if (nResId) |
| { |
| aName += String(ModuleRes(nResId)); |
| } |
| } |
| } |
| else // multiselection |
| { |
| aName = String(ModuleRes(RID_STR_BRWTITLE_PROPERTIES)); |
| aName += String(ModuleRes(RID_STR_BRWTITLE_MULTISELECT)); |
| } |
| |
| return aName; |
| } |
| // ----------------------------------------------------------------------------- |
| uno::Reference< uno::XInterface> PropBrw::CreateComponentPair(OObjectBase* _pObj) |
| { |
| _pObj->initializeOle(); |
| return CreateComponentPair(_pObj->getAwtComponent(),_pObj->getReportComponent()); |
| } |
| //---------------------------------------------------------------------------- |
| uno::Reference< uno::XInterface> PropBrw::CreateComponentPair(const uno::Reference< uno::XInterface>& _xFormComponent |
| ,const uno::Reference< uno::XInterface>& _xReportComponent) |
| { |
| uno::Reference< container::XNameContainer > xNameCont = ::comphelper::NameContainer_createInstance(::getCppuType(static_cast<Reference<XInterface> * >(NULL))); |
| xNameCont->insertByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FormComponent")),uno::makeAny(_xFormComponent)); |
| xNameCont->insertByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ReportComponent")),uno::makeAny(_xReportComponent)); |
| xNameCont->insertByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RowSet")) |
| ,uno::makeAny(uno::Reference< uno::XInterface>(m_pDesignView->getController().getRowSet()))); |
| |
| return xNameCont.get(); |
| } |
| // ----------------------------------------------------------------------------- |
| ::Size PropBrw::getMinimumSize() const |
| { |
| ::Size aSize; |
| Reference< awt::XLayoutConstrains > xLayoutConstrains( m_xBrowserController, UNO_QUERY ); |
| if( xLayoutConstrains.is() ) |
| { |
| awt::Size aMinSize = xLayoutConstrains->getMinimumSize(); |
| aMinSize.Height += 4; |
| aMinSize.Width += 4; |
| aSize.setHeight( aMinSize.Height ); |
| aSize.setWidth( aMinSize.Width ); |
| } |
| return aSize; |
| } |
| //---------------------------------------------------------------------------- |
| void PropBrw::Resize() |
| { |
| Window::Resize(); |
| |
| Reference< awt::XLayoutConstrains > xLayoutConstrains( m_xBrowserController, UNO_QUERY ); |
| if( xLayoutConstrains.is() ) |
| { |
| ::Size aMinSize = getMinimumSize(); |
| SetMinOutputSizePixel( aMinSize ); |
| ::Size aSize = GetOutputSizePixel(); |
| sal_Bool bResize = sal_False; |
| if( aSize.Width() < aMinSize.Width() ) |
| { |
| aSize.setWidth( aMinSize.Width() ); |
| bResize = sal_True; |
| } |
| if( aSize.Height() < aMinSize.Height() ) |
| { |
| aSize.setHeight( aMinSize.Height() ); |
| bResize = sal_True; |
| } |
| if( bResize ) |
| SetOutputSizePixel( aSize ); |
| } |
| // adjust size |
| if (m_xBrowserComponentWindow.is()) |
| { |
| Size aSize = GetOutputSizePixel(); |
| m_xBrowserComponentWindow->setPosSize(0, 0, aSize.Width(), aSize.Height(), |
| awt::PosSize::WIDTH | awt::PosSize::HEIGHT); |
| } |
| } |
| //---------------------------------------------------------------------------- |
| void PropBrw::Update( OSectionView* pNewView ) |
| { |
| try |
| { |
| if ( m_pView ) |
| { |
| EndListening( *(m_pView->GetModel()) ); |
| m_pView = NULL; |
| } |
| |
| // set focus on initialization |
| if ( m_bInitialStateChange ) |
| { |
| // if we're just newly created, we want to have the focus |
| PostUserEvent( LINK( this, PropBrw, OnAsyncGetFocus ) ); |
| m_bInitialStateChange = sal_False; |
| // and additionally, we want to show the page which was active during |
| // our previous incarnation |
| if ( m_sLastActivePage.getLength() && m_xBrowserController.is() ) |
| { |
| try |
| { |
| m_xBrowserController->restoreViewData( makeAny( m_sLastActivePage ) ); |
| } |
| catch( const Exception& ) |
| { |
| OSL_ENSURE( sal_False, "FmPropBrw::StateChanged: caught an exception while setting the initial page!" ); |
| } |
| } |
| } |
| |
| if ( !pNewView ) |
| return; |
| else |
| m_pView = pNewView; |
| |
| uno::Sequence< Reference<uno::XInterface> > aMarkedObjects; |
| OViewsWindow* pViews = m_pView->getReportSection()->getSectionWindow()->getViewsWindow(); |
| const sal_uInt16 nSectionCount = pViews->getSectionCount(); |
| for (sal_uInt16 i = 0; i < nSectionCount; ++i) |
| { |
| ::boost::shared_ptr<OSectionWindow> pSectionWindow = pViews->getSectionWindow(i); |
| if ( pSectionWindow ) |
| { |
| const SdrMarkList& rMarkList = pSectionWindow->getReportSection().getSectionView().GetMarkedObjectList(); |
| aMarkedObjects = ::comphelper::concatSequences(aMarkedObjects,CreateCompPropSet( rMarkList )); |
| } |
| } |
| |
| if ( aMarkedObjects.getLength() ) // multiple selection |
| { |
| m_xLastSection.clear(); |
| implSetNewObject( aMarkedObjects ); |
| } |
| else if ( m_xLastSection != m_pView->getReportSection()->getSection() ) |
| { |
| uno::Reference< uno::XInterface> xTemp(m_pView->getReportSection()->getSection()); |
| m_xLastSection = xTemp; |
| uno::Reference< container::XNameContainer > xNameCont = ::comphelper::NameContainer_createInstance(::getCppuType(static_cast<Reference<XInterface> * >(NULL))); |
| xNameCont->insertByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ReportComponent")),uno::makeAny(xTemp)); |
| xTemp = xNameCont; |
| |
| implSetNewObject( uno::Sequence< uno::Reference< uno::XInterface> >(&xTemp,1) ); |
| } |
| |
| StartListening( *(m_pView->GetModel()) ); |
| } |
| catch ( Exception& ) |
| { |
| DBG_ERROR( "PropBrw::Update: Exception occured!" ); |
| } |
| } |
| //---------------------------------------------------------------------------- |
| void PropBrw::Update( const uno::Reference< uno::XInterface>& _xReportComponent) |
| { |
| if ( m_xLastSection != _xReportComponent ) |
| { |
| m_xLastSection = _xReportComponent; |
| try |
| { |
| if ( m_pView ) |
| { |
| EndListening( *(m_pView->GetModel()) ); |
| m_pView = NULL; |
| } // if ( m_pView ) |
| |
| uno::Reference< uno::XInterface> xTemp(CreateComponentPair(_xReportComponent,_xReportComponent)); |
| implSetNewObject( uno::Sequence< uno::Reference< uno::XInterface> >(&xTemp,1) ); |
| } |
| catch ( Exception& ) |
| { |
| DBG_ERROR( "PropBrw::Update: Exception occured!" ); |
| } |
| } |
| } |
| //----------------------------------------------------------------------- |
| IMPL_LINK( PropBrw, OnAsyncGetFocus, void*, ) |
| { |
| if (m_xBrowserComponentWindow.is()) |
| m_xBrowserComponentWindow->setFocus(); |
| return 0L; |
| } |
| //---------------------------------------------------------------------------- |
| void PropBrw::LoseFocus() |
| { |
| DockingWindow::LoseFocus(); |
| m_pDesignView->getController().InvalidateAll(); |
| } |
| //---------------------------------------------------------------------------- |
| } |