1992 lines
54 KiB
C++
1992 lines
54 KiB
C++
/*************************************************************************
|
|
*
|
|
* $RCSfile: svapp.cxx,v $
|
|
*
|
|
* $Revision: 1.9 $
|
|
*
|
|
* last change: $Author: pl $ $Date: 2001-02-01 14:08:05 $
|
|
*
|
|
* The Contents of this file are made available subject to the terms of
|
|
* either of the following licenses
|
|
*
|
|
* - GNU Lesser General Public License Version 2.1
|
|
* - Sun Industry Standards Source License Version 1.1
|
|
*
|
|
* Sun Microsystems Inc., October, 2000
|
|
*
|
|
* GNU Lesser General Public License Version 2.1
|
|
* =============================================
|
|
* Copyright 2000 by Sun Microsystems, Inc.
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License version 2.1, as published by the Free Software Foundation.
|
|
*
|
|
* This library 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 for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*
|
|
*
|
|
* Sun Industry Standards Source License Version 1.1
|
|
* =================================================
|
|
* The contents of this file are subject to the Sun Industry Standards
|
|
* Source License Version 1.1 (the "License"); You may not use this file
|
|
* except in compliance with the License. You may obtain a copy of the
|
|
* License at http://www.openoffice.org/license.html.
|
|
*
|
|
* Software provided under this License is provided on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
|
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
|
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
|
* See the License for the specific provisions governing your rights and
|
|
* obligations concerning the Software.
|
|
*
|
|
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
|
*
|
|
* Copyright: 2000 by Sun Microsystems, Inc.
|
|
*
|
|
* All Rights Reserved.
|
|
*
|
|
* Contributor(s): _______________________________________
|
|
*
|
|
*
|
|
************************************************************************/
|
|
|
|
#define _SV_APP_CXX
|
|
|
|
#include <stdio.h>
|
|
#ifndef REMOTE_APPSERVER
|
|
#ifndef _SV_SVSYS_HXX
|
|
#include <svsys.h>
|
|
#endif
|
|
#ifndef _SV_SALINST_HXX
|
|
#include <salinst.hxx>
|
|
#endif
|
|
#ifndef _SV_SALFRAME_HXX
|
|
#include <salframe.hxx>
|
|
#endif
|
|
#else
|
|
#include "rvp.hxx"
|
|
#include <rmwindow.hxx>
|
|
#include <rmevents.hxx>
|
|
#include <vos/thread.hxx>
|
|
#ifndef _SV_MSGBOX_HXX
|
|
#include <msgbox.hxx>
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef _VOS_PROCESS_HXX
|
|
#include <vos/process.hxx>
|
|
#endif
|
|
#ifndef _VOS_MUTEX_HXX
|
|
#include <vos/mutex.hxx>
|
|
#endif
|
|
|
|
#if defined( WIN ) || defined( WNT ) || defined( OS2 )
|
|
#ifndef _DLL_HXX
|
|
#include <tools/dll.hxx>
|
|
#endif
|
|
#endif
|
|
#ifndef _TOOLS_H
|
|
#include <tools/tools.h>
|
|
#endif
|
|
#ifndef _DEBUG_HXX
|
|
#include <tools/debug.hxx>
|
|
#endif
|
|
#ifndef _SV_SVDATA_HXX
|
|
#include <svdata.hxx>
|
|
#endif
|
|
#ifndef _SV_SETTINGS_HXX
|
|
#include <settings.hxx>
|
|
#endif
|
|
#ifndef _ACCMGR_HXX
|
|
#include <accmgr.hxx>
|
|
#endif
|
|
#ifndef _SV_KEYCOD_HXX
|
|
#include <keycod.hxx>
|
|
#endif
|
|
#ifndef _SV_EVENT_HXX
|
|
#include <event.hxx>
|
|
#endif
|
|
#ifndef _SV_VIRDEV_HXX
|
|
#include <virdev.hxx>
|
|
#endif
|
|
#ifndef _SV_WINDATA_HXX
|
|
#include <windata.hxx>
|
|
#endif
|
|
#ifndef _SV_WINDOW_H
|
|
#include <window.h>
|
|
#endif
|
|
#ifndef _SV_WRKWIN_HXX
|
|
#include <wrkwin.hxx>
|
|
#endif
|
|
#ifndef _SV_IDLEMGR_HXX
|
|
#include <idlemgr.hxx>
|
|
#endif
|
|
#ifndef _SV_DRAG_HXX
|
|
#include <drag.hxx>
|
|
#endif
|
|
#ifndef _SV_SVAPP_HXX
|
|
#include <svapp.hxx>
|
|
#endif
|
|
#ifndef _SV_CVTGRF_HXX
|
|
#include <cvtgrf.hxx>
|
|
#endif
|
|
#ifndef _SV_ACCESS_HXX
|
|
#include <access.hxx>
|
|
#endif
|
|
#ifndef _VCL_UNOWRAP_HXX
|
|
#include <unowrap.hxx>
|
|
#endif
|
|
#ifndef _VCL_XCONNECTION_HXX
|
|
#include <xconnection.hxx>
|
|
#endif
|
|
|
|
#include <com/sun/star/uno/Reference.h>
|
|
#include <com/sun/star/awt/XToolkit.hpp>
|
|
#include <com/sun/star/uno/XNamingService.hpp>
|
|
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
|
|
|
|
#ifndef _COMPHELPER_PROCESSFACTORY_HXX_
|
|
#include <comphelper/processfactory.hxx>
|
|
#endif
|
|
|
|
#ifdef REMOTE_APPSERVER
|
|
#include <osl/signal.h>
|
|
#include <ooffice.hxx>
|
|
#include <cppuhelper/implbase1.hxx>
|
|
|
|
#include <com/sun/star/connection/XConnectionBroadcaster.hpp>
|
|
#include <com/sun/star/io/XStreamListener.hpp>
|
|
#include <com/sun/star/portal/client/XRmSync.hpp>
|
|
#endif
|
|
|
|
|
|
// #include <usr/refl.hxx>
|
|
class Reflection;
|
|
|
|
#pragma hdrstop
|
|
|
|
#ifdef REMOTE_APPSERVER
|
|
class RVPConnectionListener : public ::cppu::WeakAggImplHelper1< ::com::sun::star::io::XStreamListener >
|
|
{
|
|
::com::sun::star::uno::Reference< ::com::sun::star::connection::XConnectionBroadcaster > m_xBroadcaster;
|
|
public:
|
|
RVPConnectionListener( const ::com::sun::star::uno::Reference<
|
|
::com::sun::star::connection::XConnectionBroadcaster >& xBroadcaster ) :
|
|
m_xBroadcaster( xBroadcaster ) {}
|
|
|
|
// XEventListener
|
|
virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& );
|
|
|
|
// XStreamListener
|
|
virtual void SAL_CALL started();
|
|
virtual void SAL_CALL closed();
|
|
virtual void SAL_CALL terminated();
|
|
virtual void SAL_CALL error( const ::com::sun::star::uno::Any& rException );
|
|
};
|
|
|
|
void RVPConnectionListener::disposing( const ::com::sun::star::lang::EventObject& rObject )
|
|
{
|
|
m_xBroadcaster.clear();
|
|
}
|
|
|
|
void RVPConnectionListener::started()
|
|
{
|
|
#ifdef DEBUG
|
|
fprintf( stderr, "RVPConnectionListener::started\n" );
|
|
#endif
|
|
}
|
|
void RVPConnectionListener::closed()
|
|
{
|
|
#ifdef DEBUG
|
|
fprintf( stderr, "RVPConnectionListener::closed\n" );
|
|
#endif
|
|
}
|
|
void RVPConnectionListener::terminated()
|
|
{
|
|
#ifdef DEBUG
|
|
fprintf( stderr, "RVPConnectionListener::terminated\n" );
|
|
#endif
|
|
}
|
|
void RVPConnectionListener::error( const ::com::sun::star::uno::Any& rException )
|
|
{
|
|
#ifdef DEBUG
|
|
fprintf( stderr, "connection to client lost ... terminating\n" );
|
|
#endif
|
|
osl_raiseSignal( OSL_SIGNAL_USER_RVPCONNECTIONERROR, NULL );
|
|
}
|
|
|
|
#endif /* REMOTE_APPSERVER */
|
|
|
|
// =======================================================================
|
|
|
|
// --------------
|
|
// - ImplHotKey -
|
|
// --------------
|
|
|
|
struct ImplHotKey
|
|
{
|
|
ImplHotKey* mpNext;
|
|
void* mpUserData;
|
|
KeyCode maKeyCode;
|
|
Link maLink;
|
|
};
|
|
|
|
// =======================================================================
|
|
|
|
// -----------------
|
|
// - ImplEventHook -
|
|
// -----------------
|
|
|
|
struct ImplEventHook
|
|
{
|
|
ImplEventHook* mpNext;
|
|
void* mpUserData;
|
|
VCLEventHookProc mpProc;
|
|
};
|
|
|
|
// =======================================================================
|
|
|
|
Application* GetpApp()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
if ( !pSVData )
|
|
return NULL;
|
|
return pSVData->mpApp;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
Application::Application()
|
|
{
|
|
ImplInitSVData();
|
|
ImplGetSVData()->mpApp = this;
|
|
#ifndef REMOTE_APPSERVER
|
|
InitSalData();
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
Application::~Application()
|
|
{
|
|
ImplDeInitSVData();
|
|
#ifndef REMOTE_APPSERVER
|
|
DeInitSalData();
|
|
#endif
|
|
ImplGetSVData()->mpApp = NULL;
|
|
ImplDestroySVData();
|
|
GlobalDeInitTools();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::InitAppRes( const ResId& rResId )
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::QueryExit()
|
|
{
|
|
WorkWindow* pAppWin = ImplGetSVData()->maWinData.mpAppWin;
|
|
|
|
// Aufruf des Close-Handlers des Applikationsfensters
|
|
if ( pAppWin )
|
|
return pAppWin->Close();
|
|
else
|
|
return TRUE;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::UserEvent( ULONG, void* )
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::ShowStatusText( const XubString& )
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::ShowHelpStatusText( const XubString& )
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::ActivateExtHelp()
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::DeactivateExtHelp()
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::HideStatusText()
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::HideHelpStatusText()
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::FocusChanged()
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::DataChanged( const DataChangedEvent& )
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
void Application::Init()
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::DeInit()
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
USHORT Application::GetCommandLineParamCount()
|
|
{
|
|
NAMESPACE_VOS( OStartupInfo ) aStartInfo;
|
|
return (USHORT)aStartInfo.getCommandArgCount();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
XubString Application::GetCommandLineParam( USHORT nParam )
|
|
{
|
|
NAMESPACE_VOS( OStartupInfo ) aStartInfo;
|
|
NAMESPACE_RTL( OUString ) aParam;
|
|
aStartInfo.getCommandArg( nParam, aParam );
|
|
return XubString( aParam );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
const XubString& Application::GetAppFileName()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
DBG_ASSERT( pSVData->maAppData.mpAppFileName, "AppFileName vor SVMain ?!" );
|
|
if ( pSVData->maAppData.mpAppFileName )
|
|
return *pSVData->maAppData.mpAppFileName;
|
|
return ImplGetSVEmptyStr();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
USHORT Application::Exception( USHORT nError )
|
|
{
|
|
switch ( nError & EXC_MAJORTYPE )
|
|
{
|
|
// Bei System machen wir nichts und lassen dem System den
|
|
// vortritt
|
|
case EXC_SYSTEM:
|
|
return 0;
|
|
|
|
case EXC_DISPLAY:
|
|
case EXC_REMOTE:
|
|
return 0;
|
|
|
|
#ifdef DBG_UTIL
|
|
case EXC_RSCNOTLOADED:
|
|
Abort( XubString( RTL_CONSTASCII_USTRINGPARAM( "Resource not loaded" ) ) );
|
|
break;
|
|
case EXC_SYSOBJNOTCREATED:
|
|
Abort( XubString( RTL_CONSTASCII_USTRINGPARAM( "System Object not created" ) ) );
|
|
break;
|
|
default:
|
|
Abort( XubString( RTL_CONSTASCII_USTRINGPARAM( "Unknown Error" ) ) );
|
|
break;
|
|
#else
|
|
default:
|
|
Abort( ImplGetSVEmptyStr() );
|
|
break;
|
|
#endif
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::Abort( const XubString& rErrorText )
|
|
{
|
|
#ifndef REMOTE_APPSERVER
|
|
SalAbort( rErrorText );
|
|
#else
|
|
ErrorBox aErrorBox( NULL, WB_OK, rErrorText );
|
|
aErrorBox.Execute();
|
|
exit(-1);
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
#ifdef REMOTE_APPSERVER
|
|
|
|
ImplRemoteYieldMutex::ImplRemoteYieldMutex()
|
|
{
|
|
mnCount = 0;
|
|
mnMainThreadId = NAMESPACE_VOS(OThread)::getCurrentIdentifier();
|
|
mnThreadId = 0;
|
|
}
|
|
|
|
void SAL_CALL ImplRemoteYieldMutex::acquire()
|
|
{
|
|
OMutex::acquire();
|
|
mnThreadId = NAMESPACE_VOS(OThread)::getCurrentIdentifier();
|
|
mnCount++;
|
|
}
|
|
|
|
void SAL_CALL ImplRemoteYieldMutex::release()
|
|
{
|
|
if ( mnThreadId == NAMESPACE_VOS(OThread)::getCurrentIdentifier() )
|
|
{
|
|
if ( mnCount == 1 )
|
|
mnThreadId = 0;
|
|
mnCount--;
|
|
}
|
|
OMutex::release();
|
|
}
|
|
|
|
sal_Bool SAL_CALL ImplRemoteYieldMutex::tryToAcquire()
|
|
{
|
|
if ( OMutex::tryToAcquire() )
|
|
{
|
|
mnThreadId = NAMESPACE_VOS(OThread)::getCurrentIdentifier();
|
|
mnCount++;
|
|
return True;
|
|
}
|
|
else
|
|
return False;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
#ifdef DBG_UTIL
|
|
|
|
void ImplDbgTestSolarMutex()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
if ( pSVData->maAppData.mpSolarMutex->GetMainThreadId() !=
|
|
NAMESPACE_VOS(OThread)::getCurrentIdentifier() )
|
|
{
|
|
if ( pSVData->maAppData.mpSolarMutex->GetThreadId() !=
|
|
NAMESPACE_VOS(OThread)::getCurrentIdentifier() )
|
|
{
|
|
DBG_ERROR( "SolarMutex not locked, and not thread save code in VCL is called from outside of the main thread" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( pSVData->maAppData.mpSolarMutex->GetThreadId() !=
|
|
NAMESPACE_VOS(OThread)::getCurrentIdentifier() )
|
|
{
|
|
DBG_ERROR( "SolarMutex not locked in the main thread" );
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
NAMESPACE_VOS(OThreadData)* getThreadLocalEnvironment();
|
|
|
|
static void ImplRemoteDispatch( BOOL bWait )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
// Yield-Semaphore freigeben
|
|
BOOL bMainThread = TRUE;
|
|
ULONG nAcquireCount;
|
|
ULONG i;
|
|
if ( pSVData->maAppData.mpSolarMutex->GetThreadId() ==
|
|
::vos::OThread::getCurrentIdentifier() )
|
|
{
|
|
nAcquireCount = pSVData->maAppData.mpSolarMutex->GetAcquireCount();
|
|
for ( i = 0; i < nAcquireCount; i++ )
|
|
pSVData->maAppData.mpSolarMutex->release();
|
|
}
|
|
else
|
|
{
|
|
bMainThread = FALSE;
|
|
nAcquireCount = 0;
|
|
}
|
|
|
|
RmEvent* pEvent = pSVData->mpRmEventQueue->GetNextEvent( bWait );
|
|
|
|
// Yield-Semaphore wieder holen
|
|
while ( nAcquireCount )
|
|
{
|
|
pSVData->maAppData.mpSolarMutex->acquire();
|
|
nAcquireCount--;
|
|
}
|
|
|
|
if ( pEvent )
|
|
{
|
|
if ( !bMainThread )
|
|
{
|
|
pSVData->maAppData.mpSolarMutex->acquire();
|
|
ImplDispatchEvent( (ExtRmEvent*)pEvent );
|
|
pSVData->maAppData.mpSolarMutex->release();
|
|
}
|
|
else
|
|
ImplDispatchEvent( (ExtRmEvent*)pEvent );
|
|
}
|
|
else
|
|
::vos::OThread::yield();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
RVPSync::RVPSync( const REF( NMSP_CLIENT::XRmSync )& xRVPSync ) :
|
|
mxRVPSync( xRVPSync ),
|
|
mnRVPCount( 0 ),
|
|
mnLastThreadId( 0 )
|
|
{
|
|
}
|
|
|
|
void RVPSync::CheckForRVPSync( const char* )
|
|
{
|
|
|
|
NAMESPACE_VOS(OThread)::TThreadIdentifier aThreadId =
|
|
NAMESPACE_VOS(OThread)::getCurrentIdentifier();
|
|
|
|
if ( mnLastThreadId != aThreadId )
|
|
{
|
|
// thread has changed, we have to send a Sync to the client once!
|
|
mnLastThreadId = aThreadId;
|
|
try
|
|
{
|
|
::vos::OGuard aGuard( maMutex );
|
|
{
|
|
if ( mxRVPSync.is() )
|
|
mxRVPSync->Sync( mnRVPCount );
|
|
|
|
osl_incrementInterlockedCount( &mnRVPCount );
|
|
}
|
|
}
|
|
catch ( ::com::sun::star::uno::RuntimeException& )
|
|
{
|
|
}
|
|
}
|
|
else
|
|
osl_incrementInterlockedCount( &mnRVPCount );
|
|
}
|
|
|
|
#endif
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::Execute()
|
|
{
|
|
DBG_STARTAPPEXECUTE();
|
|
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
pSVData->maAppData.mbInAppExecute = TRUE;
|
|
|
|
while ( !pSVData->maAppData.mbAppQuit )
|
|
Application::Yield();
|
|
|
|
pSVData->maAppData.mbInAppExecute = FALSE;
|
|
|
|
DBG_ENDAPPEXECUTE();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::Reschedule()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
// Restliche Timer abarbeitet
|
|
while ( pSVData->mbNotAllTimerCalled )
|
|
ImplTimerCallbackProc();
|
|
|
|
pSVData->maAppData.mnDispatchLevel++;
|
|
#ifndef REMOTE_APPSERVER
|
|
pSVData->mpDefInst->Yield( FALSE );
|
|
#else
|
|
ImplRemoteDispatch( FALSE );
|
|
#endif
|
|
pSVData->maAppData.mnDispatchLevel--;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::Yield()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
// Restliche Timer abarbeitet
|
|
while ( pSVData->mbNotAllTimerCalled )
|
|
ImplTimerCallbackProc();
|
|
|
|
// Wenn Application schon beendet wurde, warten wir nicht mehr auf
|
|
// Messages, sondern verarbeiten nur noch welche, wenn noch welche
|
|
// vorliegen
|
|
pSVData->maAppData.mnDispatchLevel++;
|
|
#ifndef REMOTE_APPSERVER
|
|
pSVData->mpDefInst->Yield( !pSVData->maAppData.mbAppQuit );
|
|
#else
|
|
ImplRemoteDispatch( TRUE );
|
|
#endif
|
|
pSVData->maAppData.mnDispatchLevel--;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
IMPL_STATIC_LINK( ImplSVAppData, ImplQuitMsg, void*, EMPTYARG )
|
|
{
|
|
ImplGetSVData()->maAppData.mbAppQuit = TRUE;
|
|
return 0;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::Quit()
|
|
{
|
|
Application::PostUserEvent( STATIC_LINK( NULL, ImplSVAppData, ImplQuitMsg ) );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
#ifdef _VOS_NO_NAMESPACE
|
|
IMutex& Application::GetSolarMutex()
|
|
#else
|
|
vos::IMutex& Application::GetSolarMutex()
|
|
#endif
|
|
{
|
|
#ifndef REMOTE_APPSERVER
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
return *(pSVData->mpDefInst->GetYieldMutex());
|
|
#else
|
|
return *(ImplGetSVData()->maAppData.mpSolarMutex);
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
#ifdef _VOS_NO_NAMESPACE
|
|
OThread::TThreadIdentifier Application::GetMainThreadIdentifier()
|
|
#else
|
|
vos::OThread::TThreadIdentifier Application::GetMainThreadIdentifier()
|
|
#endif
|
|
{
|
|
return ImplGetSVData()->mnMainThreadId;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
ULONG Application::ReleaseSolarMutex()
|
|
{
|
|
#ifndef REMOTE_APPSERVER
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
return pSVData->mpDefInst->ReleaseYieldMutex();
|
|
#else
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
// Wenn wir gelockt haben, dann freigeben
|
|
if ( pSVData->maAppData.mpSolarMutex->GetThreadId() ==
|
|
NAMESPACE_VOS(OThread)::getCurrentIdentifier() )
|
|
{
|
|
ULONG nCount = pSVData->maAppData.mpSolarMutex->GetAcquireCount();
|
|
ULONG n = nCount;
|
|
while ( n )
|
|
{
|
|
pSVData->maAppData.mpSolarMutex->release();
|
|
n--;
|
|
}
|
|
|
|
return nCount;
|
|
}
|
|
else
|
|
return 0;
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::AcquireSolarMutex( ULONG nCount )
|
|
{
|
|
#ifndef REMOTE_APPSERVER
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
pSVData->mpDefInst->AcquireYieldMutex( nCount );
|
|
#else
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
while ( nCount )
|
|
{
|
|
pSVData->maAppData.mpSolarMutex->acquire();
|
|
nCount--;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::IsInMain()
|
|
{
|
|
return ImplGetSVData()->maAppData.mbInAppMain;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::IsInExecute()
|
|
{
|
|
return ImplGetSVData()->maAppData.mbInAppExecute;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::IsShutDown()
|
|
{
|
|
return ImplGetSVData()->maAppData.mbAppQuit;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::IsInModalMode()
|
|
{
|
|
return (ImplGetSVData()->maAppData.mnModalMode != 0);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
USHORT Application::GetDispatchLevel()
|
|
{
|
|
return ImplGetSVData()->maAppData.mnDispatchLevel;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::AnyInput( USHORT nType )
|
|
{
|
|
#ifndef REMOTE_APPSERVER
|
|
return SalInstance::AnyInput( nType );
|
|
#else
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
if( ( nType & ( INPUT_ANY ) ) == ( INPUT_ANY ) )
|
|
{
|
|
return( pSVData->mpRmEventQueue->HasMouseEvent() ||
|
|
pSVData->mpRmEventQueue->HasKeyEvent() ||
|
|
pSVData->mpRmEventQueue->HasPaintEvent() ||
|
|
pSVData->mpRmEventQueue->HasTimerEvent() ||
|
|
pSVData->mpRmEventQueue->HasOtherEvent() );
|
|
}
|
|
else if( ( nType & ( INPUT_MOUSEANDKEYBOARD ) ) == ( INPUT_MOUSEANDKEYBOARD ) )
|
|
{
|
|
return( pSVData->mpRmEventQueue->HasMouseEvent() ||
|
|
pSVData->mpRmEventQueue->HasKeyEvent() );
|
|
}
|
|
else
|
|
{
|
|
if( nType & INPUT_MOUSE )
|
|
return pSVData->mpRmEventQueue->HasMouseEvent();
|
|
|
|
if( nType & INPUT_KEYBOARD )
|
|
return pSVData->mpRmEventQueue->HasKeyEvent();
|
|
|
|
if( nType & INPUT_PAINT )
|
|
return pSVData->mpRmEventQueue->HasPaintEvent();
|
|
|
|
if( nType & INPUT_TIMER )
|
|
return pSVData->mpRmEventQueue->HasTimerEvent();
|
|
|
|
if( nType & INPUT_OTHER )
|
|
return pSVData->mpRmEventQueue->HasOtherEvent();
|
|
}
|
|
|
|
return FALSE;
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
ULONG Application::GetLastInputInterval()
|
|
{
|
|
return (Time::GetSystemTicks()-ImplGetSVData()->maAppData.mnLastInputTime);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
extern int nImplSysDialog;
|
|
|
|
BOOL Application::IsUICaptured()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
// Wenn Mouse gecaptured, oder im TrackingModus oder im Auswahlmodus
|
|
// eines FloatingWindows (wie Menus, Aufklapp-ToolBoxen) soll kein
|
|
// weiteres Fenster aufgezogen werden
|
|
if ( pSVData->maWinData.mpCaptureWin || pSVData->maWinData.mpTrackWin ||
|
|
pSVData->maWinData.mpFirstFloat || DragManager::GetDragManager() ||
|
|
nImplSysDialog )
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::IsUserActive( USHORT nTest )
|
|
{
|
|
if ( nTest & (USERACTIVE_MOUSEDRAG | USERACTIVE_INPUT) )
|
|
{
|
|
if ( IsUICaptured() )
|
|
return TRUE;
|
|
}
|
|
|
|
if ( nTest & USERACTIVE_INPUT )
|
|
{
|
|
if ( GetLastInputInterval() < 500 )
|
|
return TRUE;
|
|
|
|
if ( AnyInput( INPUT_KEYBOARD ) )
|
|
return TRUE;
|
|
}
|
|
|
|
if ( nTest & USERACTIVE_MODALDIALOG )
|
|
{
|
|
if ( ImplGetSVData()->maAppData.mnModalDialog )
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SystemSettingsChanging( AllSettings& rSettings,
|
|
Window* pFrame )
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::MergeSystemSettings( AllSettings& rSettings )
|
|
{
|
|
#ifndef REMOTE_APPSERVER
|
|
ImplGetDefaultWindow()->ImplGetFrame()->UpdateSettings( rSettings );
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SetSettings( const AllSettings& rSettings )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
if ( !pSVData->maAppData.mpSettings )
|
|
{
|
|
pSVData->maAppData.mpSettings = new AllSettings();
|
|
*pSVData->maAppData.mpSettings = rSettings;
|
|
}
|
|
else
|
|
{
|
|
AllSettings aOldSettings = *pSVData->maAppData.mpSettings;
|
|
*pSVData->maAppData.mpSettings = rSettings;
|
|
ULONG nChangeFlags = aOldSettings.GetChangeFlags( *pSVData->maAppData.mpSettings );
|
|
if ( nChangeFlags )
|
|
{
|
|
DataChangedEvent aDCEvt( DATACHANGED_SETTINGS, &aOldSettings, nChangeFlags );
|
|
GetpApp()->DataChanged( aDCEvt );
|
|
|
|
// Update all windows
|
|
Window* pFirstFrame = pSVData->maWinData.mpFirstFrame;
|
|
// Daten, die neu berechnet werden muessen, zuruecksetzen
|
|
long nOldDPIX;
|
|
long nOldDPIY;
|
|
if ( pFirstFrame )
|
|
{
|
|
nOldDPIX = pFirstFrame->mnDPIX;
|
|
nOldDPIY = pFirstFrame->mnDPIY;
|
|
pSVData->maGDIData.mnAppFontX = 0;
|
|
}
|
|
Window* pFrame = pFirstFrame;
|
|
while ( pFrame )
|
|
{
|
|
// AppFont-Cache-Daten zuruecksetzen
|
|
pFrame->mpFrameData->meMapUnit = MAP_PIXEL;
|
|
|
|
// UpdateSettings am ClientWindow aufrufen, damit
|
|
// die Daten nicht doppelt geupdatet werden
|
|
Window* pClientWin = pFrame;
|
|
while ( pClientWin->ImplGetClientWindow() )
|
|
pClientWin = pClientWin->ImplGetClientWindow();
|
|
pClientWin->UpdateSettings( rSettings, TRUE );
|
|
|
|
Window* pTempWin = pFrame->mpFrameData->mpFirstOverlap;
|
|
while ( pTempWin )
|
|
{
|
|
// UpdateSettings am ClientWindow aufrufen, damit
|
|
// die Daten nicht doppelt geupdatet werden
|
|
pClientWin = pTempWin;
|
|
while ( pClientWin->ImplGetClientWindow() )
|
|
pClientWin = pClientWin->ImplGetClientWindow();
|
|
pClientWin->UpdateSettings( rSettings, TRUE );
|
|
pTempWin = pTempWin->mpNextOverlap;
|
|
}
|
|
|
|
pFrame = pFrame->mpFrameData->mpNextFrame;
|
|
}
|
|
|
|
// Wenn sich die DPI-Aufloesung fuer Screen-Ausgaben
|
|
// geaendert hat, setzen wir auch bei allen
|
|
// Screen-Kompatiblen VirDev's die neue Aufloesung
|
|
pFirstFrame = pSVData->maWinData.mpFirstFrame;
|
|
if ( pFirstFrame )
|
|
{
|
|
if ( (pFirstFrame->mnDPIX != nOldDPIX) ||
|
|
(pFirstFrame->mnDPIY != nOldDPIY) )
|
|
{
|
|
VirtualDevice* pVirDev = pSVData->maGDIData.mpFirstVirDev;
|
|
while ( pVirDev )
|
|
{
|
|
if ( pVirDev->mbScreenComp &&
|
|
(pVirDev->mnDPIX == nOldDPIX) &&
|
|
(pVirDev->mnDPIY == nOldDPIY) )
|
|
{
|
|
pVirDev->mnDPIX = pFirstFrame->mnDPIX;
|
|
pVirDev->mnDPIY = pFirstFrame->mnDPIY;
|
|
if ( pVirDev->IsMapMode() )
|
|
{
|
|
MapMode aMapMode = pVirDev->GetMapMode();
|
|
pVirDev->SetMapMode();
|
|
pVirDev->SetMapMode( aMapMode );
|
|
}
|
|
}
|
|
|
|
pVirDev = pVirDev->mpNext;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
const AllSettings& Application::GetSettings()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
if ( !pSVData->maAppData.mpSettings )
|
|
pSVData->maAppData.mpSettings = new AllSettings();
|
|
return *(pSVData->maAppData.mpSettings);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::NotifyAllWindows( DataChangedEvent& rDCEvt )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
Window* pFrame = pSVData->maWinData.mpFirstFrame;
|
|
while ( pFrame )
|
|
{
|
|
pFrame->NotifyAllChilds( rDCEvt );
|
|
|
|
Window* pSysWin = pFrame->mpFrameData->mpFirstOverlap;
|
|
while ( pSysWin )
|
|
{
|
|
pSysWin->NotifyAllChilds( rDCEvt );
|
|
pSysWin = pSysWin->mpNextOverlap;
|
|
}
|
|
|
|
pFrame = pFrame->mpFrameData->mpNextFrame;
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
ULONG Application::PostUserEvent( ULONG nEvent, void* pEventData )
|
|
{
|
|
ULONG nEventId;
|
|
PostUserEvent( nEventId, nEvent, pEventData );
|
|
return nEventId;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
ULONG Application::PostUserEvent( const Link& rLink, void* pCaller )
|
|
{
|
|
ULONG nEventId;
|
|
PostUserEvent( nEventId, rLink, pCaller );
|
|
return nEventId;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::PostUserEvent( ULONG& rEventId, ULONG nEvent, void* pEventData )
|
|
{
|
|
ImplSVEvent* pSVEvent = new ImplSVEvent;
|
|
pSVEvent->mnEvent = nEvent;
|
|
pSVEvent->mpData = pEventData;
|
|
pSVEvent->mpLink = NULL;
|
|
pSVEvent->mpWindow = NULL;
|
|
pSVEvent->mbCall = TRUE;
|
|
rEventId = (ULONG)pSVEvent;
|
|
#ifndef REMOTE_APPSERVER
|
|
if ( ImplGetDefaultWindow()->ImplGetFrame()->PostEvent( pSVEvent ) )
|
|
return TRUE;
|
|
else
|
|
{
|
|
rEventId = 0;
|
|
delete pSVEvent;
|
|
return FALSE;
|
|
}
|
|
#else
|
|
ExtRmEvent* pEvt = new ExtRmEvent( RMEVENT_USEREVENT, NULL, pSVEvent );
|
|
ImplPostEvent( pEvt );
|
|
return TRUE;
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::PostUserEvent( ULONG& rEventId, const Link& rLink, void* pCaller )
|
|
{
|
|
ImplSVEvent* pSVEvent = new ImplSVEvent;
|
|
pSVEvent->mnEvent = 0;
|
|
pSVEvent->mpData = pCaller;
|
|
pSVEvent->mpLink = new Link( rLink );
|
|
pSVEvent->mpWindow = NULL;
|
|
pSVEvent->mbCall = TRUE;
|
|
rEventId = (ULONG)pSVEvent;
|
|
#ifndef REMOTE_APPSERVER
|
|
if ( ImplGetDefaultWindow()->ImplGetFrame()->PostEvent( pSVEvent ) )
|
|
return TRUE;
|
|
else
|
|
{
|
|
rEventId = 0;
|
|
delete pSVEvent;
|
|
return FALSE;
|
|
}
|
|
#else
|
|
ExtRmEvent* pEvt = new ExtRmEvent( RMEVENT_USEREVENT, NULL, pSVEvent );
|
|
ImplPostEvent( pEvt );
|
|
return TRUE;
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::RemoveUserEvent( ULONG nUserEvent )
|
|
{
|
|
ImplSVEvent* pSVEvent = (ImplSVEvent*)nUserEvent;
|
|
|
|
DBG_ASSERT( !pSVEvent->mpWindow,
|
|
"Application::RemoveUserEvent(): Event is send to a window" );
|
|
DBG_ASSERT( pSVEvent->mbCall,
|
|
"Application::RemoveUserEvent(): Event is already removed" );
|
|
|
|
if ( pSVEvent->mpWindow )
|
|
{
|
|
pSVEvent->mpWindow->ImplRemoveDel( &(pSVEvent->maDelData) );
|
|
pSVEvent->mpWindow = NULL;
|
|
}
|
|
|
|
pSVEvent->mbCall = FALSE;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::InsertIdleHdl( const Link& rLink, USHORT nPrio )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
// Falls er noch nicht existiert, dann anlegen
|
|
if ( !pSVData->maAppData.mpIdleMgr )
|
|
pSVData->maAppData.mpIdleMgr = new ImplIdleMgr;
|
|
|
|
return pSVData->maAppData.mpIdleMgr->InsertIdleHdl( rLink, nPrio );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::RemoveIdleHdl( const Link& rLink )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
if ( pSVData->maAppData.mpIdleMgr )
|
|
pSVData->maAppData.mpIdleMgr->RemoveIdleHdl( rLink );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
WorkWindow* Application::GetAppWindow()
|
|
{
|
|
return ImplGetSVData()->maWinData.mpAppWin;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
Window* Application::GetFocusWindow()
|
|
{
|
|
return ImplGetSVData()->maWinData.mpFocusWin;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
OutputDevice* Application::GetDefaultDevice()
|
|
{
|
|
return ImplGetDefaultWindow();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
Window* Application::GetFirstTopLevelWindow()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
return pSVData->maWinData.mpFirstFrame;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
Window* Application::GetNextTopLevelWindow( Window* pWindow )
|
|
{
|
|
return pWindow->mpFrameData->mpNextFrame;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SetAppName( const XubString& rUniqueName )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
// Falls er noch nicht existiert, dann anlegen
|
|
if ( !pSVData->maAppData.mpAppName )
|
|
pSVData->maAppData.mpAppName = new XubString( rUniqueName );
|
|
else
|
|
*(pSVData->maAppData.mpAppName) = rUniqueName;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
XubString Application::GetAppName()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
if ( pSVData->maAppData.mpAppName )
|
|
return *(pSVData->maAppData.mpAppName);
|
|
else
|
|
return ImplGetSVEmptyStr();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SetDisplayName( const UniString& rName )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
// Falls er noch nicht existiert, dann anlegen
|
|
if ( !pSVData->maAppData.mpDisplayName )
|
|
pSVData->maAppData.mpDisplayName = new UniString( rName );
|
|
else
|
|
*(pSVData->maAppData.mpDisplayName) = rName;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
UniString Application::GetDisplayName()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
if ( pSVData->maAppData.mpDisplayName )
|
|
return *(pSVData->maAppData.mpDisplayName);
|
|
else if ( pSVData->maWinData.mpAppWin )
|
|
return pSVData->maWinData.mpAppWin->GetText();
|
|
else
|
|
return ImplGetSVEmptyStr();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::InsertAccel( Accelerator* pAccel )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
if ( !pSVData->maAppData.mpAccelMgr )
|
|
pSVData->maAppData.mpAccelMgr = new ImplAccelManager();
|
|
return pSVData->maAppData.mpAccelMgr->InsertAccel( pAccel );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::RemoveAccel( Accelerator* pAccel )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
if ( pSVData->maAppData.mpAccelMgr )
|
|
pSVData->maAppData.mpAccelMgr->RemoveAccel( pAccel );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::FlushAccel()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
if ( pSVData->maAppData.mpAccelMgr )
|
|
pSVData->maAppData.mpAccelMgr->FlushAccel();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SetHelp( Help* pHelp )
|
|
{
|
|
ImplGetSVData()->maAppData.mpHelp = pHelp;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
Help* Application::GetHelp()
|
|
{
|
|
return ImplGetSVData()->maAppData.mpHelp;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::EnableAutoHelpId( BOOL bEnabled )
|
|
{
|
|
ImplGetSVData()->maHelpData.mbAutoHelpId = bEnabled;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::IsAutoHelpIdEnabled()
|
|
{
|
|
return ImplGetSVData()->maHelpData.mbAutoHelpId;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::EnableAutoMnemonic( BOOL bEnabled )
|
|
{
|
|
ImplGetSVData()->maAppData.mbAutoMnemonics = bEnabled;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::IsAutoMnemonicEnabled()
|
|
{
|
|
return ImplGetSVData()->maAppData.mbAutoMnemonics;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SetDialogScaleX( short nScale )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
pSVData->maAppData.mnDialogScaleX = nScale;
|
|
pSVData->maGDIData.mnAppFontX = pSVData->maGDIData.mnRealAppFontX;
|
|
if ( nScale )
|
|
pSVData->maGDIData.mnAppFontX += (pSVData->maGDIData.mnAppFontX*nScale)/100;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
short Application::GetDialogScaleX()
|
|
{
|
|
return ImplGetSVData()->maAppData.mnDialogScaleX;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SetDefDialogParent( Window* pWindow )
|
|
{
|
|
ImplGetSVData()->maWinData.mpDefDialogParent = pWindow;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
Window* Application::GetDefDialogParent()
|
|
{
|
|
return ImplGetSVData()->maWinData.mpDefDialogParent;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::EnableDialogCancel( BOOL bDialogCancel )
|
|
{
|
|
ImplGetSVData()->maAppData.mbDialogCancel = bDialogCancel;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::IsDialogCancelEnabled()
|
|
{
|
|
return ImplGetSVData()->maAppData.mbDialogCancel;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SetSystemWindowMode( USHORT nMode )
|
|
{
|
|
ImplGetSVData()->maAppData.mnSysWinMode = nMode;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
USHORT Application::GetSystemWindowMode()
|
|
{
|
|
return ImplGetSVData()->maAppData.mnSysWinMode;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SetResourcePath( const XubString& rPath )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
// if it doesn't exist create a new one
|
|
if ( !pSVData->maAppData.mpResPath )
|
|
pSVData->maAppData.mpResPath = new XubString( rPath );
|
|
else
|
|
*(pSVData->maAppData.mpResPath) = rPath;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
const XubString& Application::GetResourcePath()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
if ( pSVData->maAppData.mpResPath )
|
|
return *(pSVData->maAppData.mpResPath);
|
|
else
|
|
return ImplGetSVEmptyStr();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
const String& Application::GetFontPath()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
if( !pSVData->maAppData.mpFontPath )
|
|
{
|
|
if( const char* pFontPath = ::getenv( "SAL_FONTPATH_PRIVATE" ) )
|
|
pSVData->maAppData.mpFontPath = new String( String::CreateFromAscii( pFontPath ) );
|
|
}
|
|
|
|
if( pSVData->maAppData.mpFontPath )
|
|
return *(pSVData->maAppData.mpFontPath);
|
|
return ImplGetSVEmptyStr();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SetFontPath( const String& rPath )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
// if it doesn't exist create a new one
|
|
if( !pSVData->maAppData.mpFontPath )
|
|
pSVData->maAppData.mpFontPath = new String( rPath );
|
|
else
|
|
*(pSVData->maAppData.mpFontPath) = rPath;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::EnterMultiThread( BOOL bEnter )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
#if defined( WIN ) || defined( WNT ) || defined( OS2 )
|
|
::EnterMultiThread( bEnter );
|
|
#endif
|
|
|
|
if ( bEnter )
|
|
{
|
|
pSVData->mnThreadCount++;
|
|
|
|
#ifndef REMOTE_APPSERVER
|
|
// Unser DefaultWindow muss vor einem Thread-Starten erzeugt werden,
|
|
// damit dieses im Hauptthread laeuft
|
|
ImplGetDefaultWindow();
|
|
#endif
|
|
}
|
|
else
|
|
pSVData->mnThreadCount--;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::IsMultiThread()
|
|
{
|
|
return (ImplGetSVData()->mnThreadCount != 0);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
UniqueItemId Application::CreateUniqueId()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
|
|
if ( !pSVData->maAppData.mpUniqueIdCont )
|
|
pSVData->maAppData.mpUniqueIdCont = new UniqueIdContainer( UNIQUEID_SV_BEGIN );
|
|
return pSVData->maAppData.mpUniqueIdCont->CreateId();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
SystemInfoType Application::GetClientSystem()
|
|
{
|
|
#ifndef REMOTE_APPSERVER
|
|
return GetServerSystem();
|
|
#else
|
|
static SystemInfoType nImplClientSystemInfo = 0;
|
|
if ( !nImplClientSystemInfo )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
if ( pSVData->mxStatus.is() )
|
|
{
|
|
CHECK_FOR_RVPSYNC_NORMAL()
|
|
nImplClientSystemInfo = (SystemInfoType)pSVData->mxStatus->GetSystemType();
|
|
}
|
|
}
|
|
|
|
return nImplClientSystemInfo;
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
SystemInfoType Application::GetServerSystem()
|
|
{
|
|
#if defined( WIN )
|
|
return SYSTEMINFO_SYSTEM_WINDOWS | SYSTEMINFO_SYSTEMBASE_DOS;
|
|
#elif defined( WNT )
|
|
return SYSTEMINFO_SYSTEM_WINDOWS | SYSTEMINFO_SYSTEMBASE_NT;
|
|
#elif defined( OS2 )
|
|
return SYSTEMINFO_SYSTEM_OS2;
|
|
#elif defined( MAC )
|
|
return SYSTEMINFO_SYSTEM_MAC;
|
|
#elif defined( UNX )
|
|
#if defined( LINUX )
|
|
return SYSTEMINFO_SYSTEM_UNIX | SYSTEMINFO_SYSTEMBASE_LINUX;
|
|
#elif defined( SOLARIS )
|
|
return SYSTEMINFO_SYSTEM_UNIX | SYSTEMINFO_SYSTEMBASE_SOLARIS;
|
|
#elif defined( SCO )
|
|
return SYSTEMINFO_SYSTEM_UNIX | SYSTEMINFO_SYSTEMBASE_SCO;
|
|
#elif defined( NETBSD )
|
|
return SYSTEMINFO_SYSTEM_UNIX | SYSTEMINFO_SYSTEMBASE_NETBSD;
|
|
#elif defined( AIX )
|
|
return SYSTEMINFO_SYSTEM_UNIX | SYSTEMINFO_SYSTEMBASE_AIX;
|
|
#elif defined( IRIX )
|
|
return SYSTEMINFO_SYSTEM_UNIX | SYSTEMINFO_SYSTEMBASE_IRIX;
|
|
#elif defined( HPUX )
|
|
return SYSTEMINFO_SYSTEM_UNIX | SYSTEMINFO_SYSTEMBASE_HPUX;
|
|
#elif defined( FREEBSD )
|
|
return SYSTEMINFO_SYSTEM_UNIX | SYSTEMINFO_SYSTEMBASE_FREEBSD;
|
|
#elif defined( MACOSX )
|
|
return SYSTEMINFO_SYSTEM_UNIX | SYSTEMINFO_SYSTEMBASE_MACOSX;
|
|
#else
|
|
#error Unknown Unix-System, new SystemBase must be defined!
|
|
#endif
|
|
#else
|
|
#error Unknown System, new System must be defined!
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::IsRemoteServer()
|
|
{
|
|
#ifndef REMOTE_APPSERVER
|
|
return FALSE;
|
|
#else
|
|
return TRUE;
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void* Application::GetRemoteEnvironment()
|
|
{
|
|
#ifndef REMOTE_APPSERVER
|
|
return NULL;
|
|
#else
|
|
return ImplGetSVData()->mhRemoteEnv;
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > Application::GetUnoInstance(
|
|
::com::sun::star::uno::Reference< ::com::sun::star::connection::XConnection > rConnection,
|
|
const ::rtl::OUString& sObjectName )
|
|
{
|
|
::com::sun::star::uno::Reference < ::com::sun::star::uno::XInterface > r;
|
|
|
|
#ifdef REMOTE_APPSERVER
|
|
static oslInterlockedCount nRvpClientCount = 0;
|
|
|
|
if ( sObjectName == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "StarOffice.Startup" )))
|
|
{
|
|
if ( osl_incrementInterlockedCount( &nRvpClientCount ) == 1 )
|
|
{
|
|
// this is the first and only rvp client!
|
|
r = ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >(SAL_STATIC_CAST(::cppu::OWeakObject *, new CORmStarOffice()));
|
|
|
|
// add connection listener for vcl!
|
|
::com::sun::star::uno::Reference< ::com::sun::star::connection::XConnectionBroadcaster > xBroadcaster(
|
|
rConnection, ::com::sun::star::uno::UNO_QUERY );
|
|
if( xBroadcaster.is() )
|
|
xBroadcaster->addStreamListener( new RVPConnectionListener( xBroadcaster ) );
|
|
}
|
|
}
|
|
#endif
|
|
return r;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit > Application::GetVCLToolkit()
|
|
{
|
|
::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit > xT;
|
|
UnoWrapperBase* pWrapper = Application::GetUnoWrapper();
|
|
if ( pWrapper )
|
|
xT = pWrapper->GetVCLToolkit();
|
|
return xT;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::RegisterUnoServices()
|
|
{
|
|
UnoWrapperBase* pWrapper = Application::GetUnoWrapper();
|
|
if ( pWrapper )
|
|
pWrapper->RegisterUnoServices();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SetUnoWrapper( UnoWrapperBase* pWrapper )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
DBG_ASSERT( !pSVData->mpUnoWrapper, "SetUnoWrapper: Wrapper allready exists" );
|
|
pSVData->mpUnoWrapper = pWrapper;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
UnoWrapperBase* Application::GetUnoWrapper()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
return pSVData->mpUnoWrapper;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
::com::sun::star::uno::Reference< ::com::sun::star::awt::XDisplayConnection > Application::GetDisplayConnection()
|
|
{
|
|
#ifndef REMOTE_APPSERVER
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
return pSVData->mpDisplayConnection ? pSVData->mpDisplayConnection : new ::vcl::DisplayConnection;
|
|
#else
|
|
return ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDisplayConnection >();
|
|
#endif
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SetFilterHdl( const Link& rLink )
|
|
{
|
|
ImplGetSVData()->maGDIData.mpGrfConverter->SetFilterHdl( rLink );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
const Link& Application::GetFilterHdl()
|
|
{
|
|
return ImplGetSVData()->maGDIData.mpGrfConverter->GetFilterHdl();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::AccessNotify( const AccessNotification& rNotification )
|
|
{
|
|
GetFirstAccessHdl().Call( (void*) &rNotification );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::GenerateAccessEvent( ULONG nAccessEvent,
|
|
long nData1,
|
|
long nData2,
|
|
long nData3 )
|
|
{
|
|
BOOL bRet = FALSE;
|
|
|
|
switch( nAccessEvent )
|
|
{
|
|
case( ACCESS_EVENT_DLGCONTROLS ):
|
|
{
|
|
if( IsInModalMode() )
|
|
{
|
|
Window* pDlgWin = GetFocusWindow();
|
|
BOOL bFound = FALSE;
|
|
|
|
// find modal dialog
|
|
while( pDlgWin && !bFound )
|
|
{
|
|
switch( pDlgWin->GetType() )
|
|
{
|
|
case( WINDOW_MESSBOX ):
|
|
case( WINDOW_INFOBOX ):
|
|
case( WINDOW_WARNINGBOX ):
|
|
case( WINDOW_ERRORBOX ):
|
|
case( WINDOW_QUERYBOX ):
|
|
case( WINDOW_MODALDIALOG ):
|
|
case( WINDOW_PATHDIALOG ):
|
|
case( WINDOW_FILEDIALOG ):
|
|
case( WINDOW_PRINTERSETUPDIALOG ):
|
|
case( WINDOW_PRINTDIALOG ):
|
|
case( WINDOW_COLORDIALOG ):
|
|
case( WINDOW_FONTDIALOG ):
|
|
case( WINDOW_TABDIALOG ):
|
|
case( WINDOW_BUTTONDIALOG ):
|
|
bFound = TRUE;
|
|
break;
|
|
|
|
default:
|
|
pDlgWin = pDlgWin->GetWindow( WINDOW_PARENT );
|
|
break;
|
|
}
|
|
}
|
|
|
|
if( pDlgWin )
|
|
{
|
|
AccessNotify( AccessNotification( ACCESS_EVENT_DLGCONTROLS, pDlgWin ) );
|
|
bRet = TRUE;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case( ACCESS_EVENT_KEY ):
|
|
AccessNotify( AccessNotification( ACCESS_EVENT_KEY, nData1, nData2, nData3 ) );
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::AddAccessHdl( const Link& rLink )
|
|
{
|
|
if( !ImplGetSVData()->maAppData.mpAccessList )
|
|
ImplGetSVData()->maAppData.mpAccessList = new List;
|
|
|
|
List* pList = ImplGetSVData()->maAppData.mpAccessList;
|
|
BOOL bInserted = FALSE;
|
|
|
|
for( void* pLink = pList->First(); pLink; pLink = pList->Next() )
|
|
{
|
|
if( *(Link*) pLink == rLink )
|
|
{
|
|
bInserted = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if( !bInserted )
|
|
{
|
|
ImplGetSVData()->maAppData.mnAccessCount++;
|
|
pList->Insert( new Link( rLink ), LIST_APPEND );
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::RemoveAccessHdl( const Link& rLink )
|
|
{
|
|
List* pList = ImplGetSVData()->maAppData.mpAccessList;
|
|
|
|
if( pList )
|
|
{
|
|
for( void* pLink = pList->First(); pLink; pLink = pList->Next() )
|
|
{
|
|
if( *(Link*) pLink == rLink )
|
|
{
|
|
ImplGetSVData()->maAppData.mnAccessCount--;
|
|
delete (Link*) pList->Remove( pLink );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
USHORT Application::GetAccessHdlCount()
|
|
{
|
|
return ImplGetSVData()->maAppData.mnAccessCount;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
Link Application::GetFirstAccessHdl()
|
|
{
|
|
List* pList = ImplGetSVData()->maAppData.mpAccessList;
|
|
|
|
if( pList && pList->Count() )
|
|
return *(Link*) pList->First();
|
|
else
|
|
return Link();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::CallNextAccessHdl( AccessNotification* pData )
|
|
{
|
|
List* pList = ImplGetSVData()->maAppData.mpAccessList;
|
|
|
|
if( pList )
|
|
{
|
|
Link* pNext = (Link*) pList->Next();
|
|
|
|
if( pNext )
|
|
pNext->Call( pData );
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL ImplCallHotKey( const KeyCode& rKeyCode )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
ImplHotKey* pHotKeyData = pSVData->maAppData.mpFirstHotKey;
|
|
while ( pHotKeyData )
|
|
{
|
|
if ( pHotKeyData->maKeyCode.IsDefinedKeyCodeEqual( rKeyCode ) )
|
|
{
|
|
pHotKeyData->maLink.Call( pHotKeyData->mpUserData );
|
|
return TRUE;
|
|
}
|
|
|
|
pHotKeyData = pHotKeyData->mpNext;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void ImplFreeHotKeyData()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
ImplHotKey* pTempHotKeyData;
|
|
ImplHotKey* pHotKeyData = pSVData->maAppData.mpFirstHotKey;
|
|
while ( pHotKeyData )
|
|
{
|
|
pTempHotKeyData = pHotKeyData->mpNext;
|
|
delete pHotKeyData;
|
|
pHotKeyData = pTempHotKeyData;
|
|
}
|
|
|
|
pSVData->maAppData.mpFirstHotKey = NULL;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
ULONG Application::AddHotKey( const KeyCode& rKeyCode, const Link& rLink, void* pData )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
ImplHotKey* pHotKeyData = new ImplHotKey;
|
|
pHotKeyData->mpUserData = pData;
|
|
pHotKeyData->maKeyCode = rKeyCode;
|
|
pHotKeyData->maLink = rLink;
|
|
pHotKeyData->mpNext = pSVData->maAppData.mpFirstHotKey;
|
|
pSVData->maAppData.mpFirstHotKey = pHotKeyData;
|
|
return (ULONG)pHotKeyData;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::RemoveHotKey( ULONG nId )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
ImplHotKey* pFindHotKeyData = (ImplHotKey*)nId;
|
|
ImplHotKey* pPrevHotKeyData = NULL;
|
|
ImplHotKey* pHotKeyData = pSVData->maAppData.mpFirstHotKey;
|
|
while ( pHotKeyData )
|
|
{
|
|
if ( pHotKeyData == pFindHotKeyData )
|
|
{
|
|
if ( pPrevHotKeyData )
|
|
pPrevHotKeyData->mpNext = pFindHotKeyData->mpNext;
|
|
else
|
|
pSVData->maAppData.mpFirstHotKey = pFindHotKeyData->mpNext;
|
|
delete pFindHotKeyData;
|
|
break;
|
|
}
|
|
|
|
pPrevHotKeyData = pHotKeyData;
|
|
pHotKeyData = pHotKeyData->mpNext;
|
|
}
|
|
|
|
DBG_ASSERT( pHotKeyData, "Application::RemoveHotKey() - HotKey is not added" );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void ImplFreeEventHookData()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
ImplEventHook* pTempEventHookData;
|
|
ImplEventHook* pEventHookData = pSVData->maAppData.mpFirstEventHook;
|
|
while ( pEventHookData )
|
|
{
|
|
pTempEventHookData = pEventHookData->mpNext;
|
|
delete pEventHookData;
|
|
pEventHookData = pTempEventHookData;
|
|
}
|
|
|
|
pSVData->maAppData.mpFirstEventHook = NULL;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
ULONG Application::AddEventHook( VCLEventHookProc pProc, void* pData )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
ImplEventHook* pEventHookData = new ImplEventHook;
|
|
pEventHookData->mpUserData = pData;
|
|
pEventHookData->mpProc = pProc;
|
|
pEventHookData->mpNext = pSVData->maAppData.mpFirstEventHook;
|
|
pSVData->maAppData.mpFirstEventHook = pEventHookData;
|
|
return (ULONG)pEventHookData;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::RemoveEventHook( ULONG nId )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
ImplEventHook* pFindEventHookData = (ImplEventHook*)nId;
|
|
ImplEventHook* pPrevEventHookData = NULL;
|
|
ImplEventHook* pEventHookData = pSVData->maAppData.mpFirstEventHook;
|
|
while ( pEventHookData )
|
|
{
|
|
if ( pEventHookData == pFindEventHookData )
|
|
{
|
|
if ( pPrevEventHookData )
|
|
pPrevEventHookData->mpNext = pFindEventHookData->mpNext;
|
|
else
|
|
pSVData->maAppData.mpFirstEventHook = pFindEventHookData->mpNext;
|
|
delete pFindEventHookData;
|
|
break;
|
|
}
|
|
|
|
pPrevEventHookData = pEventHookData;
|
|
pEventHookData = pEventHookData->mpNext;
|
|
}
|
|
|
|
DBG_ASSERT( pEventHookData, "Application::RemoveEventHook() - EventHook is not added" );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
long Application::CallEventHooks( NotifyEvent& rEvt )
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
long nRet = 0;
|
|
ImplEventHook* pTempEventHookData;
|
|
ImplEventHook* pEventHookData = pSVData->maAppData.mpFirstEventHook;
|
|
while ( pEventHookData )
|
|
{
|
|
pTempEventHookData = pEventHookData->mpNext;
|
|
nRet = pEventHookData->mpProc( rEvt, pEventHookData->mpUserData );
|
|
if ( nRet )
|
|
break;
|
|
pEventHookData = pTempEventHookData;
|
|
}
|
|
|
|
return nRet;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
long Application::CallPreNotify( NotifyEvent& rEvt )
|
|
{
|
|
return ImplCallPreNotify( rEvt );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
long Application::CallEvent( NotifyEvent& rEvt )
|
|
{
|
|
return ImplCallEvent( rEvt );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::SetAppInternational( const International& rIntn )
|
|
{
|
|
AllSettings aSettings = GetSettings();
|
|
aSettings.SetInternational( rIntn );
|
|
SetSettings( aSettings );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
const International& Application::GetAppInternational()
|
|
{
|
|
return GetSettings().GetInternational();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void Application::EnableHeadlessMode( BOOL bEnable )
|
|
{
|
|
EnableDialogCancel( bEnable );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
BOOL Application::IsHeadlessModeEnabled()
|
|
{
|
|
return IsDialogCancelEnabled();
|
|
}
|
|
|
|
// =======================================================================
|
|
|
|
void InitVCL()
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void DeInitVCL()
|
|
{
|
|
}
|