2007-04-25 15:07:21 +00:00
/*************************************************************************
*
2008-04-11 00:02:33 +00:00
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
2007-04-25 15:07:21 +00:00
*
2008-04-11 00:02:33 +00:00
* Copyright 2008 by Sun Microsystems , Inc .
2007-04-25 15:07:21 +00:00
*
2008-04-11 00:02:33 +00:00
* OpenOffice . org - a multi - platform office productivity suite
2007-04-25 15:07:21 +00:00
*
2008-04-11 00:02:33 +00:00
* $ RCSfile : vbahelper . cxx , v $
2008-09-30 05:48:28 +00:00
* $ Revision : 1.5 .32 .1 $
2007-04-25 15:07:21 +00:00
*
2008-04-11 00:02:33 +00:00
* This file is part of OpenOffice . org .
2007-04-25 15:07:21 +00:00
*
2008-04-11 00:02:33 +00:00
* 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 .
2007-04-25 15:07:21 +00:00
*
2008-04-11 00:02:33 +00:00
* 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 ) .
2007-04-25 15:07:21 +00:00
*
2008-04-11 00:02:33 +00:00
* 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 .
2007-04-25 15:07:21 +00:00
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include <cppuhelper/bootstrap.hxx>
# include <com/sun/star/util/XURLTransformer.hpp>
# include <com/sun/star/frame/XDispatchProvider.hpp>
# include <com/sun/star/frame/XModel.hpp>
# include <com/sun/star/frame/XFrame.hpp>
# include <com/sun/star/frame/XDesktop.hpp>
# include <com/sun/star/frame/XController.hpp>
# include <com/sun/star/uno/XComponentContext.hpp>
# include <com/sun/star/lang/XMultiComponentFactory.hpp>
# include <com/sun/star/beans/XPropertySet.hpp>
2009-02-13 13:03:24 +00:00
# include <com/sun/star/beans/XIntrospection.hpp>
2007-04-25 15:07:21 +00:00
2007-12-07 09:53:38 +00:00
# include <comphelper/processfactory.hxx>
2007-04-25 15:07:21 +00:00
# include <sfx2/objsh.hxx>
# include <sfx2/viewfrm.hxx>
# include <sfx2/dispatch.hxx>
# include <sfx2/app.hxx>
2009-10-16 00:05:16 +02:00
# include <svl/stritem.hxx>
2007-04-25 15:07:21 +00:00
# include <docuno.hxx>
# include <basic/sbx.hxx>
# include <basic/sbstar.hxx>
2007-12-07 09:53:38 +00:00
# include <rtl/math.hxx>
2007-04-25 15:07:21 +00:00
2007-12-07 09:53:38 +00:00
# include <math.h>
2007-04-25 15:07:21 +00:00
# include "vbahelper.hxx"
# include "tabvwsh.hxx"
# include "transobj.hxx"
# include "scmod.hxx"
2009-02-13 13:03:24 +00:00
# include "vbashape.hxx"
# include "unonames.hxx"
# include "cellsuno.hxx"
2007-04-25 15:07:21 +00:00
using namespace : : com : : sun : : star ;
2009-02-13 13:03:24 +00:00
using namespace : : ooo : : vba ;
2007-04-25 15:07:21 +00:00
2007-12-07 09:53:38 +00:00
# define POINTTO100THMILLIMETERFACTOR 35.27778
2007-04-25 15:07:21 +00:00
void unoToSbxValue ( SbxVariable * pVar , const uno : : Any & aValue ) ;
uno : : Any sbxToUnoValue ( SbxVariable * pVar ) ;
2009-02-13 13:03:24 +00:00
namespace ooo
2007-04-25 15:07:21 +00:00
{
2009-02-13 13:03:24 +00:00
namespace vba
2007-04-25 15:07:21 +00:00
{
2007-12-07 09:53:38 +00:00
const double Millimeter : : factor = 35.27778 ;
2009-02-13 13:03:24 +00:00
uno : : Reference < beans : : XIntrospectionAccess >
getIntrospectionAccess ( const uno : : Any & aObject ) throw ( uno : : RuntimeException )
{
static uno : : Reference < beans : : XIntrospection > xIntrospection ;
if ( ! xIntrospection . is ( ) )
{
uno : : Reference < lang : : XMultiServiceFactory > xFactory ( comphelper : : getProcessServiceFactory ( ) , uno : : UNO_QUERY_THROW ) ;
xIntrospection . set ( xFactory - > createInstance ( rtl : : OUString : : createFromAscii ( " com.sun.star.beans.Introspection " ) ) , uno : : UNO_QUERY_THROW ) ;
}
return xIntrospection - > inspect ( aObject ) ;
}
2007-12-07 09:53:38 +00:00
uno : : Reference < script : : XTypeConverter >
getTypeConverter ( const uno : : Reference < uno : : XComponentContext > & xContext ) throw ( uno : : RuntimeException )
{
static uno : : Reference < script : : XTypeConverter > xTypeConv ( xContext - > getServiceManager ( ) - > createInstanceWithContext ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.script.Converter " ) ) , xContext ) , uno : : UNO_QUERY_THROW ) ;
return xTypeConv ;
}
2007-04-25 15:07:21 +00:00
// helper method to determine if the view ( calc ) is in print-preview mode
bool isInPrintPreview ( SfxViewFrame * pView )
{
sal_uInt16 nViewNo = SID_VIEWSHELL1 - SID_VIEWSHELL0 ;
if ( pView - > GetObjectShell ( ) - > GetFactory ( ) . GetViewFactoryCount ( ) >
nViewNo & & ! pView - > GetObjectShell ( ) - > IsInPlaceActive ( ) )
{
SfxViewFactory & rViewFactory =
pView - > GetObjectShell ( ) - > GetFactory ( ) . GetViewFactory ( nViewNo ) ;
if ( pView - > GetCurViewId ( ) = = rViewFactory . GetOrdinal ( ) )
return true ;
}
return false ;
}
const : : rtl : : OUString REPLACE_CELLS_WARNING ( RTL_CONSTASCII_USTRINGPARAM ( " ReplaceCellsWarning " ) ) ;
const uno : : Any &
aNULL ( )
{
static uno : : Any aNULLL = uno : : makeAny ( uno : : Reference < uno : : XInterface > ( ) ) ;
return aNULLL ;
}
class PasteCellsWarningReseter
{
private :
bool bInitialWarningState ;
static uno : : Reference < beans : : XPropertySet > getGlobalSheetSettings ( ) throw ( uno : : RuntimeException )
{
2007-12-07 09:53:38 +00:00
static uno : : Reference < beans : : XPropertySet > xTmpProps ( : : comphelper : : getProcessServiceFactory ( ) , uno : : UNO_QUERY_THROW ) ;
static uno : : Reference < uno : : XComponentContext > xContext ( xTmpProps - > getPropertyValue ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " DefaultContext " ) ) ) , uno : : UNO_QUERY_THROW ) ;
2007-04-25 15:07:21 +00:00
static uno : : Reference < lang : : XMultiComponentFactory > xServiceManager (
xContext - > getServiceManager ( ) , uno : : UNO_QUERY_THROW ) ;
static uno : : Reference < beans : : XPropertySet > xProps ( xServiceManager - > createInstanceWithContext ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.sheet.GlobalSheetSettings " ) ) , xContext ) , uno : : UNO_QUERY_THROW ) ;
return xProps ;
}
bool getReplaceCellsWarning ( ) throw ( uno : : RuntimeException )
{
sal_Bool res = sal_False ;
getGlobalSheetSettings ( ) - > getPropertyValue ( REPLACE_CELLS_WARNING ) > > = res ;
return ( res = = sal_True ) ;
}
void setReplaceCellsWarning ( bool bState ) throw ( uno : : RuntimeException )
{
getGlobalSheetSettings ( ) - > setPropertyValue ( REPLACE_CELLS_WARNING , uno : : makeAny ( bState ) ) ;
}
public :
PasteCellsWarningReseter ( ) throw ( uno : : RuntimeException )
{
bInitialWarningState = getReplaceCellsWarning ( ) ;
if ( bInitialWarningState )
setReplaceCellsWarning ( false ) ;
}
~ PasteCellsWarningReseter ( )
{
if ( bInitialWarningState )
{
// don't allow dtor to throw
try
{
setReplaceCellsWarning ( true ) ;
}
catch ( uno : : Exception & /*e*/ ) { }
}
}
} ;
void
dispatchRequests ( uno : : Reference < frame : : XModel > & xModel , rtl : : OUString & aUrl , uno : : Sequence < beans : : PropertyValue > & sProps )
{
util : : URL url ;
url . Complete = aUrl ;
rtl : : OUString emptyString = rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " " ) ) ;
uno : : Reference < frame : : XController > xController = xModel - > getCurrentController ( ) ;
uno : : Reference < frame : : XFrame > xFrame = xController - > getFrame ( ) ;
uno : : Reference < frame : : XDispatchProvider > xDispatchProvider ( xFrame , uno : : UNO_QUERY_THROW ) ;
try
{
2007-12-07 09:53:38 +00:00
uno : : Reference < beans : : XPropertySet > xProps ( : : comphelper : : getProcessServiceFactory ( ) , uno : : UNO_QUERY_THROW ) ;
uno : : Reference < uno : : XComponentContext > xContext ( xProps - > getPropertyValue ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " DefaultContext " ) ) ) , uno : : UNO_QUERY_THROW ) ;
2007-04-25 15:07:21 +00:00
if ( ! xContext . is ( ) )
{
return ;
}
uno : : Reference < lang : : XMultiComponentFactory > xServiceManager (
xContext - > getServiceManager ( ) ) ;
if ( ! xServiceManager . is ( ) )
{
return ;
}
uno : : Reference < util : : XURLTransformer > xParser ( xServiceManager - > createInstanceWithContext ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.util.URLTransformer " ) )
, xContext ) , uno : : UNO_QUERY_THROW ) ;
if ( ! xParser . is ( ) )
return ;
xParser - > parseStrict ( url ) ;
}
catch ( uno : : Exception & /*e*/ )
{
return ;
}
uno : : Reference < frame : : XDispatch > xDispatcher = xDispatchProvider - > queryDispatch ( url , emptyString , 0 ) ;
uno : : Sequence < beans : : PropertyValue > dispatchProps ( 1 ) ;
sal_Int32 nProps = sProps . getLength ( ) ;
beans : : PropertyValue * pDest = dispatchProps . getArray ( ) ;
if ( nProps )
{
dispatchProps . realloc ( nProps + 1 ) ;
// need to reaccquire pDest after realloc
pDest = dispatchProps . getArray ( ) ;
beans : : PropertyValue * pSrc = sProps . getArray ( ) ;
for ( sal_Int32 index = 0 ; index < nProps ; + + index , + + pSrc , + + pDest )
* pDest = * pSrc ;
}
( * pDest ) . Name = rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Silent " ) ) ;
( * pDest ) . Value < < = ( sal_Bool ) sal_True ;
if ( xDispatcher . is ( ) )
xDispatcher - > dispatch ( url , dispatchProps ) ;
}
void
dispatchRequests ( uno : : Reference < frame : : XModel > & xModel , rtl : : OUString & aUrl )
{
uno : : Sequence < beans : : PropertyValue > dispatchProps ;
dispatchRequests ( xModel , aUrl , dispatchProps ) ;
}
2009-02-13 13:03:24 +00:00
void dispatchExecute ( css : : uno : : Reference < css : : frame : : XModel > & xModel , USHORT nSlot , SfxCallMode nCall )
{
ScTabViewShell * pViewShell = getBestViewShell ( xModel ) ;
SfxViewFrame * pViewFrame = NULL ;
if ( pViewShell )
pViewFrame = pViewShell - > GetViewFrame ( ) ;
if ( pViewFrame )
{
SfxDispatcher * pDispatcher = pViewFrame - > GetDispatcher ( ) ;
if ( pDispatcher )
{
pDispatcher - > Execute ( nSlot , nCall ) ;
}
}
}
2007-04-25 15:07:21 +00:00
void
implnPaste ( )
{
PasteCellsWarningReseter resetWarningBox ;
2009-02-13 13:03:24 +00:00
ScTabViewShell * pViewShell = getCurrentBestViewShell ( ) ;
2007-04-25 15:07:21 +00:00
if ( pViewShell )
{
pViewShell - > PasteFromSystem ( ) ;
pViewShell - > CellContentChanged ( ) ;
}
}
void
implnCopy ( )
{
ScTabViewShell * pViewShell = getCurrentBestViewShell ( ) ;
if ( pViewShell )
pViewShell - > CopyToClip ( NULL , false , false , true ) ;
}
void
implnCut ( )
{
ScTabViewShell * pViewShell = getCurrentBestViewShell ( ) ;
if ( pViewShell )
pViewShell - > CutToClip ( NULL , TRUE ) ;
}
void implnPasteSpecial ( USHORT nFlags , USHORT nFunction , sal_Bool bSkipEmpty , sal_Bool bTranspose )
{
PasteCellsWarningReseter resetWarningBox ;
sal_Bool bAsLink ( sal_False ) , bOtherDoc ( sal_False ) ;
InsCellCmd eMoveMode = INS_NONE ;
ScTabViewShell * pTabViewShell = ScTabViewShell : : GetActiveViewShell ( ) ;
if ( ! pTabViewShell )
// none active, try next best
pTabViewShell = getCurrentBestViewShell ( ) ;
if ( pTabViewShell )
{
ScViewData * pView = pTabViewShell - > GetViewData ( ) ;
Window * pWin = ( pView ! = NULL ) ? pView - > GetActiveWin ( ) : NULL ;
if ( pView & & pWin )
{
if ( bAsLink & & bOtherDoc )
pTabViewShell - > PasteFromSystem ( 0 ) ; //SOT_FORMATSTR_ID_LINK
else
{
ScTransferObj * pOwnClip = ScTransferObj : : GetOwnClipboard ( pWin ) ;
ScDocument * pDoc = NULL ;
if ( pOwnClip )
pDoc = pOwnClip - > GetDocument ( ) ;
pTabViewShell - > PasteFromClip ( nFlags , pDoc ,
nFunction , bSkipEmpty , bTranspose , bAsLink ,
eMoveMode , IDF_NONE , TRUE ) ;
pTabViewShell - > CellContentChanged ( ) ;
}
}
}
}
uno : : Reference < frame : : XModel >
getCurrentDocument ( ) throw ( uno : : RuntimeException )
{
uno : : Reference < frame : : XModel > xModel ;
SbxObject * pBasic = dynamic_cast < SbxObject * > ( SFX_APP ( ) - > GetBasic ( ) ) ;
SbxObject * basicChosen = pBasic ;
if ( basicChosen = = NULL )
{
OSL_TRACE ( " getModelFromBasic() StarBASIC* is NULL " ) ;
return xModel ;
}
SbxObject * p = pBasic ;
SbxObject * pParent = p - > GetParent ( ) ;
SbxObject * pParentParent = pParent ? pParent - > GetParent ( ) : NULL ;
if ( pParentParent )
{
basicChosen = pParentParent ;
}
else if ( pParent )
{
basicChosen = pParent ;
}
uno : : Any aModel ;
SbxVariable * pCompVar = basicChosen - > Find ( UniString ( RTL_CONSTASCII_USTRINGPARAM ( " ThisComponent " ) ) , SbxCLASS_OBJECT ) ;
if ( pCompVar )
{
aModel = sbxToUnoValue ( pCompVar ) ;
if ( sal_False = = ( aModel > > = xModel ) | |
! xModel . is ( ) )
{
// trying last gasp try the current component
2007-12-07 09:53:38 +00:00
uno : : Reference < beans : : XPropertySet > xProps ( : : comphelper : : getProcessServiceFactory ( ) , uno : : UNO_QUERY_THROW ) ;
// test if vba service is present
uno : : Reference < uno : : XComponentContext > xCtx ( xProps - > getPropertyValue ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " DefaultContext " ) ) ) , uno : : UNO_QUERY_THROW ) ;
2007-04-25 15:07:21 +00:00
uno : : Reference < lang : : XMultiComponentFactory > xSMgr ( xCtx - > getServiceManager ( ) , uno : : UNO_QUERY_THROW ) ;
uno : : Reference < frame : : XDesktop > xDesktop ( xSMgr - > createInstanceWithContext ( : : rtl : : OUString : : createFromAscii ( " com.sun.star.frame.Desktop " ) , xCtx ) , uno : : UNO_QUERY_THROW ) ;
xModel . set ( xDesktop - > getCurrentComponent ( ) , uno : : UNO_QUERY ) ;
if ( ! xModel . is ( ) )
{
throw uno : : RuntimeException (
rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Can't extract model from basic ( its obviously not set yet ) therefore don't know the currently selected document " ) ) , uno : : Reference < uno : : XInterface > ( ) ) ;
}
return xModel ;
}
else
{
OSL_TRACE ( " Have model ThisComponent points to url %s " ,
: : rtl : : OUStringToOString ( xModel - > getURL ( ) ,
RTL_TEXTENCODING_ASCII_US ) . pData - > buffer ) ;
}
}
else
{
OSL_TRACE ( " Failed to get ThisComponent " ) ;
throw uno : : RuntimeException (
rtl : : OUString (
RTL_CONSTASCII_USTRINGPARAM (
" Can't determine the currently selected document " ) ) ,
uno : : Reference < uno : : XInterface > ( ) ) ;
}
return xModel ;
}
ScDocShell *
getDocShell ( css : : uno : : Reference < css : : frame : : XModel > & xModel )
{
uno : : Reference < uno : : XInterface > xIf ( xModel , uno : : UNO_QUERY_THROW ) ;
ScModelObj * pModel = dynamic_cast < ScModelObj * > ( xIf . get ( ) ) ;
ScDocShell * pDocShell = NULL ;
if ( pModel )
pDocShell = ( ScDocShell * ) pModel - > GetEmbeddedObject ( ) ;
return pDocShell ;
}
ScTabViewShell *
getBestViewShell ( css : : uno : : Reference < css : : frame : : XModel > & xModel )
{
ScDocShell * pDocShell = getDocShell ( xModel ) ;
if ( pDocShell )
return pDocShell - > GetBestViewShell ( ) ;
return NULL ;
}
ScTabViewShell *
getCurrentBestViewShell ( )
{
uno : : Reference < frame : : XModel > xModel = getCurrentDocument ( ) ;
return getBestViewShell ( xModel ) ;
}
SfxViewFrame *
getCurrentViewFrame ( )
{
ScTabViewShell * pViewShell = getCurrentBestViewShell ( ) ;
if ( pViewShell )
return pViewShell - > GetViewFrame ( ) ;
return NULL ;
}
sal_Int32
OORGBToXLRGB ( sal_Int32 nCol )
{
sal_Int32 nRed = nCol ;
nRed & = 0x00FF0000 ;
nRed > > = 16 ;
sal_Int32 nGreen = nCol ;
nGreen & = 0x0000FF00 ;
nGreen > > = 8 ;
sal_Int32 nBlue = nCol ;
nBlue & = 0x000000FF ;
sal_Int32 nRGB = ( ( nBlue < < 16 ) | ( nGreen < < 8 ) | nRed ) ;
return nRGB ;
}
sal_Int32
XLRGBToOORGB ( sal_Int32 nCol )
{
sal_Int32 nBlue = nCol ;
nBlue & = 0x00FF0000 ;
nBlue > > = 16 ;
sal_Int32 nGreen = nCol ;
nGreen & = 0x0000FF00 ;
nGreen > > = 8 ;
sal_Int32 nRed = nCol ;
nRed & = 0x000000FF ;
sal_Int32 nRGB = ( ( nRed < < 16 ) | ( nGreen < < 8 ) | nBlue ) ;
return nRGB ;
}
uno : : Any
OORGBToXLRGB ( const uno : : Any & aCol )
{
2009-04-01 13:20:55 +00:00
sal_Int32 nCol = 0 ;
2007-04-25 15:07:21 +00:00
aCol > > = nCol ;
nCol = OORGBToXLRGB ( nCol ) ;
return uno : : makeAny ( nCol ) ;
}
uno : : Any
XLRGBToOORGB ( const uno : : Any & aCol )
{
2009-04-01 13:20:55 +00:00
sal_Int32 nCol = 0 ;
2007-04-25 15:07:21 +00:00
aCol > > = nCol ;
nCol = XLRGBToOORGB ( nCol ) ;
return uno : : makeAny ( nCol ) ;
}
void PrintOutHelper ( const uno : : Any & From , const uno : : Any & To , const uno : : Any & Copies , const uno : : Any & Preview , const uno : : Any & /*ActivePrinter*/ , const uno : : Any & /*PrintToFile*/ , const uno : : Any & Collate , const uno : : Any & PrToFileName , css : : uno : : Reference < frame : : XModel > & xModel , sal_Bool bUseSelection )
{
sal_Int32 nTo = 0 ;
sal_Int32 nFrom = 0 ;
sal_Int16 nCopies = 1 ;
sal_Bool bPreview = sal_False ;
sal_Bool bCollate = sal_False ;
sal_Bool bSelection = bUseSelection ;
From > > = nFrom ;
To > > = nTo ;
Copies > > = nCopies ;
Preview > > = bPreview ;
if ( nCopies > 1 ) // Collate only useful when more that 1 copy
Collate > > = bCollate ;
rtl : : OUString sRange ( RTL_CONSTASCII_USTRINGPARAM ( " - " ) ) ;
rtl : : OUString sFileName ;
if ( ( nFrom | | nTo ) )
{
if ( nFrom )
sRange = ( : : rtl : : OUString : : valueOf ( nFrom ) + sRange ) ;
if ( nTo )
sRange + = : : rtl : : OUString : : valueOf ( nTo ) ;
}
if ( PrToFileName . getValue ( ) )
{
PrToFileName > > = sFileName ;
}
ScTabViewShell * pViewShell = getBestViewShell ( xModel ) ;
SfxViewFrame * pViewFrame = NULL ;
if ( pViewShell )
pViewFrame = pViewShell - > GetViewFrame ( ) ;
if ( pViewFrame )
{
SfxAllItemSet aArgs ( SFX_APP ( ) - > GetPool ( ) ) ;
SfxBoolItem sfxCollate ( SID_PRINT_COLLATE , bCollate ) ;
aArgs . Put ( sfxCollate , sfxCollate . Which ( ) ) ;
SfxInt16Item sfxCopies ( SID_PRINT_COPIES , nCopies ) ;
aArgs . Put ( sfxCopies , sfxCopies . Which ( ) ) ;
if ( sFileName . getLength ( ) )
{
SfxStringItem sfxFileName ( SID_FILE_NAME , sFileName ) ;
aArgs . Put ( sfxFileName , sfxFileName . Which ( ) ) ;
}
if ( sRange . getLength ( ) )
{
SfxStringItem sfxRange ( SID_PRINT_PAGES , sRange ) ;
aArgs . Put ( sfxRange , sfxRange . Which ( ) ) ;
}
SfxBoolItem sfxSelection ( SID_SELECTION , bSelection ) ;
aArgs . Put ( sfxSelection , sfxSelection . Which ( ) ) ;
SfxBoolItem sfxAsync ( SID_ASYNCHRON , sal_False ) ;
aArgs . Put ( sfxAsync , sfxAsync . Which ( ) ) ;
SfxDispatcher * pDispatcher = pViewFrame - > GetDispatcher ( ) ;
if ( pDispatcher )
{
if ( bPreview )
{
if ( ! pViewFrame - > GetFrame ( ) - > IsInPlace ( ) )
{
SC_MOD ( ) - > InputEnterHandler ( ) ;
pViewFrame - > GetDispatcher ( ) - > Execute ( SID_VIEWSHELL1 , SFX_CALLMODE_SYNCHRON ) ;
while ( isInPrintPreview ( pViewFrame ) )
Application : : Yield ( ) ;
}
}
else
pDispatcher - > Execute ( ( USHORT ) SID_PRINTDOC , ( SfxCallMode ) SFX_CALLMODE_SYNCHRON , aArgs ) ;
}
}
// #FIXME #TODO
2007-12-07 09:53:38 +00:00
// 1 ActivePrinter ( how/can we switch a printer via API? )
// 2 PrintToFile ( ms behaviour if this option is specified but no
2007-04-25 15:07:21 +00:00
// filename supplied 'PrToFileName' then the user will be prompted )
2007-12-07 09:53:38 +00:00
// 3 Need to check behaviour of Selected sheets with range ( e.g. From & To
2007-04-25 15:07:21 +00:00
// values ) in oOO these options are mutually exclusive
2007-12-07 09:53:38 +00:00
// 4 There is a pop up to do with transparent objects in the print source
2007-04-25 15:07:21 +00:00
// should be able to disable that via configuration for the duration
// of this method
}
2009-02-13 13:03:24 +00:00
void PrintPreviewHelper ( const css : : uno : : Any & /*EnableChanges*/ , css : : uno : : Reference < css : : frame : : XModel > & xModel )
{
dispatchExecute ( xModel , SID_VIEWSHELL1 ) ;
}
2007-12-07 09:53:38 +00:00
rtl : : OUString getAnyAsString ( const uno : : Any & pvargItem ) throw ( uno : : RuntimeException )
{
uno : : Type aType = pvargItem . getValueType ( ) ;
uno : : TypeClass eTypeClass = aType . getTypeClass ( ) ;
rtl : : OUString sString ;
switch ( eTypeClass )
{
case uno : : TypeClass_BOOLEAN :
{
sal_Bool bBool = sal_False ;
pvargItem > > = bBool ;
sString = rtl : : OUString : : valueOf ( bBool ) ;
break ;
}
case uno : : TypeClass_STRING :
pvargItem > > = sString ;
break ;
case uno : : TypeClass_FLOAT :
{
float aFloat = 0 ;
pvargItem > > = aFloat ;
sString = rtl : : OUString : : valueOf ( aFloat ) ;
break ;
}
case uno : : TypeClass_DOUBLE :
{
double aDouble = 0 ;
pvargItem > > = aDouble ;
sString = rtl : : OUString : : valueOf ( aDouble ) ;
break ;
}
case uno : : TypeClass_SHORT :
case uno : : TypeClass_LONG :
case uno : : TypeClass_BYTE :
{
sal_Int32 aNum = 0 ;
pvargItem > > = aNum ;
sString = rtl : : OUString : : valueOf ( aNum ) ;
break ;
}
case uno : : TypeClass_HYPER :
{
sal_Int64 aHyper = 0 ;
pvargItem > > = aHyper ;
sString = rtl : : OUString : : valueOf ( aHyper ) ;
break ;
}
default :
throw uno : : RuntimeException ( rtl : : OUString : : createFromAscii ( " Invalid type, can't convert " ) , uno : : Reference < uno : : XInterface > ( ) ) ;
}
return sString ;
}
rtl : : OUString
ContainerUtilities : : getUniqueName ( const uno : : Sequence < : : rtl : : OUString > & _slist , const rtl : : OUString & _sElementName , const : : rtl : : OUString & _sSuffixSeparator )
{
return getUniqueName ( _slist , _sElementName , _sSuffixSeparator , sal_Int32 ( 2 ) ) ;
2007-04-25 15:07:21 +00:00
}
2007-12-07 09:53:38 +00:00
rtl : : OUString
ContainerUtilities : : getUniqueName ( const uno : : Sequence < rtl : : OUString > & _slist , const rtl : : OUString _sElementName , const rtl : : OUString & _sSuffixSeparator , sal_Int32 _nStartSuffix )
{
sal_Int32 a = _nStartSuffix ;
rtl : : OUString scompname = _sElementName ;
bool bElementexists = true ;
sal_Int32 nLen = _slist . getLength ( ) ;
if ( nLen = = 0 )
return _sElementName ;
while ( bElementexists = = true )
{
for ( sal_Int32 i = 0 ; i < nLen ; i + + )
{
if ( FieldInList ( _slist , scompname ) = = - 1 )
{
return scompname ;
}
}
scompname = _sElementName + _sSuffixSeparator + rtl : : OUString : : valueOf ( a + + ) ;
}
return rtl : : OUString ( ) ;
2007-04-25 15:07:21 +00:00
}
2007-12-07 09:53:38 +00:00
sal_Int32
ContainerUtilities : : FieldInList ( const uno : : Sequence < rtl : : OUString > & SearchList , const rtl : : OUString & SearchString )
{
sal_Int32 FieldLen = SearchList . getLength ( ) ;
sal_Int32 retvalue = - 1 ;
for ( sal_Int32 i = 0 ; i < FieldLen ; i + + )
{
// I wonder why comparing lexicographically is done
// when its a match is whats interesting?
//if (SearchList[i].compareTo(SearchString) == 0)
if ( SearchList [ i ] . equals ( SearchString ) )
{
retvalue = i ;
break ;
}
}
return retvalue ;
}
bool NeedEsc ( sal_Unicode cCode )
{
String sEsc ( RTL_CONSTASCII_USTRINGPARAM ( " .^$+ \\ |{}() " )) ;
return ( STRING_NOTFOUND ! = sEsc . Search ( cCode ) ) ;
}
rtl : : OUString VBAToRegexp ( const rtl : : OUString & rIn , bool bForLike )
{
rtl : : OUStringBuffer sResult ;
const sal_Unicode * start = rIn . getStr ( ) ;
const sal_Unicode * end = start + rIn . getLength ( ) ;
int seenright = 0 ;
if ( bForLike )
sResult . append ( static_cast < sal_Unicode > ( ' ^ ' ) ) ;
while ( start < end )
{
switch ( * start )
{
case ' ? ' :
sResult . append ( static_cast < sal_Unicode > ( ' . ' ) ) ;
start + + ;
break ;
case ' * ' :
sResult . append ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " .* " ) ) ) ;
start + + ;
break ;
case ' # ' :
sResult . append ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " [0-9] " ) ) ) ;
start + + ;
break ;
case ' ~ ' :
sResult . append ( static_cast < sal_Unicode > ( ' \\ ' ) ) ;
sResult . append ( * ( + + start ) ) ;
start + + ;
break ;
// dump the ~ and escape the next characture
case ' ] ' :
sResult . append ( static_cast < sal_Unicode > ( ' \\ ' ) ) ;
sResult . append ( * start + + ) ;
break ;
case ' [ ' :
sResult . append ( * start + + ) ;
seenright = 0 ;
while ( start < end & & ! seenright )
{
switch ( * start )
{
case ' [ ' :
case ' ? ' :
case ' * ' :
sResult . append ( static_cast < sal_Unicode > ( ' \\ ' ) ) ;
sResult . append ( * start ) ;
break ;
case ' ] ' :
sResult . append ( * start ) ;
seenright = 1 ;
break ;
case ' ! ' :
sResult . append ( static_cast < sal_Unicode > ( ' ^ ' ) ) ;
break ;
default :
if ( NeedEsc ( * start ) )
sResult . append ( static_cast < sal_Unicode > ( ' \\ ' ) ) ;
sResult . append ( * start ) ;
break ;
}
start + + ;
}
break ;
default :
if ( NeedEsc ( * start ) )
sResult . append ( static_cast < sal_Unicode > ( ' \\ ' ) ) ;
sResult . append ( * start + + ) ;
}
}
if ( bForLike )
sResult . append ( static_cast < sal_Unicode > ( ' $ ' ) ) ;
return sResult . makeStringAndClear ( ) ;
}
double getPixelTo100thMillimeterConversionFactor ( css : : uno : : Reference < css : : awt : : XDevice > & xDevice , sal_Bool bVertical )
{
double fConvertFactor = 1.0 ;
if ( bVertical )
{
fConvertFactor = xDevice - > getInfo ( ) . PixelPerMeterY / 100000 ;
}
else
{
fConvertFactor = xDevice - > getInfo ( ) . PixelPerMeterX / 100000 ;
}
return fConvertFactor ;
}
double PointsToPixels ( css : : uno : : Reference < css : : awt : : XDevice > & xDevice , double fPoints , sal_Bool bVertical )
{
double fConvertFactor = getPixelTo100thMillimeterConversionFactor ( xDevice , bVertical ) ;
return fPoints * POINTTO100THMILLIMETERFACTOR * fConvertFactor ;
}
double PixelsToPoints ( css : : uno : : Reference < css : : awt : : XDevice > & xDevice , double fPixels , sal_Bool bVertical )
{
double fConvertFactor = getPixelTo100thMillimeterConversionFactor ( xDevice , bVertical ) ;
return ( fPixels / fConvertFactor ) / POINTTO100THMILLIMETERFACTOR ;
}
2009-02-13 13:03:24 +00:00
ConcreteXShapeGeometryAttributes : : ConcreteXShapeGeometryAttributes ( const css : : uno : : Reference < css : : uno : : XComponentContext > & xContext , const css : : uno : : Reference < css : : drawing : : XShape > & xShape )
{
m_xShape = new ScVbaShape ( xContext , xShape ) ;
}
# define VBA_LEFT "PositionX"
# define VBA_TOP "PositionY"
UserFormGeometryHelper : : UserFormGeometryHelper ( const uno : : Reference < uno : : XComponentContext > & /*xContext*/ , const uno : : Reference < awt : : XControl > & xControl )
{
mxModel . set ( xControl - > getModel ( ) , uno : : UNO_QUERY_THROW ) ;
}
double UserFormGeometryHelper : : getLeft ( )
{
sal_Int32 nLeft = 0 ;
mxModel - > getPropertyValue ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( VBA_LEFT ) ) ) > > = nLeft ;
return Millimeter : : getInPoints ( nLeft ) ;
}
void UserFormGeometryHelper : : setLeft ( double nLeft )
{
mxModel - > setPropertyValue ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( VBA_LEFT ) ) , uno : : makeAny ( Millimeter : : getInHundredthsOfOneMillimeter ( nLeft ) ) ) ;
}
double UserFormGeometryHelper : : getTop ( )
{
sal_Int32 nTop = 0 ;
mxModel - > getPropertyValue ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( VBA_TOP ) ) ) > > = nTop ;
return Millimeter : : getInPoints ( nTop ) ;
}
void UserFormGeometryHelper : : setTop ( double nTop )
{
mxModel - > setPropertyValue ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( VBA_TOP ) ) , uno : : makeAny ( Millimeter : : getInHundredthsOfOneMillimeter ( nTop ) ) ) ;
}
double UserFormGeometryHelper : : getHeight ( )
{
sal_Int32 nHeight = 0 ;
mxModel - > getPropertyValue ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( SC_UNONAME_CELLHGT ) ) ) > > = nHeight ;
return Millimeter : : getInPoints ( nHeight ) ;
}
void UserFormGeometryHelper : : setHeight ( double nHeight )
{
mxModel - > setPropertyValue ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( SC_UNONAME_CELLHGT ) ) , uno : : makeAny ( Millimeter : : getInHundredthsOfOneMillimeter ( nHeight ) ) ) ;
}
double UserFormGeometryHelper : : getWidth ( )
{
sal_Int32 nWidth = 0 ;
mxModel - > getPropertyValue ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( SC_UNONAME_CELLWID ) ) ) > > = nWidth ;
return Millimeter : : getInPoints ( nWidth ) ;
}
void UserFormGeometryHelper : : setWidth ( double nWidth )
{
mxModel - > setPropertyValue ( rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( SC_UNONAME_CELLWID ) ) , uno : : makeAny ( Millimeter : : getInHundredthsOfOneMillimeter ( nWidth ) ) ) ;
}
SfxItemSet *
ScVbaCellRangeAccess : : GetDataSet ( ScCellRangeObj * pRangeObj )
{
SfxItemSet * pDataSet = pRangeObj ? pRangeObj - > GetCurrentDataSet ( true ) : NULL ;
return pDataSet ;
}
2007-12-07 09:53:38 +00:00
} // openoffice
} //org
2009-12-05 19:29:07 +01:00
= = = = = = =
> > > > > > > other