/* -*- 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 * * for a copy of the LGPLv3 License. * ************************************************************************/ #include "vclxdialog.hxx" #include #include #include #include #include #include #include #ifdef WNT #include #include #include #elif defined ( QUARTZ ) #include "premac.h" #include #include "postmac.h" #endif #include #include #include #include #include #include "forward.hxx" namespace layoutimpl { DBG_NAME( VCLXDialog ) VCLXDialog::VCLXDialog() : VCLXWindow() , VCLXTopWindow_Base( true ) , VCLXDialog_Base() , Bin() , bRealized( false ) , bResizeSafeguard( false ) { DBG_CTOR( VCLXDialog, NULL ); /* mxLayoutUnit = uno::Reference< awt::XLayoutUnit >( new LayoutUnit() ); assert(mxLayoutUnit.is());*/ } VCLXDialog::~VCLXDialog() { DBG_DTOR( VCLXDialog, NULL ); } osl::SolarMutex& VCLXDialog::GetMutexImpl() { return VCLXWindow::GetMutex(); } Window* VCLXDialog::GetWindowImpl() { return VCLXWindow::GetWindow(); } ::cppu::OInterfaceContainerHelper& VCLXDialog::GetTopWindowListenersImpl() { return GetTopWindowListeners(); } IMPLEMENT_2_FORWARD_XINTERFACE2( VCLXDialog, VCLXWindow, Bin, VCLXDialog_Base ); IMPLEMENT_FORWARD_XTYPEPROVIDER2( VCLXDialog, VCLXWindow, VCLXDialog_Base ); void SAL_CALL VCLXDialog::dispose() throw(::com::sun::star::uno::RuntimeException) { { ::osl::SolarGuard aGuard( GetMutex() ); ::com::sun::star::lang::EventObject aDisposeEvent; aDisposeEvent.Source = W3K_EXPLICIT_CAST (*this); // maTabListeners.disposeAndClear( aDisposeEvent ); } VCLXWindow::dispose(); } void VCLXDialog::resizedCb() { queueResize(); } void SAL_CALL VCLXDialog::allocateArea( const css::awt::Rectangle &rArea ) throw (css::uno::RuntimeException) { ::com::sun::star::awt::Size reqSize = Bin::getMinimumSize(); reqSize.Height = getHeightForWidth( rArea.Width ); if ( !bRealized ) { setPosSize( 0, 0, reqSize.Width, reqSize.Height, ::com::sun::star::awt::PosSize::SIZE ); bRealized = true; setVisible( true ); } else { ::com::sun::star::awt::Size curSize = getSize(); if ( reqSize.Width > curSize.Width ) setPosSize( 0, 0, reqSize.Width, 0, ::com::sun::star::awt::PosSize::WIDTH ); if ( reqSize.Height > curSize.Height ) setPosSize( 0, 0, 0, reqSize.Height, ::com::sun::star::awt::PosSize::HEIGHT ); } ::com::sun::star::awt::Size size = getSize(); maAllocation.Width = size.Width; maAllocation.Height = size.Height; Bin::allocateArea( maAllocation ); } void VCLXDialog::ProcessWindowEvent( const VclWindowEvent& _rVclWindowEvent ) { ::osl::ClearableSolarGuard aGuard( GetMutex() ); switch ( _rVclWindowEvent.GetId() ) { case VCLEVENT_WINDOW_RESIZE: resizedCb(); default: aGuard.clear(); VCLXWindow::ProcessWindowEvent( _rVclWindowEvent ); break; } } void SAL_CALL VCLXDialog::setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any &Value ) throw(::com::sun::star::uno::RuntimeException) { ::osl::SolarGuard aGuard( GetMutex() ); if ( GetWindow() ) { /* sal_uInt16 nPropertyId = GetPropertyId( PropertyName ); switch ( nPropertyId ) { default: */ VCLXWindow::setProperty( PropertyName, Value ); /* } */ } } ::com::sun::star::uno::Any SAL_CALL VCLXDialog::getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException) { ::osl::SolarGuard aGuard( GetMutex() ); ::com::sun::star::uno::Any aReturn; if ( GetWindow() ) { /* sal_uInt16 nPropertyId = GetPropertyId( PropertyName ); switch ( nPropertyId ) { default: */ aReturn = VCLXWindow::getProperty( PropertyName ); /* } */ } return aReturn; } void VCLXDialog::setTitle( const ::rtl::OUString& Title ) throw(::com::sun::star::uno::RuntimeException) { ::osl::SolarGuard aGuard( GetMutex() ); Window* pWindow = GetWindow(); if ( pWindow ) pWindow->SetText( Title ); } void VCLXDialog::setHelpId( sal_Int32 id ) throw(::com::sun::star::uno::RuntimeException) { ::osl::SolarGuard aGuard( GetMutex() ); Window* pWindow = GetWindow(); if ( pWindow ) pWindow->SetHelpId( id ); } ::rtl::OUString VCLXDialog::getTitle() throw(::com::sun::star::uno::RuntimeException) { ::osl::SolarGuard aGuard( GetMutex() ); ::rtl::OUString aTitle; Window* pWindow = GetWindow(); if ( pWindow ) aTitle = pWindow->GetText(); return aTitle; } sal_Int16 VCLXDialog::execute() throw(::com::sun::star::uno::RuntimeException) { ::osl::SolarGuard aGuard( GetMutex() ); sal_Int16 nRet = 0; if ( GetWindow() ) { Dialog* pDlg = (Dialog*) GetWindow(); Window* pParent = pDlg->GetWindow( WINDOW_PARENTOVERLAP ); Window* pOldParent = NULL; if ( pParent && !pParent->IsReallyVisible() ) { pOldParent = pDlg->GetParent(); Window* pFrame = pDlg->GetWindow( WINDOW_FRAME ); if ( pFrame != pDlg ) pDlg->SetParent( pFrame ); } nRet = pDlg->Execute(); if ( pOldParent ) pDlg->SetParent( pOldParent ); } return nRet; } void VCLXDialog::endDialog( sal_Int32 nResult ) throw(::com::sun::star::uno::RuntimeException) { ::osl::SolarGuard aGuard( GetMutex() ); if ( nResult == BUTTONID_HELP ) { // UGH: c&p button.cxx ::Window* pFocusWin = Application::GetFocusWindow(); if ( !pFocusWin ) pFocusWin = GetWindow(); HelpEvent aEvt( pFocusWin->GetPointerPosPixel(), HELPMODE_CONTEXT ); pFocusWin->RequestHelp( aEvt ); return; } Dialog* pDlg = (Dialog*) GetWindow(); if ( pDlg ) pDlg->EndDialog( nResult ); } void VCLXDialog::endExecute() throw(::com::sun::star::uno::RuntimeException) { endDialog( 0 ); } } // namespace layoutimpl /* vim:set shiftwidth=4 softtabstop=4 expandtab: */