summaryrefslogtreecommitdiff
path: root/toolkit/source/awt/vclxwindow.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/source/awt/vclxwindow.cxx')
-rw-r--r--toolkit/source/awt/vclxwindow.cxx2628
1 files changed, 0 insertions, 2628 deletions
diff --git a/toolkit/source/awt/vclxwindow.cxx b/toolkit/source/awt/vclxwindow.cxx
deleted file mode 100644
index 10ecfcf678..0000000000
--- a/toolkit/source/awt/vclxwindow.cxx
+++ /dev/null
@@ -1,2628 +0,0 @@
-/* -*- 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_toolkit.hxx"
-
-#include <com/sun/star/awt/WindowEvent.hpp>
-#include <com/sun/star/awt/KeyEvent.hpp>
-#include <com/sun/star/awt/KeyModifier.hpp>
-#include <com/sun/star/awt/MouseEvent.hpp>
-#include <com/sun/star/awt/MouseButton.hpp>
-#include <com/sun/star/awt/MouseWheelBehavior.hpp>
-#include <com/sun/star/awt/XTopWindow.hpp>
-#include <com/sun/star/awt/Style.hpp>
-#include <com/sun/star/accessibility/AccessibleRole.hpp>
-#include <com/sun/star/awt/DockingEvent.hpp>
-#include <com/sun/star/awt/EndDockingEvent.hpp>
-#include <com/sun/star/awt/EndPopupModeEvent.hpp>
-#include <com/sun/star/awt/XWindowListener2.hpp>
-#include <com/sun/star/style/VerticalAlignment.hpp>
-#include <com/sun/star/lang/DisposedException.hpp>
-#include <com/sun/star/text/WritingMode2.hpp>
-#include <toolkit/awt/vclxwindow.hxx>
-#include <toolkit/awt/vclxpointer.hxx>
-#include <toolkit/awt/vclxwindows.hxx>
-#include <toolkit/helper/macros.hxx>
-#include <toolkit/helper/vclunohelper.hxx>
-#include <toolkit/helper/convert.hxx>
-#include <toolkit/helper/macros.hxx>
-#include <toolkit/helper/property.hxx>
-#include <toolkit/helper/accessibilityclient.hxx>
-#include <cppuhelper/typeprovider.hxx>
-#include <rtl/memory.h>
-#include <rtl/uuid.h>
-#include <rtl/ustrbuf.hxx>
-#include <vcl/svapp.hxx>
-#include <vcl/window.hxx>
-#include <tools/color.hxx>
-#include <vcl/dockwin.hxx>
-#include <vcl/pdfextoutdevdata.hxx>
-#include <vcl/tabpage.hxx>
-#include <vcl/button.hxx>
-#include <comphelper/asyncnotification.hxx>
-#include <comphelper/flagguard.hxx>
-#include "stylesettings.hxx"
-#include <tools/urlobj.hxx>
-#include <toolkit/helper/unopropertyarrayhelper.hxx>
-
-#include <boost/bind.hpp>
-
-using namespace ::com::sun::star;
-
-using ::com::sun::star::uno::Reference;
-using ::com::sun::star::uno::UNO_QUERY;
-using ::com::sun::star::uno::RuntimeException;
-using ::com::sun::star::lang::EventObject;
-using ::com::sun::star::awt::XWindowListener2;
-using ::com::sun::star::awt::XDockableWindowListener;
-using ::com::sun::star::awt::XDevice;
-using ::com::sun::star::awt::XStyleSettings;
-using ::com::sun::star::lang::DisposedException;
-using ::com::sun::star::style::VerticalAlignment;
-using ::com::sun::star::style::VerticalAlignment_TOP;
-using ::com::sun::star::style::VerticalAlignment_MIDDLE;
-using ::com::sun::star::style::VerticalAlignment_BOTTOM;
-using ::com::sun::star::style::VerticalAlignment_MAKE_FIXED_SIZE;
-
-namespace WritingMode2 = ::com::sun::star::text::WritingMode2;
-namespace MouseWheelBehavior = ::com::sun::star::awt::MouseWheelBehavior;
-
-//====================================================================
-//= VCLXWindowImpl
-//====================================================================
-class SAL_DLLPRIVATE VCLXWindowImpl
-{
-private:
- typedef ::std::vector< VCLXWindow::Callback > CallbackArray;
-
-private:
- VCLXWindow& mrAntiImpl;
- ::toolkit::AccessibilityClient maAccFactory;
- bool mbDisposed;
- bool mbDrawingOntoParent; // no bit mask, is passed around by reference
- sal_Bool mbEnableVisible;
- sal_Bool mbDirectVisible;
-
- ::osl::Mutex maListenerContainerMutex;
- ::cppu::OInterfaceContainerHelper maWindow2Listeners;
- ::cppu::OInterfaceContainerHelper maDockableWindowListeners;
- EventListenerMultiplexer maEventListeners;
- FocusListenerMultiplexer maFocusListeners;
- WindowListenerMultiplexer maWindowListeners;
- KeyListenerMultiplexer maKeyListeners;
- MouseListenerMultiplexer maMouseListeners;
- MouseMotionListenerMultiplexer maMouseMotionListeners;
- PaintListenerMultiplexer maPaintListeners;
- VclContainerListenerMultiplexer maContainerListeners;
- TopWindowListenerMultiplexer maTopWindowListeners;
-
- CallbackArray maCallbackEvents;
- sal_uLong mnCallbackEventId;
-
-public:
- bool mbDisposing : 1;
- bool mbDesignMode : 1;
- bool mbSynthesizingVCLEvent : 1;
- bool mbWithDefaultProps : 1;
-
- sal_uLong mnListenerLockLevel;
- sal_Int16 mnWritingMode;
- sal_Int16 mnContextWritingMode;
-
- UnoPropertyArrayHelper* mpPropHelper;
-
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPointer >
- mxPointer;
- ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext >
- mxAccessibleContext;
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics >
- mxViewGraphics;
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XStyleSettings >
- mxWindowStyleSettings;
-
-public:
- bool& getDrawingOntoParent_ref() { return mbDrawingOntoParent; }
-
-public:
- /** ctor
- @param _pAntiImpl
- the <type>VCLXWindow</type> instance which the object belongs to. Must
- live longer then the object just being constructed.
- */
- VCLXWindowImpl( VCLXWindow& _rAntiImpl, bool _bWithDefaultProps );
-
- /** synchronously mbEnableVisible
- */
- void setEnableVisible( sal_Bool bEnableVisible ) { mbEnableVisible = bEnableVisible; }
- sal_Bool isEnableVisible() { return mbEnableVisible; }
- /** synchronously mbDirectVisible;
- */
- void setDirectVisible( sal_Bool bDirectVisible ) { mbDirectVisible = bDirectVisible; }
- sal_Bool isDirectVisible() { return mbDirectVisible; }
-
- /** impl-version of VCLXWindow::ImplExecuteAsyncWithoutSolarLock
- */
- void callBackAsync( const VCLXWindow::Callback& i_callback );
-
- /** notifies the object that its VCLXWindow is being disposed
- */
- void disposing();
-
- inline ::toolkit::AccessibilityClient& getAccessibleFactory()
- {
- return maAccFactory;
- }
-
- Reference< XStyleSettings > getStyleSettings();
-
- /** returns the container of registered XWindowListener2 listeners
- */
- inline ::cppu::OInterfaceContainerHelper& getWindow2Listeners() { return maWindow2Listeners; }
- inline ::cppu::OInterfaceContainerHelper& getDockableWindowListeners(){ return maDockableWindowListeners; }
- inline EventListenerMultiplexer& getEventListeners() { return maEventListeners; }
- inline FocusListenerMultiplexer& getFocusListeners() { return maFocusListeners; }
- inline WindowListenerMultiplexer& getWindowListeners() { return maWindowListeners; }
- inline KeyListenerMultiplexer& getKeyListeners() { return maKeyListeners; }
- inline MouseListenerMultiplexer& getMouseListeners() { return maMouseListeners; }
- inline MouseMotionListenerMultiplexer& getMouseMotionListeners() { return maMouseMotionListeners; }
- inline PaintListenerMultiplexer& getPaintListeners() { return maPaintListeners; }
- inline VclContainerListenerMultiplexer& getContainerListeners() { return maContainerListeners; }
- inline TopWindowListenerMultiplexer& getTopWindowListeners() { return maTopWindowListeners; }
-
- virtual ~VCLXWindowImpl();
-
-protected:
- virtual void SAL_CALL acquire();
- virtual void SAL_CALL release();
-
-private:
- DECL_LINK( OnProcessCallbacks, void* );
-
-private:
- VCLXWindowImpl(); // never implemented
- VCLXWindowImpl( const VCLXWindowImpl& ); // never implemented
- VCLXWindowImpl& operator=( const VCLXWindowImpl& ); // never implemented
-};
-
-//--------------------------------------------------------------------
-VCLXWindowImpl::VCLXWindowImpl( VCLXWindow& _rAntiImpl, bool _bWithDefaultProps )
- :mrAntiImpl( _rAntiImpl )
- ,mbDisposed( false )
- ,mbDrawingOntoParent( false )
- ,mbEnableVisible(sal_True)
- ,mbDirectVisible(sal_True)
- ,maListenerContainerMutex( )
- ,maWindow2Listeners( maListenerContainerMutex )
- ,maDockableWindowListeners( maListenerContainerMutex )
- ,maEventListeners( _rAntiImpl )
- ,maFocusListeners( _rAntiImpl )
- ,maWindowListeners( _rAntiImpl )
- ,maKeyListeners( _rAntiImpl )
- ,maMouseListeners( _rAntiImpl )
- ,maMouseMotionListeners( _rAntiImpl )
- ,maPaintListeners( _rAntiImpl )
- ,maContainerListeners( _rAntiImpl )
- ,maTopWindowListeners( _rAntiImpl )
- ,mnCallbackEventId( 0 )
- ,mbDisposing( false )
- ,mbDesignMode( false )
- ,mbSynthesizingVCLEvent( false )
- ,mbWithDefaultProps( _bWithDefaultProps )
- ,mnListenerLockLevel( 0 )
- ,mnWritingMode( WritingMode2::CONTEXT )
- ,mnContextWritingMode( WritingMode2::CONTEXT )
- ,mpPropHelper( NULL )
-{
-}
-
-VCLXWindowImpl::~VCLXWindowImpl()
-{
- delete mpPropHelper;
-}
-
-//--------------------------------------------------------------------
-void VCLXWindowImpl::disposing()
-{
- SolarMutexGuard aGuard;
- if ( mnCallbackEventId )
- Application::RemoveUserEvent( mnCallbackEventId );
- mnCallbackEventId = 0;
-
- mbDisposed= true;
-
- ::com::sun::star::lang::EventObject aEvent;
- aEvent.Source = mrAntiImpl;
-
- maDockableWindowListeners.disposeAndClear( aEvent );
- maEventListeners.disposeAndClear( aEvent );
- maFocusListeners.disposeAndClear( aEvent );
- maWindowListeners.disposeAndClear( aEvent );
- maKeyListeners.disposeAndClear( aEvent );
- maMouseListeners.disposeAndClear( aEvent );
- maMouseMotionListeners.disposeAndClear( aEvent );
- maPaintListeners.disposeAndClear( aEvent );
- maContainerListeners.disposeAndClear( aEvent );
- maTopWindowListeners.disposeAndClear( aEvent );
-
- ::toolkit::WindowStyleSettings* pStyleSettings = static_cast< ::toolkit::WindowStyleSettings* >( mxWindowStyleSettings.get() );
- if ( pStyleSettings != NULL )
- pStyleSettings->dispose();
- mxWindowStyleSettings.clear();
-}
-
-//--------------------------------------------------------------------
-void VCLXWindowImpl::callBackAsync( const VCLXWindow::Callback& i_callback )
-{
- DBG_TESTSOLARMUTEX();
- maCallbackEvents.push_back( i_callback );
- if ( !mnCallbackEventId )
- {
- // ensure our VCLXWindow is not destroyed while the event is underway
- mrAntiImpl.acquire();
- mnCallbackEventId = Application::PostUserEvent( LINK( this, VCLXWindowImpl, OnProcessCallbacks ) );
- }
-}
-
-//----------------------------------------------------------------------------------------------------------------------
-IMPL_LINK( VCLXWindowImpl, OnProcessCallbacks, void*, EMPTYARG )
-{
- const Reference< uno::XInterface > xKeepAlive( mrAntiImpl );
-
- // work on a copy of the callback array
- CallbackArray aCallbacksCopy;
- {
- SolarMutexGuard aGuard;
- aCallbacksCopy = maCallbackEvents;
- maCallbackEvents.clear();
-
- // we acquired our VCLXWindow once before posting the event, release this one ref now
- mrAntiImpl.release();
-
- if ( !mnCallbackEventId )
- // we were disposed while waiting for the mutex to lock
- return 1L;
-
- mnCallbackEventId = 0;
- }
-
- {
- SolarMutexReleaser aReleaseSolar( SolarMutexReleaser::RescheduleDuringAcquire );
- for ( CallbackArray::const_iterator loop = aCallbacksCopy.begin();
- loop != aCallbacksCopy.end();
- ++loop
- )
- {
- (*loop)();
- }
- }
-
- return 0L;
-}
-
-//--------------------------------------------------------------------
-void SAL_CALL VCLXWindowImpl::acquire()
-{
- mrAntiImpl.acquire();
-}
-
-//--------------------------------------------------------------------
-void SAL_CALL VCLXWindowImpl::release()
-{
- mrAntiImpl.release();
-}
-
-//--------------------------------------------------------------------
-Reference< XStyleSettings > VCLXWindowImpl::getStyleSettings()
-{
- SolarMutexGuard aGuard;
- if ( mbDisposed )
- throw DisposedException( ::rtl::OUString(), mrAntiImpl );
- if ( !mxWindowStyleSettings.is() )
- mxWindowStyleSettings = new ::toolkit::WindowStyleSettings( maListenerContainerMutex, mrAntiImpl );
- return mxWindowStyleSettings;
-}
-
-//====================================================================
-//====================================================================
-
-// Mit Out-Parameter besser als Rueckgabewert, wegen Ref-Objekt...
-
-void ImplInitWindowEvent( ::com::sun::star::awt::WindowEvent& rEvent, Window* pWindow )
-{
- Point aPos = pWindow->GetPosPixel();
- Size aSz = pWindow->GetSizePixel();
-
- rEvent.X = aPos.X();
- rEvent.Y = aPos.Y();
-
- rEvent.Width = aSz.Width();
- rEvent.Height = aSz.Height();
-
- pWindow->GetBorder( rEvent.LeftInset, rEvent.TopInset, rEvent.RightInset, rEvent.BottomInset );
-}
-
-// ----------------------------------------------------
-// class VCLXWindow
-// ----------------------------------------------------
-
-DBG_NAME(VCLXWindow);
-
-VCLXWindow::VCLXWindow( bool _bWithDefaultProps )
- :mpImpl( NULL )
-{
- DBG_CTOR( VCLXWindow, 0 );
-
- mpImpl = new VCLXWindowImpl( *this, _bWithDefaultProps );
-}
-
-VCLXWindow::~VCLXWindow()
-{
- DBG_DTOR( VCLXWindow, 0 );
-
- delete mpImpl;
-
- if ( GetWindow() )
- {
- GetWindow()->RemoveEventListener( LINK( this, VCLXWindow, WindowEventListener ) );
- GetWindow()->SetWindowPeer( NULL, NULL );
- GetWindow()->SetAccessible( NULL );
- }
-}
-
-//----------------------------------------------------------------------------------------------------------------------
-void VCLXWindow::ImplExecuteAsyncWithoutSolarLock( const Callback& i_callback )
-{
- mpImpl->callBackAsync( i_callback );
-}
-
-//----------------------------------------------------------------------------------------------------------------------
-::toolkit::IAccessibleFactory& VCLXWindow::getAccessibleFactory()
-{
- return mpImpl->getAccessibleFactory().getFactory();
-}
-
-void VCLXWindow::SetWindow( Window* pWindow )
-{
- if ( GetWindow() )
- {
- GetWindow()->RemoveEventListener( LINK( this, VCLXWindow, WindowEventListener ) );
-// GetWindow()->DbgAssertNoEventListeners();
- }
-
- SetOutputDevice( pWindow );
-
- if ( GetWindow() )
- {
- GetWindow()->AddEventListener( LINK( this, VCLXWindow, WindowEventListener ) );
- sal_Bool bDirectVisible = pWindow ? pWindow->IsVisible() : false;
- mpImpl->setDirectVisible( bDirectVisible );
- }
-}
-
-void VCLXWindow::suspendVclEventListening( )
-{
- ++mpImpl->mnListenerLockLevel;
-}
-
-void VCLXWindow::resumeVclEventListening( )
-{
- DBG_ASSERT( mpImpl->mnListenerLockLevel, "VCLXWindow::resumeVclEventListening: not suspended!" );
- --mpImpl->mnListenerLockLevel;
-}
-
-void VCLXWindow::notifyWindowRemoved( Window& _rWindow )
-{
- if ( mpImpl->getContainerListeners().getLength() )
- {
- awt::VclContainerEvent aEvent;
- aEvent.Source = *this;
- aEvent.Child = static_cast< XWindow* >( _rWindow.GetWindowPeer() );
- mpImpl->getContainerListeners().windowRemoved( aEvent );
- }
-}
-
-IMPL_LINK( VCLXWindow, WindowEventListener, VclSimpleEvent*, pEvent )
-{
- if ( mpImpl->mnListenerLockLevel )
- return 0L;
-
- DBG_ASSERT( pEvent && pEvent->ISA( VclWindowEvent ), "Unknown WindowEvent!" );
- if ( pEvent && pEvent->ISA( VclWindowEvent ) )
- {
- DBG_ASSERT( ((VclWindowEvent*)pEvent)->GetWindow() && GetWindow(), "Window???" );
- ProcessWindowEvent( *(VclWindowEvent*)pEvent );
- }
- return 0;
-}
-
-namespace
-{
- struct CallWindow2Listener
- {
- CallWindow2Listener( ::cppu::OInterfaceContainerHelper& i_rWindow2Listeners, const bool i_bEnabled, const EventObject& i_rEvent )
- :m_rWindow2Listeners( i_rWindow2Listeners )
- ,m_bEnabled( i_bEnabled )
- ,m_aEvent( i_rEvent )
- {
- }
-
- void operator()()
- {
- m_rWindow2Listeners.notifyEach( m_bEnabled ? &XWindowListener2::windowEnabled : &XWindowListener2::windowDisabled, m_aEvent );
- }
-
- ::cppu::OInterfaceContainerHelper& m_rWindow2Listeners;
- const bool m_bEnabled;
- const EventObject m_aEvent;
- };
-}
-
-void VCLXWindow::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
-{
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xThis( (::cppu::OWeakObject*)this );
-
- switch ( rVclWindowEvent.GetId() )
- {
- case VCLEVENT_WINDOW_ENABLED:
- case VCLEVENT_WINDOW_DISABLED:
- {
- Callback aCallback = CallWindow2Listener(
- mpImpl->getWindow2Listeners(),
- ( VCLEVENT_WINDOW_ENABLED == rVclWindowEvent.GetId() ),
- EventObject( *this )
- );
- ImplExecuteAsyncWithoutSolarLock( aCallback );
- }
- break;
-
- case VCLEVENT_WINDOW_PAINT:
- {
- if ( mpImpl->getPaintListeners().getLength() )
- {
- ::com::sun::star::awt::PaintEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- aEvent.UpdateRect = AWTRectangle( *(Rectangle*)rVclWindowEvent.GetData() );
- aEvent.Count = 0;
- mpImpl->getPaintListeners().windowPaint( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_MOVE:
- {
- if ( mpImpl->getWindowListeners().getLength() )
- {
- ::com::sun::star::awt::WindowEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- ImplInitWindowEvent( aEvent, rVclWindowEvent.GetWindow() );
- mpImpl->getWindowListeners().windowMoved( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_RESIZE:
- {
- if ( mpImpl->getWindowListeners().getLength() )
- {
- ::com::sun::star::awt::WindowEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- ImplInitWindowEvent( aEvent, rVclWindowEvent.GetWindow() );
- mpImpl->getWindowListeners().windowResized( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_SHOW:
- {
- if ( mpImpl->getWindowListeners().getLength() )
- {
- ::com::sun::star::awt::WindowEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- ImplInitWindowEvent( aEvent, rVclWindowEvent.GetWindow() );
- mpImpl->getWindowListeners().windowShown( aEvent );
- }
-
- // For TopWindows this means opened...
- if ( mpImpl->getTopWindowListeners().getLength() )
- {
- ::com::sun::star::lang::EventObject aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- mpImpl->getTopWindowListeners().windowOpened( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_HIDE:
- {
- if ( mpImpl->getWindowListeners().getLength() )
- {
- ::com::sun::star::awt::WindowEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- ImplInitWindowEvent( aEvent, rVclWindowEvent.GetWindow() );
- mpImpl->getWindowListeners().windowHidden( aEvent );
- }
-
- // For TopWindows this means closed...
- if ( mpImpl->getTopWindowListeners().getLength() )
- {
- ::com::sun::star::lang::EventObject aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- mpImpl->getTopWindowListeners().windowClosed( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_ACTIVATE:
- {
- if ( mpImpl->getTopWindowListeners().getLength() )
- {
- ::com::sun::star::lang::EventObject aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- mpImpl->getTopWindowListeners().windowActivated( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_DEACTIVATE:
- {
- if ( mpImpl->getTopWindowListeners().getLength() )
- {
- ::com::sun::star::lang::EventObject aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- mpImpl->getTopWindowListeners().windowDeactivated( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_CLOSE:
- {
- if ( mpImpl->getDockableWindowListeners().getLength() )
- {
- ::com::sun::star::lang::EventObject aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- mpImpl->getDockableWindowListeners().notifyEach( &XDockableWindowListener::closed, aEvent );
- }
- if ( mpImpl->getTopWindowListeners().getLength() )
- {
- ::com::sun::star::lang::EventObject aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- mpImpl->getTopWindowListeners().windowClosing( aEvent );
- }
- }
- break;
- case VCLEVENT_CONTROL_GETFOCUS:
- case VCLEVENT_WINDOW_GETFOCUS:
- {
- if ( ( rVclWindowEvent.GetWindow()->IsCompoundControl()
- && rVclWindowEvent.GetId() == VCLEVENT_CONTROL_GETFOCUS
- )
- || ( !rVclWindowEvent.GetWindow()->IsCompoundControl()
- && rVclWindowEvent.GetId() == VCLEVENT_WINDOW_GETFOCUS
- )
- )
- {
- if ( mpImpl->getFocusListeners().getLength() )
- {
- ::com::sun::star::awt::FocusEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- aEvent.FocusFlags = rVclWindowEvent.GetWindow()->GetGetFocusFlags();
- aEvent.Temporary = sal_False;
- mpImpl->getFocusListeners().focusGained( aEvent );
- }
- }
- }
- break;
- case VCLEVENT_CONTROL_LOSEFOCUS:
- case VCLEVENT_WINDOW_LOSEFOCUS:
- {
- if ( ( rVclWindowEvent.GetWindow()->IsCompoundControl()
- && rVclWindowEvent.GetId() == VCLEVENT_CONTROL_LOSEFOCUS
- )
- || ( !rVclWindowEvent.GetWindow()->IsCompoundControl()
- && rVclWindowEvent.GetId() == VCLEVENT_WINDOW_LOSEFOCUS
- )
- )
- {
- if ( mpImpl->getFocusListeners().getLength() )
- {
- ::com::sun::star::awt::FocusEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- aEvent.FocusFlags = rVclWindowEvent.GetWindow()->GetGetFocusFlags();
- aEvent.Temporary = sal_False;
-
- Window* pNext = Application::GetFocusWindow();
- if ( pNext )
- {
- // Bei zusammengesetzten Controls interessiert sich keiner fuer das Innenleben:
- Window* pNextC = pNext;
- while ( pNextC && !pNextC->IsCompoundControl() )
- pNextC = pNextC->GetParent();
- if ( pNextC )
- pNext = pNextC;
-
- pNext->GetComponentInterface( sal_True );
- aEvent.NextFocus = (::cppu::OWeakObject*)pNext->GetWindowPeer();
- }
- mpImpl->getFocusListeners().focusLost( aEvent );
- }
- }
- }
- break;
- case VCLEVENT_WINDOW_MINIMIZE:
- {
- if ( mpImpl->getTopWindowListeners().getLength() )
- {
- ::com::sun::star::lang::EventObject aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- mpImpl->getTopWindowListeners().windowMinimized( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_NORMALIZE:
- {
- if ( mpImpl->getTopWindowListeners().getLength() )
- {
- ::com::sun::star::lang::EventObject aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- mpImpl->getTopWindowListeners().windowNormalized( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_KEYINPUT:
- {
- if ( mpImpl->getKeyListeners().getLength() )
- {
- ::com::sun::star::awt::KeyEvent aEvent( VCLUnoHelper::createKeyEvent(
- *(KeyEvent*)rVclWindowEvent.GetData(), *this
- ) );
- mpImpl->getKeyListeners().keyPressed( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_KEYUP:
- {
- if ( mpImpl->getKeyListeners().getLength() )
- {
- ::com::sun::star::awt::KeyEvent aEvent( VCLUnoHelper::createKeyEvent(
- *(KeyEvent*)rVclWindowEvent.GetData(), *this
- ) );
- mpImpl->getKeyListeners().keyReleased( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_COMMAND:
- {
- CommandEvent* pCmdEvt = (CommandEvent*)rVclWindowEvent.GetData();
- if ( mpImpl->getMouseListeners().getLength() && ( pCmdEvt->GetCommand() == COMMAND_CONTEXTMENU ) )
- {
- // COMMAND_CONTEXTMENU als mousePressed mit PopupTrigger = sal_True versenden...
- Point aWhere = static_cast< CommandEvent* >( rVclWindowEvent.GetData() )->GetMousePosPixel();
- if ( !pCmdEvt->IsMouseEvent() )
- { // for keyboard events, we set the coordinates to -1,-1. This is a slight HACK, but the current API
- // handles a context menu command as special case of a mouse event, which is simply wrong.
- // Without extending the API, we would not have another chance to notify listeners of a
- // keyboard-triggered context menu request
- aWhere = Point( -1, -1 );
- }
-
- MouseEvent aMEvt( aWhere, 1, MOUSE_SIMPLECLICK, MOUSE_LEFT, 0 );
- awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( aMEvt, *this ) );
- aEvent.PopupTrigger = sal_True;
-
- Callback aCallback = ::boost::bind(
- &MouseListenerMultiplexer::mousePressed,
- &mpImpl->getMouseListeners(),
- aEvent
- );
- ImplExecuteAsyncWithoutSolarLock( aCallback );
- }
- }
- break;
- case VCLEVENT_WINDOW_MOUSEMOVE:
- {
- MouseEvent* pMouseEvt = (MouseEvent*)rVclWindowEvent.GetData();
- if ( mpImpl->getMouseListeners().getLength() && ( pMouseEvt->IsEnterWindow() || pMouseEvt->IsLeaveWindow() ) )
- {
- awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *pMouseEvt, *this ) );
-
- Callback aCallback = ::boost::bind(
- pMouseEvt->IsEnterWindow() ? &MouseListenerMultiplexer::mouseEntered : &MouseListenerMultiplexer::mouseExited,
- &mpImpl->getMouseListeners(),
- aEvent
- );
- ImplExecuteAsyncWithoutSolarLock( aCallback );
- }
-
- if ( mpImpl->getMouseMotionListeners().getLength() && !pMouseEvt->IsEnterWindow() && !pMouseEvt->IsLeaveWindow() )
- {
- awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *pMouseEvt, *this ) );
- aEvent.ClickCount = 0; // #92138#
- if ( pMouseEvt->GetMode() & MOUSE_SIMPLEMOVE )
- mpImpl->getMouseMotionListeners().mouseMoved( aEvent );
- else
- mpImpl->getMouseMotionListeners().mouseDragged( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_MOUSEBUTTONDOWN:
- {
- if ( mpImpl->getMouseListeners().getLength() )
- {
- awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *(MouseEvent*)rVclWindowEvent.GetData(), *this ) );
- Callback aCallback = ::boost::bind(
- &MouseListenerMultiplexer::mousePressed,
- &mpImpl->getMouseListeners(),
- aEvent
- );
- ImplExecuteAsyncWithoutSolarLock( aCallback );
- }
- }
- break;
- case VCLEVENT_WINDOW_MOUSEBUTTONUP:
- {
- if ( mpImpl->getMouseListeners().getLength() )
- {
- awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *(MouseEvent*)rVclWindowEvent.GetData(), *this ) );
- Callback aCallback = ::boost::bind(
- &MouseListenerMultiplexer::mouseReleased,
- &mpImpl->getMouseListeners(),
- aEvent
- );
- ImplExecuteAsyncWithoutSolarLock( aCallback );
- }
- }
- break;
- case VCLEVENT_WINDOW_STARTDOCKING:
- {
- if ( mpImpl->getDockableWindowListeners().getLength() )
- {
- DockingData *pData = (DockingData*)rVclWindowEvent.GetData();
-
- if( pData )
- {
- ::com::sun::star::awt::DockingEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- aEvent.TrackingRectangle = AWTRectangle( pData->maTrackRect );
- aEvent.MousePos.X = pData->maMousePos.X();
- aEvent.MousePos.Y = pData->maMousePos.Y();
- aEvent.bLiveMode = pData->mbLivemode;
- aEvent.bInteractive = pData->mbInteractive;
-
- mpImpl->getDockableWindowListeners().notifyEach( &XDockableWindowListener::startDocking, aEvent );
- }
- }
- }
- break;
- case VCLEVENT_WINDOW_DOCKING:
- {
- if ( mpImpl->getDockableWindowListeners().getLength() )
- {
- DockingData *pData = (DockingData*)rVclWindowEvent.GetData();
-
- if( pData )
- {
- ::com::sun::star::awt::DockingEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- aEvent.TrackingRectangle = AWTRectangle( pData->maTrackRect );
- aEvent.MousePos.X = pData->maMousePos.X();
- aEvent.MousePos.Y = pData->maMousePos.Y();
- aEvent.bLiveMode = pData->mbLivemode;
- aEvent.bInteractive = pData->mbInteractive;
-
- Reference< XDockableWindowListener > xFirstListener;
- ::cppu::OInterfaceIteratorHelper aIter( mpImpl->getDockableWindowListeners() );
- while ( aIter.hasMoreElements() && !xFirstListener.is() )
- {
- xFirstListener.set( aIter.next(), UNO_QUERY );
- }
-
- ::com::sun::star::awt::DockingData aDockingData =
- xFirstListener->docking( aEvent );
- pData->maTrackRect = VCLRectangle( aDockingData.TrackingRectangle );
- pData->mbFloating = aDockingData.bFloating;
- }
- }
- }
- break;
- case VCLEVENT_WINDOW_ENDDOCKING:
- {
- if ( mpImpl->getDockableWindowListeners().getLength() )
- {
- EndDockingData *pData = (EndDockingData*)rVclWindowEvent.GetData();
-
- if( pData )
- {
- ::com::sun::star::awt::EndDockingEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- aEvent.WindowRectangle = AWTRectangle( pData->maWindowRect );
- aEvent.bFloating = pData->mbFloating;
- aEvent.bCancelled = pData->mbCancelled;
- mpImpl->getDockableWindowListeners().notifyEach( &XDockableWindowListener::endDocking, aEvent );
- }
- }
- }
- break;
- case VCLEVENT_WINDOW_PREPARETOGGLEFLOATING:
- {
- if ( mpImpl->getDockableWindowListeners().getLength() )
- {
- sal_Bool *p_bFloating = (sal_Bool*)rVclWindowEvent.GetData();
-
- ::com::sun::star::lang::EventObject aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
-
- Reference< XDockableWindowListener > xFirstListener;
- ::cppu::OInterfaceIteratorHelper aIter( mpImpl->getDockableWindowListeners() );
- while ( aIter.hasMoreElements() && !xFirstListener.is() )
- {
- xFirstListener.set( aIter.next(), UNO_QUERY );
- }
-
- *p_bFloating = xFirstListener->prepareToggleFloatingMode( aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_TOGGLEFLOATING:
- {
- if ( mpImpl->getDockableWindowListeners().getLength() )
- {
- ::com::sun::star::lang::EventObject aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- mpImpl->getDockableWindowListeners().notifyEach( &XDockableWindowListener::toggleFloatingMode, aEvent );
- }
- }
- break;
- case VCLEVENT_WINDOW_ENDPOPUPMODE:
- {
- if ( mpImpl->getDockableWindowListeners().getLength() )
- {
- EndPopupModeData *pData = (EndPopupModeData*)rVclWindowEvent.GetData();
-
- if( pData )
- {
- ::com::sun::star::awt::EndPopupModeEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- aEvent.FloatingPosition.X = pData->maFloatingPos.X();
- aEvent.FloatingPosition.Y = pData->maFloatingPos.Y();
- aEvent.bTearoff = pData->mbTearoff;
- mpImpl->getDockableWindowListeners().notifyEach( &XDockableWindowListener::endPopupMode, aEvent );
- }
- }
- }
- break;
-
- }
-}
-
-uno::Reference< accessibility::XAccessibleContext > VCLXWindow::CreateAccessibleContext()
-{
- SolarMutexGuard aGuard;
- return getAccessibleFactory().createAccessibleContext( this );
-}
-
-void VCLXWindow::SetSynthesizingVCLEvent( sal_Bool _b )
-{
- mpImpl->mbSynthesizingVCLEvent = _b;
-}
-
-sal_Bool VCLXWindow::IsSynthesizingVCLEvent() const
-{
- return mpImpl->mbSynthesizingVCLEvent;
-}
-
-Size VCLXWindow::ImplCalcWindowSize( const Size& rOutSz ) const
-{
- Size aSz = rOutSz;
-
- Window* pWindow = GetWindow();
- if ( pWindow )
- {
- sal_Int32 nLeft, nTop, nRight, nBottom;
- pWindow->GetBorder( nLeft, nTop, nRight, nBottom );
- aSz.Width() += nLeft+nRight;
- aSz.Height() += nTop+nBottom;
- }
- return aSz;
-}
-
-
-// ::com::sun::star::lang::XUnoTunnel
-IMPL_XUNOTUNNEL2( VCLXWindow, VCLXDevice )
-
-// ::com::sun::star::lang::Component
-void VCLXWindow::dispose( ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- mpImpl->mxViewGraphics = NULL;
-
- if ( !mpImpl->mbDisposing )
- {
- mpImpl->mbDisposing = true;
-
- mpImpl->disposing();
-
- if ( GetWindow() )
- {
- OutputDevice* pOutDev = GetOutputDevice();
- SetWindow( NULL ); // Damit ggf. Handler abgemeldet werden (virtuell).
- SetOutputDevice( pOutDev );
- DestroyOutputDevice();
- }
-
- // #i14103# dispose the accessible context after the window has been destroyed,
- // otherwise the old value in the child event fired in VCLXAccessibleComponent::ProcessWindowEvent()
- // for VCLEVENT_WINDOW_CHILDDESTROYED contains a reference to an already disposed accessible object
- try
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > xComponent( mpImpl->mxAccessibleContext, ::com::sun::star::uno::UNO_QUERY );
- if ( xComponent.is() )
- xComponent->dispose();
- }
- catch ( const ::com::sun::star::uno::Exception& )
- {
- OSL_FAIL( "VCLXWindow::dispose: could not dispose the accessible context!" );
- }
- mpImpl->mxAccessibleContext.clear();
-
- mpImpl->mbDisposing = false;
- }
-}
-
-void VCLXWindow::addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- mpImpl->getEventListeners().addInterface( rxListener );
-}
-
-void VCLXWindow::removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- mpImpl->getEventListeners().removeInterface( rxListener );
-}
-
-
-// ::com::sun::star::awt::XWindow
-void VCLXWindow::setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int16 Flags ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- if ( GetWindow() )
- {
- if( Window::GetDockingManager()->IsDockable( GetWindow() ) )
- Window::GetDockingManager()->SetPosSizePixel( GetWindow() , X, Y, Width, Height, Flags );
- else
- GetWindow()->SetPosSizePixel( X, Y, Width, Height, Flags );
- }
-}
-
-::com::sun::star::awt::Rectangle VCLXWindow::getPosSize( ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- ::com::sun::star::awt::Rectangle aBounds;
- if ( GetWindow() )
- {
- if( Window::GetDockingManager()->IsDockable( GetWindow() ) )
- aBounds = AWTRectangle( Window::GetDockingManager()->GetPosSizePixel( GetWindow() ) );
- else
- aBounds = AWTRectangle( Rectangle( GetWindow()->GetPosPixel(), GetWindow()->GetSizePixel() ) );
- }
-
- return aBounds;
-}
-
-void VCLXWindow::setVisible( sal_Bool bVisible ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- Window* pWindow = GetWindow();
- if ( pWindow )
- {
-/*
- if ( bVisible )
- {
- // #57167# TopWindows mit unsichtbaren Parent anzeigen...
- ::com::sun::star::uno::Any aTest = queryInterface( ::getCppuType( (const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTopWindow >*) 0 ) );
- if ( aTest.hasValue() )
- {
- Window* pParent = pWindow->GetWindow( WINDOW_PARENTOVERLAP );
- if ( pParent && !pParent->IsReallyVisible() )
- pWindow->SetParent( pWindow->GetWindow( WINDOW_FRAME ) );
- }
- }
-*/
- mpImpl->setDirectVisible( bVisible );
- pWindow->Show( bVisible && mpImpl->isEnableVisible() );
- }
-}
-
-void VCLXWindow::setEnable( sal_Bool bEnable ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- Window* pWindow = GetWindow();
- if ( pWindow )
- {
- pWindow->Enable( bEnable, sal_False ); // #95824# without children!
- pWindow->EnableInput( bEnable );
- }
-}
-
-void VCLXWindow::setFocus( ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- if ( GetWindow() )
- GetWindow()->GrabFocus();
-}
-
-void VCLXWindow::addWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- mpImpl->getWindowListeners().addInterface( rxListener );
-
- Reference< XWindowListener2 > xListener2( rxListener, UNO_QUERY );
- if ( xListener2.is() )
- mpImpl->getWindow2Listeners().addInterface( xListener2 );
-
- // #100119# Get all resize events, even if height or width 0, or invisible
- if ( GetWindow() )
- GetWindow()->EnableAllResize( sal_True );
-}
-
-void VCLXWindow::removeWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- Reference< XWindowListener2 > xListener2( rxListener, UNO_QUERY );
- if ( xListener2.is() )
- mpImpl->getWindow2Listeners().removeInterface( xListener2 );
-
- mpImpl->getWindowListeners().removeInterface( rxListener );
-}
-
-void VCLXWindow::addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- mpImpl->getFocusListeners().addInterface( rxListener );
-}
-
-void VCLXWindow::removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- mpImpl->getFocusListeners().removeInterface( rxListener );
-}
-
-void VCLXWindow::addKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- mpImpl->getKeyListeners().addInterface( rxListener );
-}
-
-void VCLXWindow::removeKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- mpImpl->getKeyListeners().removeInterface( rxListener );
-}
-
-void VCLXWindow::addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- mpImpl->getMouseListeners().addInterface( rxListener );
-}
-
-void VCLXWindow::removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- mpImpl->getMouseListeners().removeInterface( rxListener );
-}
-
-void VCLXWindow::addMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- mpImpl->getMouseMotionListeners().addInterface( rxListener );
-}
-
-void VCLXWindow::removeMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- mpImpl->getMouseMotionListeners().removeInterface( rxListener );
-}
-
-void VCLXWindow::addPaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- mpImpl->getPaintListeners().addInterface( rxListener );
-}
-
-void VCLXWindow::removePaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- mpImpl->getPaintListeners().removeInterface( rxListener );
-}
-
-// ::com::sun::star::awt::XWindowPeer
-::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit > VCLXWindow::getToolkit( ) throw(::com::sun::star::uno::RuntimeException)
-{
- // no guard. nothing to guard here.
- // 82463 - 12/21/00 - fs
- return Application::GetVCLToolkit();
-}
-
-void VCLXWindow::setPointer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPointer >& rxPointer ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- VCLXPointer* pPointer = VCLXPointer::GetImplementation( rxPointer );
- if ( pPointer )
- {
- mpImpl->mxPointer = rxPointer;
- if ( GetWindow() )
- GetWindow()->SetPointer( pPointer->GetPointer() );
- }
-}
-
-void VCLXWindow::setBackground( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- if ( GetWindow() )
- {
- Color aColor( (sal_uInt32)nColor );
- GetWindow()->SetBackground( aColor );
- GetWindow()->SetControlBackground( aColor );
-
- WindowType eWinType = GetWindow()->GetType();
- if ( ( eWinType == WINDOW_WINDOW ) ||
- ( eWinType == WINDOW_WORKWINDOW ) ||
- ( eWinType == WINDOW_FLOATINGWINDOW ) )
- {
- GetWindow()->Invalidate();
- }
- }
-}
-
-void VCLXWindow::invalidate( sal_Int16 nInvalidateFlags ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- if ( GetWindow() )
- GetWindow()->Invalidate( (sal_uInt16) nInvalidateFlags );
-}
-
-void VCLXWindow::invalidateRect( const ::com::sun::star::awt::Rectangle& rRect, sal_Int16 nInvalidateFlags ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- if ( GetWindow() )
- GetWindow()->Invalidate( VCLRectangle(rRect), (sal_uInt16) nInvalidateFlags );
-}
-
-
-// ::com::sun::star::awt::XVclWindowPeer
-sal_Bool VCLXWindow::isChild( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& rxPeer ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- sal_Bool bIsChild = sal_False;
- Window* pWindow = GetWindow();
- if ( pWindow )
- {
- Window* pPeerWindow = VCLUnoHelper::GetWindow( rxPeer );
- bIsChild = pPeerWindow && pWindow->IsChild( pPeerWindow );
- }
-
- return bIsChild;
-}
-
-void VCLXWindow::setDesignMode( sal_Bool bOn ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- mpImpl->mbDesignMode = bOn;
-}
-
-sal_Bool VCLXWindow::isDesignMode( ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- return mpImpl->mbDesignMode;
-}
-
-void VCLXWindow::enableClipSiblings( sal_Bool bClip ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- if ( GetWindow() )
- GetWindow()->EnableClipSiblings( bClip );
-}
-
-void VCLXWindow::setForeground( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- if ( GetWindow() )
- {
- Color aColor( (sal_uInt32)nColor );
- GetWindow()->SetControlForeground( aColor );
- }
-}
-
-void VCLXWindow::setControlFont( const ::com::sun::star::awt::FontDescriptor& rFont ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- if ( GetWindow() )
- GetWindow()->SetControlFont( VCLUnoHelper::CreateFont( rFont, GetWindow()->GetControlFont() ) );
-}
-
-void VCLXWindow::getStyles( sal_Int16 nType, ::com::sun::star::awt::FontDescriptor& Font, sal_Int32& ForegroundColor, sal_Int32& BackgroundColor ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- if ( GetWindow() )
- {
- const StyleSettings& rStyleSettings = GetWindow()->GetSettings().GetStyleSettings();
-
- switch ( nType )
- {
- case ::com::sun::star::awt::Style::FRAME:
- {
- Font = VCLUnoHelper::CreateFontDescriptor( rStyleSettings.GetAppFont() );
- ForegroundColor = rStyleSettings.GetWindowTextColor().GetColor();
- BackgroundColor = rStyleSettings.GetWindowColor().GetColor();
- }
- break;
- case ::com::sun::star::awt::Style::DIALOG:
- {
- Font = VCLUnoHelper::CreateFontDescriptor( rStyleSettings.GetAppFont() );
- ForegroundColor = rStyleSettings.GetDialogTextColor().GetColor();
- BackgroundColor = rStyleSettings.GetDialogColor().GetColor();
- }
- break;
- default: OSL_FAIL( "VCLWindow::getStyles() - unknown Type" );
- }
-
- }
-}
-
-namespace toolkit
-{
- static void setColorSettings( Window* _pWindow, const ::com::sun::star::uno::Any& _rValue,
- void (StyleSettings::*pSetter)( const Color& ), const Color& (StyleSettings::*pGetter)( ) const )
- {
- sal_Int32 nColor = 0;
- if ( !( _rValue >>= nColor ) )
- nColor = (Application::GetSettings().GetStyleSettings().*pGetter)().GetColor();
-
- AllSettings aSettings = _pWindow->GetSettings();
- StyleSettings aStyleSettings = aSettings.GetStyleSettings();
-
- (aStyleSettings.*pSetter)( Color( nColor ) );
-
- aSettings.SetStyleSettings( aStyleSettings );
- _pWindow->SetSettings( aSettings, sal_True );
- }
-}
-
-// Terminated by BASEPROPERTY_NOTFOUND (or 0)
-void VCLXWindow::PushPropertyIds( std::list< sal_uInt16 > &rIds,
- int nFirstId, ...)
-{
- va_list pVarArgs;
- va_start( pVarArgs, nFirstId );
-
- for ( int nId = nFirstId; nId != BASEPROPERTY_NOTFOUND;
- nId = va_arg( pVarArgs, int ) )
- rIds.push_back( (sal_uInt16) nId );
-
- va_end( pVarArgs );
-}
-
-void VCLXWindow::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds, bool bWithDefaults )
-{
- // These are common across ~all VCLXWindow derived classes
- if( bWithDefaults )
- PushPropertyIds( rIds,
- BASEPROPERTY_ALIGN,
- BASEPROPERTY_BACKGROUNDCOLOR,
- BASEPROPERTY_BORDER,
- BASEPROPERTY_BORDERCOLOR,
- BASEPROPERTY_DEFAULTCONTROL,
- BASEPROPERTY_ENABLED,
- BASEPROPERTY_FONTDESCRIPTOR,
- BASEPROPERTY_HELPTEXT,
- BASEPROPERTY_HELPURL,
- BASEPROPERTY_TEXT,
- BASEPROPERTY_PRINTABLE,
- BASEPROPERTY_ENABLEVISIBLE, // for visibility
- BASEPROPERTY_TABSTOP,
- 0);
-
- // lovely hack from:
- // void UnoControlModel::ImplRegisterProperty( sal_uInt16 nPropId )
- std::list< sal_uInt16 >::const_iterator iter;
- for( iter = rIds.begin(); iter != rIds.end(); ++iter) {
- if( *iter == BASEPROPERTY_FONTDESCRIPTOR )
- {
- // some properties are not included in the FontDescriptor, but everytime
- // when we have a FontDescriptor we want to have these properties too.
- // => Easier to register the here, istead everywhere where I register the FontDescriptor...
-
- rIds.push_back( BASEPROPERTY_TEXTCOLOR );
- rIds.push_back( BASEPROPERTY_TEXTLINECOLOR );
- rIds.push_back( BASEPROPERTY_FONTRELIEF );
- rIds.push_back( BASEPROPERTY_FONTEMPHASISMARK );
- break;
- }
- }
-}
-
-void VCLXWindow::GetPropertyIds( std::list< sal_uInt16 >& _out_rIds )
-{
- return ImplGetPropertyIds( _out_rIds, mpImpl->mbWithDefaultProps );
-}
-
-::cppu::OInterfaceContainerHelper& VCLXWindow::GetContainerListeners()
-{
- return mpImpl->getContainerListeners();
-}
-
-::cppu::OInterfaceContainerHelper& VCLXWindow::GetTopWindowListeners()
-{
- return mpImpl->getTopWindowListeners();
-}
-
-namespace
-{
- void lcl_updateWritingMode( Window& _rWindow, const sal_Int16 _nWritingMode, const sal_Int16 _nContextWritingMode )
- {
- sal_Bool bEnableRTL = sal_False;
- switch ( _nWritingMode )
- {
- case WritingMode2::LR_TB: bEnableRTL = sal_False; break;
- case WritingMode2::RL_TB: bEnableRTL = sal_True; break;
- case WritingMode2::CONTEXT:
- {
- // consult our ContextWritingMode. If it has an explicit RTL/LTR value, then use
- // it. If it doesn't (but is CONTEXT itself), then just ask the parent window of our
- // own window for its RTL mode
- switch ( _nContextWritingMode )
- {
- case WritingMode2::LR_TB: bEnableRTL = sal_False; break;
- case WritingMode2::RL_TB: bEnableRTL = sal_True; break;
- case WritingMode2::CONTEXT:
- {
- const Window* pParent = _rWindow.GetParent();
- OSL_ENSURE( pParent, "lcl_updateWritingMode: cannot determine context's writing mode!" );
- if ( pParent )
- bEnableRTL = pParent->IsRTLEnabled();
- }
- break;
- }
- }
- break;
- default:
- OSL_FAIL( "lcl_updateWritingMode: unsupported WritingMode!" );
- } // switch ( nWritingMode )
-
- _rWindow.EnableRTL( bEnableRTL );
- }
-}
-
-void VCLXWindow::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- Window* pWindow = GetWindow();
- if ( !pWindow )
- return;
-
- sal_Bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
-
- WindowType eWinType = pWindow->GetType();
- sal_uInt16 nPropType = GetPropertyId( PropertyName );
- switch ( nPropType )
- {
- case BASEPROPERTY_REFERENCE_DEVICE:
- {
- Control* pControl = dynamic_cast< Control* >( pWindow );
- OSL_ENSURE( pControl, "VCLXWindow::setProperty( RefDevice ): need a Control for this!" );
- if ( !pControl )
- break;
- Reference< XDevice > xDevice( Value, UNO_QUERY );
- OutputDevice* pDevice = VCLUnoHelper::GetOutputDevice( xDevice );
- pControl->SetReferenceDevice( pDevice );
- }
- break;
-
- case BASEPROPERTY_CONTEXT_WRITING_MODE:
- {
- OSL_VERIFY( Value >>= mpImpl->mnContextWritingMode );
- if ( mpImpl->mnWritingMode == WritingMode2::CONTEXT )
- lcl_updateWritingMode( *pWindow, mpImpl->mnWritingMode, mpImpl->mnContextWritingMode );
- }
- break;
-
- case BASEPROPERTY_WRITING_MODE:
- {
- sal_Bool bProperType = ( Value >>= mpImpl->mnWritingMode );
- OSL_ENSURE( bProperType, "VCLXWindow::setProperty( 'WritingMode' ): illegal value type!" );
- if ( bProperType )
- lcl_updateWritingMode( *pWindow, mpImpl->mnWritingMode, mpImpl->mnContextWritingMode );
- }
- break;
-
- case BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR:
- {
- sal_uInt16 nWheelBehavior( MouseWheelBehavior::SCROLL_FOCUS_ONLY );
- OSL_VERIFY( Value >>= nWheelBehavior );
-
- AllSettings aSettings = pWindow->GetSettings();
- MouseSettings aMouseSettings = aSettings.GetMouseSettings();
-
- sal_uInt16 nVclBehavior( MOUSE_WHEEL_FOCUS_ONLY );
- switch ( nWheelBehavior )
- {
- case MouseWheelBehavior::SCROLL_DISABLED: nVclBehavior = MOUSE_WHEEL_DISABLE; break;
- case MouseWheelBehavior::SCROLL_FOCUS_ONLY: nVclBehavior = MOUSE_WHEEL_FOCUS_ONLY; break;
- case MouseWheelBehavior::SCROLL_ALWAYS: nVclBehavior = MOUSE_WHEEL_ALWAYS; break;
- default:
- OSL_FAIL( "VCLXWindow::setProperty( 'MouseWheelBehavior' ): illegal property value!" );
- }
-
- aMouseSettings.SetWheelBehavior( nVclBehavior );
- aSettings.SetMouseSettings( aMouseSettings );
- pWindow->SetSettings( aSettings, sal_True );
- }
- break;
-
- case BASEPROPERTY_NATIVE_WIDGET_LOOK:
- {
- sal_Bool bEnable( sal_True );
- OSL_VERIFY( Value >>= bEnable );
- pWindow->EnableNativeWidget( bEnable );
- }
- break;
-
- case BASEPROPERTY_PLUGINPARENT:
- {
- // set parent handle
- SetSystemParent_Impl( Value );
- }
- break;
-
- case BASEPROPERTY_ENABLED:
- {
- sal_Bool b = sal_Bool();
- if ( Value >>= b )
- setEnable( b );
- }
- break;
- case BASEPROPERTY_ENABLEVISIBLE:
- {
- sal_Bool b = sal_False;
- if ( Value >>= b )
- {
- if( b != mpImpl->isEnableVisible() )
- {
- mpImpl->setEnableVisible( b );
- pWindow->Show( b && mpImpl->isDirectVisible() );
- }
- }
- }
- break;
- case BASEPROPERTY_TEXT:
- case BASEPROPERTY_LABEL:
- case BASEPROPERTY_TITLE:
- {
- ::rtl::OUString aText;
- if ( Value >>= aText )
- {
- switch (eWinType)
- {
- case WINDOW_OKBUTTON:
- case WINDOW_CANCELBUTTON:
- case WINDOW_HELPBUTTON:
- // Standard Button: overwrite only if not empty.
- if (aText.getLength())
- pWindow->SetText( aText );
- break;
-
- default:
- pWindow->SetText( aText );
- break;
- }
- }
- }
- break;
- case BASEPROPERTY_ACCESSIBLENAME:
- {
- ::rtl::OUString aText;
- if ( Value >>= aText )
- pWindow->SetAccessibleName( aText );
- }
- break;
- case BASEPROPERTY_HELPURL:
- {
- ::rtl::OUString aURL;
- if ( Value >>= aURL )
- {
- INetURLObject aHelpURL( aURL );
- if ( aHelpURL.GetProtocol() == INET_PROT_HID )
- pWindow->SetHelpId( rtl::OUStringToOString( aHelpURL.GetURLPath(), RTL_TEXTENCODING_UTF8 ) );
- else
- pWindow->SetHelpId( rtl::OUStringToOString( aURL, RTL_TEXTENCODING_UTF8 ) );
- }
- }
- break;
- case BASEPROPERTY_HELPTEXT:
- {
- ::rtl::OUString aHelpText;
- if ( Value >>= aHelpText )
- {
- pWindow->SetQuickHelpText( aHelpText );
- }
- }
- break;
- case BASEPROPERTY_FONTDESCRIPTOR:
- {
- if ( bVoid )
- pWindow->SetControlFont( Font() );
- else
- {
- ::com::sun::star::awt::FontDescriptor aFont;
- if ( Value >>= aFont )
- pWindow->SetControlFont( VCLUnoHelper::CreateFont( aFont, pWindow->GetControlFont() ) );
- }
- }
- break;
- case BASEPROPERTY_FONTRELIEF:
- {
- sal_Int16 n = sal_Int16();
- if ( Value >>= n )
- {
- Font aFont = pWindow->GetControlFont();
- aFont.SetRelief( (FontRelief)n );
- pWindow->SetControlFont( aFont );
- }
- }
- break;
- case BASEPROPERTY_FONTEMPHASISMARK:
- {
- sal_Int16 n = sal_Int16();
- if ( Value >>= n )
- {
- Font aFont = pWindow->GetControlFont();
- aFont.SetEmphasisMark( n );
- pWindow->SetControlFont( aFont );
- }
- }
- break;
- case BASEPROPERTY_BACKGROUNDCOLOR:
- if ( bVoid )
- {
- switch ( eWinType )
- {
- // set dialog color for default
- case WINDOW_DIALOG:
- case WINDOW_MESSBOX:
- case WINDOW_INFOBOX:
- case WINDOW_WARNINGBOX:
- case WINDOW_ERRORBOX:
- case WINDOW_QUERYBOX:
- case WINDOW_TABPAGE:
- {
- Color aColor = pWindow->GetSettings().GetStyleSettings().GetDialogColor();
- pWindow->SetBackground( aColor );
- pWindow->SetControlBackground( aColor );
- break;
- }
-
- case WINDOW_FIXEDTEXT:
- case WINDOW_CHECKBOX:
- case WINDOW_RADIOBUTTON:
- case WINDOW_GROUPBOX:
- case WINDOW_FIXEDLINE:
- {
- // support transparency only for special controls
- pWindow->SetBackground();
- pWindow->SetControlBackground();
- pWindow->SetPaintTransparent( sal_True );
- break;
- }
-
- default:
- {
- // default code which enables transparency for
- // compound controls. It's not real transparency
- // as most of these controls repaint their client
- // area completely new.
- if ( pWindow->IsCompoundControl() )
- pWindow->SetBackground();
- pWindow->SetControlBackground();
- break;
- }
- }
- }
- else
- {
- sal_Int32 nColor = 0;
- if ( Value >>= nColor )
- {
- Color aColor( nColor );
- pWindow->SetControlBackground( aColor );
- pWindow->SetBackground( aColor );
- switch ( eWinType )
- {
- // reset paint transparent mode
- case WINDOW_FIXEDTEXT:
- case WINDOW_CHECKBOX:
- case WINDOW_RADIOBUTTON:
- case WINDOW_GROUPBOX:
- case WINDOW_FIXEDLINE:
- pWindow->SetPaintTransparent( sal_False );
- default: ;
- }
- pWindow->Invalidate(); // Falls das Control nicht drauf reagiert
- }
- }
- break;
- case BASEPROPERTY_TEXTCOLOR:
- if ( bVoid )
- {
- pWindow->SetControlForeground();
- }
- else
- {
- sal_Int32 nColor = 0;
- if ( Value >>= nColor )
- {
- Color aColor( nColor );
- pWindow->SetTextColor( aColor );
- pWindow->SetControlForeground( aColor );
- }
- }
- break;
- case BASEPROPERTY_TEXTLINECOLOR:
- if ( bVoid )
- {
- pWindow->SetTextLineColor();
- }
- else
- {
- sal_Int32 nColor = 0;
- if ( Value >>= nColor )
- {
- Color aColor( nColor );
- pWindow->SetTextLineColor( aColor );
- }
- }
- break;
- case BASEPROPERTY_FILLCOLOR:
- if ( bVoid )
- pWindow->SetFillColor();
- else
- {
- sal_Int32 nColor = 0;
- if ( Value >>= nColor )
- {
- Color aColor( nColor );
- pWindow->SetFillColor( aColor );
- }
- }
- break;
- case BASEPROPERTY_LINECOLOR:
- if ( bVoid )
- pWindow->SetLineColor();
- else
- {
- sal_Int32 nColor = 0;
- if ( Value >>= nColor )
- {
- Color aColor( nColor );
- pWindow->SetLineColor( aColor );
- }
- }
- break;
- case BASEPROPERTY_BORDER:
- {
- WinBits nStyle = pWindow->GetStyle();
- sal_uInt16 nBorder = 0;
- Value >>= nBorder;
- if ( !nBorder )
- {
- pWindow->SetStyle( nStyle & ~WB_BORDER );
- }
- else
- {
- pWindow->SetStyle( nStyle | WB_BORDER );
- pWindow->SetBorderStyle( nBorder );
- }
- }
- break;
- case BASEPROPERTY_TABSTOP:
- {
- WinBits nStyle = pWindow->GetStyle() & ~WB_TABSTOP;
- if ( !bVoid )
- {
- sal_Bool bTab = false;
- Value >>= bTab;
- if ( bTab )
- nStyle |= WB_TABSTOP;
- else
- nStyle |= WB_NOTABSTOP;
- }
- pWindow->SetStyle( nStyle );
- }
- break;
- case BASEPROPERTY_VERTICALALIGN:
- {
- VerticalAlignment eAlign = VerticalAlignment_MAKE_FIXED_SIZE;
- WinBits nStyle = pWindow->GetStyle();
- nStyle &= ~(WB_TOP|WB_VCENTER|WB_BOTTOM);
- if ( !bVoid )
- Value >>= eAlign;
- switch ( eAlign )
- {
- case VerticalAlignment_TOP:
- nStyle |= WB_TOP;
- break;
- case VerticalAlignment_MIDDLE:
- nStyle |= WB_VCENTER;
- break;
- case VerticalAlignment_BOTTOM:
- nStyle |= WB_BOTTOM;
- break;
- default: ; // for warning free code, MAKE_FIXED_SIZE
- }
- pWindow->SetStyle( nStyle );
- }
- break;
- case BASEPROPERTY_ALIGN:
- {
- sal_Int16 nAlign = PROPERTY_ALIGN_LEFT;
- switch ( eWinType )
- {
- case WINDOW_COMBOBOX:
- case WINDOW_BUTTON:
- case WINDOW_PUSHBUTTON:
- case WINDOW_OKBUTTON:
- case WINDOW_CANCELBUTTON:
- case WINDOW_HELPBUTTON:
- nAlign = PROPERTY_ALIGN_CENTER;
- // no break here!
- case WINDOW_FIXEDTEXT:
- case WINDOW_EDIT:
- case WINDOW_MULTILINEEDIT:
- case WINDOW_CHECKBOX:
- case WINDOW_RADIOBUTTON:
- case WINDOW_LISTBOX:
- {
- WinBits nStyle = pWindow->GetStyle();
- nStyle &= ~(WB_LEFT|WB_CENTER|WB_RIGHT);
- if ( !bVoid )
- Value >>= nAlign;
- if ( nAlign == PROPERTY_ALIGN_LEFT )
- nStyle |= WB_LEFT;
- else if ( nAlign == PROPERTY_ALIGN_CENTER )
- nStyle |= WB_CENTER;
- else
- nStyle |= WB_RIGHT;
- pWindow->SetStyle( nStyle );
- }
- break;
- }
- }
- break;
- case BASEPROPERTY_MULTILINE:
- {
- if ( ( eWinType == WINDOW_FIXEDTEXT )
- || ( eWinType == WINDOW_CHECKBOX )
- || ( eWinType == WINDOW_RADIOBUTTON )
- || ( eWinType == WINDOW_BUTTON )
- || ( eWinType == WINDOW_PUSHBUTTON )
- || ( eWinType == WINDOW_OKBUTTON )
- || ( eWinType == WINDOW_CANCELBUTTON )
- || ( eWinType == WINDOW_HELPBUTTON )
- )
- {
- WinBits nStyle = pWindow->GetStyle();
- sal_Bool bMulti = false;
- Value >>= bMulti;
- if ( bMulti )
- nStyle |= WB_WORDBREAK;
- else
- nStyle &= ~WB_WORDBREAK;
- pWindow->SetStyle( nStyle );
- }
- }
- break;
- case BASEPROPERTY_ORIENTATION:
- {
- switch ( eWinType )
- {
- case WINDOW_FIXEDLINE:
- {
- sal_Int32 nOrientation = 0;
- if ( Value >>= nOrientation )
- {
- WinBits nStyle = pWindow->GetStyle();
- nStyle &= ~(WB_HORZ|WB_VERT);
- if ( nOrientation == 0 )
- nStyle |= WB_HORZ;
- else
- nStyle |= WB_VERT;
-
- pWindow->SetStyle( nStyle );
- }
- }
- break;
- }
- }
- break;
- case BASEPROPERTY_AUTOMNEMONICS:
- {
- sal_Bool bAutoMnemonics = false;
- Value >>= bAutoMnemonics;
- AllSettings aSettings = pWindow->GetSettings();
- StyleSettings aStyleSettings = aSettings.GetStyleSettings();
- if ( aStyleSettings.GetAutoMnemonic() != bAutoMnemonics )
- {
- aStyleSettings.SetAutoMnemonic( bAutoMnemonics );
- aSettings.SetStyleSettings( aStyleSettings );
- pWindow->SetSettings( aSettings );
- }
- }
- break;
- case BASEPROPERTY_MOUSETRANSPARENT:
- {
- sal_Bool bMouseTransparent = false;
- Value >>= bMouseTransparent;
- pWindow->SetMouseTransparent( bMouseTransparent );
- }
- break;
- case BASEPROPERTY_PAINTTRANSPARENT:
- {
- sal_Bool bPaintTransparent = false;
- Value >>= bPaintTransparent;
- pWindow->SetPaintTransparent( bPaintTransparent );
-// pWindow->SetBackground();
- }
- break;
-
- case BASEPROPERTY_REPEAT:
- {
- sal_Bool bRepeat( sal_False );
- Value >>= bRepeat;
-
- WinBits nStyle = pWindow->GetStyle();
- if ( bRepeat )
- nStyle |= WB_REPEAT;
- else
- nStyle &= ~WB_REPEAT;
- pWindow->SetStyle( nStyle );
- }
- break;
-
- case BASEPROPERTY_REPEAT_DELAY:
- {
- sal_Int32 nRepeatDelay = 0;
- if ( Value >>= nRepeatDelay )
- {
- AllSettings aSettings = pWindow->GetSettings();
- MouseSettings aMouseSettings = aSettings.GetMouseSettings();
-
- aMouseSettings.SetButtonRepeat( nRepeatDelay );
- aSettings.SetMouseSettings( aMouseSettings );
-
- pWindow->SetSettings( aSettings, sal_True );
- }
- }
- break;
-
- case BASEPROPERTY_SYMBOL_COLOR:
- ::toolkit::setColorSettings( pWindow, Value, &StyleSettings::SetButtonTextColor, &StyleSettings::GetButtonTextColor );
- break;
-
- case BASEPROPERTY_BORDERCOLOR:
- ::toolkit::setColorSettings( pWindow, Value, &StyleSettings::SetMonoColor, &StyleSettings::GetMonoColor);
- break;
- case BASEPROPERTY_DEFAULTCONTROL:
- {
- rtl::OUString aName;
- Value >>= aName;
- break;
- }
- }
-}
-
-::com::sun::star::uno::Any VCLXWindow::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- ::com::sun::star::uno::Any aProp;
- if ( GetWindow() )
- {
- WindowType eWinType = GetWindow()->GetType();
- sal_uInt16 nPropType = GetPropertyId( PropertyName );
- switch ( nPropType )
- {
- case BASEPROPERTY_REFERENCE_DEVICE:
- {
- Control* pControl = dynamic_cast< Control* >( GetWindow() );
- OSL_ENSURE( pControl, "VCLXWindow::setProperty( RefDevice ): need a Control for this!" );
- if ( !pControl )
- break;
-
- VCLXDevice* pDevice = new VCLXDevice;
- pDevice->SetOutputDevice( pControl->GetReferenceDevice() );
- aProp <<= Reference< XDevice >( pDevice );
- }
- break;
-
- case BASEPROPERTY_CONTEXT_WRITING_MODE:
- aProp <<= mpImpl->mnContextWritingMode;
- break;
-
- case BASEPROPERTY_WRITING_MODE:
- aProp <<= mpImpl->mnWritingMode;
- break;
-
- case BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR:
- {
- sal_uInt16 nVclBehavior = GetWindow()->GetSettings().GetMouseSettings().GetWheelBehavior();
- sal_Int16 nBehavior = MouseWheelBehavior::SCROLL_FOCUS_ONLY;
- switch ( nVclBehavior )
- {
- case MOUSE_WHEEL_DISABLE: nBehavior = MouseWheelBehavior::SCROLL_DISABLED; break;
- case MOUSE_WHEEL_FOCUS_ONLY: nBehavior = MouseWheelBehavior::SCROLL_FOCUS_ONLY; break;
- case MOUSE_WHEEL_ALWAYS: nBehavior = MouseWheelBehavior::SCROLL_ALWAYS; break;
- default:
- OSL_FAIL( "VCLXWindow::getProperty( 'MouseWheelBehavior' ): illegal VCL value!" );
- }
- aProp <<= nBehavior;
- }
- break;
-
- case BASEPROPERTY_NATIVE_WIDGET_LOOK:
- aProp <<= (sal_Bool) GetWindow()->IsNativeWidgetEnabled();
- break;
-
- case BASEPROPERTY_ENABLED:
- aProp <<= (sal_Bool) GetWindow()->IsEnabled();
- break;
-
- case BASEPROPERTY_ENABLEVISIBLE:
- aProp <<= (sal_Bool) mpImpl->isEnableVisible();
- break;
-
- case BASEPROPERTY_HIGHCONTRASTMODE:
- aProp <<= (sal_Bool) GetWindow()->GetSettings().GetStyleSettings().GetHighContrastMode();
- break;
-
- case BASEPROPERTY_TEXT:
- case BASEPROPERTY_LABEL:
- case BASEPROPERTY_TITLE:
- {
- ::rtl::OUString aText = GetWindow()->GetText();
- aProp <<= aText;
- }
- break;
- case BASEPROPERTY_ACCESSIBLENAME:
- {
- ::rtl::OUString aText = GetWindow()->GetAccessibleName();
- aProp <<= aText;
- }
- break;
- case BASEPROPERTY_HELPTEXT:
- {
- ::rtl::OUString aText = GetWindow()->GetQuickHelpText();
- aProp <<= aText;
- }
- break;
- case BASEPROPERTY_HELPURL:
- {
- rtl::OUString aHelpId( rtl::OStringToOUString( GetWindow()->GetHelpId(), RTL_TEXTENCODING_UTF8 ) );
- aProp <<= ::rtl::OUString( aHelpId );
- }
- break;
- case BASEPROPERTY_FONTDESCRIPTOR:
- {
- Font aFont = GetWindow()->GetControlFont();
- ::com::sun::star::awt::FontDescriptor aFD = VCLUnoHelper::CreateFontDescriptor( aFont );
- aProp <<= aFD;
- }
- break;
- case BASEPROPERTY_BACKGROUNDCOLOR:
- aProp <<= (sal_Int32) GetWindow()->GetControlBackground().GetColor();
- break;
- case BASEPROPERTY_DISPLAYBACKGROUNDCOLOR:
- aProp <<= (sal_Int32) GetWindow()->GetDisplayBackground().GetColor().GetColor();
- break;
- case BASEPROPERTY_FONTRELIEF:
- aProp <<= (sal_Int16) GetWindow()->GetControlFont().GetRelief();
- break;
- case BASEPROPERTY_FONTEMPHASISMARK:
- aProp <<= (sal_Int16) GetWindow()->GetControlFont().GetEmphasisMark();
- break;
- case BASEPROPERTY_TEXTCOLOR:
- aProp <<= (sal_Int32) GetWindow()->GetControlForeground().GetColor();
- break;
- case BASEPROPERTY_TEXTLINECOLOR:
- aProp <<= (sal_Int32) GetWindow()->GetTextLineColor().GetColor();
- break;
- case BASEPROPERTY_FILLCOLOR:
- aProp <<= (sal_Int32) GetWindow()->GetFillColor().GetColor();
- break;
- case BASEPROPERTY_LINECOLOR:
- aProp <<= (sal_Int32) GetWindow()->GetLineColor().GetColor();
- break;
- case BASEPROPERTY_BORDER:
- {
- sal_Int16 nBorder = 0;
- if ( GetWindow()->GetStyle() & WB_BORDER )
- nBorder = GetWindow()->GetBorderStyle();
- aProp <<= nBorder;
- }
- break;
- case BASEPROPERTY_TABSTOP:
- aProp <<= (sal_Bool) ( GetWindow()->GetStyle() & WB_TABSTOP ) ? sal_True : sal_False;
- break;
- case BASEPROPERTY_VERTICALALIGN:
- {
- WinBits nStyle = GetWindow()->GetStyle();
- if ( nStyle & WB_TOP )
- aProp <<= VerticalAlignment_TOP;
- else if ( nStyle & WB_VCENTER )
- aProp <<= VerticalAlignment_MIDDLE;
- else if ( nStyle & WB_BOTTOM )
- aProp <<= VerticalAlignment_BOTTOM;
- }
- break;
- case BASEPROPERTY_ALIGN:
- {
- switch ( eWinType )
- {
- case WINDOW_FIXEDTEXT:
- case WINDOW_EDIT:
- case WINDOW_MULTILINEEDIT:
- case WINDOW_CHECKBOX:
- case WINDOW_RADIOBUTTON:
- case WINDOW_LISTBOX:
- case WINDOW_COMBOBOX:
- case WINDOW_BUTTON:
- case WINDOW_PUSHBUTTON:
- case WINDOW_OKBUTTON:
- case WINDOW_CANCELBUTTON:
- case WINDOW_HELPBUTTON:
- {
- WinBits nStyle = GetWindow()->GetStyle();
- if ( nStyle & WB_LEFT )
- aProp <<= (sal_Int16) PROPERTY_ALIGN_LEFT;
- else if ( nStyle & WB_CENTER )
- aProp <<= (sal_Int16) PROPERTY_ALIGN_CENTER;
- else if ( nStyle & WB_RIGHT )
- aProp <<= (sal_Int16) PROPERTY_ALIGN_RIGHT;
- }
- break;
- }
- }
- case BASEPROPERTY_MULTILINE:
- {
- if ( ( eWinType == WINDOW_FIXEDTEXT )
- || ( eWinType == WINDOW_CHECKBOX )
- || ( eWinType == WINDOW_RADIOBUTTON )
- || ( eWinType == WINDOW_BUTTON )
- || ( eWinType == WINDOW_PUSHBUTTON )
- || ( eWinType == WINDOW_OKBUTTON )
- || ( eWinType == WINDOW_CANCELBUTTON )
- || ( eWinType == WINDOW_HELPBUTTON )
- )
- aProp <<= (sal_Bool) ( GetWindow()->GetStyle() & WB_WORDBREAK ) ? sal_True : sal_False;
- }
- break;
- case BASEPROPERTY_AUTOMNEMONICS:
- {
- sal_Bool bAutoMnemonics = GetWindow()->GetSettings().GetStyleSettings().GetAutoMnemonic();
- aProp <<= bAutoMnemonics;
- }
- break;
- case BASEPROPERTY_MOUSETRANSPARENT:
- {
- sal_Bool bMouseTransparent = GetWindow()->IsMouseTransparent();
- aProp <<= bMouseTransparent;
- }
- break;
- case BASEPROPERTY_PAINTTRANSPARENT:
- {
- sal_Bool bPaintTransparent = GetWindow()->IsPaintTransparent();
- aProp <<= bPaintTransparent;
- }
- break;
-
- case BASEPROPERTY_REPEAT:
- aProp <<= (sal_Bool)( 0 != ( GetWindow()->GetStyle() & WB_REPEAT ) );
- break;
-
- case BASEPROPERTY_REPEAT_DELAY:
- {
- sal_Int32 nButtonRepeat = GetWindow()->GetSettings().GetMouseSettings().GetButtonRepeat();
- aProp <<= (sal_Int32)nButtonRepeat;
- }
- break;
-
- case BASEPROPERTY_SYMBOL_COLOR:
- aProp <<= (sal_Int32)GetWindow()->GetSettings().GetStyleSettings().GetButtonTextColor().GetColor();
- break;
-
- case BASEPROPERTY_BORDERCOLOR:
- aProp <<= (sal_Int32)GetWindow()->GetSettings().GetStyleSettings().GetMonoColor().GetColor();
- break;
- }
- }
- return aProp;
-}
-
-
-// ::com::sun::star::awt::XLayoutConstrains
-::com::sun::star::awt::Size VCLXWindow::getMinimumSize( ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- // Diese Methode sollte nur fuer Componenten gerufen werden, die zwar
- // ueber das ::com::sun::star::awt::Toolkit erzeugt werden koennen, aber fuer die es
- // kein Interface gibt.
-
- Size aSz;
- if ( GetWindow() )
- {
- WindowType nWinType = GetWindow()->GetType();
- switch ( nWinType )
- {
- case WINDOW_CONTROL:
- aSz.Width() = GetWindow()->GetTextWidth( GetWindow()->GetText() )+2*12;
- aSz.Height() = GetWindow()->GetTextHeight()+2*6;
- break;
-
- case WINDOW_PATTERNBOX:
- case WINDOW_NUMERICBOX:
- case WINDOW_METRICBOX:
- case WINDOW_CURRENCYBOX:
- case WINDOW_DATEBOX:
- case WINDOW_TIMEBOX:
- case WINDOW_LONGCURRENCYBOX:
- aSz.Width() = GetWindow()->GetTextWidth( GetWindow()->GetText() )+2*2;
- aSz.Height() = GetWindow()->GetTextHeight()+2*2;
- break;
- case WINDOW_SCROLLBARBOX:
- return VCLXScrollBar::implGetMinimumSize( GetWindow() );
- default:
- aSz = GetWindow()->GetOptimalSize( WINDOWSIZE_MINIMUM );
- }
- }
-
- return ::com::sun::star::awt::Size( aSz.Width(), aSz.Height() );
-}
-
-::com::sun::star::awt::Size VCLXWindow::getPreferredSize( ) throw(::com::sun::star::uno::RuntimeException)
-{
- return getMinimumSize();
-}
-
-::com::sun::star::awt::Size VCLXWindow::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- ::com::sun::star::awt::Size aNewSize( rNewSize );
- ::com::sun::star::awt::Size aMinSize = getMinimumSize();
-
- if ( aNewSize.Width < aMinSize.Width )
- aNewSize.Width = aMinSize.Width;
- if ( aNewSize.Height < aMinSize.Height )
- aNewSize.Height = aMinSize.Height;
-
- return aNewSize;
-}
-
-
-// ::com::sun::star::awt::XView
-sal_Bool VCLXWindow::setGraphics( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics >& rxDevice ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- if ( VCLUnoHelper::GetOutputDevice( rxDevice ) )
- mpImpl->mxViewGraphics = rxDevice;
- else
- mpImpl->mxViewGraphics = NULL;
-
- return mpImpl->mxViewGraphics.is();
-}
-
-::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics > VCLXWindow::getGraphics( ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- return mpImpl->mxViewGraphics;
-}
-
-::com::sun::star::awt::Size VCLXWindow::getSize( ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- Size aSz;
- if ( GetWindow() )
- aSz = GetWindow()->GetSizePixel();
- return ::com::sun::star::awt::Size( aSz.Width(), aSz.Height() );
-}
-
-void VCLXWindow::draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- Window* pWindow = GetWindow();
- if ( !pWindow )
- return;
-
- if ( isDesignMode() || mpImpl->isEnableVisible() )
- {
- TabPage* pTabPage = dynamic_cast< TabPage* >( pWindow );
- if ( pTabPage )
- {
- Point aPos( nX, nY );
- Size aSize = pWindow->GetSizePixel();
-
- OutputDevice* pDev = VCLUnoHelper::GetOutputDevice( mpImpl->mxViewGraphics );
- aPos = pDev->PixelToLogic( aPos );
- aSize = pDev->PixelToLogic( aSize );
-
- pTabPage->Draw( pDev, aPos, aSize, 0 );
- return;
- }
-
- OutputDevice* pDev = VCLUnoHelper::GetOutputDevice( mpImpl->mxViewGraphics );
- Point aPos( nX, nY );
-
- if ( !pDev )
- pDev = pWindow->GetParent();
-
- if ( pWindow->GetParent() && !pWindow->IsSystemWindow() && ( pWindow->GetParent() == pDev ) )
- {
- // #i40647# don't draw here if this is a recursive call
- // sometimes this is called recursively, because the Update call on the parent
- // (strangely) triggers another paint. Prevent a stack overflow here
- // Yes, this is only fixing symptoms for the moment ....
- // #i40647# / 2005-01-18 / frank.schoenheit@sun.com
- if ( !mpImpl->getDrawingOntoParent_ref() )
- {
- ::comphelper::FlagGuard aDrawingflagGuard( mpImpl->getDrawingOntoParent_ref() );
-
- sal_Bool bWasVisible = pWindow->IsVisible();
- Point aOldPos( pWindow->GetPosPixel() );
-
- if ( bWasVisible && aOldPos == aPos )
- {
- pWindow->Update();
- return;
- }
-
- pWindow->SetPosPixel( aPos );
-
- // Erstmal ein Update auf den Parent, damit nicht beim Update
- // auf dieses Fenster noch ein Paint vom Parent abgearbeitet wird,
- // wo dann ggf. dieses Fenster sofort wieder gehidet wird.
- if( pWindow->GetParent() )
- pWindow->GetParent()->Update();
-
- pWindow->Show();
- pWindow->Update();
- pWindow->SetParentUpdateMode( sal_False );
- pWindow->Hide();
- pWindow->SetParentUpdateMode( sal_True );
-
- pWindow->SetPosPixel( aOldPos );
- if ( bWasVisible )
- pWindow->Show( sal_True );
- }
- }
- else if ( pDev )
- {
- Size aSz = pWindow->GetSizePixel();
- aSz = pDev->PixelToLogic( aSz );
- Point aP = pDev->PixelToLogic( aPos );
-
- vcl::PDFExtOutDevData* pPDFExport = dynamic_cast<vcl::PDFExtOutDevData*>(pDev->GetExtOutDevData());
- bool bDrawSimple = ( pDev->GetOutDevType() == OUTDEV_PRINTER )
- || ( pDev->GetOutDevViewType() == OUTDEV_VIEWTYPE_PRINTPREVIEW )
- || ( pPDFExport != NULL );
- if ( bDrawSimple )
- {
- pWindow->Draw( pDev, aP, aSz, WINDOW_DRAW_NOCONTROLS );
- }
- else
- {
- sal_Bool bOldNW =pWindow->IsNativeWidgetEnabled();
- if( bOldNW )
- pWindow->EnableNativeWidget(sal_False);
- pWindow->PaintToDevice( pDev, aP, aSz );
- if( bOldNW )
- pWindow->EnableNativeWidget(sal_True);
- }
- }
- }
-}
-
-void VCLXWindow::setZoom( float fZoomX, float /*fZoomY*/ ) throw(::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- if ( GetWindow() )
- {
- // Fraction::Fraction takes a double, but we have a float only.
- // The implicit conversion from float to double can result in a precision loss, i.e. 1.2 is converted to
- // 1.200000000047something. To prevent this, we convert explicitly to double, and round it.
- double nZoom( fZoomX );
- nZoom = ::rtl::math::round( nZoom, 4 );
- GetWindow()->SetZoom( Fraction( nZoom ) );
- }
-}
-
-// ::com::sun::star::lang::XEventListener
-void SAL_CALL VCLXWindow::disposing( const ::com::sun::star::lang::EventObject& _rSource ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- // check if it comes from our AccessibleContext
- uno::Reference< uno::XInterface > aAC( mpImpl->mxAccessibleContext, uno::UNO_QUERY );
- uno::Reference< uno::XInterface > xSource( _rSource.Source, uno::UNO_QUERY );
-
- if ( aAC.get() == xSource.get() )
- { // yep, it does
- mpImpl->mxAccessibleContext = uno::Reference< accessibility::XAccessibleContext >();
- }
-}
-
-// ::com::sun::star::accessibility::XAccessible
-::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXWindow::getAccessibleContext( ) throw (::com::sun::star::uno::RuntimeException)
-{
- using namespace ::com::sun::star;
-
- SolarMutexGuard aGuard;
-
- // already disposed
- if( ! mpImpl )
- return uno::Reference< accessibility::XAccessibleContext >();
-
- if ( !mpImpl->mxAccessibleContext.is() && GetWindow() )
- {
- mpImpl->mxAccessibleContext = CreateAccessibleContext();
-
- // add as event listener to this component
- // in case somebody disposes it, we do not want to have a (though weak) reference to a dead
- // object
- uno::Reference< lang::XComponent > xComp( mpImpl->mxAccessibleContext, uno::UNO_QUERY );
- if ( xComp.is() )
- xComp->addEventListener( this );
- }
-
- return mpImpl->mxAccessibleContext;
-}
-
-// ::com::sun::star::awt::XDockable
-void SAL_CALL VCLXWindow::addDockableWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDockableWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- if ( xListener.is() )
- mpImpl->getDockableWindowListeners().addInterface( xListener );
-
-}
-
-void SAL_CALL VCLXWindow::removeDockableWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDockableWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- mpImpl->getDockableWindowListeners().removeInterface( xListener );
-}
-
-void SAL_CALL VCLXWindow::enableDocking( sal_Bool bEnable ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- Window* pWindow = GetWindow();
- if ( pWindow )
- pWindow->EnableDocking( bEnable );
-}
-
-sal_Bool SAL_CALL VCLXWindow::isFloating( ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- Window* pWindow = GetWindow();
- if( pWindow )
- return Window::GetDockingManager()->IsFloating( pWindow );
- else
- return sal_False;
-}
-
-void SAL_CALL VCLXWindow::setFloatingMode( sal_Bool bFloating ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- Window* pWindow = GetWindow();
- if( pWindow )
- Window::GetDockingManager()->SetFloatingMode( pWindow, bFloating );
-}
-
-sal_Bool SAL_CALL VCLXWindow::isLocked( ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- Window* pWindow = GetWindow();
- if( pWindow )
- return Window::GetDockingManager()->IsLocked( pWindow );
- else
- return sal_False;
-}
-
-void SAL_CALL VCLXWindow::lock( ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- Window* pWindow = GetWindow();
- if( pWindow && !Window::GetDockingManager()->IsFloating( pWindow ) )
- Window::GetDockingManager()->Lock( pWindow );
-}
-
-void SAL_CALL VCLXWindow::unlock( ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
-
- Window* pWindow = GetWindow();
- if( pWindow && !Window::GetDockingManager()->IsFloating( pWindow ) )
- Window::GetDockingManager()->Unlock( pWindow );
-}
-void SAL_CALL VCLXWindow::startPopupMode( const ::com::sun::star::awt::Rectangle& ) throw (::com::sun::star::uno::RuntimeException)
-{
- // TODO: remove interface in the next incompatible build
- SolarMutexGuard aGuard;
-
-}
-
-sal_Bool SAL_CALL VCLXWindow::isInPopupMode( ) throw (::com::sun::star::uno::RuntimeException)
-{
- // TODO: remove interface in the next incompatible build
- SolarMutexGuard aGuard;
- return sal_False;
-}
-
-
-// ::com::sun::star::awt::XWindow2
-
-void SAL_CALL VCLXWindow::setOutputSize( const ::com::sun::star::awt::Size& aSize ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- Window *pWindow;
- if( (pWindow = GetWindow()) != NULL )
- {
- DockingWindow *pDockingWindow = dynamic_cast< DockingWindow* >(pWindow);
- if( pDockingWindow )
- pDockingWindow->SetOutputSizePixel( VCLSize( aSize ) );
- else
- pWindow->SetOutputSizePixel( VCLSize( aSize ) );
- }
-}
-
-::com::sun::star::awt::Size SAL_CALL VCLXWindow::getOutputSize( ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- Window *pWindow;
- if( (pWindow = GetWindow()) != NULL )
- {
- DockingWindow *pDockingWindow = dynamic_cast< DockingWindow* >(pWindow);
- if( pDockingWindow )
- return AWTSize( pDockingWindow->GetOutputSizePixel() );
- else
- return AWTSize( pWindow->GetOutputSizePixel() );
- }
- else
- return ::com::sun::star::awt::Size();
-}
-
-sal_Bool SAL_CALL VCLXWindow::isVisible( ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if( GetWindow() )
- return GetWindow()->IsVisible();
- else
- return sal_False;
-}
-
-sal_Bool SAL_CALL VCLXWindow::isActive( ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if( GetWindow() )
- return GetWindow()->IsActive();
- else
- return sal_False;
-
-}
-
-sal_Bool SAL_CALL VCLXWindow::isEnabled( ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if( GetWindow() )
- return GetWindow()->IsEnabled();
- else
- return sal_False;
-}
-
-sal_Bool SAL_CALL VCLXWindow::hasFocus( ) throw (::com::sun::star::uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if( GetWindow() )
- return GetWindow()->HasFocus();
- else
- return sal_False;
-}
-
-// ::com::sun::star::beans::XPropertySetInfo
-
-UnoPropertyArrayHelper *
-VCLXWindow::GetPropHelper()
-{
- SolarMutexGuard aGuard;
- if ( mpImpl->mpPropHelper == NULL )
- {
- std::list< sal_uInt16 > aIDs;
- GetPropertyIds( aIDs );
- mpImpl->mpPropHelper = new UnoPropertyArrayHelper( aIDs );
- }
- return mpImpl->mpPropHelper;
-}
-
-::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property > SAL_CALL
-VCLXWindow::getProperties() throw (::com::sun::star::uno::RuntimeException)
-{
- return GetPropHelper()->getProperties();
-}
-::com::sun::star::beans::Property SAL_CALL
-VCLXWindow::getPropertyByName( const ::rtl::OUString& rName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException)
-{
- return GetPropHelper()->getPropertyByName( rName );
-}
-
-::sal_Bool SAL_CALL
-VCLXWindow::hasPropertyByName( const ::rtl::OUString& rName ) throw (::com::sun::star::uno::RuntimeException)
-{
- return GetPropHelper()->hasPropertyByName( rName );
-}
-
-Reference< XStyleSettings > SAL_CALL VCLXWindow::getStyleSettings() throw (RuntimeException)
-{
- return mpImpl->getStyleSettings();
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */