Files
libreoffice/extensions/source/plugin/base/plctrl.cxx
Noel Grandin ac3802da9a convert WINDOW_POSSIZE constants to scoped enum
Change-Id: Id85137ffc7309a66b04132d588d289db136117b9
2015-05-22 10:37:59 +02:00

323 lines
13 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* 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
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#include <com/sun/star/awt/XAdjustmentListener.hpp>
#include <com/sun/star/awt/XActionListener.hpp>
#include <com/sun/star/awt/XTextListener.hpp>
#include <com/sun/star/awt/XSpinListener.hpp>
#include <com/sun/star/awt/XItemListener.hpp>
#include <com/sun/star/awt/XVclContainerListener.hpp>
#include <com/sun/star/awt/PosSize.hpp>
#include <plugin/plctrl.hxx>
#include <vcl/syschild.hxx>
#include <toolkit/helper/vclunohelper.hxx>
PluginControl_Impl::PluginControl_Impl()
: _pMultiplexer( NULL )
, _nX( 0 )
, _nY( 0 )
, _nWidth( 100 )
, _nHeight( 100 )
, _nFlags( css::awt::PosSize::POSSIZE )
, _bVisible(false)
, _bInDesignMode(false)
, _bEnable(true)
, _pSysChild(NULL)
{
}
PluginControl_Impl::~PluginControl_Impl()
{
}
MRCListenerMultiplexerHelper* PluginControl_Impl::getMultiplexer()
{
if( ! _pMultiplexer )
_pMultiplexer = new MRCListenerMultiplexerHelper( this, _xPeerWindow );
return _pMultiplexer;
}
void PluginControl_Impl::addEventListener( const Reference< ::com::sun::star::lang::XEventListener > & l )
throw( RuntimeException, std::exception )
{
_aDisposeListeners.push_back( l );
}
//---- ::com::sun::star::lang::XComponent ----------------------------------------------------------------------------------
void PluginControl_Impl::removeEventListener( const Reference< ::com::sun::star::lang::XEventListener > & l )
throw( RuntimeException, std::exception )
{
_aDisposeListeners.remove( l );
}
//---- ::com::sun::star::lang::XComponent ----------------------------------------------------------------------------------
void PluginControl_Impl::dispose()
throw( RuntimeException, std::exception )
{
// send disposing events
::com::sun::star::lang::EventObject aEvt;
if( getMultiplexer() )
getMultiplexer()->disposeAndClear();
// release context
_xContext = Reference< XInterface > ();
releasePeer();
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::setPosSize( sal_Int32 nX_, sal_Int32 nY_, sal_Int32 nWidth_, sal_Int32 nHeight_, sal_Int16 nFlags )
throw( RuntimeException, std::exception )
{
_nX = nX_ >=0 ? nX_ : 0;
_nY = nY_ >=0 ? nY_ : 0;
_nWidth = nWidth_ >=0 ? nWidth_ : 0;
_nHeight = nHeight_ >=0 ? nHeight_ : 0;
_nFlags = nFlags;
if (_xPeerWindow.is())
_xPeerWindow->setPosSize( _nX, _nY, _nWidth, _nHeight, nFlags );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
::com::sun::star::awt::Rectangle PluginControl_Impl::getPosSize()
throw( RuntimeException, std::exception )
{
return _xPeerWindow->getPosSize();
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::setVisible( sal_Bool bVisible )
throw( RuntimeException, std::exception )
{
_bVisible = bVisible;
if (_xPeerWindow.is())
_xPeerWindow->setVisible( _bVisible && !_bInDesignMode );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::setEnable( sal_Bool bEnable )
throw( RuntimeException, std::exception )
{
_bEnable = bEnable;
if (_xPeerWindow.is())
_xPeerWindow->setEnable( _bEnable );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::setFocus() throw( RuntimeException, std::exception )
{
if (_xPeerWindow.is())
_xPeerWindow->setFocus();
}
void PluginControl_Impl::releasePeer()
{
if (_xPeer.is())
{
_xParentWindow->removeFocusListener( this );
_xPeerWindow->dispose();
_pSysChild = NULL;
_xPeerWindow = Reference< ::com::sun::star::awt::XWindow > ();
_xPeer = Reference< ::com::sun::star::awt::XWindowPeer > ();
getMultiplexer()->setPeer( Reference< ::com::sun::star::awt::XWindow > () );
}
}
//---- ::com::sun::star::awt::XControl ------------------------------------------------------------------------------------
void PluginControl_Impl::createPeer( const Reference< ::com::sun::star::awt::XToolkit > & /*xToolkit*/, const Reference< ::com::sun::star::awt::XWindowPeer > & xParentPeer )
throw( RuntimeException, std::exception )
{
if (_xPeer.is())
{
OSL_FAIL( "### Peer is already set!" );
return;
}
_xParentPeer = xParentPeer;
_xParentWindow = Reference< ::com::sun::star::awt::XWindow > ( xParentPeer, UNO_QUERY );
DBG_ASSERT( _xParentWindow.is(), "### no parent peer window!" );
vcl::Window* pImpl = VCLUnoHelper::GetWindow( xParentPeer );
if (pImpl)
{
_pSysChild = VclPtr<SystemChildWindow>::Create( pImpl, WB_CLIPCHILDREN );
if (pImpl->HasFocus())
_pSysChild->GrabFocus();
// get peer
_xPeer = Reference< ::com::sun::star::awt::XWindowPeer > ( _pSysChild->GetComponentInterface() );
_xPeerWindow = Reference< ::com::sun::star::awt::XWindow > ( _xPeer, UNO_QUERY );
// !_BOTH_ MUST BE VALID!
DBG_ASSERT( (_xPeer.is() && _xPeerWindow.is()), "### no peer!" );
_xParentWindow->addFocusListener( this );
_xPeerWindow->setPosSize( _nX, _nY, _nWidth, _nHeight, _nFlags );
_xPeerWindow->setEnable( _bEnable );
_xPeerWindow->setVisible( _bVisible && !_bInDesignMode );
}
else
{
OSL_FAIL( "### cannot get implementation of parent peer!" );
}
getMultiplexer()->setPeer( _xPeerWindow );
}
//---- ::com::sun::star::awt::XControl ------------------------------------------------------------------------------------
void PluginControl_Impl::setDesignMode( sal_Bool bOn )
throw( RuntimeException, std::exception )
{
_bInDesignMode = bOn;
if (_xPeerWindow.is())
_xPeerWindow->setVisible( _bVisible && !_bInDesignMode );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::addPaintListener( const Reference< ::com::sun::star::awt::XPaintListener > & l )
throw( RuntimeException, std::exception )
{
getMultiplexer()->advise( cppu::UnoType<com::sun::star::awt::XPaintListener>::get(), l );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::removePaintListener( const Reference< ::com::sun::star::awt::XPaintListener > & l )
throw( RuntimeException, std::exception )
{
getMultiplexer()->unadvise( cppu::UnoType<com::sun::star::awt::XPaintListener>::get(), l );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::addWindowListener( const Reference< ::com::sun::star::awt::XWindowListener > & l )
throw( RuntimeException, std::exception )
{
getMultiplexer()->advise( cppu::UnoType<com::sun::star::awt::XWindowListener>::get(), l );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::removeWindowListener( const Reference< ::com::sun::star::awt::XWindowListener > & l )
throw( RuntimeException, std::exception )
{
getMultiplexer()->unadvise( cppu::UnoType<com::sun::star::awt::XWindowListener>::get(), l );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::addFocusListener( const Reference< ::com::sun::star::awt::XFocusListener > & l )
throw( RuntimeException, std::exception )
{
getMultiplexer()->advise( cppu::UnoType<com::sun::star::awt::XFocusListener>::get(), l );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::removeFocusListener( const Reference< ::com::sun::star::awt::XFocusListener > & l )
throw( RuntimeException, std::exception )
{
getMultiplexer()->unadvise( cppu::UnoType<com::sun::star::awt::XFocusListener>::get(), l );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::addKeyListener( const Reference< ::com::sun::star::awt::XKeyListener > & l )
throw( RuntimeException, std::exception )
{
getMultiplexer()->advise( cppu::UnoType<com::sun::star::awt::XKeyListener>::get(), l );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::removeKeyListener( const Reference< ::com::sun::star::awt::XKeyListener > & l )
throw( RuntimeException, std::exception )
{
getMultiplexer()->unadvise( cppu::UnoType<com::sun::star::awt::XKeyListener>::get(), l );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::addMouseListener( const Reference< ::com::sun::star::awt::XMouseListener > & l )
throw( RuntimeException, std::exception )
{
getMultiplexer()->advise( cppu::UnoType<com::sun::star::awt::XMouseListener>::get(), l );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::removeMouseListener( const Reference< ::com::sun::star::awt::XMouseListener > & l )
throw( RuntimeException, std::exception )
{
getMultiplexer()->unadvise( cppu::UnoType<com::sun::star::awt::XMouseListener>::get(), l );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::addMouseMotionListener( const Reference< ::com::sun::star::awt::XMouseMotionListener > & l )
throw( RuntimeException, std::exception )
{
getMultiplexer()->advise( cppu::UnoType<com::sun::star::awt::XMouseMotionListener>::get(), l );
}
//---- ::com::sun::star::awt::XWindow -------------------------------------------------------------------------------------
void PluginControl_Impl::removeMouseMotionListener( const Reference< ::com::sun::star::awt::XMouseMotionListener > & l )
throw( RuntimeException, std::exception )
{
getMultiplexer()->unadvise( cppu::UnoType<com::sun::star::awt::XMouseMotionListener>::get(), l );
}
//---- ::com::sun::star::awt::XView ---------------------------------------------------------------------------------------
void PluginControl_Impl::draw( sal_Int32 /*x*/, sal_Int32 /*y*/ )
throw( RuntimeException, std::exception )
{
// has to be done by further implementation of control
}
//---- ::com::sun::star::awt::XView ---------------------------------------------------------------------------------------
void PluginControl_Impl::setZoom( float /*ZoomX*/, float /*ZoomY*/ )
throw( RuntimeException, std::exception )
{
// has to be done by further implementation of control
}
//---- ::com::sun::star::lang::XEventListener ------------------------------------------------------------------------------
void PluginControl_Impl::disposing( const ::com::sun::star::lang::EventObject & /*rSource*/ )
throw( RuntimeException, std::exception )
{
}
//---- ::com::sun::star::awt::XFocusListener ------------------------------------------------------------------------------
void PluginControl_Impl::focusGained( const ::com::sun::star::awt::FocusEvent & /*rEvt*/ )
throw( RuntimeException, std::exception )
{
if (_xPeerWindow.is())
_xPeerWindow->setFocus();
}
//---- ::com::sun::star::awt::XFocusListener ------------------------------------------------------------------------------
void PluginControl_Impl::focusLost( const ::com::sun::star::awt::FocusEvent & /*rEvt*/ )
throw( RuntimeException, std::exception )
{
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */