/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2008 by Sun Microsystems, Inc. * * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: ConnectionLineAccess.cxx,v $ * $Revision: 1.13 $ * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_dbaccess.hxx" #ifndef DBACCESS_CONNECTIONLINEACCESS_HXX #include "ConnectionLineAccess.hxx" #endif #ifndef DBAUI_JOINTABLEVIEW_HXX #include "JoinTableView.hxx" #endif #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_ #include #endif #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLERELATIONTYPE_HPP_ #include #endif #ifndef _TOOLKIT_AWT_VCLXWINDOW_HXX_ #include #endif #ifndef DBAUI_TABLECONNECTION_HXX #include "TableConnection.hxx" #endif #ifndef DBAUI_TABLEWINDOW_HXX #include "TableWindow.hxx" #endif #ifndef _COMPHELPER_UNO3_HXX_ #include #endif #ifndef DBAUI_JOINDESIGNVIEW_HXX #include "JoinDesignView.hxx" #endif #ifndef DBAUI_JOINCONTROLLER_HXX #include "JoinController.hxx" #endif #ifndef _COMPHELPER_SEQUENCE_HXX_ #include #endif namespace dbaui { using namespace ::com::sun::star::accessibility; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::lang; // using namespace ::com::sun::star::awt; using namespace ::com::sun::star; OConnectionLineAccess::OConnectionLineAccess(OTableConnection* _pLine) : VCLXAccessibleComponent(_pLine->GetComponentInterface().is() ? _pLine->GetWindowPeer() : NULL) ,m_pLine(_pLine) { } // ----------------------------------------------------------------------------- void SAL_CALL OConnectionLineAccess::disposing() { m_pLine = NULL; VCLXAccessibleComponent::disposing(); } // ----------------------------------------------------------------------------- Any SAL_CALL OConnectionLineAccess::queryInterface( const Type& aType ) throw (RuntimeException) { Any aRet(VCLXAccessibleComponent::queryInterface( aType )); return aRet.hasValue() ? aRet : OConnectionLineAccess_BASE::queryInterface( aType ); } // ----------------------------------------------------------------------------- Sequence< Type > SAL_CALL OConnectionLineAccess::getTypes( ) throw (RuntimeException) { return ::comphelper::concatSequences(VCLXAccessibleComponent::getTypes(),OConnectionLineAccess_BASE::getTypes()); } // ----------------------------------------------------------------------------- ::rtl::OUString SAL_CALL OConnectionLineAccess::getImplementationName() throw(RuntimeException) { return getImplementationName_Static(); } // ----------------------------------------------------------------------------- // XServiceInfo - static methods // ----------------------------------------------------------------------------- ::rtl::OUString OConnectionLineAccess::getImplementationName_Static(void) throw( RuntimeException ) { return ::rtl::OUString::createFromAscii("org.openoffice.comp.dbu.ConnectionLineAccessibility"); } // ----------------------------------------------------------------------------- // XAccessibleContext sal_Int32 SAL_CALL OConnectionLineAccess::getAccessibleChildCount( ) throw (RuntimeException) { return 0; } // ----------------------------------------------------------------------------- Reference< XAccessible > SAL_CALL OConnectionLineAccess::getAccessibleChild( sal_Int32 /*i*/ ) throw (RuntimeException) { return Reference< XAccessible >(); } // ----------------------------------------------------------------------------- sal_Int32 SAL_CALL OConnectionLineAccess::getAccessibleIndexInParent( ) throw (RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); sal_Int32 nIndex = -1; if( m_pLine ) { // search the postion of our table window in the table window map nIndex = m_pLine->GetParent()->GetTabWinMap()->size(); const ::std::vector* pVec = m_pLine->GetParent()->getTableConnections(); ::std::vector::const_iterator aIter = pVec->begin(); ::std::vector::const_iterator aEnd = pVec->end(); for (; aIter != aEnd && (*aIter) != m_pLine; ++nIndex,++aIter) ; nIndex = ( aIter != aEnd ) ? nIndex : -1; } return nIndex; } // ----------------------------------------------------------------------------- sal_Int16 SAL_CALL OConnectionLineAccess::getAccessibleRole( ) throw (RuntimeException) { return AccessibleRole::UNKNOWN; // ? or may be an AccessibleRole::WINDOW } // ----------------------------------------------------------------------------- ::rtl::OUString SAL_CALL OConnectionLineAccess::getAccessibleDescription( ) throw (RuntimeException) { static ::rtl::OUString sDescription(RTL_CONSTASCII_USTRINGPARAM("Relation")); return sDescription; } // ----------------------------------------------------------------------------- Reference< XAccessibleRelationSet > SAL_CALL OConnectionLineAccess::getAccessibleRelationSet( ) throw (RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); return this; } // ----------------------------------------------------------------------------- // XAccessibleComponent sal_Bool SAL_CALL OConnectionLineAccess::contains( const awt::Point& _aPoint ) throw (RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); Point aPoint(_aPoint.X,_aPoint.Y); return m_pLine ? m_pLine->CheckHit(aPoint) : sal_False; } // ----------------------------------------------------------------------------- Reference< XAccessible > SAL_CALL OConnectionLineAccess::getAccessibleAtPoint( const awt::Point& /*_aPoint*/ ) throw (RuntimeException) { return Reference< XAccessible >(); } // ----------------------------------------------------------------------------- awt::Rectangle SAL_CALL OConnectionLineAccess::getBounds( ) throw (RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); Rectangle aRect(m_pLine ? m_pLine->GetBoundingRect() : Rectangle()); return awt::Rectangle(aRect.getX(),aRect.getY(),aRect.getWidth(),aRect.getHeight()); } // ----------------------------------------------------------------------------- awt::Point SAL_CALL OConnectionLineAccess::getLocation( ) throw (RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); Point aPoint(m_pLine ? m_pLine->GetBoundingRect().TopLeft() : Point()); return awt::Point(aPoint.X(),aPoint.Y()); } // ----------------------------------------------------------------------------- awt::Point SAL_CALL OConnectionLineAccess::getLocationOnScreen( ) throw (RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); Point aPoint(m_pLine ? m_pLine->GetParent()->ScreenToOutputPixel(m_pLine->GetBoundingRect().TopLeft()) : Point()); return awt::Point(aPoint.X(),aPoint.Y()); } // ----------------------------------------------------------------------------- awt::Size SAL_CALL OConnectionLineAccess::getSize( ) throw (RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); Size aSize(m_pLine ? m_pLine->GetBoundingRect().GetSize() : Size()); return awt::Size(aSize.Width(),aSize.Height()); } // ----------------------------------------------------------------------------- sal_Bool SAL_CALL OConnectionLineAccess::isShowing( ) throw (RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); return m_pLine ? m_pLine->GetParent()->GetWindowRegionPixel().IsInside(m_pLine->GetBoundingRect()) : sal_False; } // ----------------------------------------------------------------------------- sal_Bool SAL_CALL OConnectionLineAccess::isVisible( ) throw (RuntimeException) { return sal_True; } // ----------------------------------------------------------------------------- sal_Bool SAL_CALL OConnectionLineAccess::isFocusTraversable( ) throw (RuntimeException) { return sal_True; } // ----------------------------------------------------------------------------- // XAccessibleRelationSet // ----------------------------------------------------------------------------- sal_Int32 SAL_CALL OConnectionLineAccess::getRelationCount( ) throw (RuntimeException) { return 1; } // ----------------------------------------------------------------------------- AccessibleRelation SAL_CALL OConnectionLineAccess::getRelation( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); if( nIndex < 0 || nIndex >= getRelationCount() ) throw IndexOutOfBoundsException(); Sequence< Reference > aSeq(m_pLine ? 2 : 0); if( m_pLine ) { aSeq[0] = m_pLine->GetSourceWin()->GetAccessible(); aSeq[1] = m_pLine->GetDestWin()->GetAccessible(); } return AccessibleRelation(AccessibleRelationType::CONTROLLED_BY,aSeq); } // ----------------------------------------------------------------------------- sal_Bool SAL_CALL OConnectionLineAccess::containsRelation( sal_Int16 aRelationType ) throw (RuntimeException) { return AccessibleRelationType::CONTROLLED_BY == aRelationType; } // ----------------------------------------------------------------------------- AccessibleRelation SAL_CALL OConnectionLineAccess::getRelationByType( sal_Int16 aRelationType ) throw (RuntimeException) { if( AccessibleRelationType::CONTROLLED_BY == aRelationType ) return getRelation(0); return AccessibleRelation(); } // ----------------------------------------------------------------------------- Reference< XAccessible > OTableConnection::CreateAccessible() { return new OConnectionLineAccess(this); } // ----------------------------------------------------------------------------- OTableConnection::~OTableConnection() { DBG_DTOR(OTableConnection,NULL); ////////////////////////////////////////////////////////////////////// // clear vector clearLineData(); } // ----------------------------------------------------------------------------- sal_Bool OConnectionLineAccess::isEditable() const { return m_pLine ? !m_pLine->GetParent()->getDesignView()->getController().isReadOnly() : sal_False; } // ----------------------------------------------------------------------------- Reference< XAccessibleContext > SAL_CALL OConnectionLineAccess::getAccessibleContext( ) throw (::com::sun::star::uno::RuntimeException) { return this; } // ----------------------------------------------------------------------------- } // -----------------------------------------------------------------------------